From 44e1e4c03868edcfc91e2cca780cb46e43e3b043 Mon Sep 17 00:00:00 2001 From: ramon Date: Wed, 6 Jul 2016 18:12:44 +0000 Subject: [PATCH] =?UTF-8?q?#718:=20Mejoras=20en=20operaciones=20REST=20de?= =?UTF-8?q?=20OGAgent:=20=20*=20Env=C3=ADar=20datos=20de=20SO=20en=20opera?= =?UTF-8?q?ciones=20de=20activaci=C3=B3n=20y=20desactivaci=C3=B3n.=20=20*?= =?UTF-8?q?=20Operaciones=20de=20modificaci=C3=B3n=20deben=20recibir=20la?= =?UTF-8?q?=20clave=20secreta=20generada=20en=20la=20activaci=C3=B3n.=20?= =?UTF-8?q?=20*=20M=C3=A1s=20comentarios=20en=20el=20c=C3=B3digo.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.1@4983 a21b9725-9963-47de-94b9-378ad31fedc9 --- .../modules/server/OpenGnSys/__init__.py | 56 ++++++++++++++----- 1 file changed, 42 insertions(+), 14 deletions(-) diff --git a/src/opengnsys/modules/server/OpenGnSys/__init__.py b/src/opengnsys/modules/server/OpenGnSys/__init__.py index 9a17f8e..782680e 100644 --- a/src/opengnsys/modules/server/OpenGnSys/__init__.py +++ b/src/opengnsys/modules/server/OpenGnSys/__init__.py @@ -65,25 +65,29 @@ class OpenGnSysWorker(ServerWorker): length = 32 # Random string length def onActivation(self): + ''' + Sends OGAgent activation notification to OpenGnsys server + ''' self.cmd = None - self.random = ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(self.length)) # Ensure cfg has required configuration variables or an exception will be thrown - self.REST = REST(self.service.config.get('opengnsys', 'remote')) - # Get network interfaces self.interface = list(operations.getNetworkInfo())[0] # Get first network interface + # Generate random secret to send on activation + self.random = ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(self.length)) # Send an initialize message #self.REST.sendMessage('initialize/{}/{}'.format(self.interface.mac, self.interface.ip)) - # Send an POST message - self.REST.sendMessage('ogagent/started', {'mac': self.interface.mac, 'ip': self.interface.ip, 'secret': self.random}) + self.REST.sendMessage('ogagent/started', {'mac': self.interface.mac, 'ip': self.interface.ip, 'secret': self.random, 'ostype': operations.osType, 'osversion': operations.osVersion}) def onDeactivation(self): + ''' + Sends OGAgent stopping notification to OpenGnsys server + ''' #self.REST.sendMessage('deinitialize/{}/{}'.format(self.interface.mac, self.interface.ip)) logger.debug('onDeactivation') - self.REST.sendMessage('ogagent/stopped', {'mac': self.interface.mac, 'ip': self.interface.ip}) + self.REST.sendMessage('ogagent/stopped', {'mac': self.interface.mac, 'ip': self.interface.ip, 'ostype': operations.osType, 'osversion': operations.osVersion}) # Processes message "doit" (sample) #def process_doit(self, path, getParams, postParams): @@ -94,37 +98,44 @@ class OpenGnSysWorker(ServerWorker): def process_script(self, path, getParams, postParams, server): ''' - Processes an script execution (script is encoded in base64) + Processes an script execution (script should be encoded in base64) ''' logger.debug('Processing script request') - script = postParams.get('script') + # Checking received secret secret = getParams.get('secret') if secret != self.random: logger.error('Unauthorized operation.') raise Exception('Unauthorized operation') + # Executing script + script = postParams.get('script') if postParams.get('client', 'false') == 'false': thr = ScriptExecutorThread(script=script.decode('base64')) thr.start() else: self.sendScriptMessage(script) - - return 'ok' + return {'op': 'launched'} def processClientMessage(self, message, data): logger.debug('Got OpenGnsys message from client: {}, data {}'.format(message, data)) - def process_client_doit(self, params): - self.REST.sendMessage('doit_done', params) + #def process_client_doit(self, params): + # self.REST.sendMessage('doit_done', params) def onLogin(self, user): + ''' + Sends session login notification to OpenGnsys server + ''' logger.debug('Received login for {}'.format(user)) self.loggedin = True self.REST.sendMessage('ogagent/loggedin', {'ip': self.interface.ip, 'user': user, 'ostype': operations.osType, 'osversion': operations.osVersion}) def onLogout(self, user): + ''' + Sends session logout notification to OpenGnsys server + ''' logger.debug('Received logout for {}'.format(user)) self.loggedin = False - self.REST.sendMessage('ogagent/loggedout', {'ip': self.interface.ip, 'user': user, 'ostype': operations.osType, 'osversion': operations.osVersion}) + self.REST.sendMessage('ogagent/loggedout', {'ip': self.interface.ip, 'user': user}) def process_ogclient(self, path, getParams, postParams, server): ''' @@ -152,7 +163,6 @@ class OpenGnSysWorker(ServerWorker): return operation(path[1:], getParams, postParams) - ###### EN PRUEBAS ###### def process_status(self, path, getParams, postParams, server): ''' Returns client status. @@ -181,6 +191,12 @@ class OpenGnSysWorker(ServerWorker): Launches a system reboot operation. ''' logger.debug('Received reboot operation') + # Check received secret + secret = getParams.get('secret') + if secret != self.random: + logger.error('Unauthorized operation.') + raise Exception('Unauthorized operation') + # Rebooting thread def rebt(): operations.reboot() threading.Thread(target=rebt).start() @@ -191,6 +207,12 @@ class OpenGnSysWorker(ServerWorker): Launches a system power off operation. ''' logger.debug('Received poweroff operation') + # Checking received secret + secret = getParams.get('secret') + if secret != self.random: + logger.error('Unauthorized operation.') + raise Exception('Unauthorized operation') + # Powering off thread def pwoff(): time.sleep(2) operations.poweroff() @@ -202,6 +224,12 @@ class OpenGnSysWorker(ServerWorker): Closes user session. ''' logger.debug('Received logoff operation') + # Checking received secret + secret = getParams.get('secret') + if secret != self.random: + logger.error('Unauthorized operation.') + raise Exception('Unauthorized operation') + # Sending log off message to OGAgent client self.sendClientMessage('logoff', {}) return 'Logoff operation was sended to client'