コード例 #1
0
 def delete_follower(self, guid):
     cursor = self.db.cursor()
     f = Followers()
     ser = self.get_followers()
     if ser is not None:
         f.ParseFromString(ser)
         for follower in f.followers:
             if follower.guid == guid:
                 f.followers.remove(follower)
     cursor.execute('''INSERT OR REPLACE INTO followers(id, serializedFollowers) VALUES (?,?)''',
                    (1, f.SerializeToString()))
     self.db.commit()
コード例 #2
0
 def set_follower(self, proto):
     cursor = self.db.cursor()
     f = Followers()
     ser = self.get_followers()
     if ser is not None:
         for follower in f.followers:
             if follower.guid == proto.guid:
                 f.followers.remove(follower)
     f.followers.extend([proto])
     cursor.execute('''INSERT OR REPLACE INTO followers(id, serializedFollowers) VALUES (?,?)''',
                    (1, f.SerializeToString()))
     self.db.commit()
コード例 #3
0
 def set_follower(self, proto):
     conn = Database.connect_database(self.PATH)
     with conn:
         cursor = conn.cursor()
         f = Followers()
         ser = self.get_followers()
         if ser is not None:
             f.ParseFromString(ser)
             for follower in f.followers:
                 if follower.guid == proto.guid:
                     f.followers.remove(follower)
         f.followers.extend([proto])
         cursor.execute('''INSERT OR REPLACE INTO followers(id, serializedFollowers) VALUES (?,?)''',
                        (1, f.SerializeToString()))
         conn.commit()
     conn.close()
コード例 #4
0
ファイル: protocol.py プロジェクト: eXcomm/OpenBazaar-Server
 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"]
コード例 #5
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"]
コード例 #6
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
コード例 #7
0
    def get_followers(self, start=0):
        conn = Database.connect_database(self.PATH)
        cursor = conn.cursor()

        cursor.execute('''SELECT Count(*) FROM followers''')
        count = cursor.fetchone()[0]

        f = Followers()
        if count > 0:
            smt = '''select serializedFollower from followers order by rowid desc limit 30 offset ''' + str(start)
            cursor.execute(smt)
            serialized_followers = cursor.fetchall()
            conn.close()
            for proto in serialized_followers:
                p = Followers.Follower()
                p.ParseFromString(proto[0].decode("hex"))
                f.followers.extend([p])
        return (f.SerializeToString(), count)
コード例 #8
0
 def set_follower(self, proto):
     conn = Database.connect_database(self.PATH)
     p = Followers.Follower()
     p.ParseFromString(proto)
     with conn:
         cursor = conn.cursor()
         cursor.execute('''INSERT OR REPLACE INTO followers(guid, serializedFollower) VALUES (?,?)''',
                        (p.guid.encode("hex"), proto.encode("hex")))
         conn.commit()
     conn.close()
コード例 #9
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"]