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

Add the shadow-banning status to the display user admin API #9400

Merged
merged 6 commits into from
Feb 17, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/9400.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Add the shadow-banning status to the display user admin API.
9 changes: 6 additions & 3 deletions docs/admin_api/user_admin_api.rst
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,9 @@ It returns a JSON body like the following:
}
],
"avatar_url": "<avatar_url>",
"admin": false,
"deactivated": false,
"admin": 0,
"deactivated": 0,
"shadow_banned": 0,
"password_hash": "$2b$12$p9B4GkqYdRTPGD",
"creation_ts": 1560432506,
"appservice_id": null,
Expand Down Expand Up @@ -150,6 +151,7 @@ A JSON body is returned with the following shape:
"admin": 0,
"user_type": null,
"deactivated": 0,
"shadow_banned": 0,
"displayname": "<User One>",
"avatar_url": null
}, {
Expand All @@ -158,6 +160,7 @@ A JSON body is returned with the following shape:
"admin": 1,
"user_type": null,
"deactivated": 0,
"shadow_banned": 0,
"displayname": "<User Two>",
"avatar_url": "<avatar_url>"
}
Expand Down Expand Up @@ -262,7 +265,7 @@ The following actions are performed when deactivating an user:
- Reject all pending invites
- Remove all account validity information related to the user

The following additional actions are performed during deactivation if``erase``
The following additional actions are performed during deactivation if ``erase``
is set to ``true``:

- Remove the user's display name
Expand Down
2 changes: 1 addition & 1 deletion synapse/storage/databases/main/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -340,7 +340,7 @@ def get_users_paginate_txn(txn):
count = txn.fetchone()[0]

sql = (
"SELECT name, user_type, is_guest, admin, deactivated, displayname, avatar_url "
"SELECT name, user_type, is_guest, admin, deactivated, shadow_banned, displayname, avatar_url "
+ sql_base
+ " ORDER BY u.name LIMIT ? OFFSET ?"
)
Expand Down
7 changes: 5 additions & 2 deletions synapse/storage/databases/main/registration.py
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ async def get_user_by_id(self, user_id: str) -> Optional[Dict[str, Any]]:
"creation_ts",
"user_type",
"deactivated",
"shadow_banned",
clokep marked this conversation as resolved.
Show resolved Hide resolved
],
allow_none=True,
desc="get_user_by_id",
Expand Down Expand Up @@ -369,23 +370,25 @@ async def set_shadow_banned(self, user: UserID, shadow_banned: bool) -> None:
"""

def set_shadow_banned_txn(txn):
user_id = user.to_string()
self.db_pool.simple_update_one_txn(
txn,
table="users",
keyvalues={"name": user.to_string()},
keyvalues={"name": user_id},
updatevalues={"shadow_banned": shadow_banned},
)
# In order for this to apply immediately, clear the cache for this user.
tokens = self.db_pool.simple_select_onecol_txn(
txn,
table="access_tokens",
keyvalues={"user_id": user.to_string()},
keyvalues={"user_id": user_id},
retcol="token",
)
for token in tokens:
self._invalidate_cache_and_stream(
txn, self.get_user_by_access_token, (token,)
)
self._invalidate_cache_and_stream(txn, self.get_user_by_id, (user_id,))

await self.db_pool.runInteraction("set_shadow_banned", set_shadow_banned_txn)

Expand Down
2 changes: 2 additions & 0 deletions tests/rest/admin/test_user.py
Original file line number Diff line number Diff line change
Expand Up @@ -742,6 +742,7 @@ def _check_fields(self, content: JsonDict):
self.assertIn("admin", u)
self.assertIn("user_type", u)
self.assertIn("deactivated", u)
self.assertIn("shadow_banned", u)
self.assertIn("displayname", u)
self.assertIn("avatar_url", u)

Expand Down Expand Up @@ -1091,6 +1092,7 @@ def test_create_user(self):
self.assertEqual(False, channel.json_body["admin"])
self.assertEqual(False, channel.json_body["is_guest"])
self.assertEqual(False, channel.json_body["deactivated"])
self.assertEqual(False, channel.json_body["shadow_banned"])
self.assertEqual("mxc://fibble/wibble", channel.json_body["avatar_url"])

@override_config(
Expand Down
1 change: 1 addition & 0 deletions tests/storage/test_registration.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ def test_register(self):
"creation_ts": 1000,
"user_type": None,
"deactivated": 0,
"shadow_banned": 0,
},
(yield defer.ensureDeferred(self.store.get_user_by_id(self.user_id))),
)
Expand Down