27
27
28
28
import synapse
29
29
from synapse .api .constants import Membership , UserTypes
30
- from synapse .api .errors import AuthError , Codes , NotFoundError , SynapseError
30
+ from synapse .api .errors import Codes , NotFoundError , SynapseError
31
31
from synapse .http .server import JsonResource
32
32
from synapse .http .servlet import (
33
33
RestServlet ,
36
36
parse_json_object_from_request ,
37
37
parse_string ,
38
38
)
39
- from synapse .rest .admin ._base import assert_requester_is_admin , assert_user_is_admin
39
+ from synapse .rest .admin ._base import (
40
+ assert_requester_is_admin ,
41
+ assert_user_is_admin ,
42
+ historical_admin_path_patterns ,
43
+ )
44
+ from synapse .rest .admin .media import register_servlets_for_media_repo
40
45
from synapse .rest .admin .server_notice_servlet import SendServerNoticeServlet
41
46
from synapse .types import UserID , create_requester
42
47
from synapse .util .versionstring import get_version_string
43
48
44
49
logger = logging .getLogger (__name__ )
45
50
46
51
47
- def historical_admin_path_patterns (path_regex ):
48
- """Returns the list of patterns for an admin endpoint, including historical ones
49
-
50
- This is a backwards-compatibility hack. Previously, the Admin API was exposed at
51
- various paths under /_matrix/client. This function returns a list of patterns
52
- matching those paths (as well as the new one), so that existing scripts which rely
53
- on the endpoints being available there are not broken.
54
-
55
- Note that this should only be used for existing endpoints: new ones should just
56
- register for the /_synapse/admin path.
57
- """
58
- return list (
59
- re .compile (prefix + path_regex )
60
- for prefix in (
61
- "^/_synapse/admin/v1" ,
62
- "^/_matrix/client/api/v1/admin" ,
63
- "^/_matrix/client/unstable/admin" ,
64
- "^/_matrix/client/r0/admin" ,
65
- )
66
- )
67
-
68
-
69
52
class UsersRestServlet (RestServlet ):
70
53
PATTERNS = historical_admin_path_patterns ("/users/(?P<user_id>[^/]*)" )
71
54
@@ -255,25 +238,6 @@ def on_GET(self, request, user_id):
255
238
return (200 , ret )
256
239
257
240
258
- class PurgeMediaCacheRestServlet (RestServlet ):
259
- PATTERNS = historical_admin_path_patterns ("/purge_media_cache" )
260
-
261
- def __init__ (self , hs ):
262
- self .media_repository = hs .get_media_repository ()
263
- self .auth = hs .get_auth ()
264
-
265
- @defer .inlineCallbacks
266
- def on_POST (self , request ):
267
- yield assert_requester_is_admin (self .auth , request )
268
-
269
- before_ts = parse_integer (request , "before_ts" , required = True )
270
- logger .info ("before_ts: %r" , before_ts )
271
-
272
- ret = yield self .media_repository .delete_old_remote_media (before_ts )
273
-
274
- return (200 , ret )
275
-
276
-
277
241
class PurgeHistoryRestServlet (RestServlet ):
278
242
PATTERNS = historical_admin_path_patterns (
279
243
"/purge_history/(?P<room_id>[^/]*)(/(?P<event_id>[^/]+))?"
@@ -542,50 +506,6 @@ def on_POST(self, request, room_id):
542
506
)
543
507
544
508
545
- class QuarantineMediaInRoom (RestServlet ):
546
- """Quarantines all media in a room so that no one can download it via
547
- this server.
548
- """
549
-
550
- PATTERNS = historical_admin_path_patterns ("/quarantine_media/(?P<room_id>[^/]+)" )
551
-
552
- def __init__ (self , hs ):
553
- self .store = hs .get_datastore ()
554
- self .auth = hs .get_auth ()
555
-
556
- @defer .inlineCallbacks
557
- def on_POST (self , request , room_id ):
558
- requester = yield self .auth .get_user_by_req (request )
559
- yield assert_user_is_admin (self .auth , requester .user )
560
-
561
- num_quarantined = yield self .store .quarantine_media_ids_in_room (
562
- room_id , requester .user .to_string ()
563
- )
564
-
565
- return (200 , {"num_quarantined" : num_quarantined })
566
-
567
-
568
- class ListMediaInRoom (RestServlet ):
569
- """Lists all of the media in a given room.
570
- """
571
-
572
- PATTERNS = historical_admin_path_patterns ("/room/(?P<room_id>[^/]+)/media" )
573
-
574
- def __init__ (self , hs ):
575
- self .store = hs .get_datastore ()
576
-
577
- @defer .inlineCallbacks
578
- def on_GET (self , request , room_id ):
579
- requester = yield self .auth .get_user_by_req (request )
580
- is_admin = yield self .auth .is_server_admin (requester .user )
581
- if not is_admin :
582
- raise AuthError (403 , "You are not a server admin" )
583
-
584
- local_mxcs , remote_mxcs = yield self .store .get_media_mxcs_in_room (room_id )
585
-
586
- return (200 , {"local" : local_mxcs , "remote" : remote_mxcs })
587
-
588
-
589
509
class ResetPasswordRestServlet (RestServlet ):
590
510
"""Post request to allow an administrator reset password for a user.
591
511
This needs user to have administrator access in Synapse.
@@ -825,7 +745,6 @@ def register_servlets(hs, http_server):
825
745
def register_servlets_for_client_rest_resource (hs , http_server ):
826
746
"""Register only the servlets which need to be exposed on /_matrix/client/xxx"""
827
747
WhoisRestServlet (hs ).register (http_server )
828
- PurgeMediaCacheRestServlet (hs ).register (http_server )
829
748
PurgeHistoryStatusRestServlet (hs ).register (http_server )
830
749
DeactivateAccountRestServlet (hs ).register (http_server )
831
750
PurgeHistoryRestServlet (hs ).register (http_server )
@@ -834,10 +753,13 @@ def register_servlets_for_client_rest_resource(hs, http_server):
834
753
GetUsersPaginatedRestServlet (hs ).register (http_server )
835
754
SearchUsersRestServlet (hs ).register (http_server )
836
755
ShutdownRoomRestServlet (hs ).register (http_server )
837
- QuarantineMediaInRoom (hs ).register (http_server )
838
- ListMediaInRoom (hs ).register (http_server )
839
756
UserRegisterServlet (hs ).register (http_server )
840
757
DeleteGroupAdminRestServlet (hs ).register (http_server )
841
758
AccountValidityRenewServlet (hs ).register (http_server )
759
+
760
+ # Load the media repo ones if we're using them.
761
+ if hs .config .can_load_media_repo :
762
+ register_servlets_for_media_repo (hs , http_server )
763
+
842
764
# don't add more things here: new servlets should only be exposed on
843
765
# /_synapse/admin so should not go here. Instead register them in AdminRestResource.
0 commit comments