diff --git a/synapse/handlers/room_member.py b/synapse/handlers/room_member.py
index 4d6e883802..b050967b8f 100644
--- a/synapse/handlers/room_member.py
+++ b/synapse/handlers/room_member.py
@@ -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
@@ -904,9 +904,22 @@ class RoomMemberHandler(object):
}
)
- 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", [])
|