diff --git a/src/OGAgentUser.py b/src/OGAgentUser.py index 9c612cc..86a95b0 100644 --- a/src/OGAgentUser.py +++ b/src/OGAgentUser.py @@ -108,9 +108,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: @@ -206,7 +206,8 @@ class OGASystemTray(QtWidgets.QSystemTrayIcon): logger.error("Activation of {} failed: {}".format(mod.name, utils.exceptionToMessage(e))) self.modules[:] = valid_mods # 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 c421849..677724e 100644 --- a/src/opengnsys/ipc.py +++ b/src/opengnsys/ipc.py @@ -318,8 +318,8 @@ class ClientIPC(threading.Thread): msg = bytes([msg]) + bytes([l & 0xFF]) + bytes([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 3b2c5d3..9de9fa8 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 13eb5b4..0befc36 100644 --- a/src/opengnsys/modules/server/OpenGnSys/__init__.py +++ b/src/opengnsys/modules/server/OpenGnSys/__init__.py @@ -107,6 +107,7 @@ class OpenGnSysWorker(ServerWorker): interface = None # Bound interface for OpenGnsys REST = None # REST object user = [] # User sessions + session_type = '' # User session type random = None # Random string for secure connections length = 32 # Random string length exec_level = None # Execution level (permitted operations) @@ -201,10 +202,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.user.append(user) 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): @@ -261,7 +263,8 @@ class OpenGnSysWorker(ServerWorker): st = {'linux': 'LNX', 'macos': 'OSX', 'windows': 'WIN'} try: # Standard status - res = {'status': st[operations.os_type.lower()], 'loggedin': len(self.user) > 0} + res = {'status': st[operations.os_type.lower()], 'loggedin': len(self.user) > 0, + 'session': self.session_type} # Detailed status if get_params.get('detail', 'false') == 'true': res.update({'agent_version': VERSION, 'os_version': operations.os_version, 'sys_load': os.getloadavg()}) diff --git a/src/opengnsys/windows/operations.py b/src/opengnsys/windows/operations.py index 51d56d7..7be4ce1 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'