From 6b4f0b4a50472dcf1b7c8aeeac15e9467c32d5e4 Mon Sep 17 00:00:00 2001 From: guerler Date: Fri, 27 Dec 2019 13:40:34 -0500 Subject: [PATCH 1/9] Ensure that the user has a private role before login --- lib/galaxy/web/framework/webapp.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/galaxy/web/framework/webapp.py b/lib/galaxy/web/framework/webapp.py index c8c4811aaaa..e4f35a8cf41 100644 --- a/lib/galaxy/web/framework/webapp.py +++ b/lib/galaxy/web/framework/webapp.py @@ -712,6 +712,9 @@ class GalaxyWebTransaction(base.DefaultWebTransaction, - add the disk usage of the current session to the user's total disk usage """ self.user_checks(user) + # Make sure that user has a private role + if not self.app.security_agent.get_private_user_role(user): + self.app.security_agent.create_private_user_role(user) # Set the previous session prev_galaxy_session = self.galaxy_session prev_galaxy_session.is_valid = False From 10c23226626809576efb9d243f3ccb3900940619 Mon Sep 17 00:00:00 2001 From: guerler Date: Fri, 27 Dec 2019 14:55:29 -0500 Subject: [PATCH 2/9] Move user creation helper from user manager to security model --- lib/galaxy/managers/users.py | 7 +------ lib/galaxy/model/security.py | 12 ++++++++++++ lib/galaxy/web/framework/webapp.py | 4 +--- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/lib/galaxy/managers/users.py b/lib/galaxy/managers/users.py index 7ca6d1d1aaa..5ef93c7e7d3 100644 --- a/lib/galaxy/managers/users.py +++ b/lib/galaxy/managers/users.py @@ -102,12 +102,7 @@ class UserManager(base.ModelManager, deletable.PurgableManagerMixin): # TODO:?? flush needed for permissions below? If not, make optional except exc.IntegrityError as db_err: raise exceptions.Conflict(str(db_err)) - # can throw an sqlalx.IntegrityError if username not unique - self.app.security_agent.create_private_user_role(user) - # We set default user permissions, before we log in and set the default history permissions - if hasattr(self.app.config, "new_user_dataset_access_role_default_private"): - permissions = self.app.config.new_user_dataset_access_role_default_private - self.app.security_agent.user_set_default_permissions(user, default_access_private=permissions) + self.app.security_agent.create_user_role(user, self.app) return user def delete(self, user, flush=True): diff --git a/lib/galaxy/model/security.py b/lib/galaxy/model/security.py index 698942a7d00..c364aa063a2 100644 --- a/lib/galaxy/model/security.py +++ b/lib/galaxy/model/security.py @@ -656,6 +656,18 @@ class GalaxyRBACAgent(RBACAgent): self.sa_session.flush() return assoc + def create_user_role(self, user, app): + # Create private user role if necessary + if self.app.security_agent.get_private_user_role(user): + self.app.security_agent.create_private_user_role(user) + # Create default user permissions if necessary + if not user.default_permissions: + if hasattr(self.app.config, "new_user_dataset_access_role_default_private"): + permissions = self.app.config.new_user_dataset_access_role_default_private + self.app.security_agent.user_set_default_permissions(user, default_access_private=permissions) + else: + self.app.security_agent.user_set_default_permissions(user, history=True, dataset=True) + def create_private_user_role(self, user): # Create private role role = self.model.Role(name=user.email, description='Private Role for ' + user.email, type=self.model.Role.types.PRIVATE) diff --git a/lib/galaxy/web/framework/webapp.py b/lib/galaxy/web/framework/webapp.py index e4f35a8cf41..34ed238999c 100644 --- a/lib/galaxy/web/framework/webapp.py +++ b/lib/galaxy/web/framework/webapp.py @@ -712,9 +712,7 @@ class GalaxyWebTransaction(base.DefaultWebTransaction, - add the disk usage of the current session to the user's total disk usage """ self.user_checks(user) - # Make sure that user has a private role - if not self.app.security_agent.get_private_user_role(user): - self.app.security_agent.create_private_user_role(user) + self.app.security_agent.create_user_role(user, self.app) # Set the previous session prev_galaxy_session = self.galaxy_session prev_galaxy_session.is_valid = False From fe81adf429a522b6583baa2457ba9946a48e0d75 Mon Sep 17 00:00:00 2001 From: guerler Date: Fri, 27 Dec 2019 14:58:36 -0500 Subject: [PATCH 3/9] Use parsed local parameter in user role initialization helper --- lib/galaxy/model/security.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/galaxy/model/security.py b/lib/galaxy/model/security.py index c364aa063a2..1e28f29082e 100644 --- a/lib/galaxy/model/security.py +++ b/lib/galaxy/model/security.py @@ -658,15 +658,15 @@ class GalaxyRBACAgent(RBACAgent): def create_user_role(self, user, app): # Create private user role if necessary - if self.app.security_agent.get_private_user_role(user): - self.app.security_agent.create_private_user_role(user) + if app.security_agent.get_private_user_role(user): + app.security_agent.create_private_user_role(user) # Create default user permissions if necessary if not user.default_permissions: - if hasattr(self.app.config, "new_user_dataset_access_role_default_private"): - permissions = self.app.config.new_user_dataset_access_role_default_private - self.app.security_agent.user_set_default_permissions(user, default_access_private=permissions) + if hasattr(app.config, "new_user_dataset_access_role_default_private"): + permissions = app.config.new_user_dataset_access_role_default_private + app.security_agent.user_set_default_permissions(user, default_access_private=permissions) else: - self.app.security_agent.user_set_default_permissions(user, history=True, dataset=True) + app.security_agent.user_set_default_permissions(user, history=True, dataset=True) def create_private_user_role(self, user): # Create private role From b318f6ad082bee4b1e67e5fd779ce37064f2ecc8 Mon Sep 17 00:00:00 2001 From: guerler Date: Fri, 27 Dec 2019 15:01:50 -0500 Subject: [PATCH 4/9] Create private user role only if user role is not available --- lib/galaxy/model/security.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/galaxy/model/security.py b/lib/galaxy/model/security.py index 1e28f29082e..206a2040c75 100644 --- a/lib/galaxy/model/security.py +++ b/lib/galaxy/model/security.py @@ -658,7 +658,7 @@ class GalaxyRBACAgent(RBACAgent): def create_user_role(self, user, app): # Create private user role if necessary - if app.security_agent.get_private_user_role(user): + if not app.security_agent.get_private_user_role(user): app.security_agent.create_private_user_role(user) # Create default user permissions if necessary if not user.default_permissions: From 09a23326ef05a479c3bee854300e31dd71ece245 Mon Sep 17 00:00:00 2001 From: guerler Date: Fri, 27 Dec 2019 15:07:16 -0500 Subject: [PATCH 5/9] Use local security agent instead of app in create user roles --- lib/galaxy/model/security.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/galaxy/model/security.py b/lib/galaxy/model/security.py index 206a2040c75..6505d60f521 100644 --- a/lib/galaxy/model/security.py +++ b/lib/galaxy/model/security.py @@ -658,15 +658,15 @@ class GalaxyRBACAgent(RBACAgent): def create_user_role(self, user, app): # Create private user role if necessary - if not app.security_agent.get_private_user_role(user): - app.security_agent.create_private_user_role(user) + if not self.get_private_user_role(user): + self.create_private_user_role(user) # Create default user permissions if necessary if not user.default_permissions: if hasattr(app.config, "new_user_dataset_access_role_default_private"): permissions = app.config.new_user_dataset_access_role_default_private - app.security_agent.user_set_default_permissions(user, default_access_private=permissions) + self.user_set_default_permissions(user, default_access_private=permissions) else: - app.security_agent.user_set_default_permissions(user, history=True, dataset=True) + self.user_set_default_permissions(user, history=True, dataset=True) def create_private_user_role(self, user): # Create private role From d6703f54f6a236d4fae25adb2e4c7731d1262de4 Mon Sep 17 00:00:00 2001 From: John Chilton Date: Sat, 28 Dec 2019 16:42:25 -0500 Subject: [PATCH 6/9] Version 19.9.1 of tool-util (tag galaxy-tool-util-19.9.1). --- packages/tool_util/HISTORY.rst | 2 +- packages/tool_util/galaxy/project_galaxy_tool_util.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/tool_util/HISTORY.rst b/packages/tool_util/HISTORY.rst index 52c2df7066e..6612c61b83a 100644 --- a/packages/tool_util/HISTORY.rst +++ b/packages/tool_util/HISTORY.rst @@ -6,7 +6,7 @@ History .. to_doc --------------------- -19.9.1.dev0 +19.9.1 (2019-12-28) --------------------- diff --git a/packages/tool_util/galaxy/project_galaxy_tool_util.py b/packages/tool_util/galaxy/project_galaxy_tool_util.py index 0ee2dfac196..3a4ac74fc90 100644 --- a/packages/tool_util/galaxy/project_galaxy_tool_util.py +++ b/packages/tool_util/galaxy/project_galaxy_tool_util.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -__version__ = '19.9.1.dev0' +__version__ = '19.9.1' PROJECT_NAME = "galaxy-tool-util" PROJECT_OWNER = PROJECT_USERAME = "galaxyproject" From 2e91dd121ffc71e8fe7de132f64f38a2c2c3700d Mon Sep 17 00:00:00 2001 From: John Chilton Date: Sat, 28 Dec 2019 16:43:30 -0500 Subject: [PATCH 7/9] Starting work on tool-util 19.9.2 --- packages/tool_util/HISTORY.rst | 6 ++++++ packages/tool_util/galaxy/project_galaxy_tool_util.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/tool_util/HISTORY.rst b/packages/tool_util/HISTORY.rst index 6612c61b83a..cec433c3e50 100644 --- a/packages/tool_util/HISTORY.rst +++ b/packages/tool_util/HISTORY.rst @@ -5,6 +5,12 @@ History .. to_doc +--------------------- +19.9.2.dev0 +--------------------- + + + --------------------- 19.9.1 (2019-12-28) --------------------- diff --git a/packages/tool_util/galaxy/project_galaxy_tool_util.py b/packages/tool_util/galaxy/project_galaxy_tool_util.py index 3a4ac74fc90..c9c01454c57 100644 --- a/packages/tool_util/galaxy/project_galaxy_tool_util.py +++ b/packages/tool_util/galaxy/project_galaxy_tool_util.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -__version__ = '19.9.1' +__version__ = '19.9.2.dev0' PROJECT_NAME = "galaxy-tool-util" PROJECT_OWNER = PROJECT_USERAME = "galaxyproject" From 67b7148d09a090f0223f98e1a69693ddc9196353 Mon Sep 17 00:00:00 2001 From: mvdbeek Date: Sun, 29 Dec 2019 19:15:20 +0100 Subject: [PATCH 8/9] Test return code --- lib/galaxy/jobs/runners/util/cli/shell/local.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/galaxy/jobs/runners/util/cli/shell/local.py b/lib/galaxy/jobs/runners/util/cli/shell/local.py index 6132655b5ff..2af0e2c509a 100644 --- a/lib/galaxy/jobs/runners/util/cli/shell/local.py +++ b/lib/galaxy/jobs/runners/util/cli/shell/local.py @@ -34,6 +34,8 @@ class LocalShell(BaseShellExec): True >>> exec_result.stdout.strip() == u'Hello World' True + >>> exec_result.returncode + 0 >>> exec_result = exec_python("import time; time.sleep(10)", timeout=1, timeout_check_interval=.1) >>> exec_result.stdout == u'' True From 3859735c27b894aaa30dec2f62206e7bee001596 Mon Sep 17 00:00:00 2001 From: mvdbeek Date: Sun, 29 Dec 2019 19:13:17 +0100 Subject: [PATCH 9/9] Fix LocalShell returncode It appears polling once after completionn is necessary to get the correct returncode. --- lib/galaxy/jobs/runners/util/cli/shell/local.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/galaxy/jobs/runners/util/cli/shell/local.py b/lib/galaxy/jobs/runners/util/cli/shell/local.py index 2af0e2c509a..c4deeeb3624 100644 --- a/lib/galaxy/jobs/runners/util/cli/shell/local.py +++ b/lib/galaxy/jobs/runners/util/cli/shell/local.py @@ -65,6 +65,8 @@ class LocalShell(BaseShellExec): kill_pg(p.pid) return Bunch(stdout=u'', stderr=TIMEOUT_ERROR_MESSAGE, returncode=TIMEOUT_RETURN_CODE) outf.seek(0) + # Need to poll once to establish return code + p.poll() return Bunch(stdout=_read_str(outf), stderr=_read_str(p.stderr), returncode=p.returncode)