Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Commit

Permalink
Merge pull request #5638 from matrix-org/babolivier/invite-json
Browse files Browse the repository at this point in the history
Use JSON when querying the IS's /store-invite endpoint
  • Loading branch information
babolivier authored Jul 9, 2019
2 parents 7b3bc75 + 57eacee commit 65434da
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 4 deletions.
1 change: 1 addition & 0 deletions changelog.d/5638.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix requests to the `/store_invite` endpoint of identity servers being sent in the wrong format.
22 changes: 18 additions & 4 deletions synapse/handlers/room_member.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
import synapse.server
import synapse.types
from synapse.api.constants import EventTypes, Membership
from synapse.api.errors import AuthError, Codes, SynapseError
from synapse.api.errors import AuthError, Codes, HttpResponseException, SynapseError
from synapse.types import RoomID, UserID
from synapse.util.async_helpers import Linearizer
from synapse.util.distributor import user_joined_room, user_left_room
Expand Down Expand Up @@ -872,9 +872,23 @@ def _ask_id_server_for_third_party_invite(
"sender_avatar_url": inviter_avatar_url,
}

data = yield self.simple_http_client.post_urlencoded_get_json(
is_url, invite_config
)
try:
data = yield self.simple_http_client.post_json_get_json(
is_url, invite_config
)
except HttpResponseException as e:
# Some identity servers may only support application/x-www-form-urlencoded
# types. This is especially true with old instances of Sydent, see
# https://github.com/matrix-org/sydent/pull/170
logger.info(
"Failed to POST %s with JSON, falling back to urlencoded form: %s",
is_url,
e,
)
data = yield self.simple_http_client.post_urlencoded_get_json(
is_url, invite_config
)

# TODO: Check for success
token = data["token"]
public_keys = data.get("public_keys", [])
Expand Down

0 comments on commit 65434da

Please sign in to comment.