[X2Go-Commits] python-x2go.git - brokerclient (branch) updated: 1e9e565968956a3974eefa21765b7710db207b0d
X2Go dev team
git-admin at x2go.org
Tue Jan 7 16:19:30 CET 2014
The branch, brokerclient has been updated
via 1e9e565968956a3974eefa21765b7710db207b0d (commit)
from bcb1bc06b3f2ceb51f4b8a14f18c04b91f171855 (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:
x2go/backends/control/stdout.py | 17 +++++-
x2go/client.py | 33 ++++++++++++
x2go/session.py | 108 ++++++++++++++++++++++++---------------
3 files changed, 115 insertions(+), 43 deletions(-)
The diff of changes is:
diff --git a/x2go/backends/control/stdout.py b/x2go/backends/control/stdout.py
index 28bddb6..722eb61 100644
--- a/x2go/backends/control/stdout.py
+++ b/x2go/backends/control/stdout.py
@@ -152,6 +152,9 @@ class X2goControlSessionSTDOUT(paramiko.SSHClient):
else:
return self._remote_group[group]
+ def is_x2gouser(self, username):
+ return username in self._x2go_remote_group('x2gousers')
+
@property
def _x2go_session_auth_rsakey(self):
if self._session_auth_rsakey is None:
@@ -283,13 +286,23 @@ class X2goControlSessionSTDOUT(paramiko.SSHClient):
del self.x2go_listsessions_cache
t_names = self.associated_terminals.keys()
for t_obj in self.associated_terminals.values():
- t_obj.suspend()
+ try:
+ t_obj.suspend()
+ except x2go_exceptions.X2goSessionException:
+ pass
del t_obj
for t_name in t_names:
del self.associated_terminals[t_name]
if self.get_transport() is not None:
self.get_transport().close()
+ def is_alive(self):
+ try:
+ self._x2go_exec_command('echo', loglevel=log.loglevel_DEBUG)
+ return True
+ except x2go_exceptions.X2goSessionException:
+ return False
+
def start(self, **kwargs):
"""\
Start a new X2go session.
@@ -316,7 +329,7 @@ class X2goControlSessionSTDOUT(paramiko.SSHClient):
raise x2go_exceptions.X2goSessionException('remote user %s is not member of X2go server group x2gousers' % self.get_transport().get_username())
if session_name is not None:
- session_info = self.list_sessions(refresh_cache=true)[session_name]
+ session_info = self.list_sessions(refresh_cache=True)[session_name]
else:
session_info = None
diff --git a/x2go/client.py b/x2go/client.py
index 488468c..ad329ac 100644
--- a/x2go/client.py
+++ b/x2go/client.py
@@ -184,6 +184,19 @@ class X2goClient(object):
return _CURRENT_LOCAL_USER
get_client_username = __get_client_username
+ def __is_valid_username(self):
+ """\
+ Check if user is allowed to start an X2go session on a remote server.
+
+ @return User allowed to start a session?
+ @rtype: C{str}
+
+ """
+ return _CURRENT_LOCAL_USER
+ get_client_username = __get_client_username
+
+
+
def register_all_session_profiles(self, return_objects=False):
"""\
Register all session profiles found in the C{sessions} configuration file
@@ -851,10 +864,30 @@ class X2goClient(object):
"""
return self.session_registry.registered_sessions_of_name(profile_name)
__client_registered_sessions_of_name = client_registered_sessions_of_name
+
###
### Provide access to the X2go server's sessions DB
###
+ def server_is_alive(self, session_uuid):
+ """\
+ Test if server that corresponds to the terminal session C{session_uuid} is alive.
+
+ """
+ return self.session_registry(session_uuid).is_alive()
+ __server_is_alive = server_is_alive
+
+ def server_is_x2gouser(self, session_uuid, username=None):
+ """\
+ Check if user is allowed to start an X2go session on a remote server.
+
+ @return User allowed to start a session?
+ @rtype: C{str}
+
+ """
+ return self.session_registry(session_uuid).is_x2gouser(username=None)
+ __server_is_x2gouser = server_is_x2gouser
+
def server_running_sessions(self, session_uuid):
"""\
STILL UNDOCUMENTED
diff --git a/x2go/session.py b/x2go/session.py
index 045245c..c842497 100644
--- a/x2go/session.py
+++ b/x2go/session.py
@@ -156,6 +156,12 @@ class X2goSession(object):
return self.control_session.get_transport().get_username()
__get_username = get_username
+
+ def is_x2gouser(self, username=None):
+ if username is None:
+ username = self.get_username()
+ return self.control_session.is_x2gouser(username)
+
def get_password(self):
"""\
After a session has been setup up you can query the
@@ -166,6 +172,7 @@ class X2goSession(object):
"""
return self.control_session._session_password
+ __get_password = get_password
def get_server(self):
"""\
@@ -264,11 +271,11 @@ class X2goSession(object):
STILL UNDOCUMENTED
"""
- self.control_session.disconnect()
self.connected = False
self.running = False
self.suspended = False
self.terminated = False
+ self.control_session.disconnect()
__disconnect = disconnect
def set_print_action(self, print_action, **kwargs):
@@ -281,11 +288,22 @@ class X2goSession(object):
self.terminal_session.set_print_action(print_action, **kwargs)
__set_print_action = set_print_action
+ def is_alive(self):
+ return self.control_session.is_alive()
+ __is_alive = is_alive
+
def clean_sessions(self):
- self.control_session.clean_sessions()
+ if self.is_alive():
+ self.control_session.clean_sessions()
+ else:
+ self._X2goSession__disconnect()
+ __clean_sessions = clean_sessions
def list_sessions(self, no_cache=False, refresh_cache=False):
+ if (no_cache or refresh_cache) and not self.is_alive():
+ self._X2goSession__disconnect()
return self.control_session.list_sessions(no_cache=no_cache, refresh_cache=refresh_cache)
+ __list_sessions = list_sessions
def resume(self, session_name=None):
"""\
@@ -296,40 +314,43 @@ class X2goSession(object):
@type session_name: C{str}
"""
- _control = self.control_session
- _terminal = _control.resume(session_name=session_name, logger=self.logger, **self.terminal_params)
- self.guardian_thread = _terminal.guardian_thread
- self.terminal_session = _terminal
- if _terminal is not None:
+ if self.is_alive():
+ _control = self.control_session
+ _terminal = _control.resume(session_name=session_name, logger=self.logger, **self.terminal_params)
+ self.guardian_thread = _terminal.guardian_thread
+ self.terminal_session = _terminal
+ if _terminal is not None:
- if SUPPORTED_SOUND and _terminal.params.snd_system is not 'none':
- _terminal.start_sound()
+ if SUPPORTED_SOUND and _terminal.params.snd_system is not 'none':
+ _terminal.start_sound()
- if (SUPPORTED_PRINTING and self.printing) or (SUPPORTED_FOLDERSHARING and self.share_local_folders):
- _terminal.start_sshfs()
+ if (SUPPORTED_PRINTING and self.printing) or (SUPPORTED_FOLDERSHARING and self.share_local_folders):
+ _terminal.start_sshfs()
- try:
- if SUPPORTED_PRINTING and self.printing:
- _terminal.start_printing()
- except X2goPrintException:
- pass
+ try:
+ if SUPPORTED_PRINTING and self.printing:
+ _terminal.start_printing()
+ except X2goPrintException:
+ pass
- if SUPPORTED_FOLDERSHARING and self.share_local_folders:
- if _control.get_transport().reverse_tunnels[_terminal.get_session_name()]['sshfs'][1] is not None:
- for _folder in self.share_local_folders:
- _terminal.share_local_folder(_folder)
+ if SUPPORTED_FOLDERSHARING and self.share_local_folders:
+ if _control.get_transport().reverse_tunnels[_terminal.get_session_name()]['sshfs'][1] is not None:
+ for _folder in self.share_local_folders:
+ _terminal.share_local_folder(_folder)
- # only run the session startup command if we do not resume...
- if session_name is None:
- _terminal.run_command()
+ # only run the session startup command if we do not resume...
+ if session_name is None:
+ _terminal.run_command()
- self.suspended = False
- self.running = True
- self.terminated = False
+ self.suspended = False
+ self.running = True
+ self.terminated = False
- self.terminal_session = _terminal
+ self.terminal_session = _terminal
- return self.running
+ return self.running
+ else:
+ self._X2goSession__disconnect()
__resume = resume
def start(self):
@@ -352,12 +373,14 @@ class X2goSession(object):
server-side X2go session name to this method.
"""
- if self.terminal_session.suspend():
-
- self.running = False
- self.suspended = True
- return True
+ if self.is_alive():
+ if self.terminal_session.suspend():
+ self.running = False
+ self.suspended = True
+ return True
+ else:
+ self._X2goSession__disconnect()
return False
__suspend = suspend
@@ -373,12 +396,15 @@ class X2goSession(object):
server-side X2go session name to this method.
"""
- if self.terminal_session.terminate():
+ if self.is_alive():
+ if self.terminal_session.terminate():
- self.running = False
- self.suspended = False
- self.terminated = True
- return True
+ self.running = False
+ self.suspended = False
+ self.terminated = True
+ return True
+ else:
+ self._X2goSession__disconnect()
return False
__terminate = terminate
@@ -434,7 +460,7 @@ class X2goSession(object):
"""
return self.control_session.is_connected()
- _is_connected = is_connected
+ __is_connected = is_connected
def is_running(self):
"""\
@@ -445,7 +471,7 @@ class X2goSession(object):
"""
return self.is_connected() and self.control_session.is_running(self.get_session_name())
- _is_running = is_running
+ __is_running = is_running
def is_suspended(self):
"""\
@@ -482,7 +508,7 @@ class X2goSession(object):
@rtype: C{bool}
"""
- return self.session_object.share_local_folder(folder_name=folder_name)
+ return self.terminal_session.share_local_folder(folder_name=folder_name)
__share_local_folder = share_local_folder
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).
More information about the x2go-commits
mailing list