Parcourir la source

Merge pull request #174 from matrix-org/babolivier/delete-sent-invites

Delete 3PID invite medatata upon successful delivery to a homeserver
Brendan Abolivier il y a 4 ans
Parent
commit
7c6cf109a9
2 fichiers modifiés avec 24 ajouts et 0 suppressions
  1. 10 0
      sydent/db/invite_tokens.py
  2. 14 0
      sydent/threepid/bind.py

+ 10 - 0
sydent/db/invite_tokens.py

@@ -93,3 +93,13 @@ class JoinTokenStore(object):
         if rows:
             return rows[0][0]
         return None
+
+    def deleteTokens(self, medium, address):
+        cur = self.sydent.db.cursor()
+
+        cur.execute(
+            "DELETE FROM invite_tokens WHERE medium = ? AND address = ?",
+            (medium, address,)
+        )
+
+        self.sydent.db.commit()

+ 14 - 0
sydent/threepid/bind.py

@@ -125,6 +125,20 @@ class ThreepidBinder:
         else:
             logger.info("Successfully notified on bind for %s" % (mxid,))
 
+            # Only remove sent tokens when they've been successfully sent.
+            try:
+                joinTokenStore = JoinTokenStore(self.sydent)
+                joinTokenStore.deleteTokens(assoc["medium"], assoc["address"])
+                logger.info(
+                    "Successfully deleted invite for %s from the store",
+                    assoc["address"],
+                )
+            except Exception as e:
+                logger.exception(
+                    "Couldn't remove invite for %s from the store",
+                    assoc["address"],
+                )
+
     def _notifyErrback(self, assoc, attempt, error):
         logger.warn("Error notifying on bind for %s: %s - rescheduling", assoc["mxid"], error)
         reactor.callLater(math.pow(2, attempt), self._notify, assoc, attempt + 1)