Skip to main content

tuwunel_api_admin/
routes.rs

1use axum::{
2	Router,
3	routing::{get, post},
4};
5use tuwunel_api::router::RouterExt;
6use tuwunel_core::Server;
7
8use crate::{self as admin, State, mas_active};
9
10/// Builds the administrator endpoint routes.
11///
12/// The authentication mode selects the available user and device routes.
13pub fn build(server: &Server) -> Router<State> {
14	let mas_active = mas_active(&server.config);
15	let router = Router::new();
16	let router = register_synapse_admin_users_routes(router, mas_active);
17	let router = register_synapse_admin_devices_routes(router, mas_active);
18	let router = register_synapse_admin_rooms_routes(router);
19	let router = register_synapse_admin_media_routes(router);
20	let router = register_synapse_admin_federation_routes(router);
21	let router = register_synapse_admin_misc_routes(router);
22
23	router
24		.ruma_route(&admin::is_user_suspended_route)
25		.ruma_route(&admin::suspend_user_route)
26		.ruma_route(&admin::is_user_locked_route)
27		.ruma_route(&admin::lock_user_route)
28}
29
30fn register_synapse_admin_users_routes(router: Router<State>, mas_active: bool) -> Router<State> {
31	let router = router
32		.ruma_route(&admin::users::admin_list_users_v2_route)
33		.ruma_route(&admin::users::admin_list_users_v3_route)
34		.ruma_route(&admin::users::admin_get_details_route)
35		.ruma_route(&admin::users::admin_create_or_modify_route)
36		.ruma_route(&admin::users::admin_deactivate_account_route)
37		.ruma_route(&admin::users::admin_list_joined_rooms_route)
38		.ruma_route(&admin::users::admin_memberships_route)
39		.ruma_route(&admin::users::admin_pushers_route)
40		.ruma_route(&admin::users::admin_account_data_route)
41		.ruma_route(&admin::users::admin_suspend_route)
42		.ruma_route(&admin::users::admin_username_available_route)
43		.ruma_route(&admin::users::admin_lookup_threepid_route)
44		.ruma_route(&admin::users::admin_allow_cross_signing_replacement_route)
45		.ruma_route(&admin::users::admin_redact_user_route)
46		.ruma_route(&admin::users::admin_redact_status_route)
47		// whois is served at the /_synapse admin path and the client-server admin
48		// aliases where Synapse also mounts it.
49		.route("/_synapse/admin/v1/whois/{user_id}", get(admin::users::admin_whois_route))
50		.route("/_matrix/client/v3/admin/whois/{user_id}", get(admin::users::admin_whois_route))
51		.route("/_matrix/client/r0/admin/whois/{user_id}", get(admin::users::admin_whois_route))
52		.route(
53			"/_matrix/client/unstable/admin/whois/{user_id}",
54			get(admin::users::admin_whois_route),
55		);
56
57	// The Synapse user-provisioning routes MAS owns (register pair, password
58	// reset, admin flag) are de-registered under MAS delegation, mirroring
59	// Synapse.
60	if mas_active {
61		router
62	} else {
63		router
64			.ruma_route(&admin::admin_register_nonce_route)
65			.ruma_route(&admin::admin_register_route)
66			.ruma_route(&admin::users::admin_reset_password_route)
67			.ruma_route(&admin::users::admin_is_user_admin_route)
68			.ruma_route(&admin::users::admin_login_as_route)
69	}
70}
71
72fn register_synapse_admin_devices_routes(
73	router: Router<State>,
74	mas_active: bool,
75) -> Router<State> {
76	let router = router
77		.ruma_route(&admin::devices::admin_list_devices_route)
78		.ruma_route(&admin::devices::admin_create_device_route)
79		.ruma_route(&admin::devices::admin_get_device_route)
80		.ruma_route(&admin::devices::admin_update_device_route)
81		.ruma_route(&admin::devices::admin_delete_device_route)
82		.ruma_route(&admin::devices::admin_delete_devices_route);
83
84	// Registration-token administration is de-registered under MAS, mirroring
85	// Synapse.
86	if mas_active {
87		router
88	} else {
89		router
90			.ruma_route(&admin::tokens::admin_list_tokens_route)
91			.ruma_route(&admin::tokens::admin_create_token_route)
92			.ruma_route(&admin::tokens::admin_get_token_route)
93			.ruma_route(&admin::tokens::admin_update_token_route)
94			.ruma_route(&admin::tokens::admin_delete_token_route)
95	}
96}
97
98fn register_synapse_admin_rooms_routes(router: Router<State>) -> Router<State> {
99	router
100		.ruma_route(&admin::rooms::admin_list_rooms_route)
101		.ruma_route(&admin::rooms::admin_room_details_route)
102		.ruma_route(&admin::rooms::admin_room_members_route)
103		.ruma_route(&admin::rooms::admin_join_room_route)
104		.ruma_route(&admin::rooms::admin_get_room_block_route)
105		.ruma_route(&admin::rooms::admin_set_room_block_route)
106		.ruma_route(&admin::rooms::admin_make_room_admin_route)
107		.ruma_route(&admin::rooms::admin_delete_room_v1_route)
108		.ruma_route(&admin::rooms::admin_delete_room_v2_route)
109		.ruma_route(&admin::rooms::admin_delete_status_by_id_route)
110		.ruma_route(&admin::rooms::admin_delete_status_by_room_route)
111		.ruma_route(&admin::rooms::admin_get_forward_extremities_route)
112		.ruma_route(&admin::rooms::admin_delete_forward_extremities_route)
113		.ruma_route(&admin::rooms::admin_purge_history_route)
114		.ruma_route(&admin::rooms::admin_purge_history_by_event_route)
115		.ruma_route(&admin::rooms::admin_purge_history_status_route)
116		.ruma_route(&admin::rooms::admin_room_state_route)
117		.ruma_route(&admin::rooms::admin_room_messages_route)
118		.ruma_route(&admin::rooms::admin_room_context_route)
119		.ruma_route(&admin::rooms::admin_room_timestamp_to_event_route)
120		.ruma_route(&admin::rooms::admin_room_hierarchy_route)
121}
122
123fn register_synapse_admin_media_routes(router: Router<State>) -> Router<State> {
124	router
125		.ruma_route(&admin::media::admin_query_media_route)
126		.ruma_route(&admin::media::admin_delete_media_route)
127		.ruma_route(&admin::media::admin_list_user_media_route)
128		.ruma_route(&admin::media::admin_list_room_media_route)
129		.ruma_route(&admin::media::admin_delete_user_media_route)
130		.ruma_route(&admin::media::admin_purge_media_cache_route)
131		.ruma_route(&admin::media::admin_user_media_statistics_route)
132		.route(
133			"/_synapse/admin/v1/media/delete",
134			post(admin::media::admin_delete_media_by_date_size_route),
135		)
136		// Synapse's deprecated per-server alias for the same date/size purge.
137		.route(
138			"/_synapse/admin/v1/media/{server_name}/delete",
139			post(admin::media::admin_delete_media_by_date_size_route),
140		)
141}
142
143fn register_synapse_admin_federation_routes(router: Router<State>) -> Router<State> {
144	router
145		.ruma_route(&admin::federation::admin_list_destinations_route)
146		.ruma_route(&admin::federation::admin_destination_details_route)
147		.ruma_route(&admin::federation::admin_destination_rooms_route)
148		.ruma_route(&admin::federation::admin_reset_connection_route)
149}
150
151fn register_synapse_admin_misc_routes(router: Router<State>) -> Router<State> {
152	router
153		.ruma_route(&admin::misc::admin_server_version_route)
154		.ruma_route(&admin::misc::admin_fetch_event_route)
155		.ruma_route(&admin::misc::admin_scheduled_tasks_route)
156		.ruma_route(&admin::misc::admin_send_server_notice_route)
157		.ruma_route(&admin::misc::admin_send_server_notice_txn_route)
158}