The branch, twofactorauth has been updated via 521d91dfd683e3221ba0d37d24c5419f4dfb4852 (commit) from 41e9e07ffcd534af310b1a7dd48c04d9fbd72356 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- ----------------------------------------------------------------------- Summary of changes: debian/changelog | 3 +++ x2go/backends/terminal/_stdout.py | 7 +++++++ x2go/client.py | 22 ++++++++++++++++++++ x2go/session.py | 41 ++++++++++++++++++++++++++++++++++--- 4 files changed, 70 insertions(+), 3 deletions(-) The diff of changes is: diff --git a/debian/changelog b/debian/changelog index a9594b0..785a616 100644 --- a/debian/changelog +++ b/debian/changelog @@ -72,6 +72,9 @@ python-x2go (0.1.2.0-0~x2go1) UNRELEASED; urgency=low - Docstring fix, add X2goClient method is_session_profile(), return registered session for a specific session name if it has already been registered instead of registering a new session. + - Provide X2goClient method get_session_info(), do not auto start/resume sessions + in published applications mode, provide hook method for auto-connecting + interactively. * Depend on python-xlib. -- Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Sat, 28 Sep 2012 01:44:21 +0100 diff --git a/x2go/backends/terminal/_stdout.py b/x2go/backends/terminal/_stdout.py index 32798af..6cfbac1 100644 --- a/x2go/backends/terminal/_stdout.py +++ b/x2go/backends/terminal/_stdout.py @@ -393,6 +393,13 @@ class X2goTerminalSessionSTDOUT(object): """ return self.session_info.name + def get_session_info(self): + """\ + STILL UNDOCUMENTED + + """ + return self.session_info + def get_session_cmd(self): """\ STILL UNDOCUMENTED diff --git a/x2go/client.py b/x2go/client.py index 68da3fb..ef04361 100644 --- a/x2go/client.py +++ b/x2go/client.py @@ -331,6 +331,13 @@ class X2goClient(object): self.auto_update_listdesktops_cache = auto_update_listdesktops_cache self.auto_update_listmounts_cache = auto_update_listmounts_cache + def HOOK_profile_auto_connect(self, profile_name='UNKNOWN'): + """\ + HOOK method: called if a session demands to auto connect the session profile. + + """ + self.logger('HOOK_profile_auto_connect: profile ,,%s'' wants to be auto-connected to the X2Go server.' % profile_name, loglevel=log.loglevel_WARN) + def HOOK_session_startup_failed(self, profile_name='UNKNOWN'): """\ HOOK method: called if the startup of a session failed. @@ -1071,6 +1078,21 @@ class X2goClient(object): return self.session_registry(session_uuid).get_session_name() __get_session_name = get_session_name + def get_session_info(self, session_uuid): + """\ + Retrieve the server-side X2Go session information object for the session that has + been registered under C{session_uuid}. + + @param session_uuid: the X2Go session's UUID registry hash + @type session_uuid: C{str} + + @return: X2Go session info + @rtype: C{obj} + + """ + return self.session_registry(session_uuid).get_session_info() + __get_session_info = get_session_info + def set_session_username(self, session_uuid, username): """\ Set the session username for the L{X2goSession} that has been registered under C{session_uuid}. diff --git a/x2go/session.py b/x2go/session.py index 1bbea20..8ec10f0 100644 --- a/x2go/session.py +++ b/x2go/session.py @@ -308,6 +308,16 @@ class X2goSession(object): if self.is_connected(): self.retrieve_server_features() + def HOOK_auto_connect(self): + """\ + HOOK method: called if the session demands to auto connect. + + """ + if self.client_instance: + self.client_instance.HOOK_profile_auto_connect(profile_name=self.profile_name) + else: + self.logger('HOOK_auto_connect: profile ,,%s'' wants to auto-connect to the X2Go server.' % self.profile_name, loglevel=log.loglevel_WARN) + def HOOK_session_startup_failed(self): """\ HOOK method: called if the startup of a session failed. @@ -716,6 +726,18 @@ class X2goSession(object): return self.session_name __get_session_name = get_session_name + def get_session_info(self): + """\ + Retrieve the server-side X2Go session info object for this session. + + @return: X2Go session info + @rtype: C{obj} + + """ + if self.has_terminal_session(): + self.terminal_session.get_session_info() + __get_session_info = get_session_info + def get_session_cmd(self): """\ Retrieve the server-side command that is used to start a session @@ -890,6 +912,8 @@ class X2goSession(object): else: if self.can_auto_connect() and self.auto_connect: gevent.spawn(self.connect) + else: + gevent.spawn(self.HOOK_auto_connect) def connect(self, username='', password='', add_to_known_hosts=False, force_password_auth=False, use_sshproxy=False, sshproxy_user='', sshproxy_password=''): @@ -1296,7 +1320,11 @@ class X2goSession(object): def do_auto_start_or_resume(self, newest=True, oldest=False, all_suspended=False, start=True, redirect_to_client=True): """\ - Automatically start or resume this session. + Automatically start or resume this session, if already associated with a server session. Otherwise + resume a server-side available/suspended session (see options to declare which session to resume). + If no session is available for resuming a new session will be launched. + + Sessions in published applications mode are not resumed/started by this method. @param newest: if resuming, only resume newest/youngest session @type newest: C{bool} @@ -1314,10 +1342,16 @@ class X2goSession(object): if self.client_instance and redirect_to_client: return self.client_instance.session_auto_start_or_resume(self()) else: - if self.session_name is not None: + if self.session_name is not None and 'PUBLISHED' not in self.session_name: return self.resume() else: session_infos = self.list_sessions() + + # only auto start/resume non-pubapp sessions + for session_name in session_infos.keys(): + if session_infos[session_name].is_published_applications_provider(): + del session_infos[session_name] + if session_infos: if newest: return self.resume(session_name=utils.session_names_by_timestamp(session_infos)[-1]) @@ -1327,7 +1361,8 @@ class X2goSession(object): for session_name in [ _sn for _sn in session_infos.keys() if session_infos[_sn].is_suspended() ]: return self.resume(session_name=session_name) else: - return self.start() + if not self.published_applications: + return self.start() def resume(self, session_name=None): """\ hooks/post-receive -- python-x2go.git (Python X2Go Client API) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "python-x2go.git" (Python X2Go Client API).