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 handle_query(self, message): query_message = Serialization.deserialize_sendquery(message) self.clients_lock.acquire() if query_message.user_id in self.clients: aes_key = self.clients[query_message.user_id].symmetric_key self.clients_lock.release() query = query_message.query if self.encryption: query = AES._aes_decrypt_and_decode(aes_key, query_message.query) response = self.__fetch_query.fetch('keyword', query, page=query_message.page) entries = self.__parse_query.parse(response) if self.encryption: return AES._aes_encrypt_and_encode(aes_key, Serialization.serialize_sendqueryresponse(entries)) return base64.b64encode(Serialization.serialize_sendqueryresponse(entries))
def fetch(self, user_id, query, page): if self.encryption: query = AES._aes_encrypt_and_encode(self.aes_key, query) encoded = Serialization.serialize_sendquery(user_id, query, page) response = self.__post('query', encoded, aes_encrypt=self.encryption) return Serialization.deserialize_sendqueryresponse(response)