Esempio n. 1
0
 def handle_register(self, register):
     self.registered_usernames_lock.acquire()
     if register.username not in self.registered_usernames:
         self.registered_usernames.add(register.username)
         user_id = self.client_id
         self.registered_usernames_lock.release()
         if self.encryption:
             register.symmetric_key = RSA._rsa_decrypt_and_decode(self.rsa_key, 
                                                       register.symmetric_key)
         self.clients_lock.acquire()
         self.clients[user_id] = register
         self.client_id += 1  
         self.clients_lock.release()
         self.__ontology_manager.add_individual('User', register.username)
         self.__ontology_manager.save()
         self.logger.debug('Username %s registered and assigned ID %d' \
                           % (register.username, user_id))
         if self.encryption:
             self.clients_lock.acquire()
             ret = RSA.rsa_encrypt_client(self.clients[user_id], 
                                           Serialization.serialize_registeruserresponse(user_id))
             self.clients_lock.release()
             return ret
         return base64.b64encode(Serialization.serialize_registeruserresponse(user_id))
     self.logger.error('Username %s already registered' % register.username)
     return
                             
                             
Esempio n. 2
0
 def __post(self, method, encoded_message, rsa_encrypt=None, aes_encrypt=None):
     buf = cStringIO.StringIO()
     query_var = 'message'
     base_url = 'http://' + self.server_ip + ':' + str(self.server_port)
     encoded_message = base64.b64encode(encoded_message)
     service_url = '/' + method + '/?' + query_var + '=' + encoded_message
     self.logger.debug('URL: %s', base_url + service_url)
     self.curl.setopt(pycurl.URL, base_url + service_url)
     self.curl.setopt(pycurl.WRITEFUNCTION, buf.write)
     try:
         self.curl.perform()
         if self.curl.getinfo(pycurl.HTTP_CODE) == 200:
             self.logger.debug('%s: Success!' % method)
         else:
             self.logger.debug('%s: Failure!' % method)
         response = buf.getvalue()
         response = base64.b64decode(response)
         buf.close()
         if rsa_encrypt:
             response = RSA._rsa_decrypt(self.rsa_key, response)
         elif aes_encrypt:
             response = AES._aes_decrypt(self.aes_key, response)
         return response
     except pycurl.error, msg: 
         errno, text = msg 
         self.logger.error('pycURL Error! (error number %d): %s' % (errno, text))
         self.logger.error('pycURL HTTP status code: %d' % (self.curl.getinfo(pycurl.HTTP_CODE)))  
Esempio n. 3
0
 def register(self, username, user, mobile_device, network_details, public_key, symmetric_key):
     if self.encryption:
         symmetric_key = RSA._rsa_encrypt_and_encode(self.server_public_key, symmetric_key)
     encoded = Serialization.serialize_registeruser(username, 
                                                    user, 
                                                    mobile_device, 
                                                    network_details, 
                                                    str(public_key.n),
                                                    str(public_key.e),
                                                    symmetric_key)
     response = self.__post('register', encoded, rsa_encrypt=self.encryption)
     return Serialization.deserialize_registeruserresponse(response)
Esempio n. 4
0
 def __init__(self, logger, encryption):
     self.logger = logger
     self.encryption = encryption
     # contains RegisterAgent objects indexed by client_id
     self.clients = {}
     self.clients_lock = Lock()
     # contains registered user names for fast look up 
     self.registered_usernames = set()
     self.registered_usernames_lock = Lock()
     self.client_id = 0
     self.rsa_key = RSA.generate_RSA_keypair()
     self.logger.info('Server RSA key mod %s, exp %s', str(self.rsa_key.n), str(self.rsa_key.e))
     self.__fetch_query = Fetcher(logger)
     self.__parse_query = Parser(logger)
     self.__ontology_manager = OntologyManager()