1# Copyright 2014-2016 OpenMarket Ltd 2# Copyright 2018 New Vector Ltd 3# 4# Licensed under the Apache License, Version 2.0 (the "License"); 5# you may not use this file except in compliance with the License. 6# You may obtain a copy of the License at 7# 8# http://www.apache.org/licenses/LICENSE-2.0 9# 10# Unless required by applicable law or agreed to in writing, software 11# distributed under the License is distributed on an "AS IS" BASIS, 12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13# See the License for the specific language governing permissions and 14# limitations under the License. 15from typing import TYPE_CHECKING, Callable 16 17from synapse.http.server import HttpServer, JsonResource 18from synapse.rest import admin 19from synapse.rest.client import ( 20 account, 21 account_data, 22 account_validity, 23 auth, 24 capabilities, 25 devices, 26 directory, 27 events, 28 filter, 29 groups, 30 initial_sync, 31 keys, 32 knock, 33 login as v1_login, 34 logout, 35 notifications, 36 openid, 37 password_policy, 38 presence, 39 profile, 40 push_rule, 41 pusher, 42 read_marker, 43 receipts, 44 register, 45 relations, 46 report_event, 47 room, 48 room_batch, 49 room_keys, 50 room_upgrade_rest_servlet, 51 sendtodevice, 52 shared_rooms, 53 sync, 54 tags, 55 thirdparty, 56 tokenrefresh, 57 user_directory, 58 versions, 59 voip, 60) 61 62if TYPE_CHECKING: 63 from synapse.server import HomeServer 64 65RegisterServletsFunc = Callable[["HomeServer", HttpServer], None] 66 67 68class ClientRestResource(JsonResource): 69 """Matrix Client API REST resource. 70 71 This gets mounted at various points under /_matrix/client, including: 72 * /_matrix/client/r0 73 * /_matrix/client/api/v1 74 * /_matrix/client/unstable 75 * etc 76 """ 77 78 def __init__(self, hs: "HomeServer"): 79 JsonResource.__init__(self, hs, canonical_json=False) 80 self.register_servlets(self, hs) 81 82 @staticmethod 83 def register_servlets(client_resource: HttpServer, hs: "HomeServer") -> None: 84 versions.register_servlets(hs, client_resource) 85 86 # Deprecated in r0 87 initial_sync.register_servlets(hs, client_resource) 88 room.register_deprecated_servlets(hs, client_resource) 89 90 # Partially deprecated in r0 91 events.register_servlets(hs, client_resource) 92 93 room.register_servlets(hs, client_resource) 94 v1_login.register_servlets(hs, client_resource) 95 profile.register_servlets(hs, client_resource) 96 presence.register_servlets(hs, client_resource) 97 directory.register_servlets(hs, client_resource) 98 voip.register_servlets(hs, client_resource) 99 pusher.register_servlets(hs, client_resource) 100 push_rule.register_servlets(hs, client_resource) 101 logout.register_servlets(hs, client_resource) 102 sync.register_servlets(hs, client_resource) 103 filter.register_servlets(hs, client_resource) 104 account.register_servlets(hs, client_resource) 105 register.register_servlets(hs, client_resource) 106 auth.register_servlets(hs, client_resource) 107 receipts.register_servlets(hs, client_resource) 108 read_marker.register_servlets(hs, client_resource) 109 room_keys.register_servlets(hs, client_resource) 110 keys.register_servlets(hs, client_resource) 111 tokenrefresh.register_servlets(hs, client_resource) 112 tags.register_servlets(hs, client_resource) 113 account_data.register_servlets(hs, client_resource) 114 report_event.register_servlets(hs, client_resource) 115 openid.register_servlets(hs, client_resource) 116 notifications.register_servlets(hs, client_resource) 117 devices.register_servlets(hs, client_resource) 118 thirdparty.register_servlets(hs, client_resource) 119 sendtodevice.register_servlets(hs, client_resource) 120 user_directory.register_servlets(hs, client_resource) 121 groups.register_servlets(hs, client_resource) 122 room_upgrade_rest_servlet.register_servlets(hs, client_resource) 123 room_batch.register_servlets(hs, client_resource) 124 capabilities.register_servlets(hs, client_resource) 125 account_validity.register_servlets(hs, client_resource) 126 relations.register_servlets(hs, client_resource) 127 password_policy.register_servlets(hs, client_resource) 128 knock.register_servlets(hs, client_resource) 129 130 # moving to /_synapse/admin 131 admin.register_servlets_for_client_rest_resource(hs, client_resource) 132 133 # unstable 134 shared_rooms.register_servlets(hs, client_resource) 135