def _notify(self, assoc, attempt): """ Sends data about a new association (and, if necessary, the associated invites) to the associated MXID's homeserver. :param assoc: The association to send down to the homeserver. :type assoc: dict[str, any] :param attempt: The number of previous attempts to send this association. :type attempt: int """ mxid = assoc["mxid"] mxid_parts = mxid.split(":", 1) if len(mxid_parts) != 2: logger.error( "Can't notify on bind for unparseable mxid %s. Not retrying.", assoc["mxid"], ) return post_url = "matrix://%s/_matrix/federation/v1/3pid/onbind" % ( mxid_parts[1], ) logger.info("Making bind callback to: %s", post_url) # Make a POST to the chosen Synapse server http_client = FederationHttpClient(self.sydent) try: response = yield http_client.post_json_get_nothing( post_url, assoc, {}) except Exception as e: self._notifyErrback(assoc, attempt, e) return # If the request failed, try again with exponential backoff if response.code != 200: self._notifyErrback( assoc, attempt, "Non-OK error code received (%d)" % response.code) else: logger.info("Successfully notified on bind for %s" % (mxid, )) # Skip the deletion step if instructed so by the config. if not self.sydent.delete_tokens_on_bind: return # 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 _notify(self, assoc, attempt): mxid = assoc["mxid"] mxid_parts = mxid.split(":", 1) if len(mxid_parts) != 2: logger.error( "Can't notify on bind for unparseable mxid %s. Not retrying.", assoc["mxid"], ) return post_url = "matrix://%s/_matrix/federation/v1/3pid/onbind" % ( mxid_parts[1], ) logger.info("Making bind callback to: %s", post_url) # Make a POST to the chosen Synapse server http_client = FederationHttpClient(self.sydent) try: response = yield http_client.post_json_get_nothing( post_url, assoc, {}) except Exception as e: self._notifyErrback(assoc, attempt, e) return # If the request failed, try again with exponential backoff if response.code != 200: self._notifyErrback( assoc, attempt, "Non-OK error code received (%d)" % response.code) 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"], )