mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
Merge branch 'release_19.05' into release_19.09
This commit is contained in:
@@ -45,8 +45,8 @@ def validate_server_directory_upload(trans, server_dir):
|
||||
unsafe = None
|
||||
if safe_relpath(server_dir):
|
||||
username = trans.user.username if trans.app.config.user_library_import_check_permissions else None
|
||||
if import_dir_desc == 'user_library_import_dir' and safe_contains(import_dir, full_dir, whitelist=trans.app.config.user_library_import_symlink_whitelist, username=username):
|
||||
for unsafe in unsafe_walk(full_dir, whitelist=[import_dir] + trans.app.config.user_library_import_symlink_whitelist):
|
||||
if import_dir_desc == 'user_library_import_dir' and safe_contains(import_dir, full_dir, whitelist=trans.app.config.user_library_import_symlink_whitelist):
|
||||
for unsafe in unsafe_walk(full_dir, whitelist=[import_dir] + trans.app.config.user_library_import_symlink_whitelist, username=username):
|
||||
log.error('User attempted to import a path that resolves to a path outside of their import dir: %s -> %s', unsafe, os.path.realpath(unsafe))
|
||||
else:
|
||||
log.error('User attempted to import a directory path that resolves to a path outside of their import dir: %s -> %s', server_dir, os.path.realpath(full_dir))
|
||||
|
||||
@@ -705,7 +705,7 @@ class ServerDirectoryValidUsageTestCase(BaseUploadContentConfigurationTestCase):
|
||||
return cls.temp_config_dir("server")
|
||||
|
||||
|
||||
class ServerDirectoryRestrictedToAdminsUsageTestCase(BaseUploadContentConfigurationTestCase):
|
||||
class UserServerDirectoryOffByDefaultTestCase(BaseUploadContentConfigurationTestCase):
|
||||
|
||||
@classmethod
|
||||
def handle_galaxy_config_kwds(cls, config):
|
||||
@@ -719,6 +719,36 @@ class ServerDirectoryRestrictedToAdminsUsageTestCase(BaseUploadContentConfigurat
|
||||
assert response.status_code == 403, response.json()
|
||||
|
||||
|
||||
class UserServerDirectoryValidUsageTestCase(BaseUploadContentConfigurationTestCase):
|
||||
|
||||
@classmethod
|
||||
def user_server_dir(cls):
|
||||
return cls.temp_config_dir("user_library_import_dir")
|
||||
|
||||
@classmethod
|
||||
def handle_galaxy_config_kwds(cls, config):
|
||||
user_server_dir = cls.user_server_dir()
|
||||
os.makedirs(user_server_dir)
|
||||
config["user_library_import_dir"] = os.path.join(user_server_dir)
|
||||
|
||||
def test_valid_user_server_dir_uploads_okay(self):
|
||||
dir_to_import = 'library'
|
||||
full_dir_path = os.path.join(self.user_server_dir(), TEST_USER, dir_to_import)
|
||||
os.makedirs(full_dir_path)
|
||||
file_content = "hello world\n"
|
||||
with tempfile.NamedTemporaryFile(mode='w', dir=full_dir_path, delete=False) as fh:
|
||||
fh.write(file_content)
|
||||
file_to_import = fh.name
|
||||
|
||||
library_dataset = self.library_populator.new_library_dataset("serverdirupload", upload_option="upload_directory", server_dir=dir_to_import)
|
||||
# Check the file is still there and was not modified
|
||||
with open(file_to_import, 'r') as fh:
|
||||
read_content = fh.read()
|
||||
assert read_content == file_content
|
||||
|
||||
assert library_dataset["file_size"] == 12, library_dataset
|
||||
|
||||
|
||||
class FetchByPathTestCase(BaseUploadContentConfigurationTestCase):
|
||||
|
||||
require_admin_user = True
|
||||
|
||||
Reference in New Issue
Block a user