|
@@ -29,7 +29,7 @@ from twisted.internet import defer
|
|
|
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
|
|
@@ -872,9 +872,23 @@ class RoomMemberHandler(object):
|
|
|
"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", [])
|