示例#1
0
 def rpc_follow(self, sender, proto, signature):
     self.log.info("received follow request from %s" % sender)
     self.router.addContact(sender)
     try:
         verify_key = nacl.signing.VerifyKey(sender.signed_pubkey[64:])
         verify_key.verify(proto, signature)
         f = Followers.Follower()
         f.ParseFromString(proto)
         if f.guid != sender.id:
             raise Exception('GUID does not match sending node')
         if f.following != self.node.id:
             raise Exception('Following wrong node')
         f.signature = signature
         self.db.FollowData().set_follower(f)
         proto = Profile(self.db).get(False)
         m = Metadata()
         m.name = proto.name
         m.handle = proto.handle
         m.avatar_hash = proto.avatar_hash
         m.nsfw = proto.nsfw
         for listener in self.listeners:
             try:
                 verifyObject(NotificationListener, listener)
                 listener.notify(sender.id, f.metadata.handle, "follow", "", "", f.metadata.avatar_hash)
             except DoesNotImplement:
                 pass
         return ["True", m.SerializeToString(), self.signing_key.sign(m.SerializeToString())[:64]]
     except Exception:
         self.log.warning("failed to validate follower")
         return ["False"]
示例#2
0
 def rpc_follow(self, sender, proto, signature):
     self.log.info("received follow request from %s" % sender)
     self.router.addContact(sender)
     try:
         verify_key = nacl.signing.VerifyKey(sender.pubkey)
         verify_key.verify(proto, signature)
         f = Followers.Follower()
         f.ParseFromString(proto)
         if f.guid != sender.id:
             raise Exception('GUID does not match sending node')
         if f.following != self.node.id:
             raise Exception('Following wrong node')
         f.signature = signature
         self.db.follow.set_follower(f)
         proto = Profile(self.db).get(False)
         m = 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
         for listener in self.listeners:
             try:
                 verifyObject(NotificationListener, listener)
                 listener.notify(sender.id, f.metadata.handle, "follow", "", "", f.metadata.avatar_hash)
             except DoesNotImplement:
                 pass
         return ["True", m.SerializeToString(), self.signing_key.sign(m.SerializeToString())[:64]]
     except Exception:
         self.log.warning("failed to validate follower")
         return ["False"]
示例#3
0
 def rpc_follow(self, sender, proto, signature):
     self.log.info("Follow request from %s" % sender.id.encode("hex"))
     self.router.addContact(sender)
     try:
         verify_key = nacl.signing.VerifyKey(sender.signed_pubkey[64:])
         verify_key.verify(proto, signature)
         f = Followers.Follower()
         f.ParseFromString(proto)
         if f.guid != sender.id:
             raise Exception('GUID does not match sending node')
         if f.following != self.proto.guid:
             raise Exception('Following wrong node')
         f.signature = signature
         FollowData().set_follower(f)
         proto = Profile().get(False)
         m = Metadata()
         m.name = proto.name
         m.handle = proto.handle
         m.avatar_hash = proto.avatar_hash
         m.nsfw = proto.nsfw
         return [
             "True",
             m.SerializeToString(),
             self.signing_key.sign(m.SerializeToString())[:64]
         ]
     except Exception:
         self.log.warning("Failed to validate follower")
         return ["False"]
示例#4
0
 def rpc_get_user_metadata(self, sender):
     self.log.info("Fetching metadata")
     self.router.addContact(sender)
     try:
         proto = Profile().get(False)
         m = Metadata()
         m.name = proto.name
         m.handle = proto.handle
         m.avatar_hash = proto.avatar_hash
         m.nsfw = proto.nsfw
         return [m.SerializeToString(), self.signing_key.sign(m.SerializeToString())[:64]]
     except Exception:
         self.log.error("Unable to get the profile metadata")
         return ["None"]
示例#5
0
    def setUp(self):

        self.db = Database(filepath="test.db")
        self.test_hash = "87e0555568bf5c7e4debd6645fc3f41e88df6ca8"
        self.test_hash2 = "97e0555568bf5c7e4debd6645fc3f41e88df6ca8"
        self.test_file = "Contents of test.txt"
        self.test_file2 = "Contents of test2.txt"

        self.sp = Profile()
        self.key = Profile().PublicKey()
        self.key.public_key = "Key"
        self.key.signature = "Sig"
        self.sp.name = "Test User"
        self.sp.guid_key.MergeFrom(self.key)
        self.sp.location = CountryCode.Value('UNITED_STATES')

        self.serialized_listings = Listings()
        self.lm = self.serialized_listings.ListingMetadata()
        self.lm.contract_hash = self.test_hash
        self.lm.title = "TEST CONTRACT TITLE"
        self.lm.price = 0
        self.lm.currency_code = "USD"
        self.lm.nsfw = False
        self.lm.origin = CountryCode.Value('ALL')

        self.u = Following.User()
        self.u.guid = '0000000000000000000000000000000000'
        self.u.pubkey = 'signed_pubkey'

        self.m = Metadata()
        self.m.name = 'Test User'
        self.m.handle = '@TestUser'
        self.m.avatar_hash = ''
        self.m.nsfw = False
        self.u.metadata.MergeFrom(self.m)

        self.f = Followers.Follower()
        self.f.guid = '0000000000000000000000000000000001'
        self.f.following = ''
        self.f.pubkey = ''
        self.f.metadata.MergeFrom(self.m)

        self.hm = self.db.filemap
        self.hm.delete_all()

        self.ps = self.db.profile
        self.ls = self.db.listings
        self.ks = self.db.keys
        self.fd = self.db.follow
        self.ms = self.db.messages
        self.ns = self.db.notifications
        self.vs = self.db.vendors
        self.bs = self.db.broadcasts
        self.moderators = self.db.moderators
        self.purchases = self.db.purchases
        self.sales = self.db.sales
        self.settings = self.db.settings
示例#6
0
 def rpc_get_user_metadata(self, sender):
     self.log.info("serving user metadata to %s" % sender)
     self.router.addContact(sender)
     try:
         proto = Profile(self.db).get(False)
         m = Metadata()
         m.name = proto.name
         m.handle = proto.handle
         m.short_description = proto.short_description
         m.avatar_hash = proto.avatar_hash
         m.nsfw = proto.nsfw
         return [m.SerializeToString(), self.signing_key.sign(m.SerializeToString())[:64]]
     except Exception:
         self.log.error("unable to load profile metadata")
         return None
    def rpc_follow(self, sender, proto, signature):
        self.log.info("received follow request from %s" % sender)
        self.router.addContact(sender)
        try:
            verify_key = nacl.signing.VerifyKey(sender.pubkey)
            verify_key.verify(proto, signature)
            f = Followers.Follower()
            f.ParseFromString(proto)
            if f.guid != sender.id:
                raise Exception('GUID does not match sending node')
            if f.following != self.node.id:
                raise Exception('Following wrong node')
            f.signature = signature
            self.db.follow.set_follower(f.SerializeToString())
            proto = Profile(self.db).get(False)
            m = 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
            for listener in self.listeners:
                try:
                    verifyObject(NotificationListener, listener)
                    listener.notify(sender.id, f.metadata.handle, "follow", "",
                                    "", f.metadata.avatar_hash)
                except DoesNotImplement:
                    pass

            # Send SMTP notification
            notification = SMTPNotification(self.db)
            notification.send(
                "[OpenBazaar] %s is now following you!" % f.metadata.name,
                "You have a new follower:<br><br>Name: %s<br>GUID: <a href=\"ob://%s\">%s</a><br>"
                "Handle: %s" % (f.metadata.name, f.guid.encode('hex'),
                                f.guid.encode('hex'), f.metadata.handle))

            return [
                "True",
                m.SerializeToString(),
                self.signing_key.sign(m.SerializeToString())[:64]
            ]
        except Exception:
            self.log.warning("failed to validate follower")
            return ["False"]
示例#8
0
 def rpc_follow(self, sender, proto, signature):
     self.log.info("Follow request from %s" % sender.id.encode("hex"))
     self.router.addContact(sender)
     try:
         verify_key = nacl.signing.VerifyKey(sender.signed_pubkey[64:])
         verify_key.verify(proto, signature)
         f = Followers.Follower()
         f.ParseFromString(proto)
         if f.guid != sender.id:
             raise Exception('GUID does not match sending node')
         if f.following != self.proto.guid:
             raise Exception('Following wrong node')
         f.signature = signature
         FollowData().set_follower(f)
         proto = Profile().get(False)
         m = Metadata()
         m.name = proto.name
         m.handle = proto.handle
         m.avatar_hash = proto.avatar_hash
         m.nsfw = proto.nsfw
         return ["True", m.SerializeToString(), self.signing_key.sign(m.SerializeToString())[:64]]
     except Exception:
         self.log.warning("Failed to validate follower")
         return ["False"]
示例#9
0
 def rpc_get_user_metadata(self, sender):
     self.log.info("Fetching metadata")
     self.router.addContact(sender)
     try:
         proto = Profile().get(False)
         m = Metadata()
         m.name = proto.name
         m.handle = proto.handle
         m.avatar_hash = proto.avatar_hash
         m.nsfw = proto.nsfw
         return [
             m.SerializeToString(),
             self.signing_key.sign(m.SerializeToString())[:64]
         ]
     except Exception:
         self.log.error("Unable to get the profile metadata")
         return ["None"]
示例#10
0
 def rpc_get_user_metadata(self, sender):
     self.log.info("serving user metadata to %s" % sender)
     self.router.addContact(sender)
     try:
         proto = Profile(self.db).get(False)
         m = Metadata()
         m.name = proto.name
         m.handle = proto.handle
         m.short_description = proto.short_description
         m.avatar_hash = proto.avatar_hash
         m.nsfw = proto.nsfw
         return [m.SerializeToString(), self.signing_key.sign(m.SerializeToString())[:64]]
     except Exception:
         self.log.error("unable to load profile metadata")
         return None
示例#11
0
    def rpc_follow(self, sender, proto, signature):
        self.log.info("received follow request from %s" % sender)
        self.router.addContact(sender)
        try:
            verify_key = nacl.signing.VerifyKey(sender.pubkey)
            verify_key.verify(proto, signature)
            f = Followers.Follower()
            f.ParseFromString(proto)
            if f.guid != sender.id:
                raise Exception("GUID does not match sending node")
            if f.following != self.node.id:
                raise Exception("Following wrong node")
            f.signature = signature
            self.db.follow.set_follower(f.SerializeToString())
            proto = Profile(self.db).get(False)
            m = 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
            for listener in self.listeners:
                try:
                    verifyObject(NotificationListener, listener)
                    listener.notify(sender.id, f.metadata.handle, "follow", "", "", f.metadata.avatar_hash)
                except DoesNotImplement:
                    pass

            # Send SMTP notification
            notification = SMTPNotification(self.db)
            notification.send(
                "[OpenBazaar] %s is now following you!" % f.metadata.name,
                'You have a new follower:<br><br>Name: %s<br>GUID: <a href="ob://%s">%s</a><br>'
                "Handle: %s" % (f.metadata.name, f.guid.encode("hex"), f.guid.encode("hex"), f.metadata.handle),
            )

            return ["True", m.SerializeToString(), self.signing_key.sign(m.SerializeToString())[:64]]
        except Exception:
            self.log.warning("failed to validate follower")
            return ["False"]