details: http://www.bx.psu.edu/hg/galaxy/rev/c30c7c98ce61 changeset: 3588:c30c7c98ce61 user: Greg Von Kuster <greg@bx.psu.edu> date: Wed Mar 31 16:25:21 2010 -0400 description: Eliminate the use of message.mako from certain methods in the user controller, and fix an issue with the handle_user_login method in the framework. diffstat: lib/galaxy/web/controllers/user.py | 101 +++++++++++++++++++++++++++++----- lib/galaxy/web/framework/__init__.py | 63 +++++++++++---------- 2 files changed, 118 insertions(+), 46 deletions(-) diffs (264 lines): diff -r 273535c97761 -r c30c7c98ce61 lib/galaxy/web/controllers/user.py --- a/lib/galaxy/web/controllers/user.py Wed Mar 31 13:11:05 2010 -0400 +++ b/lib/galaxy/web/controllers/user.py Wed Mar 31 16:25:21 2010 -0400 @@ -29,9 +29,7 @@ return trans.fill_template( '/user/index.mako', user=trans.get_user(), webapp=webapp ) @web.expose def login( self, trans, webapp='galaxy', **kwd ): - use_panels = kwd.get( 'use_panels', 'True' ) - # Convert use_panels to Boolean. - use_panels = use_panels in [ 'True', 'true', 't', 'T' ] + use_panels = util.string_as_bool( kwd.get( 'use_panels', True ) ) msg = kwd.get( 'msg', '' ) messagetype = kwd.get( 'messagetype', 'done' ) if kwd.get( 'login_button', False ): @@ -43,6 +41,8 @@ refresh_frames = [ 'masthead', 'history', 'tools' ] else: refresh_frames = [ 'masthead', 'history' ] + else: + refresh_frames = [] user = trans.sa_session.query( trans.app.model.User ).filter( trans.app.model.User.table.c.email==email ).first() if not user: msg = "No such user" @@ -63,7 +63,11 @@ ( user.email, referer, url_for( '/' ) ) if trans.app.config.require_login: msg += ' <a href="%s">Click here</a> to continue to the home page.' % web.url_for( '/static/welcome.html' ) - return trans.show_ok_message( msg, refresh_frames=refresh_frames, use_panels=use_panels, active_view="user" ) + return trans.response.send_redirect( web.url_for( controller='user', + action='login', + use_panels=use_panels, + msg=msg, + message_type='done' ) ) if trans.app.config.require_login: if trans.app.config.allow_user_creation: return trans.fill_template( '/user/login.mako', @@ -99,11 +103,12 @@ # Since logging an event requires a session, we'll log prior to ending the session trans.log_event( "User logged out" ) trans.handle_user_logout() - msg = "You have been logged out.<br>You can <a href='%s'>go back to the page you were visiting</a> or <a href='%s'>go to the home page</a>." % \ + msg = "You have been logged out.<br>You can log in again, <a href='%s'>go back to the page you were visiting</a> or <a href='%s'>go to the home page</a>." % \ ( trans.request.referer, url_for( '/' ) ) - if trans.app.config.require_login: - msg += ' <a href="%s">Click here</a> to return to the login page.' % web.url_for( controller='user', action='login' ) - return trans.show_ok_message( msg, refresh_frames=refresh_frames, use_panels=True, active_view="user" ) + return trans.response.send_redirect( web.url_for( controller='user', + action='login', + msg=msg, + message_type='done' ) ) @web.expose def create( self, trans, webapp='galaxy', **kwd ): params = util.Params( kwd ) @@ -126,8 +131,24 @@ refresh_frames = [ 'masthead', 'history', 'tools' ] else: refresh_frames = [ 'masthead', 'history' ] + else: + refresh_frames = [] if not trans.app.config.allow_user_creation and not trans.user_is_admin(): - return trans.show_error_message( 'User registration is disabled. Please contact your Galaxy administrator for an account.' ) + msg = 'User registration is disabled. Please contact your Galaxy administrator for an account.' + return trans.response.send_redirect( web.url_for( controller='user', + action='create', + webapp=webapp, + email=email, + password=password, + confirm=confirm, + username=username, + subscribe=subscribe, + subscribe_checked=subscribe_checked, + admin_view=admin_view, + use_panels=use_panels, + refresh_frames=refresh_frames, + msg=error, + messagetype='error' ) ) # Create the user, save all the user info and login to Galaxy if params.get( 'create_user_button', False ): # Check email and password validity @@ -135,7 +156,8 @@ if error: return trans.response.send_redirect( web.url_for( controller='user', action='create', - webapp=webapp,email=email, + webapp=webapp, + email=email, password=password, confirm=confirm, username=username, @@ -143,6 +165,7 @@ subscribe_checked=subscribe_checked, admin_view=admin_view, use_panels=use_panels, + refresh_frames=refresh_frames, msg=error, messagetype='error' ) ) # all the values are valid @@ -162,8 +185,21 @@ mail = os.popen( "%s -t" % trans.app.config.sendmail_path, 'w' ) mail.write( "To: %s\nFrom: %s\nSubject: Join Mailing List\n\nJoin Mailing list." % ( trans.app.config.mailing_join_addr,email ) ) if mail.close(): - return trans.show_warn_message( "Now logged in as " + user.email+". However, subscribing to the mailing list has failed.", - refresh_frames=refresh_frames ) + msg = "Now logged in as " + user.email + ". However, subscribing to the mailing list has failed." + return trans.response.send_redirect( web.url_for( controller='user', + action='create', + webapp=webapp, + email=email, + password=password, + confirm=confirm, + username=username, + subscribe=subscribe, + subscribe_checked=subscribe_checked, + admin_view=admin_view, + use_panels=use_panels, + refresh_frames=refresh_frames, + msg=error, + messagetype='warn' ) ) if not admin_view: # 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 @@ -171,16 +207,42 @@ trans.log_event( "User created a new account" ) trans.log_event( "User logged in" ) # subscribe user to email list - return trans.show_ok_message( "Now logged in as %s.<br><a href='%s'>Return to the home page.</a>" % \ - ( user.email, url_for( '/' ) ), refresh_frames=refresh_frames, use_panels=True ) + msg = "Now logged in as %s.<br><a href='%s'>Return to the home page.</a>" % ( user.email, url_for( '/' ) ) + return trans.response.send_redirect( web.url_for( controller='user', + action='create', + webapp=webapp, + email=email, + password=password, + confirm=confirm, + username=username, + subscribe=subscribe, + subscribe_checked=subscribe_checked, + admin_view=admin_view, + use_panels=True, + refresh_frames=refresh_frames, + msg=msg, + messagetype='done' ) ) else: trans.response.send_redirect( web.url_for( controller='admin', action='users', message='Created new user account (%s)' % user.email, status='done' ) ) else: - return trans.show_ok_message( "Now logged in as %s.<br><a href='%s'>Return to the home page.</a>" % \ - ( user.email, url_for( '/' ) ), use_panels=False ) + msg = "Now logged in as %s.<br><a href='%s'>Return to the home page.</a>" % ( user.email, url_for( '/' ) ) + return trans.response.send_redirect( web.url_for( controller='user', + action='create', + webapp=webapp, + email=email, + password=password, + confirm=confirm, + username=username, + subscribe=subscribe, + subscribe_checked=subscribe_checked, + admin_view=admin_view, + use_panels=False, + refresh_frames=refresh_frames, + msg=error, + messagetype='done' ) ) if webapp == 'galaxy': user_info_select, user_info_form, widgets = self.__user_info_ui( trans, **kwd ) else: @@ -414,6 +476,7 @@ else: user = trans.user if not user: + # TODO: handle this without the deprecated exception. raise "In show_info, we don't have a valid user" email = util.restore_text( params.get( 'email', user.email ) ) # Do not sanitize passwords, so take from kwd @@ -594,7 +657,11 @@ trans.sa_session.add( reset_user ) trans.sa_session.flush() trans.log_event( "User reset password: %s" % email ) - return trans.show_ok_message( "Password has been reset and emailed to: %s. <a href='%s'>Click here</a> to return to the login form." % ( email, web.url_for( action='login' ) ) ) + msg = "Password has been reset and emailed to: %s. <a href='%s'>Click here</a> to return to the login form." % ( email, web.url_for( action='login' ) ) + return trans.response.send_redirect( web.url_for( controller='user', + action='reset_password', + msg=msg, + messagetype='done' ) ) elif email != None: msg = "The specified user does not exist" messagetype = 'error' diff -r 273535c97761 -r c30c7c98ce61 lib/galaxy/web/framework/__init__.py --- a/lib/galaxy/web/framework/__init__.py Wed Mar 31 13:11:05 2010 -0400 +++ b/lib/galaxy/web/framework/__init__.py Wed Mar 31 16:25:21 2010 -0400 @@ -424,37 +424,42 @@ prev_galaxy_session.is_valid = False # Define a new current_session self.galaxy_session = self.__create_new_session( prev_galaxy_session, user ) - # Associated the current user's last accessed history (if exists) with their new session - history = None - try: - users_last_session = user.galaxy_sessions[0] - last_accessed = True - except: - users_last_session = None - last_accessed = False - if prev_galaxy_session.current_history and prev_galaxy_session.current_history.datasets: - if prev_galaxy_session.current_history.user is None or prev_galaxy_session.current_history.user == user: - # If the previous galaxy session had a history, associate it with the new - # session, but only if it didn't belong to a different user. - history = prev_galaxy_session.current_history - elif self.galaxy_session.current_history: - history = self.galaxy_session.current_history - if not history and users_last_session and users_last_session.current_history: - history = users_last_session.current_history - elif not history: - history = self.get_history( create=True ) - if history not in self.galaxy_session.histories: - self.galaxy_session.add_history( history ) - if history.user is None: - history.user = user - self.galaxy_session.current_history = history - if not last_accessed: - # Only set default history permissions if current history is not from a previous session - self.app.security_agent.history_set_default_permissions( history, dataset=True, bypass_manage_permission=True ) - self.sa_session.add_all( ( prev_galaxy_session, self.galaxy_session, history ) ) + if webapp == 'galaxy': + cookie_name = 'galaxysession' + # Associated the current user's last accessed history (if exists) with their new session + history = None + try: + users_last_session = user.galaxy_sessions[0] + last_accessed = True + except: + users_last_session = None + last_accessed = False + if prev_galaxy_session.current_history and prev_galaxy_session.current_history.datasets: + if prev_galaxy_session.current_history.user is None or prev_galaxy_session.current_history.user == user: + # If the previous galaxy session had a history, associate it with the new + # session, but only if it didn't belong to a different user. + history = prev_galaxy_session.current_history + elif self.galaxy_session.current_history: + history = self.galaxy_session.current_history + if not history and users_last_session and users_last_session.current_history: + history = users_last_session.current_history + elif not history: + history = self.get_history( create=True ) + if history not in self.galaxy_session.histories: + self.galaxy_session.add_history( history ) + if history.user is None: + history.user = user + self.galaxy_session.current_history = history + if not last_accessed: + # Only set default history permissions if current history is not from a previous session + self.app.security_agent.history_set_default_permissions( history, dataset=True, bypass_manage_permission=True ) + self.sa_session.add_all( ( prev_galaxy_session, self.galaxy_session, history ) ) + else: + cookie_name = 'galaxycommunitysession' + self.sa_session.add_all( ( prev_galaxy_session, self.galaxy_session ) ) self.sa_session.flush() # This method is not called from the Galaxy reports, so the cookie will always be galaxysession - self.__update_session_cookie( name='galaxysession' ) + self.__update_session_cookie( name=cookie_name ) def handle_user_logout( self ): """ Logout the current user: