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