tuwunel_api_federation/
routes.rs1use axum::{
2 Router,
3 response::IntoResponse,
4 routing::{any, get},
5};
6use tuwunel_api::router::RouterExt;
7use tuwunel_core::{Server, err};
8
9use crate::{self as federation, State};
10
11pub fn build(server: &Server) -> Router<State> {
15 let router = Router::new();
16 let router = register_server_misc_routes(router);
17
18 register_federation_routes(router, server.config.federation.enable)
19}
20
21fn register_server_misc_routes(router: Router<State>) -> Router<State> {
22 router
24 .ruma_route(&federation::well_known_server)
25 .ruma_route(&federation::get_openid_userinfo_route)
26}
27
28fn register_federation_routes(router: Router<State>, allow_federation: bool) -> Router<State> {
29 if allow_federation {
30 router
31 .ruma_route(&federation::get_server_version_route)
32 .route("/_matrix/key/v2/server", get(federation::get_server_keys_route))
33 .ruma_route(&federation::get_public_rooms_route)
34 .ruma_route(&federation::get_public_rooms_filtered_route)
35 .ruma_route(&federation::send_transaction_message_route)
36 .ruma_route(&federation::get_event_route)
37 .ruma_route(&federation::get_event_by_timestamp_route)
38 .ruma_route(&federation::get_backfill_route)
39 .ruma_route(&federation::get_missing_events_route)
40 .ruma_route(&federation::get_event_authorization_route)
41 .ruma_route(&federation::get_room_state_route)
42 .ruma_route(&federation::get_room_state_ids_route)
43 .ruma_route(&federation::create_leave_event_template_route)
44 .ruma_route(&federation::create_knock_event_template_route)
45 .ruma_route(&federation::create_leave_event_v2_route)
46 .ruma_route(&federation::create_knock_event_v1_route)
47 .ruma_route(&federation::create_join_event_template_route)
48 .ruma_route(&federation::create_join_event_v2_route)
49 .ruma_route(&federation::create_invite_route)
50 .ruma_route(&federation::get_devices_route)
51 .ruma_route(&federation::get_room_information_route)
52 .ruma_route(&federation::get_profile_information_route)
53 .ruma_route(&federation::get_keys_route)
54 .ruma_route(&federation::claim_keys_route)
55 .ruma_route(&federation::get_hierarchy_route)
56 .ruma_route(&federation::get_content_route)
57 .ruma_route(&federation::get_content_thumbnail_route)
58 } else {
59 router
60 .route("/_matrix/federation/{*path}", any(federation_disabled))
61 .route("/_matrix/key/{*path}", any(federation_disabled))
62 .route("/_tuwunel/local_user_count", any(federation_disabled))
63 }
64}
65
66async fn federation_disabled() -> impl IntoResponse {
67 err!(Request(Forbidden("Federation is disabled.")))
68}