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

Commit c89da79

Browse files
committed
Change API to POST
1 parent c7400fd commit c89da79

File tree

3 files changed

+38
-16
lines changed

3 files changed

+38
-16
lines changed

docs/admin_api/media_admin_api.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ This API removes a single piece of local or remote media from quarantine.
8484
Request:
8585

8686
```
87-
DELETE /_synapse/admin/v1/media/quarantine/<server_name>/<media_id>
87+
POST /_synapse/admin/v1/media/unquarantine/<server_name>/<media_id>
8888
8989
{}
9090
```

synapse/rest/admin/media.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,21 @@ async def on_POST(
119119

120120
return 200, {}
121121

122-
async def on_DELETE(
122+
123+
class UnquarantineMediaByID(RestServlet):
124+
"""Quarantines local or remote media by a given ID so that no one can download
125+
it via this server.
126+
"""
127+
128+
PATTERNS = admin_patterns(
129+
"/media/unquarantine/(?P<server_name>[^/]+)/(?P<media_id>[^/]+)"
130+
)
131+
132+
def __init__(self, hs: "HomeServer"):
133+
self.store = hs.get_datastore()
134+
self.auth = hs.get_auth()
135+
136+
async def on_POST(
123137
self, request: SynapseRequest, server_name: str, media_id: str
124138
) -> Tuple[int, JsonDict]:
125139
requester = await self.auth.get_user_by_req(request)
@@ -282,6 +296,7 @@ def register_servlets_for_media_repo(hs: "HomeServer", http_server):
282296
PurgeMediaCacheRestServlet(hs).register(http_server)
283297
QuarantineMediaInRoom(hs).register(http_server)
284298
QuarantineMediaByID(hs).register(http_server)
299+
UnquarantineMediaByID(hs).register(http_server)
285300
QuarantineMediaByUser(hs).register(http_server)
286301
ProtectMediaByID(hs).register(http_server)
287302
ListMediaInRoom(hs).register(http_server)

tests/rest/admin/test_media.py

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -577,7 +577,7 @@ class QuarantineMediaByIDTestCase(unittest.HomeserverTestCase):
577577
def prepare(self, reactor, clock, hs):
578578
media_repo = hs.get_media_repository_resource()
579579
self.store = hs.get_datastore()
580-
server_name = hs.hostname
580+
self.server_name = hs.hostname
581581

582582
self.admin_user = self.register_user("admin", "pass", admin=True)
583583
self.admin_user_tok = self.login("admin", "pass")
@@ -599,33 +599,34 @@ def prepare(self, reactor, clock, hs):
599599
server_and_media_id = response["content_uri"][6:] # Cut off 'mxc://'
600600
self.media_id = server_and_media_id.split("/")[1]
601601

602-
self.url = "/_synapse/admin/v1/media/quarantine/%s/%s" % (
603-
server_name,
604-
self.media_id,
605-
)
602+
self.url = "/_synapse/admin/v1/media/%s/%s/%s"
606603

607-
@parameterized.expand(["POST", "DELETE"])
608-
def test_no_auth(self, method: str):
604+
@parameterized.expand(["quarantine", "unquarantine"])
605+
def test_no_auth(self, action: str):
609606
"""
610607
Try to protect media without authentication.
611608
"""
612609

613-
channel = self.make_request(method, self.url, b"{}")
610+
channel = self.make_request(
611+
"POST",
612+
self.url % (action, self.server_name, self.media_id),
613+
b"{}",
614+
)
614615

615616
self.assertEqual(401, int(channel.result["code"]), msg=channel.result["body"])
616617
self.assertEqual(Codes.MISSING_TOKEN, channel.json_body["errcode"])
617618

618-
@parameterized.expand(["POST", "DELETE"])
619-
def test_requester_is_no_admin(self, method: str):
619+
@parameterized.expand(["quarantine", "unquarantine"])
620+
def test_requester_is_no_admin(self, action: str):
620621
"""
621622
If the user is not a server admin, an error is returned.
622623
"""
623624
self.other_user = self.register_user("user", "pass")
624625
self.other_user_token = self.login("user", "pass")
625626

626627
channel = self.make_request(
627-
method,
628-
self.url,
628+
"POST",
629+
self.url % (action, self.server_name, self.media_id),
629630
access_token=self.other_user_token,
630631
)
631632

@@ -641,7 +642,11 @@ def test_quarantine_media(self):
641642
self.assertFalse(media_info["quarantined_by"])
642643

643644
# quarantining
644-
channel = self.make_request("POST", self.url, access_token=self.admin_user_tok)
645+
channel = self.make_request(
646+
"POST",
647+
self.url % ("quarantine", self.server_name, self.media_id),
648+
access_token=self.admin_user_tok,
649+
)
645650

646651
self.assertEqual(200, channel.code, msg=channel.json_body)
647652
self.assertFalse(channel.json_body)
@@ -651,7 +656,9 @@ def test_quarantine_media(self):
651656

652657
# remove from quarantine
653658
channel = self.make_request(
654-
"DELETE", self.url, access_token=self.admin_user_tok
659+
"POST",
660+
self.url % ("unquarantine", self.server_name, self.media_id),
661+
access_token=self.admin_user_tok,
655662
)
656663

657664
self.assertEqual(200, channel.code, msg=channel.json_body)

0 commit comments

Comments
 (0)