forked from MirrorHub/synapse
Allow registering invalid user IDs with admin API
This commit is contained in:
parent
5144582e6e
commit
b532218842
1 changed files with 35 additions and 25 deletions
|
@ -141,27 +141,30 @@ class RegistrationHandler:
|
||||||
localpart: str,
|
localpart: str,
|
||||||
guest_access_token: Optional[str] = None,
|
guest_access_token: Optional[str] = None,
|
||||||
assigned_user_id: Optional[str] = None,
|
assigned_user_id: Optional[str] = None,
|
||||||
|
allow_invalid: bool = False,
|
||||||
inhibit_user_in_use_error: bool = False,
|
inhibit_user_in_use_error: bool = False,
|
||||||
) -> None:
|
) -> None:
|
||||||
if types.contains_invalid_mxid_characters(
|
# meow: allow admins to register invalid user ids
|
||||||
localpart, self.hs.config.experimental.msc4009_e164_mxids
|
if not allow_invalid:
|
||||||
):
|
if types.contains_invalid_mxid_characters(
|
||||||
extra_chars = (
|
localpart, self.hs.config.experimental.msc4009_e164_mxids
|
||||||
"=_-./+" if self.hs.config.experimental.msc4009_e164_mxids else "=_-./"
|
):
|
||||||
)
|
extra_chars = (
|
||||||
raise SynapseError(
|
"=_-./+" if self.hs.config.experimental.msc4009_e164_mxids else "=_-./"
|
||||||
400,
|
)
|
||||||
f"User ID can only contain characters a-z, 0-9, or '{extra_chars}'",
|
raise SynapseError(
|
||||||
Codes.INVALID_USERNAME,
|
400,
|
||||||
)
|
f"User ID can only contain characters a-z, 0-9, or '{extra_chars}'",
|
||||||
|
Codes.INVALID_USERNAME,
|
||||||
|
)
|
||||||
|
|
||||||
if not localpart:
|
if not localpart:
|
||||||
raise SynapseError(400, "User ID cannot be empty", Codes.INVALID_USERNAME)
|
raise SynapseError(400, "User ID cannot be empty", Codes.INVALID_USERNAME)
|
||||||
|
|
||||||
if localpart[0] == "_":
|
if localpart[0] == "_":
|
||||||
raise SynapseError(
|
raise SynapseError(
|
||||||
400, "User ID may not begin with _", Codes.INVALID_USERNAME
|
400, "User ID may not begin with _", Codes.INVALID_USERNAME
|
||||||
)
|
)
|
||||||
|
|
||||||
user = UserID(localpart, self.hs.hostname)
|
user = UserID(localpart, self.hs.hostname)
|
||||||
user_id = user.to_string()
|
user_id = user.to_string()
|
||||||
|
@ -175,14 +178,16 @@ class RegistrationHandler:
|
||||||
"A different user ID has already been registered for this session",
|
"A different user ID has already been registered for this session",
|
||||||
)
|
)
|
||||||
|
|
||||||
self.check_user_id_not_appservice_exclusive(user_id)
|
# meow: allow admins to register reserved user ids and long user ids
|
||||||
|
if not allow_invalid:
|
||||||
|
self.check_user_id_not_appservice_exclusive(user_id)
|
||||||
|
|
||||||
if len(user_id) > MAX_USERID_LENGTH:
|
if len(user_id) > MAX_USERID_LENGTH:
|
||||||
raise SynapseError(
|
raise SynapseError(
|
||||||
400,
|
400,
|
||||||
"User ID may not be longer than %s characters" % (MAX_USERID_LENGTH,),
|
"User ID may not be longer than %s characters" % (MAX_USERID_LENGTH,),
|
||||||
Codes.INVALID_USERNAME,
|
Codes.INVALID_USERNAME,
|
||||||
)
|
)
|
||||||
|
|
||||||
users = await self.store.get_users_by_id_case_insensitive(user_id)
|
users = await self.store.get_users_by_id_case_insensitive(user_id)
|
||||||
if users:
|
if users:
|
||||||
|
@ -288,7 +293,12 @@ class RegistrationHandler:
|
||||||
await self.auth_blocking.check_auth_blocking(threepid=threepid)
|
await self.auth_blocking.check_auth_blocking(threepid=threepid)
|
||||||
|
|
||||||
if localpart is not None:
|
if localpart is not None:
|
||||||
await self.check_username(localpart, guest_access_token=guest_access_token)
|
allow_invalid = by_admin and self.hs.config.meow.admin_api_register_invalid
|
||||||
|
await self.check_username(
|
||||||
|
localpart,
|
||||||
|
guest_access_token=guest_access_token,
|
||||||
|
allow_invalid=allow_invalid,
|
||||||
|
)
|
||||||
|
|
||||||
was_guest = guest_access_token is not None
|
was_guest = guest_access_token is not None
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue