示例#1
0
 def get_following_from_vendors(vendors):
     follow_data = self.factory.mserver.db.follow.get_following()
     following_guids = []
     if follow_data is not None:
         f = objects.Following()
         f.ParseFromString(follow_data)
         for user in f.users:
             following_guids.append(user.guid)
     vendor_list = []
     for k, v in vendors.items():
         if k in following_guids:
             vendor_list.append(v)
     return vendor_list
示例#2
0
    def get_following(self, request):
        def parse_following(following):
            if following is not None:
                response = {"following": []}
                for f in following.users:
                    user_json = {
                        "guid": f.guid.encode("hex"),
                        "handle": f.metadata.handle,
                        "name": f.metadata.name,
                        "avatar_hash": f.metadata.avatar_hash.encode("hex"),
                        "nsfw": f.metadata.nsfw
                    }
                    response["following"].append(user_json)
                request.setHeader('content-type', "application/json")
                request.write(json.dumps(response, indent=4))
                request.finish()
            else:
                request.write(json.dumps({}))
                request.finish()

        if "guid" in request.args:

            def get_node(node):
                if node is not None:
                    self.mserver.get_following(node).addCallback(
                        parse_following)
                else:
                    request.write(json.dumps({}))
                    request.finish()

            self.kserver.resolve(unhexlify(
                request.args["guid"][0])).addCallback(get_node)
        else:
            ser = self.db.FollowData().get_following()
            if ser is not None:
                f = objects.Following()
                f.ParseFromString(ser)
                parse_following(f)
            else:
                parse_following(None)
        return server.NOT_DONE_YET
示例#3
0
 def get_response(response):
     # Verify the signature on the response
     f = objects.Following()
     try:
         verify_key = nacl.signing.VerifyKey(node_to_ask.pubkey)
         verify_key.verify(response[1][0], response[1][1])
         f.ParseFromString(response[1][0])
     except Exception:
         return None
     for user in f.users:
         try:
             v_key = nacl.signing.VerifyKey(user.pubkey)
             signature = user.signature
             v_key.verify(user.metadata.SerializeToString(), signature)
             h = nacl.hash.sha512(user.pubkey)
             pow_hash = h[40:]
             if int(pow_hash[:6], 16) >= 50 or user.guid.encode("hex") != h[:40]:
                 raise Exception('Invalid GUID')
         except Exception:
             f.users.remove(user)
     return f