Skip to content
Snippets Groups Projects
Unverified Commit 1e09a1d4 authored by Richard van der Hoff's avatar Richard van der Hoff Committed by GitHub
Browse files

Merge pull request #3889 from matrix-org/rav/404_on_remove_unknown_alias

Return a 404 when deleting unknown room alias
parents ad95ec12 f75b9961
No related branches found
No related tags found
No related merge requests found
Fix 500 error when deleting unknown room alias
...@@ -20,7 +20,14 @@ import string ...@@ -20,7 +20,14 @@ import string
from twisted.internet import defer from twisted.internet import defer
from synapse.api.constants import EventTypes from synapse.api.constants import EventTypes
from synapse.api.errors import AuthError, CodeMessageException, Codes, SynapseError from synapse.api.errors import (
AuthError,
CodeMessageException,
Codes,
NotFoundError,
StoreError,
SynapseError,
)
from synapse.types import RoomAlias, UserID, get_domain_from_id from synapse.types import RoomAlias, UserID, get_domain_from_id
from ._base import BaseHandler from ._base import BaseHandler
...@@ -109,7 +116,13 @@ class DirectoryHandler(BaseHandler): ...@@ -109,7 +116,13 @@ class DirectoryHandler(BaseHandler):
def delete_association(self, requester, user_id, room_alias): def delete_association(self, requester, user_id, room_alias):
# association deletion for human users # association deletion for human users
can_delete = yield self._user_can_delete_alias(room_alias, user_id) try:
can_delete = yield self._user_can_delete_alias(room_alias, user_id)
except StoreError as e:
if e.code == 404:
raise NotFoundError("Unknown room alias")
raise
if not can_delete: if not can_delete:
raise AuthError( raise AuthError(
403, "You don't have permission to delete the alias.", 403, "You don't have permission to delete the alias.",
...@@ -320,7 +333,7 @@ class DirectoryHandler(BaseHandler): ...@@ -320,7 +333,7 @@ class DirectoryHandler(BaseHandler):
def _user_can_delete_alias(self, alias, user_id): def _user_can_delete_alias(self, alias, user_id):
creator = yield self.store.get_room_alias_creator(alias.to_string()) creator = yield self.store.get_room_alias_creator(alias.to_string())
if creator and creator == user_id: if creator is not None and creator == user_id:
defer.returnValue(True) defer.returnValue(True)
is_admin = yield self.auth.is_server_admin(UserID.from_string(user_id)) is_admin = yield self.auth.is_server_admin(UserID.from_string(user_id))
......
...@@ -75,7 +75,6 @@ class DirectoryWorkerStore(SQLBaseStore): ...@@ -75,7 +75,6 @@ class DirectoryWorkerStore(SQLBaseStore):
}, },
retcol="creator", retcol="creator",
desc="get_room_alias_creator", desc="get_room_alias_creator",
allow_none=True
) )
@cached(max_entries=5000) @cached(max_entries=5000)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment