diff --git a/config/galaxy.ini.sample b/config/galaxy.ini.sample index 7a6f0d3df8e..b6a84ea53fc 100644 --- a/config/galaxy.ini.sample +++ b/config/galaxy.ini.sample @@ -919,6 +919,10 @@ use_interactive = True # sub-directories of files contained in their directory. #user_library_import_dir = None +# If user_library_import_dir is set, this option will auto create a library +# import directory for every user (based on their email) upon login. +#user_library_import_dir_auto_creation = False + # For security reasons, users may not import any files that actually lie # outside of their `user_library_import_dir` (e.g. using symbolic links). A # list of directories can be allowed by setting the following option (the list diff --git a/lib/galaxy/config.py b/lib/galaxy/config.py index 90dc5c1e293..4db645842d1 100644 --- a/lib/galaxy/config.py +++ b/lib/galaxy/config.py @@ -427,6 +427,7 @@ class Configuration(object): self.user_library_import_dir = kwargs.get('user_library_import_dir', None) self.user_library_import_symlink_whitelist = listify(kwargs.get('user_library_import_symlink_whitelist', []), do_strip=True) self.user_library_import_check_permissions = string_as_bool(kwargs.get('user_library_import_check_permissions', False)) + self.user_library_import_dir_auto_creation = string_as_bool(kwargs.get('user_library_import_dir_auto_creation', False)) if self.user_library_import_dir else False # Searching data libraries self.ftp_upload_dir = kwargs.get('ftp_upload_dir', None) self.ftp_upload_dir_identifier = kwargs.get('ftp_upload_dir_identifier', 'email') # attribute on user - email, username, id, etc... diff --git a/lib/galaxy/webapps/galaxy/controllers/user.py b/lib/galaxy/webapps/galaxy/controllers/user.py index 5d2a0eae80d..a1b015b3f74 100644 --- a/lib/galaxy/webapps/galaxy/controllers/user.py +++ b/lib/galaxy/webapps/galaxy/controllers/user.py @@ -5,6 +5,7 @@ Contains the user interface in the Universe class import logging import random import socket +import os from datetime import datetime, timedelta from markupsafe import escape @@ -21,6 +22,7 @@ from galaxy import ( util, web ) +from galaxy.exceptions import ConfigurationError from galaxy.queue_worker import send_local_control_task from galaxy.security.validate_user_input import ( transform_publicname, @@ -510,7 +512,7 @@ class User(BaseUIController, UsesFormDefinitionsMixin, CreatesUsersMixin, Create if success: # The handle_user_login() method has a call to the history_set_default_permissions() method # (needed when logging in with a history), user needs to have default permissions set before logging in - trans.handle_user_login(user) + self.handle_user_login(trans, user) trans.log_event("User (auto) created a new account") trans.log_event("User logged in") else: @@ -555,12 +557,31 @@ class User(BaseUIController, UsesFormDefinitionsMixin, CreatesUsersMixin, Create status = 'warning' return (message, status, user, success) + def check_user_library_import_dir(self, user): + user_base_dir = self.app.config.user_library_import_dir + if self.app.config.user_library_import_dir_auto_creation: + # try to create a user library import directory + try: + self.app.config._ensure_directory(os.path.join(user_base_dir, user.email)) + except ConfigurationError as e: + self.log_event(str(e)) + + def user_checks(self, user): + """ + This could contain more checks around a user upon login + """ + self.check_user_library_import_dir(user) + + def handle_user_login(self, trans, user): + self.user_checks(user) + trans.handle_user_login(user) + def proceed_login(self, trans, user, redirect): """ Function processes user login. It is called in case all the login requirements are valid. """ message = '' - trans.handle_user_login(user) + self.handle_user_login(trans, user) if trans.webapp.name == 'galaxy': trans.log_event("User logged in") message = 'You are now logged in as %s.
You can go back to the page you were visiting or go to the home page.' % \