mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2024-10-01 11:49:51 -04:00
Add SSO external_ids
to Query User Account admin API (#10261)
Related to #10251
This commit is contained in:
parent
76addadd7c
commit
6c02cca95f
1
changelog.d/10261.feature
Normal file
1
changelog.d/10261.feature
Normal file
@ -0,0 +1 @@
|
|||||||
|
Add SSO `external_ids` to the Query User Account admin API.
|
@ -36,7 +36,17 @@ It returns a JSON body like the following:
|
|||||||
"creation_ts": 1560432506,
|
"creation_ts": 1560432506,
|
||||||
"appservice_id": null,
|
"appservice_id": null,
|
||||||
"consent_server_notice_sent": null,
|
"consent_server_notice_sent": null,
|
||||||
"consent_version": null
|
"consent_version": null,
|
||||||
|
"external_ids": [
|
||||||
|
{
|
||||||
|
"auth_provider": "<provider1>",
|
||||||
|
"external_id": "<user_id_provider_1>"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"auth_provider": "<provider2>",
|
||||||
|
"external_id": "<user_id_provider_2>"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -62,9 +62,16 @@ class AdminHandler(BaseHandler):
|
|||||||
if ret:
|
if ret:
|
||||||
profile = await self.store.get_profileinfo(user.localpart)
|
profile = await self.store.get_profileinfo(user.localpart)
|
||||||
threepids = await self.store.user_get_threepids(user.to_string())
|
threepids = await self.store.user_get_threepids(user.to_string())
|
||||||
|
external_ids = [
|
||||||
|
({"auth_provider": auth_provider, "external_id": external_id})
|
||||||
|
for auth_provider, external_id in await self.store.get_external_ids_by_user(
|
||||||
|
user.to_string()
|
||||||
|
)
|
||||||
|
]
|
||||||
ret["displayname"] = profile.display_name
|
ret["displayname"] = profile.display_name
|
||||||
ret["avatar_url"] = profile.avatar_url
|
ret["avatar_url"] = profile.avatar_url
|
||||||
ret["threepids"] = threepids
|
ret["threepids"] = threepids
|
||||||
|
ret["external_ids"] = external_ids
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
async def export_user_data(self, user_id: str, writer: "ExfiltrationWriter") -> Any:
|
async def export_user_data(self, user_id: str, writer: "ExfiltrationWriter") -> Any:
|
||||||
|
@ -1150,7 +1150,7 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
access_token=self.other_user_token,
|
access_token=self.other_user_token,
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertEqual(403, int(channel.result["code"]), msg=channel.result["body"])
|
self.assertEqual(403, channel.code, msg=channel.json_body)
|
||||||
self.assertEqual("You are not a server admin", channel.json_body["error"])
|
self.assertEqual("You are not a server admin", channel.json_body["error"])
|
||||||
|
|
||||||
channel = self.make_request(
|
channel = self.make_request(
|
||||||
@ -1160,7 +1160,7 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
content=b"{}",
|
content=b"{}",
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertEqual(403, int(channel.result["code"]), msg=channel.result["body"])
|
self.assertEqual(403, channel.code, msg=channel.json_body)
|
||||||
self.assertEqual("You are not a server admin", channel.json_body["error"])
|
self.assertEqual("You are not a server admin", channel.json_body["error"])
|
||||||
|
|
||||||
def test_user_does_not_exist(self):
|
def test_user_does_not_exist(self):
|
||||||
@ -1177,6 +1177,58 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
self.assertEqual(404, channel.code, msg=channel.json_body)
|
self.assertEqual(404, channel.code, msg=channel.json_body)
|
||||||
self.assertEqual("M_NOT_FOUND", channel.json_body["errcode"])
|
self.assertEqual("M_NOT_FOUND", channel.json_body["errcode"])
|
||||||
|
|
||||||
|
def test_get_user(self):
|
||||||
|
"""
|
||||||
|
Test a simple get of a user.
|
||||||
|
"""
|
||||||
|
channel = self.make_request(
|
||||||
|
"GET",
|
||||||
|
self.url_other_user,
|
||||||
|
access_token=self.admin_user_tok,
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertEqual(200, channel.code, msg=channel.json_body)
|
||||||
|
self.assertEqual("@user:test", channel.json_body["name"])
|
||||||
|
self.assertEqual("User", channel.json_body["displayname"])
|
||||||
|
self._check_fields(channel.json_body)
|
||||||
|
|
||||||
|
def test_get_user_with_sso(self):
|
||||||
|
"""
|
||||||
|
Test get a user with SSO details.
|
||||||
|
"""
|
||||||
|
self.get_success(
|
||||||
|
self.store.record_user_external_id(
|
||||||
|
"auth_provider1", "external_id1", self.other_user
|
||||||
|
)
|
||||||
|
)
|
||||||
|
self.get_success(
|
||||||
|
self.store.record_user_external_id(
|
||||||
|
"auth_provider2", "external_id2", self.other_user
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
channel = self.make_request(
|
||||||
|
"GET",
|
||||||
|
self.url_other_user,
|
||||||
|
access_token=self.admin_user_tok,
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertEqual(200, channel.code, msg=channel.json_body)
|
||||||
|
self.assertEqual("@user:test", channel.json_body["name"])
|
||||||
|
self.assertEqual(
|
||||||
|
"external_id1", channel.json_body["external_ids"][0]["external_id"]
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
"auth_provider1", channel.json_body["external_ids"][0]["auth_provider"]
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
"external_id2", channel.json_body["external_ids"][1]["external_id"]
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
"auth_provider2", channel.json_body["external_ids"][1]["auth_provider"]
|
||||||
|
)
|
||||||
|
self._check_fields(channel.json_body)
|
||||||
|
|
||||||
def test_create_server_admin(self):
|
def test_create_server_admin(self):
|
||||||
"""
|
"""
|
||||||
Check that a new admin user is created successfully.
|
Check that a new admin user is created successfully.
|
||||||
@ -1184,30 +1236,29 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
url = "/_synapse/admin/v2/users/@bob:test"
|
url = "/_synapse/admin/v2/users/@bob:test"
|
||||||
|
|
||||||
# Create user (server admin)
|
# Create user (server admin)
|
||||||
body = json.dumps(
|
body = {
|
||||||
{
|
"password": "abc123",
|
||||||
"password": "abc123",
|
"admin": True,
|
||||||
"admin": True,
|
"displayname": "Bob's name",
|
||||||
"displayname": "Bob's name",
|
"threepids": [{"medium": "email", "address": "bob@bob.bob"}],
|
||||||
"threepids": [{"medium": "email", "address": "bob@bob.bob"}],
|
"avatar_url": "mxc://fibble/wibble",
|
||||||
"avatar_url": "mxc://fibble/wibble",
|
}
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
channel = self.make_request(
|
channel = self.make_request(
|
||||||
"PUT",
|
"PUT",
|
||||||
url,
|
url,
|
||||||
access_token=self.admin_user_tok,
|
access_token=self.admin_user_tok,
|
||||||
content=body.encode(encoding="utf_8"),
|
content=body,
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertEqual(201, int(channel.result["code"]), msg=channel.result["body"])
|
self.assertEqual(201, channel.code, msg=channel.json_body)
|
||||||
self.assertEqual("@bob:test", channel.json_body["name"])
|
self.assertEqual("@bob:test", channel.json_body["name"])
|
||||||
self.assertEqual("Bob's name", channel.json_body["displayname"])
|
self.assertEqual("Bob's name", channel.json_body["displayname"])
|
||||||
self.assertEqual("email", channel.json_body["threepids"][0]["medium"])
|
self.assertEqual("email", channel.json_body["threepids"][0]["medium"])
|
||||||
self.assertEqual("bob@bob.bob", channel.json_body["threepids"][0]["address"])
|
self.assertEqual("bob@bob.bob", channel.json_body["threepids"][0]["address"])
|
||||||
self.assertTrue(channel.json_body["admin"])
|
self.assertTrue(channel.json_body["admin"])
|
||||||
self.assertEqual("mxc://fibble/wibble", channel.json_body["avatar_url"])
|
self.assertEqual("mxc://fibble/wibble", channel.json_body["avatar_url"])
|
||||||
|
self._check_fields(channel.json_body)
|
||||||
|
|
||||||
# Get user
|
# Get user
|
||||||
channel = self.make_request(
|
channel = self.make_request(
|
||||||
@ -1216,7 +1267,7 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
access_token=self.admin_user_tok,
|
access_token=self.admin_user_tok,
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertEqual(200, int(channel.result["code"]), msg=channel.result["body"])
|
self.assertEqual(200, channel.code, msg=channel.json_body)
|
||||||
self.assertEqual("@bob:test", channel.json_body["name"])
|
self.assertEqual("@bob:test", channel.json_body["name"])
|
||||||
self.assertEqual("Bob's name", channel.json_body["displayname"])
|
self.assertEqual("Bob's name", channel.json_body["displayname"])
|
||||||
self.assertEqual("email", channel.json_body["threepids"][0]["medium"])
|
self.assertEqual("email", channel.json_body["threepids"][0]["medium"])
|
||||||
@ -1225,6 +1276,7 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
self.assertFalse(channel.json_body["is_guest"])
|
self.assertFalse(channel.json_body["is_guest"])
|
||||||
self.assertFalse(channel.json_body["deactivated"])
|
self.assertFalse(channel.json_body["deactivated"])
|
||||||
self.assertEqual("mxc://fibble/wibble", channel.json_body["avatar_url"])
|
self.assertEqual("mxc://fibble/wibble", channel.json_body["avatar_url"])
|
||||||
|
self._check_fields(channel.json_body)
|
||||||
|
|
||||||
def test_create_user(self):
|
def test_create_user(self):
|
||||||
"""
|
"""
|
||||||
@ -1233,30 +1285,29 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
url = "/_synapse/admin/v2/users/@bob:test"
|
url = "/_synapse/admin/v2/users/@bob:test"
|
||||||
|
|
||||||
# Create user
|
# Create user
|
||||||
body = json.dumps(
|
body = {
|
||||||
{
|
"password": "abc123",
|
||||||
"password": "abc123",
|
"admin": False,
|
||||||
"admin": False,
|
"displayname": "Bob's name",
|
||||||
"displayname": "Bob's name",
|
"threepids": [{"medium": "email", "address": "bob@bob.bob"}],
|
||||||
"threepids": [{"medium": "email", "address": "bob@bob.bob"}],
|
"avatar_url": "mxc://fibble/wibble",
|
||||||
"avatar_url": "mxc://fibble/wibble",
|
}
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
channel = self.make_request(
|
channel = self.make_request(
|
||||||
"PUT",
|
"PUT",
|
||||||
url,
|
url,
|
||||||
access_token=self.admin_user_tok,
|
access_token=self.admin_user_tok,
|
||||||
content=body.encode(encoding="utf_8"),
|
content=body,
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertEqual(201, int(channel.result["code"]), msg=channel.result["body"])
|
self.assertEqual(201, channel.code, msg=channel.json_body)
|
||||||
self.assertEqual("@bob:test", channel.json_body["name"])
|
self.assertEqual("@bob:test", channel.json_body["name"])
|
||||||
self.assertEqual("Bob's name", channel.json_body["displayname"])
|
self.assertEqual("Bob's name", channel.json_body["displayname"])
|
||||||
self.assertEqual("email", channel.json_body["threepids"][0]["medium"])
|
self.assertEqual("email", channel.json_body["threepids"][0]["medium"])
|
||||||
self.assertEqual("bob@bob.bob", channel.json_body["threepids"][0]["address"])
|
self.assertEqual("bob@bob.bob", channel.json_body["threepids"][0]["address"])
|
||||||
self.assertFalse(channel.json_body["admin"])
|
self.assertFalse(channel.json_body["admin"])
|
||||||
self.assertEqual("mxc://fibble/wibble", channel.json_body["avatar_url"])
|
self.assertEqual("mxc://fibble/wibble", channel.json_body["avatar_url"])
|
||||||
|
self._check_fields(channel.json_body)
|
||||||
|
|
||||||
# Get user
|
# Get user
|
||||||
channel = self.make_request(
|
channel = self.make_request(
|
||||||
@ -1265,7 +1316,7 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
access_token=self.admin_user_tok,
|
access_token=self.admin_user_tok,
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertEqual(200, int(channel.result["code"]), msg=channel.result["body"])
|
self.assertEqual(200, channel.code, msg=channel.json_body)
|
||||||
self.assertEqual("@bob:test", channel.json_body["name"])
|
self.assertEqual("@bob:test", channel.json_body["name"])
|
||||||
self.assertEqual("Bob's name", channel.json_body["displayname"])
|
self.assertEqual("Bob's name", channel.json_body["displayname"])
|
||||||
self.assertEqual("email", channel.json_body["threepids"][0]["medium"])
|
self.assertEqual("email", channel.json_body["threepids"][0]["medium"])
|
||||||
@ -1275,6 +1326,7 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
self.assertFalse(channel.json_body["deactivated"])
|
self.assertFalse(channel.json_body["deactivated"])
|
||||||
self.assertFalse(channel.json_body["shadow_banned"])
|
self.assertFalse(channel.json_body["shadow_banned"])
|
||||||
self.assertEqual("mxc://fibble/wibble", channel.json_body["avatar_url"])
|
self.assertEqual("mxc://fibble/wibble", channel.json_body["avatar_url"])
|
||||||
|
self._check_fields(channel.json_body)
|
||||||
|
|
||||||
@override_config(
|
@override_config(
|
||||||
{"limit_usage_by_mau": True, "max_mau_value": 2, "mau_trial_days": 0}
|
{"limit_usage_by_mau": True, "max_mau_value": 2, "mau_trial_days": 0}
|
||||||
@ -1311,16 +1363,14 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
url = "/_synapse/admin/v2/users/@bob:test"
|
url = "/_synapse/admin/v2/users/@bob:test"
|
||||||
|
|
||||||
# Create user
|
# Create user
|
||||||
body = json.dumps({"password": "abc123", "admin": False})
|
|
||||||
|
|
||||||
channel = self.make_request(
|
channel = self.make_request(
|
||||||
"PUT",
|
"PUT",
|
||||||
url,
|
url,
|
||||||
access_token=self.admin_user_tok,
|
access_token=self.admin_user_tok,
|
||||||
content=body.encode(encoding="utf_8"),
|
content={"password": "abc123", "admin": False},
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertEqual(201, int(channel.result["code"]), msg=channel.result["body"])
|
self.assertEqual(201, channel.code, msg=channel.json_body)
|
||||||
self.assertEqual("@bob:test", channel.json_body["name"])
|
self.assertEqual("@bob:test", channel.json_body["name"])
|
||||||
self.assertFalse(channel.json_body["admin"])
|
self.assertFalse(channel.json_body["admin"])
|
||||||
|
|
||||||
@ -1350,17 +1400,15 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
url = "/_synapse/admin/v2/users/@bob:test"
|
url = "/_synapse/admin/v2/users/@bob:test"
|
||||||
|
|
||||||
# Create user
|
# Create user
|
||||||
body = json.dumps({"password": "abc123", "admin": False})
|
|
||||||
|
|
||||||
channel = self.make_request(
|
channel = self.make_request(
|
||||||
"PUT",
|
"PUT",
|
||||||
url,
|
url,
|
||||||
access_token=self.admin_user_tok,
|
access_token=self.admin_user_tok,
|
||||||
content=body.encode(encoding="utf_8"),
|
content={"password": "abc123", "admin": False},
|
||||||
)
|
)
|
||||||
|
|
||||||
# Admin user is not blocked by mau anymore
|
# Admin user is not blocked by mau anymore
|
||||||
self.assertEqual(201, int(channel.result["code"]), msg=channel.result["body"])
|
self.assertEqual(201, channel.code, msg=channel.json_body)
|
||||||
self.assertEqual("@bob:test", channel.json_body["name"])
|
self.assertEqual("@bob:test", channel.json_body["name"])
|
||||||
self.assertFalse(channel.json_body["admin"])
|
self.assertFalse(channel.json_body["admin"])
|
||||||
|
|
||||||
@ -1382,21 +1430,19 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
url = "/_synapse/admin/v2/users/@bob:test"
|
url = "/_synapse/admin/v2/users/@bob:test"
|
||||||
|
|
||||||
# Create user
|
# Create user
|
||||||
body = json.dumps(
|
body = {
|
||||||
{
|
"password": "abc123",
|
||||||
"password": "abc123",
|
"threepids": [{"medium": "email", "address": "bob@bob.bob"}],
|
||||||
"threepids": [{"medium": "email", "address": "bob@bob.bob"}],
|
}
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
channel = self.make_request(
|
channel = self.make_request(
|
||||||
"PUT",
|
"PUT",
|
||||||
url,
|
url,
|
||||||
access_token=self.admin_user_tok,
|
access_token=self.admin_user_tok,
|
||||||
content=body.encode(encoding="utf_8"),
|
content=body,
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertEqual(201, int(channel.result["code"]), msg=channel.result["body"])
|
self.assertEqual(201, channel.code, msg=channel.json_body)
|
||||||
self.assertEqual("@bob:test", channel.json_body["name"])
|
self.assertEqual("@bob:test", channel.json_body["name"])
|
||||||
self.assertEqual("email", channel.json_body["threepids"][0]["medium"])
|
self.assertEqual("email", channel.json_body["threepids"][0]["medium"])
|
||||||
self.assertEqual("bob@bob.bob", channel.json_body["threepids"][0]["address"])
|
self.assertEqual("bob@bob.bob", channel.json_body["threepids"][0]["address"])
|
||||||
@ -1426,21 +1472,19 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
url = "/_synapse/admin/v2/users/@bob:test"
|
url = "/_synapse/admin/v2/users/@bob:test"
|
||||||
|
|
||||||
# Create user
|
# Create user
|
||||||
body = json.dumps(
|
body = {
|
||||||
{
|
"password": "abc123",
|
||||||
"password": "abc123",
|
"threepids": [{"medium": "email", "address": "bob@bob.bob"}],
|
||||||
"threepids": [{"medium": "email", "address": "bob@bob.bob"}],
|
}
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
channel = self.make_request(
|
channel = self.make_request(
|
||||||
"PUT",
|
"PUT",
|
||||||
url,
|
url,
|
||||||
access_token=self.admin_user_tok,
|
access_token=self.admin_user_tok,
|
||||||
content=body.encode(encoding="utf_8"),
|
content=body,
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertEqual(201, int(channel.result["code"]), msg=channel.result["body"])
|
self.assertEqual(201, channel.code, msg=channel.json_body)
|
||||||
self.assertEqual("@bob:test", channel.json_body["name"])
|
self.assertEqual("@bob:test", channel.json_body["name"])
|
||||||
self.assertEqual("email", channel.json_body["threepids"][0]["medium"])
|
self.assertEqual("email", channel.json_body["threepids"][0]["medium"])
|
||||||
self.assertEqual("bob@bob.bob", channel.json_body["threepids"][0]["address"])
|
self.assertEqual("bob@bob.bob", channel.json_body["threepids"][0]["address"])
|
||||||
@ -1457,16 +1501,15 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
# Change password
|
# Change password
|
||||||
body = json.dumps({"password": "hahaha"})
|
|
||||||
|
|
||||||
channel = self.make_request(
|
channel = self.make_request(
|
||||||
"PUT",
|
"PUT",
|
||||||
self.url_other_user,
|
self.url_other_user,
|
||||||
access_token=self.admin_user_tok,
|
access_token=self.admin_user_tok,
|
||||||
content=body.encode(encoding="utf_8"),
|
content={"password": "hahaha"},
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertEqual(200, int(channel.result["code"]), msg=channel.result["body"])
|
self.assertEqual(200, channel.code, msg=channel.json_body)
|
||||||
|
self._check_fields(channel.json_body)
|
||||||
|
|
||||||
def test_set_displayname(self):
|
def test_set_displayname(self):
|
||||||
"""
|
"""
|
||||||
@ -1474,16 +1517,14 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
# Modify user
|
# Modify user
|
||||||
body = json.dumps({"displayname": "foobar"})
|
|
||||||
|
|
||||||
channel = self.make_request(
|
channel = self.make_request(
|
||||||
"PUT",
|
"PUT",
|
||||||
self.url_other_user,
|
self.url_other_user,
|
||||||
access_token=self.admin_user_tok,
|
access_token=self.admin_user_tok,
|
||||||
content=body.encode(encoding="utf_8"),
|
content={"displayname": "foobar"},
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertEqual(200, int(channel.result["code"]), msg=channel.result["body"])
|
self.assertEqual(200, channel.code, msg=channel.json_body)
|
||||||
self.assertEqual("@user:test", channel.json_body["name"])
|
self.assertEqual("@user:test", channel.json_body["name"])
|
||||||
self.assertEqual("foobar", channel.json_body["displayname"])
|
self.assertEqual("foobar", channel.json_body["displayname"])
|
||||||
|
|
||||||
@ -1494,7 +1535,7 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
access_token=self.admin_user_tok,
|
access_token=self.admin_user_tok,
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertEqual(200, int(channel.result["code"]), msg=channel.result["body"])
|
self.assertEqual(200, channel.code, msg=channel.json_body)
|
||||||
self.assertEqual("@user:test", channel.json_body["name"])
|
self.assertEqual("@user:test", channel.json_body["name"])
|
||||||
self.assertEqual("foobar", channel.json_body["displayname"])
|
self.assertEqual("foobar", channel.json_body["displayname"])
|
||||||
|
|
||||||
@ -1504,18 +1545,14 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
# Delete old and add new threepid to user
|
# Delete old and add new threepid to user
|
||||||
body = json.dumps(
|
|
||||||
{"threepids": [{"medium": "email", "address": "bob3@bob.bob"}]}
|
|
||||||
)
|
|
||||||
|
|
||||||
channel = self.make_request(
|
channel = self.make_request(
|
||||||
"PUT",
|
"PUT",
|
||||||
self.url_other_user,
|
self.url_other_user,
|
||||||
access_token=self.admin_user_tok,
|
access_token=self.admin_user_tok,
|
||||||
content=body.encode(encoding="utf_8"),
|
content={"threepids": [{"medium": "email", "address": "bob3@bob.bob"}]},
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertEqual(200, int(channel.result["code"]), msg=channel.result["body"])
|
self.assertEqual(200, channel.code, msg=channel.json_body)
|
||||||
self.assertEqual("@user:test", channel.json_body["name"])
|
self.assertEqual("@user:test", channel.json_body["name"])
|
||||||
self.assertEqual("email", channel.json_body["threepids"][0]["medium"])
|
self.assertEqual("email", channel.json_body["threepids"][0]["medium"])
|
||||||
self.assertEqual("bob3@bob.bob", channel.json_body["threepids"][0]["address"])
|
self.assertEqual("bob3@bob.bob", channel.json_body["threepids"][0]["address"])
|
||||||
@ -1527,7 +1564,7 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
access_token=self.admin_user_tok,
|
access_token=self.admin_user_tok,
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertEqual(200, int(channel.result["code"]), msg=channel.result["body"])
|
self.assertEqual(200, channel.code, msg=channel.json_body)
|
||||||
self.assertEqual("@user:test", channel.json_body["name"])
|
self.assertEqual("@user:test", channel.json_body["name"])
|
||||||
self.assertEqual("email", channel.json_body["threepids"][0]["medium"])
|
self.assertEqual("email", channel.json_body["threepids"][0]["medium"])
|
||||||
self.assertEqual("bob3@bob.bob", channel.json_body["threepids"][0]["address"])
|
self.assertEqual("bob3@bob.bob", channel.json_body["threepids"][0]["address"])
|
||||||
@ -1552,7 +1589,7 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
access_token=self.admin_user_tok,
|
access_token=self.admin_user_tok,
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertEqual(200, int(channel.result["code"]), msg=channel.result["body"])
|
self.assertEqual(200, channel.code, msg=channel.json_body)
|
||||||
self.assertEqual("@user:test", channel.json_body["name"])
|
self.assertEqual("@user:test", channel.json_body["name"])
|
||||||
self.assertFalse(channel.json_body["deactivated"])
|
self.assertFalse(channel.json_body["deactivated"])
|
||||||
self.assertEqual("foo@bar.com", channel.json_body["threepids"][0]["address"])
|
self.assertEqual("foo@bar.com", channel.json_body["threepids"][0]["address"])
|
||||||
@ -1567,7 +1604,7 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
content={"deactivated": True},
|
content={"deactivated": True},
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertEqual(200, int(channel.result["code"]), msg=channel.result["body"])
|
self.assertEqual(200, channel.code, msg=channel.json_body)
|
||||||
self.assertEqual("@user:test", channel.json_body["name"])
|
self.assertEqual("@user:test", channel.json_body["name"])
|
||||||
self.assertTrue(channel.json_body["deactivated"])
|
self.assertTrue(channel.json_body["deactivated"])
|
||||||
self.assertIsNone(channel.json_body["password_hash"])
|
self.assertIsNone(channel.json_body["password_hash"])
|
||||||
@ -1583,7 +1620,7 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
access_token=self.admin_user_tok,
|
access_token=self.admin_user_tok,
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertEqual(200, int(channel.result["code"]), msg=channel.result["body"])
|
self.assertEqual(200, channel.code, msg=channel.json_body)
|
||||||
self.assertEqual("@user:test", channel.json_body["name"])
|
self.assertEqual("@user:test", channel.json_body["name"])
|
||||||
self.assertTrue(channel.json_body["deactivated"])
|
self.assertTrue(channel.json_body["deactivated"])
|
||||||
self.assertIsNone(channel.json_body["password_hash"])
|
self.assertIsNone(channel.json_body["password_hash"])
|
||||||
@ -1610,7 +1647,7 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
content={"deactivated": True},
|
content={"deactivated": True},
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertEqual(200, int(channel.result["code"]), msg=channel.result["body"])
|
self.assertEqual(200, channel.code, msg=channel.json_body)
|
||||||
self.assertEqual("@user:test", channel.json_body["name"])
|
self.assertEqual("@user:test", channel.json_body["name"])
|
||||||
self.assertTrue(channel.json_body["deactivated"])
|
self.assertTrue(channel.json_body["deactivated"])
|
||||||
|
|
||||||
@ -1626,7 +1663,7 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
content={"displayname": "Foobar"},
|
content={"displayname": "Foobar"},
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertEqual(200, int(channel.result["code"]), msg=channel.result["body"])
|
self.assertEqual(200, channel.code, msg=channel.json_body)
|
||||||
self.assertEqual("@user:test", channel.json_body["name"])
|
self.assertEqual("@user:test", channel.json_body["name"])
|
||||||
self.assertTrue(channel.json_body["deactivated"])
|
self.assertTrue(channel.json_body["deactivated"])
|
||||||
self.assertEqual("Foobar", channel.json_body["displayname"])
|
self.assertEqual("Foobar", channel.json_body["displayname"])
|
||||||
@ -1650,7 +1687,7 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
access_token=self.admin_user_tok,
|
access_token=self.admin_user_tok,
|
||||||
content={"deactivated": False},
|
content={"deactivated": False},
|
||||||
)
|
)
|
||||||
self.assertEqual(400, int(channel.result["code"]), msg=channel.result["body"])
|
self.assertEqual(400, channel.code, msg=channel.json_body)
|
||||||
|
|
||||||
# Reactivate the user.
|
# Reactivate the user.
|
||||||
channel = self.make_request(
|
channel = self.make_request(
|
||||||
@ -1659,7 +1696,7 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
access_token=self.admin_user_tok,
|
access_token=self.admin_user_tok,
|
||||||
content={"deactivated": False, "password": "foo"},
|
content={"deactivated": False, "password": "foo"},
|
||||||
)
|
)
|
||||||
self.assertEqual(200, int(channel.result["code"]), msg=channel.result["body"])
|
self.assertEqual(200, channel.code, msg=channel.json_body)
|
||||||
self.assertEqual("@user:test", channel.json_body["name"])
|
self.assertEqual("@user:test", channel.json_body["name"])
|
||||||
self.assertFalse(channel.json_body["deactivated"])
|
self.assertFalse(channel.json_body["deactivated"])
|
||||||
self.assertIsNotNone(channel.json_body["password_hash"])
|
self.assertIsNotNone(channel.json_body["password_hash"])
|
||||||
@ -1681,7 +1718,7 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
access_token=self.admin_user_tok,
|
access_token=self.admin_user_tok,
|
||||||
content={"deactivated": False, "password": "foo"},
|
content={"deactivated": False, "password": "foo"},
|
||||||
)
|
)
|
||||||
self.assertEqual(403, int(channel.result["code"]), msg=channel.result["body"])
|
self.assertEqual(403, channel.code, msg=channel.json_body)
|
||||||
self.assertEqual(Codes.FORBIDDEN, channel.json_body["errcode"])
|
self.assertEqual(Codes.FORBIDDEN, channel.json_body["errcode"])
|
||||||
|
|
||||||
# Reactivate the user without a password.
|
# Reactivate the user without a password.
|
||||||
@ -1691,7 +1728,7 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
access_token=self.admin_user_tok,
|
access_token=self.admin_user_tok,
|
||||||
content={"deactivated": False},
|
content={"deactivated": False},
|
||||||
)
|
)
|
||||||
self.assertEqual(200, int(channel.result["code"]), msg=channel.result["body"])
|
self.assertEqual(200, channel.code, msg=channel.json_body)
|
||||||
self.assertEqual("@user:test", channel.json_body["name"])
|
self.assertEqual("@user:test", channel.json_body["name"])
|
||||||
self.assertFalse(channel.json_body["deactivated"])
|
self.assertFalse(channel.json_body["deactivated"])
|
||||||
self.assertIsNone(channel.json_body["password_hash"])
|
self.assertIsNone(channel.json_body["password_hash"])
|
||||||
@ -1713,7 +1750,7 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
access_token=self.admin_user_tok,
|
access_token=self.admin_user_tok,
|
||||||
content={"deactivated": False, "password": "foo"},
|
content={"deactivated": False, "password": "foo"},
|
||||||
)
|
)
|
||||||
self.assertEqual(403, int(channel.result["code"]), msg=channel.result["body"])
|
self.assertEqual(403, channel.code, msg=channel.json_body)
|
||||||
self.assertEqual(Codes.FORBIDDEN, channel.json_body["errcode"])
|
self.assertEqual(Codes.FORBIDDEN, channel.json_body["errcode"])
|
||||||
|
|
||||||
# Reactivate the user without a password.
|
# Reactivate the user without a password.
|
||||||
@ -1723,7 +1760,7 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
access_token=self.admin_user_tok,
|
access_token=self.admin_user_tok,
|
||||||
content={"deactivated": False},
|
content={"deactivated": False},
|
||||||
)
|
)
|
||||||
self.assertEqual(200, int(channel.result["code"]), msg=channel.result["body"])
|
self.assertEqual(200, channel.code, msg=channel.json_body)
|
||||||
self.assertEqual("@user:test", channel.json_body["name"])
|
self.assertEqual("@user:test", channel.json_body["name"])
|
||||||
self.assertFalse(channel.json_body["deactivated"])
|
self.assertFalse(channel.json_body["deactivated"])
|
||||||
self.assertIsNone(channel.json_body["password_hash"])
|
self.assertIsNone(channel.json_body["password_hash"])
|
||||||
@ -1742,7 +1779,7 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
content={"admin": True},
|
content={"admin": True},
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertEqual(200, int(channel.result["code"]), msg=channel.result["body"])
|
self.assertEqual(200, channel.code, msg=channel.json_body)
|
||||||
self.assertEqual("@user:test", channel.json_body["name"])
|
self.assertEqual("@user:test", channel.json_body["name"])
|
||||||
self.assertTrue(channel.json_body["admin"])
|
self.assertTrue(channel.json_body["admin"])
|
||||||
|
|
||||||
@ -1753,7 +1790,7 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
access_token=self.admin_user_tok,
|
access_token=self.admin_user_tok,
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertEqual(200, int(channel.result["code"]), msg=channel.result["body"])
|
self.assertEqual(200, channel.code, msg=channel.json_body)
|
||||||
self.assertEqual("@user:test", channel.json_body["name"])
|
self.assertEqual("@user:test", channel.json_body["name"])
|
||||||
self.assertTrue(channel.json_body["admin"])
|
self.assertTrue(channel.json_body["admin"])
|
||||||
|
|
||||||
@ -1772,7 +1809,7 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
content={"password": "abc123"},
|
content={"password": "abc123"},
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertEqual(201, int(channel.result["code"]), msg=channel.result["body"])
|
self.assertEqual(201, channel.code, msg=channel.json_body)
|
||||||
self.assertEqual("@bob:test", channel.json_body["name"])
|
self.assertEqual("@bob:test", channel.json_body["name"])
|
||||||
self.assertEqual("bob", channel.json_body["displayname"])
|
self.assertEqual("bob", channel.json_body["displayname"])
|
||||||
|
|
||||||
@ -1783,7 +1820,7 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
access_token=self.admin_user_tok,
|
access_token=self.admin_user_tok,
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertEqual(200, int(channel.result["code"]), msg=channel.result["body"])
|
self.assertEqual(200, channel.code, msg=channel.json_body)
|
||||||
self.assertEqual("@bob:test", channel.json_body["name"])
|
self.assertEqual("@bob:test", channel.json_body["name"])
|
||||||
self.assertEqual("bob", channel.json_body["displayname"])
|
self.assertEqual("bob", channel.json_body["displayname"])
|
||||||
self.assertEqual(0, channel.json_body["deactivated"])
|
self.assertEqual(0, channel.json_body["deactivated"])
|
||||||
@ -1796,7 +1833,7 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
content={"password": "abc123", "deactivated": "false"},
|
content={"password": "abc123", "deactivated": "false"},
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertEqual(400, int(channel.result["code"]), msg=channel.result["body"])
|
self.assertEqual(400, channel.code, msg=channel.json_body)
|
||||||
|
|
||||||
# Check user is not deactivated
|
# Check user is not deactivated
|
||||||
channel = self.make_request(
|
channel = self.make_request(
|
||||||
@ -1805,7 +1842,7 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
access_token=self.admin_user_tok,
|
access_token=self.admin_user_tok,
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertEqual(200, int(channel.result["code"]), msg=channel.result["body"])
|
self.assertEqual(200, channel.code, msg=channel.json_body)
|
||||||
self.assertEqual("@bob:test", channel.json_body["name"])
|
self.assertEqual("@bob:test", channel.json_body["name"])
|
||||||
self.assertEqual("bob", channel.json_body["displayname"])
|
self.assertEqual("bob", channel.json_body["displayname"])
|
||||||
|
|
||||||
@ -1830,7 +1867,7 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
access_token=self.admin_user_tok,
|
access_token=self.admin_user_tok,
|
||||||
content={"deactivated": True},
|
content={"deactivated": True},
|
||||||
)
|
)
|
||||||
self.assertEqual(200, int(channel.result["code"]), msg=channel.result["body"])
|
self.assertEqual(200, channel.code, msg=channel.json_body)
|
||||||
self.assertTrue(channel.json_body["deactivated"])
|
self.assertTrue(channel.json_body["deactivated"])
|
||||||
self.assertIsNone(channel.json_body["password_hash"])
|
self.assertIsNone(channel.json_body["password_hash"])
|
||||||
self._is_erased(user_id, False)
|
self._is_erased(user_id, False)
|
||||||
@ -1838,6 +1875,25 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
self.assertIsNone(self.get_success(d))
|
self.assertIsNone(self.get_success(d))
|
||||||
self._is_erased(user_id, True)
|
self._is_erased(user_id, True)
|
||||||
|
|
||||||
|
def _check_fields(self, content: JsonDict):
|
||||||
|
"""Checks that the expected user attributes are present in content
|
||||||
|
|
||||||
|
Args:
|
||||||
|
content: Content dictionary to check
|
||||||
|
"""
|
||||||
|
self.assertIn("displayname", content)
|
||||||
|
self.assertIn("threepids", content)
|
||||||
|
self.assertIn("avatar_url", content)
|
||||||
|
self.assertIn("admin", content)
|
||||||
|
self.assertIn("deactivated", content)
|
||||||
|
self.assertIn("shadow_banned", content)
|
||||||
|
self.assertIn("password_hash", content)
|
||||||
|
self.assertIn("creation_ts", content)
|
||||||
|
self.assertIn("appservice_id", content)
|
||||||
|
self.assertIn("consent_server_notice_sent", content)
|
||||||
|
self.assertIn("consent_version", content)
|
||||||
|
self.assertIn("external_ids", content)
|
||||||
|
|
||||||
|
|
||||||
class UserMembershipRestTestCase(unittest.HomeserverTestCase):
|
class UserMembershipRestTestCase(unittest.HomeserverTestCase):
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user