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

Commit

Permalink
Use different URL routes to avoid issues.
Browse files Browse the repository at this point in the history
  • Loading branch information
clokep committed Dec 20, 2022
1 parent 7f34798 commit aa7e39f
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 8 deletions.
10 changes: 9 additions & 1 deletion docs/admin_api/media_admin_api.md
Expand Up @@ -235,6 +235,14 @@ The following fields are returned in the JSON response body:

Request:

```
POST /_synapse/admin/v1/media/delete?before_ts=<before_ts>
{}
```

*Deprecated in Synapse v1.75.0:* This API is available at the deprecated endpoint:

```
POST /_synapse/admin/v1/media/<server_name>/delete?before_ts=<before_ts>
Expand All @@ -243,7 +251,7 @@ POST /_synapse/admin/v1/media/<server_name>/delete?before_ts=<before_ts>

URL Parameters

* `server_name`: string - The name of your local server (e.g `matrix.org`).
* `server_name`: string - The name of your local server (e.g `matrix.org`). *Deprecated in Synapse v1.75.0.*
* `before_ts`: string representing a positive integer - Unix timestamp in milliseconds.
Files that were last used before this timestamp will be deleted. It is the timestamp of
last access, not the timestamp when the file was created.
Expand Down
11 changes: 11 additions & 0 deletions docs/upgrade.md
Expand Up @@ -88,6 +88,17 @@ process, for example:
dpkg -i matrix-synapse-py3_1.3.0+stretch1_amd64.deb
```


# Upgrading to v1.75.0

## Deprecate the `/_synapse/admin/v1/media/<server_name>/delete` admin API

Synapse v1.75.0 replaces the `/_synapse/admin/v1/media/<server_name>/delete`
admin API with an identical endpoint at `/_synapse/admin/v1/media/delete`. Please
update your tooling to use the new endpoint. The deprecated version will be removed
in a future release.


# Upgrading to v1.73.0

## Legacy Prometheus metric names have now been removed
Expand Down
14 changes: 10 additions & 4 deletions synapse/rest/admin/media.py
Expand Up @@ -15,7 +15,7 @@

import logging
from http import HTTPStatus
from typing import TYPE_CHECKING, Tuple
from typing import TYPE_CHECKING, Optional, Tuple

from synapse.api.errors import Codes, NotFoundError, SynapseError
from synapse.http.server import HttpServer
Expand Down Expand Up @@ -278,7 +278,12 @@ class DeleteMediaByDateSize(RestServlet):
timestamp and size.
"""

PATTERNS = admin_patterns("/media/(?P<server_name>[^/]*)/delete$")
PATTERNS = [
*admin_patterns("/media/delete$"),
# This URL kept around for legacy reasons, it is undesirable since it
# overlaps with the DeleteMediaByID servlet.
*admin_patterns("/media/(?P<server_name>[^/]*)/delete$"),
]

def __init__(self, hs: "HomeServer"):
self.store = hs.get_datastores().main
Expand All @@ -287,7 +292,7 @@ def __init__(self, hs: "HomeServer"):
self.media_repository = hs.get_media_repository()

async def on_POST(
self, request: SynapseRequest, server_name: str
self, request: SynapseRequest, server_name: Optional[str] = None
) -> Tuple[int, JsonDict]:
await assert_requester_is_admin(self.auth, request)

Expand Down Expand Up @@ -315,7 +320,8 @@ async def on_POST(
errcode=Codes.INVALID_PARAM,
)

if self.server_name != server_name:
# This check is useless, we keep it for the legacy endpoint only.
if server_name is not None and self.server_name != server_name:
raise SynapseError(HTTPStatus.BAD_REQUEST, "Can only delete local media")

logging.info(
Expand Down
9 changes: 6 additions & 3 deletions tests/rest/admin/test_media.py
Expand Up @@ -213,7 +213,8 @@ def prepare(self, reactor: MemoryReactor, clock: Clock, hs: HomeServer) -> None:
self.admin_user_tok = self.login("admin", "pass")

self.filepaths = MediaFilePaths(hs.config.media.media_store_path)
self.url = "/_synapse/admin/v1/media/%s/delete" % self.server_name
self.url = "/_synapse/admin/v1/media/delete"
self.legacy_url = "/_synapse/admin/v1/media/%s/delete" % self.server_name

# Move clock up to somewhat realistic time
self.reactor.advance(1000000000)
Expand Down Expand Up @@ -332,11 +333,13 @@ def test_invalid_parameter(self) -> None:
channel.json_body["error"],
)

def test_delete_media_never_accessed(self) -> None:
@parameterized.expand([(True,), (False,)])
def test_delete_media_never_accessed(self, use_legacy_url: bool) -> None:
"""
Tests that media deleted if it is older than `before_ts` and never accessed
`last_access_ts` is `NULL` and `created_ts` < `before_ts`
"""
url = self.legacy_url if use_legacy_url else self.url

# upload and do not access
server_and_media_id = self._create_media()
Expand All @@ -351,7 +354,7 @@ def test_delete_media_never_accessed(self) -> None:
now_ms = self.clock.time_msec()
channel = self.make_request(
"POST",
self.url + "?before_ts=" + str(now_ms),
url + "?before_ts=" + str(now_ms),
access_token=self.admin_user_tok,
)
self.assertEqual(200, channel.code, msg=channel.json_body)
Expand Down

0 comments on commit aa7e39f

Please sign in to comment.