#718: Mejoras en operaciones REST de OGAgent:
* Envíar datos de SO en operaciones de activación y desactivación. * Operaciones de modificación deben recibir la clave secreta generada en la activación. * Más comentarios en el código. git-svn-id: https://opengnsys.es/svn/branches/version1.1@4983 a21b9725-9963-47de-94b9-378ad31fedc9oglive
parent
ee089324d7
commit
44e1e4c038
|
@ -65,25 +65,29 @@ class OpenGnSysWorker(ServerWorker):
|
||||||
length = 32 # Random string length
|
length = 32 # Random string length
|
||||||
|
|
||||||
def onActivation(self):
|
def onActivation(self):
|
||||||
|
'''
|
||||||
|
Sends OGAgent activation notification to OpenGnsys server
|
||||||
|
'''
|
||||||
self.cmd = None
|
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
|
# Ensure cfg has required configuration variables or an exception will be thrown
|
||||||
|
|
||||||
self.REST = REST(self.service.config.get('opengnsys', 'remote'))
|
self.REST = REST(self.service.config.get('opengnsys', 'remote'))
|
||||||
|
|
||||||
# Get network interfaces
|
# Get network interfaces
|
||||||
self.interface = list(operations.getNetworkInfo())[0] # Get first network interface
|
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
|
# Send an initialize message
|
||||||
#self.REST.sendMessage('initialize/{}/{}'.format(self.interface.mac, self.interface.ip))
|
#self.REST.sendMessage('initialize/{}/{}'.format(self.interface.mac, self.interface.ip))
|
||||||
|
|
||||||
# Send an POST message
|
# 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):
|
def onDeactivation(self):
|
||||||
|
'''
|
||||||
|
Sends OGAgent stopping notification to OpenGnsys server
|
||||||
|
'''
|
||||||
#self.REST.sendMessage('deinitialize/{}/{}'.format(self.interface.mac, self.interface.ip))
|
#self.REST.sendMessage('deinitialize/{}/{}'.format(self.interface.mac, self.interface.ip))
|
||||||
logger.debug('onDeactivation')
|
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)
|
# Processes message "doit" (sample)
|
||||||
#def process_doit(self, path, getParams, postParams):
|
#def process_doit(self, path, getParams, postParams):
|
||||||
|
@ -94,37 +98,44 @@ class OpenGnSysWorker(ServerWorker):
|
||||||
|
|
||||||
def process_script(self, path, getParams, postParams, server):
|
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')
|
logger.debug('Processing script request')
|
||||||
script = postParams.get('script')
|
# Checking received secret
|
||||||
secret = getParams.get('secret')
|
secret = getParams.get('secret')
|
||||||
if secret != self.random:
|
if secret != self.random:
|
||||||
logger.error('Unauthorized operation.')
|
logger.error('Unauthorized operation.')
|
||||||
raise Exception('Unauthorized operation')
|
raise Exception('Unauthorized operation')
|
||||||
|
# Executing script
|
||||||
|
script = postParams.get('script')
|
||||||
if postParams.get('client', 'false') == 'false':
|
if postParams.get('client', 'false') == 'false':
|
||||||
thr = ScriptExecutorThread(script=script.decode('base64'))
|
thr = ScriptExecutorThread(script=script.decode('base64'))
|
||||||
thr.start()
|
thr.start()
|
||||||
else:
|
else:
|
||||||
self.sendScriptMessage(script)
|
self.sendScriptMessage(script)
|
||||||
|
return {'op': 'launched'}
|
||||||
return 'ok'
|
|
||||||
|
|
||||||
def processClientMessage(self, message, data):
|
def processClientMessage(self, message, data):
|
||||||
logger.debug('Got OpenGnsys message from client: {}, data {}'.format(message, data))
|
logger.debug('Got OpenGnsys message from client: {}, data {}'.format(message, data))
|
||||||
|
|
||||||
def process_client_doit(self, params):
|
#def process_client_doit(self, params):
|
||||||
self.REST.sendMessage('doit_done', params)
|
# self.REST.sendMessage('doit_done', params)
|
||||||
|
|
||||||
def onLogin(self, user):
|
def onLogin(self, user):
|
||||||
|
'''
|
||||||
|
Sends session login notification to OpenGnsys server
|
||||||
|
'''
|
||||||
logger.debug('Received login for {}'.format(user))
|
logger.debug('Received login for {}'.format(user))
|
||||||
self.loggedin = True
|
self.loggedin = True
|
||||||
self.REST.sendMessage('ogagent/loggedin', {'ip': self.interface.ip, 'user': user, 'ostype': operations.osType, 'osversion': operations.osVersion})
|
self.REST.sendMessage('ogagent/loggedin', {'ip': self.interface.ip, 'user': user, 'ostype': operations.osType, 'osversion': operations.osVersion})
|
||||||
|
|
||||||
def onLogout(self, user):
|
def onLogout(self, user):
|
||||||
|
'''
|
||||||
|
Sends session logout notification to OpenGnsys server
|
||||||
|
'''
|
||||||
logger.debug('Received logout for {}'.format(user))
|
logger.debug('Received logout for {}'.format(user))
|
||||||
self.loggedin = False
|
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):
|
def process_ogclient(self, path, getParams, postParams, server):
|
||||||
'''
|
'''
|
||||||
|
@ -152,7 +163,6 @@ class OpenGnSysWorker(ServerWorker):
|
||||||
|
|
||||||
return operation(path[1:], getParams, postParams)
|
return operation(path[1:], getParams, postParams)
|
||||||
|
|
||||||
###### EN PRUEBAS ######
|
|
||||||
def process_status(self, path, getParams, postParams, server):
|
def process_status(self, path, getParams, postParams, server):
|
||||||
'''
|
'''
|
||||||
Returns client status.
|
Returns client status.
|
||||||
|
@ -181,6 +191,12 @@ class OpenGnSysWorker(ServerWorker):
|
||||||
Launches a system reboot operation.
|
Launches a system reboot operation.
|
||||||
'''
|
'''
|
||||||
logger.debug('Received 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():
|
def rebt():
|
||||||
operations.reboot()
|
operations.reboot()
|
||||||
threading.Thread(target=rebt).start()
|
threading.Thread(target=rebt).start()
|
||||||
|
@ -191,6 +207,12 @@ class OpenGnSysWorker(ServerWorker):
|
||||||
Launches a system power off operation.
|
Launches a system power off operation.
|
||||||
'''
|
'''
|
||||||
logger.debug('Received poweroff 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():
|
def pwoff():
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
operations.poweroff()
|
operations.poweroff()
|
||||||
|
@ -202,6 +224,12 @@ class OpenGnSysWorker(ServerWorker):
|
||||||
Closes user session.
|
Closes user session.
|
||||||
'''
|
'''
|
||||||
logger.debug('Received logoff operation')
|
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', {})
|
self.sendClientMessage('logoff', {})
|
||||||
return 'Logoff operation was sended to client'
|
return 'Logoff operation was sended to client'
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue