def get_result(result): try: verify_key = nacl.signing.VerifyKey(node_to_ask.pubkey) verify_key.verify(result[1][0], result[1][1]) m = objects.Metadata() m.ParseFromString(result[1][0]) if not os.path.isfile(DATA_FOLDER + 'cache/' + m.avatar_hash.encode("hex")): self.get_image(node_to_ask, m.avatar_hash) return m except Exception: return None
def follow(self, node_to_follow): """ Sends a follow message to another node in the network. The node must be online to receive the message. The message contains a signed, serialized `Follower` protobuf object which the recipient will store and can send to other nodes, proving you are following them. The response is a signed `Metadata` protobuf that will store in the db. """ def save_to_db(result): if result[0] and result[1][0] == "True": try: u = objects.Following.User() u.guid = node_to_follow.id u.signed_pubkey = node_to_follow.signed_pubkey m = objects.Metadata() m.ParseFromString(result[1][1]) u.metadata.MergeFrom(m) u.signature = result[1][2] pubkey = node_to_follow.signed_pubkey[64:] verify_key = nacl.signing.VerifyKey(pubkey) verify_key.verify(result[1][1], result[1][2]) self.db.FollowData().follow(u) return True except Exception: return False else: return False proto = Profile(self.db).get(False) m = objects.Metadata() m.name = proto.name m.handle = proto.handle m.avatar_hash = proto.avatar_hash m.short_description = proto.short_description m.nsfw = proto.nsfw f = objects.Followers.Follower() f.guid = self.kserver.node.id f.following = node_to_follow.id f.signed_pubkey = self.kserver.node.signed_pubkey f.metadata.MergeFrom(m) signature = self.signing_key.sign(f.SerializeToString())[:64] d = self.protocol.callFollow(node_to_follow, f.SerializeToString(), signature) self.log.info("sending follow request to %s" % node_to_follow) return d.addCallback(save_to_db)
def save_to_db(result): if result[0] and result[1][0] == "True": try: u = objects.Following.User() u.guid = node_to_follow.id u.pubkey = node_to_follow.pubkey m = objects.Metadata() m.ParseFromString(result[1][1]) u.metadata.MergeFrom(m) u.signature = result[1][2] verify_key = nacl.signing.VerifyKey(node_to_follow.pubkey) verify_key.verify(result[1][1], result[1][2]) self.db.FollowData().follow(u) return True except Exception: return False else: return False