diff --git a/src/OGAgentUser.py b/src/OGAgentUser.py index 7eefbb0..2df807b 100644 --- a/src/OGAgentUser.py +++ b/src/OGAgentUser.py @@ -115,9 +115,9 @@ class MessagesProcessor(QtCore.QThread): def isAlive(self): return self.ipc is not None - def sendLogin(self, userName, language): + def sendLogin(self, user_data): if self.ipc: - self.ipc.sendLogin(userName, language) + self.ipc.sendLogin(user_data) def sendLogout(self, userName): if self.ipc: @@ -221,7 +221,8 @@ class OGASystemTray(QtGui.QSystemTrayIcon): self.modules[:] = validMods # copy instead of assignment # If this is running, it's because he have logged in, inform service of this fact - self.ipc.sendLogin(operations.getCurrentUser(), operations.getSessionLanguage()) + self.ipc.sendLogin((operations.getCurrentUser(), operations.getSessionLanguage(), + operations.get_session_type())) def deinitialize(self): for mod in reversed(self.modules): # Deinitialize reversed of initialization diff --git a/src/opengnsys/ipc.py b/src/opengnsys/ipc.py index dd3663d..a92473e 100644 --- a/src/opengnsys/ipc.py +++ b/src/opengnsys/ipc.py @@ -317,8 +317,8 @@ class ClientIPC(threading.Thread): msg = six.int2byte(msg) + six.int2byte(l & 0xFF) + six.int2byte(l >> 8) + data self.clientSocket.sendall(msg) - def sendLogin(self, username, language): - self.sendRequestMessage(REQ_LOGIN, username+','+language) + def sendLogin(self, user_data): + self.sendRequestMessage(REQ_LOGIN, ','.join(user_data)) def sendLogout(self, username): self.sendRequestMessage(REQ_LOGOUT, username) diff --git a/src/opengnsys/linux/operations.py b/src/opengnsys/linux/operations.py index f3236e2..a3e119f 100644 --- a/src/opengnsys/linux/operations.py +++ b/src/opengnsys/linux/operations.py @@ -282,6 +282,14 @@ def getSessionLanguage(): return locale.getdefaultlocale()[0] +def get_session_type(): + """ + Returns the user's session type (xrdp, wayland, x11, tty,...) + :return: string + """ + return 'xrdp' if 'XRDP_SESSION' in os.environ else os.environ.get('XDG_SESSION_TYPE', 'unknown').lower() + + def showPopup(title, message): ''' Displays a message box on user's session (during 1 min). diff --git a/src/opengnsys/modules/server/OpenGnSys/__init__.py b/src/opengnsys/modules/server/OpenGnSys/__init__.py index 70cc8c7..838ffda 100644 --- a/src/opengnsys/modules/server/OpenGnSys/__init__.py +++ b/src/opengnsys/modules/server/OpenGnSys/__init__.py @@ -81,6 +81,7 @@ class OpenGnSysWorker(ServerWorker): interface = None # Bound interface for OpenGnsys REST = None # REST object logged_in = False # User session flag + session_type = '' # User session type locked = {} random = None # Random string for secure connections length = 32 # Random string length @@ -162,10 +163,11 @@ class OpenGnSysWorker(ServerWorker): """ Sends session login notification to OpenGnsys server """ - user, sep, language = data.partition(',') - logger.debug('Received login for {} with language {}'.format(user, language)) + user, language, self.session_type = tuple(data.split(',')) + logger.debug('Received login for {0} using {2} with language {1}'.format(user, language, self.session_type)) self.logged_in = True self.REST.sendMessage('ogagent/loggedin', {'ip': self.interface.ip, 'user': user, 'language': language, + 'session': self.session_type, 'ostype': operations.os_type, 'osversion': operations.os_version}) def onLogout(self, user): @@ -213,7 +215,7 @@ class OpenGnSysWorker(ServerWorker): :param server: :return: JSON object {"status": "status_code", "loggedin": boolean} """ - res = {'status': '', 'loggedin': self.logged_in} + res = {'status': '', 'loggedin': self.logged_in, 'session': self.session_type} if platform.system() == 'Linux': # GNU/Linux # Check if it's OpenGnsys Client. if os.path.exists('/scripts/oginit'): diff --git a/src/opengnsys/windows/operations.py b/src/opengnsys/windows/operations.py index 95331fd..82b6522 100644 --- a/src/opengnsys/windows/operations.py +++ b/src/opengnsys/windows/operations.py @@ -254,6 +254,14 @@ def getSessionLanguage(): return locale.getdefaultlocale()[0] +def get_session_type(): + """ + returns the user's session type (Local session, RDP,...) + :return: string + """ + return os.environ.get('SESSIONNAME').lower() + + def showPopup(title, message): ''' Displays a message box on user's session (during 1 min). diff --git a/src/setup.py b/src/setup.py index 85300f7..7f5c04f 100644 --- a/src/setup.py +++ b/src/setup.py @@ -57,13 +57,13 @@ except ImportError: import os from distutils.core import setup - +import py2exe import sys # Reading version file: try: with open('VERSION', 'r') as v: - VERSION = v.read().split() + VERSION = v.read().rstrip() except IOError: VERSION = '1.1.0'