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
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)))
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)
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()