mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-05-02 12:46:01 -04:00
create support user (#4141)
Allow for the creation of a support user. A support user can access the server, join rooms, interact with other users, but does not appear in the user directory nor does it contribute to monthly active user limits.
This commit is contained in:
parent
e93a0ebf50
commit
d2f7c4e6b1
20 changed files with 371 additions and 47 deletions
|
@ -19,6 +19,7 @@ from six.moves import range
|
|||
|
||||
from twisted.internet import defer
|
||||
|
||||
from synapse.api.constants import UserTypes
|
||||
from synapse.api.errors import Codes, StoreError
|
||||
from synapse.storage import background_updates
|
||||
from synapse.storage._base import SQLBaseStore
|
||||
|
@ -168,7 +169,7 @@ class RegistrationStore(RegistrationWorkerStore,
|
|||
|
||||
def register(self, user_id, token=None, password_hash=None,
|
||||
was_guest=False, make_guest=False, appservice_id=None,
|
||||
create_profile_with_displayname=None, admin=False):
|
||||
create_profile_with_displayname=None, admin=False, user_type=None):
|
||||
"""Attempts to register an account.
|
||||
|
||||
Args:
|
||||
|
@ -184,6 +185,10 @@ class RegistrationStore(RegistrationWorkerStore,
|
|||
appservice_id (str): The ID of the appservice registering the user.
|
||||
create_profile_with_displayname (unicode): Optionally create a profile for
|
||||
the user, setting their displayname to the given value
|
||||
admin (boolean): is an admin user?
|
||||
user_type (str|None): type of user. One of the values from
|
||||
api.constants.UserTypes, or None for a normal user.
|
||||
|
||||
Raises:
|
||||
StoreError if the user_id could not be registered.
|
||||
"""
|
||||
|
@ -197,7 +202,8 @@ class RegistrationStore(RegistrationWorkerStore,
|
|||
make_guest,
|
||||
appservice_id,
|
||||
create_profile_with_displayname,
|
||||
admin
|
||||
admin,
|
||||
user_type
|
||||
)
|
||||
|
||||
def _register(
|
||||
|
@ -211,6 +217,7 @@ class RegistrationStore(RegistrationWorkerStore,
|
|||
appservice_id,
|
||||
create_profile_with_displayname,
|
||||
admin,
|
||||
user_type,
|
||||
):
|
||||
user_id_obj = UserID.from_string(user_id)
|
||||
|
||||
|
@ -247,6 +254,7 @@ class RegistrationStore(RegistrationWorkerStore,
|
|||
"is_guest": 1 if make_guest else 0,
|
||||
"appservice_id": appservice_id,
|
||||
"admin": 1 if admin else 0,
|
||||
"user_type": user_type,
|
||||
}
|
||||
)
|
||||
else:
|
||||
|
@ -260,6 +268,7 @@ class RegistrationStore(RegistrationWorkerStore,
|
|||
"is_guest": 1 if make_guest else 0,
|
||||
"appservice_id": appservice_id,
|
||||
"admin": 1 if admin else 0,
|
||||
"user_type": user_type,
|
||||
}
|
||||
)
|
||||
except self.database_engine.module.IntegrityError:
|
||||
|
@ -456,6 +465,31 @@ class RegistrationStore(RegistrationWorkerStore,
|
|||
|
||||
defer.returnValue(res if res else False)
|
||||
|
||||
@cachedInlineCallbacks()
|
||||
def is_support_user(self, user_id):
|
||||
"""Determines if the user is of type UserTypes.SUPPORT
|
||||
|
||||
Args:
|
||||
user_id (str): user id to test
|
||||
|
||||
Returns:
|
||||
Deferred[bool]: True if user is of type UserTypes.SUPPORT
|
||||
"""
|
||||
res = yield self.runInteraction(
|
||||
"is_support_user", self.is_support_user_txn, user_id
|
||||
)
|
||||
defer.returnValue(res)
|
||||
|
||||
def is_support_user_txn(self, txn, user_id):
|
||||
res = self._simple_select_one_onecol_txn(
|
||||
txn=txn,
|
||||
table="users",
|
||||
keyvalues={"name": user_id},
|
||||
retcol="user_type",
|
||||
allow_none=True,
|
||||
)
|
||||
return True if res == UserTypes.SUPPORT else False
|
||||
|
||||
@defer.inlineCallbacks
|
||||
def user_add_threepid(self, user_id, medium, address, validated_at, added_at):
|
||||
yield self._simple_upsert("user_threepids", {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue