mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-05-03 00:54:47 -04:00
Move logic into handler
This commit is contained in:
parent
b68db61222
commit
14edea1aff
2 changed files with 150 additions and 115 deletions
|
@ -547,6 +547,138 @@ class RoomMemberHandler(BaseHandler):
|
|||
suppress_auth=(not do_auth),
|
||||
)
|
||||
|
||||
@defer.inlineCallbacks
|
||||
def do_3pid_invite(
|
||||
self,
|
||||
room_id,
|
||||
inviter,
|
||||
medium,
|
||||
address,
|
||||
id_server,
|
||||
display_name,
|
||||
token_id,
|
||||
txn_id
|
||||
):
|
||||
invitee = yield self._lookup_3pid(
|
||||
id_server, medium, address
|
||||
)
|
||||
|
||||
if invitee:
|
||||
# make sure it looks like a user ID; it'll throw if it's invalid.
|
||||
UserID.from_string(invitee)
|
||||
yield self.handlers.message_handler.create_and_send_event(
|
||||
{
|
||||
"type": EventTypes.Member,
|
||||
"content": {
|
||||
"membership": unicode("invite")
|
||||
},
|
||||
"room_id": room_id,
|
||||
"sender": inviter.to_string(),
|
||||
"state_key": invitee,
|
||||
},
|
||||
token_id=token_id,
|
||||
txn_id=txn_id,
|
||||
)
|
||||
else:
|
||||
yield self._make_and_store_3pid_invite(
|
||||
id_server,
|
||||
display_name,
|
||||
medium,
|
||||
address,
|
||||
room_id,
|
||||
inviter,
|
||||
token_id,
|
||||
txn_id=txn_id
|
||||
)
|
||||
|
||||
@defer.inlineCallbacks
|
||||
def _lookup_3pid(self, id_server, medium, address):
|
||||
"""Looks up a 3pid in the passed identity server.
|
||||
|
||||
Args:
|
||||
id_server (str): The server name (including port, if required)
|
||||
of the identity server to use.
|
||||
medium (str): The type of the third party identifier (e.g. "email").
|
||||
address (str): The third party identifier (e.g. "foo@example.com").
|
||||
|
||||
Returns:
|
||||
(str) the matrix ID of the 3pid, or None if it is not recognized.
|
||||
"""
|
||||
try:
|
||||
data = yield self.hs.get_simple_http_client().get_json(
|
||||
"https://%s/_matrix/identity/api/v1/lookup" % (id_server,),
|
||||
{
|
||||
"medium": medium,
|
||||
"address": address,
|
||||
}
|
||||
)
|
||||
|
||||
if "mxid" in data:
|
||||
# TODO: Validate the response signature and such
|
||||
defer.returnValue(data["mxid"])
|
||||
except IOError as e:
|
||||
logger.warn("Error from identity server lookup: %s" % (e,))
|
||||
defer.returnValue(None)
|
||||
|
||||
@defer.inlineCallbacks
|
||||
def _make_and_store_3pid_invite(
|
||||
self,
|
||||
id_server,
|
||||
display_name,
|
||||
medium,
|
||||
address,
|
||||
room_id,
|
||||
user,
|
||||
token_id,
|
||||
txn_id
|
||||
):
|
||||
token, public_key, key_validity_url = (
|
||||
yield self._ask_id_server_for_third_party_invite(
|
||||
id_server,
|
||||
medium,
|
||||
address,
|
||||
room_id,
|
||||
user.to_string()
|
||||
)
|
||||
)
|
||||
msg_handler = self.handlers.message_handler
|
||||
yield msg_handler.create_and_send_event(
|
||||
{
|
||||
"type": EventTypes.ThirdPartyInvite,
|
||||
"content": {
|
||||
"display_name": display_name,
|
||||
"key_validity_url": key_validity_url,
|
||||
"public_key": public_key,
|
||||
},
|
||||
"room_id": room_id,
|
||||
"sender": user.to_string(),
|
||||
"state_key": token,
|
||||
},
|
||||
token_id=token_id,
|
||||
txn_id=txn_id,
|
||||
)
|
||||
|
||||
@defer.inlineCallbacks
|
||||
def _ask_id_server_for_third_party_invite(
|
||||
self, id_server, medium, address, room_id, sender):
|
||||
is_url = "https://%s/_matrix/identity/api/v1/nonce-it-up" % (id_server,)
|
||||
data = yield self.hs.get_simple_http_client().post_urlencoded_get_json(
|
||||
is_url,
|
||||
{
|
||||
"medium": medium,
|
||||
"address": address,
|
||||
"room_id": room_id,
|
||||
"sender": sender,
|
||||
}
|
||||
)
|
||||
# TODO: Check for success
|
||||
token = data["token"]
|
||||
public_key = data["public_key"]
|
||||
key_validity_url = "https://%s/_matrix/identity/api/v1/pubkey/isvalid" % (
|
||||
id_server,
|
||||
)
|
||||
defer.returnValue((token, public_key, key_validity_url))
|
||||
|
||||
|
||||
class RoomListHandler(BaseHandler):
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue