示例#1
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)))  
示例#2
0
 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))
示例#3
0
 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)