mirror of
https://git.anonymousland.org/anonymousland/synapse-product.git
synced 2024-10-01 08:25:44 -04:00
Implement exclusive namespace checks.
This commit is contained in:
parent
de190e49d5
commit
58ff066064
@ -232,13 +232,23 @@ class DirectoryHandler(BaseHandler):
|
|||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def can_modify_alias(self, alias, user_id=None):
|
def can_modify_alias(self, alias, user_id=None):
|
||||||
|
# Any application service "interested" in an alias they are regexing on
|
||||||
|
# can modify the alias.
|
||||||
|
# Users can only modify the alias if ALL the interested services have
|
||||||
|
# non-exclusive locks on the alias (or there are no interested services)
|
||||||
services = yield self.store.get_app_services()
|
services = yield self.store.get_app_services()
|
||||||
interested_services = [
|
interested_services = [
|
||||||
s for s in services if s.is_interested_in_alias(alias.to_string())
|
s for s in services if s.is_interested_in_alias(alias.to_string())
|
||||||
]
|
]
|
||||||
|
|
||||||
for service in interested_services:
|
for service in interested_services:
|
||||||
if user_id == service.sender:
|
if user_id == service.sender:
|
||||||
# this user IS the app service
|
# this user IS the app service so they can do whatever they like
|
||||||
defer.returnValue(True)
|
defer.returnValue(True)
|
||||||
return
|
return
|
||||||
defer.returnValue(len(interested_services) == 0)
|
elif service.is_exclusive_alias(alias.to_string()):
|
||||||
|
# another service has an exclusive lock on this alias.
|
||||||
|
defer.returnValue(False)
|
||||||
|
return
|
||||||
|
# either no interested services, or no service with an exclusive lock
|
||||||
|
defer.returnValue(True)
|
||||||
|
@ -201,11 +201,12 @@ class RegistrationHandler(BaseHandler):
|
|||||||
interested_services = [
|
interested_services = [
|
||||||
s for s in services if s.is_interested_in_user(user_id)
|
s for s in services if s.is_interested_in_user(user_id)
|
||||||
]
|
]
|
||||||
if len(interested_services) > 0:
|
for service in interested_services:
|
||||||
raise SynapseError(
|
if service.is_exclusive_user(user_id):
|
||||||
400, "This user ID is reserved by an application service.",
|
raise SynapseError(
|
||||||
errcode=Codes.EXCLUSIVE
|
400, "This user ID is reserved by an application service.",
|
||||||
)
|
errcode=Codes.EXCLUSIVE
|
||||||
|
)
|
||||||
|
|
||||||
def _generate_token(self, user_id):
|
def _generate_token(self, user_id):
|
||||||
# urlsafe variant uses _ and - so use . as the separator and replace
|
# urlsafe variant uses _ and - so use . as the separator and replace
|
||||||
|
Loading…
Reference in New Issue
Block a user