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