1use log as _;
2use ruma::UserId;
3use tuwunel_api::router::{self, ClientIp, Ruma, RumaResponse, State};
4use tuwunel_service::{Services, rooms::timeline::PdusIterItem};
5
6pub(crate) mod account;
7pub(crate) mod account_data;
8pub(crate) mod alias;
9pub(crate) mod appservice;
10pub(crate) mod backup;
11pub(crate) mod capabilities;
12pub(crate) mod context;
13pub(crate) mod dehydrated_device;
14pub(crate) mod delayed_events;
15pub(crate) mod device;
16pub(crate) mod directory;
17pub(crate) mod events;
18pub(crate) mod filter;
19pub(crate) mod keys;
20pub(crate) mod media;
21pub(crate) mod media_legacy;
22pub(crate) mod membership;
23pub(crate) mod message;
24pub(crate) mod notice;
25pub(crate) mod openid;
26pub(crate) mod presence;
27pub(crate) mod profile;
28pub(crate) mod push;
29pub(crate) mod read_marker;
30pub(crate) mod redact;
31pub(crate) mod register;
32pub(crate) mod relations;
33pub(crate) mod rendezvous;
34pub(crate) mod report;
35pub(crate) mod room;
36pub mod routes;
40pub(crate) mod rtc;
41pub(crate) mod search;
42pub(crate) mod send;
43pub(crate) mod session;
44pub(crate) mod space;
45pub(crate) mod state;
46pub(crate) mod sync;
47pub(crate) mod tag;
48pub(crate) mod thirdparty;
49pub(crate) mod threads;
50pub(crate) mod to_device;
51pub(crate) mod tuwunel;
52pub(crate) mod typing;
53pub(crate) mod unstable;
54pub(crate) mod user_directory;
55pub(crate) mod versions;
56pub(crate) mod voip;
57pub(crate) mod well_known;
58
59mod utils;
60
61pub(crate) use self::{
62 account::{
63 add_3pid_route, change_password_route, deactivate_route, delete_3pid_route,
64 get_email_validate_route, post_email_validate_route,
65 request_3pid_management_token_via_email_route,
66 request_3pid_management_token_via_msisdn_route,
67 request_password_change_token_via_email_route,
68 request_registration_token_via_email_route, third_party_route, whoami_route,
69 },
70 account_data::{
71 delete_global_account_data_route, delete_room_account_data_route,
72 get_global_account_data_route, get_room_account_data_route, is_empty_account_data_event,
73 set_global_account_data_route, set_room_account_data_route,
74 },
75 alias::{create_alias_route, delete_alias_route, get_alias_route},
76 appservice::appservice_ping,
77 backup::{
78 add_backup_keys_for_room_route, add_backup_keys_for_session_route, add_backup_keys_route,
79 create_backup_version_route, delete_backup_keys_for_room_route,
80 delete_backup_keys_for_session_route, delete_backup_keys_route,
81 delete_backup_version_route, get_backup_info_route, get_backup_keys_for_room_route,
82 get_backup_keys_for_session_route, get_backup_keys_route, get_latest_backup_info_route,
83 update_backup_version_route,
84 },
85 capabilities::get_capabilities_route,
86 context::get_context_route,
87 dehydrated_device::{
88 delete_dehydrated_device_route, get_dehydrated_device_route,
89 get_dehydrated_events_by_body_route, get_dehydrated_events_route,
90 put_dehydrated_device_route,
91 },
92 delayed_events::{
93 get_delayed_event_route, get_delayed_events_route, send_delayed_event_route,
94 send_message_event_or_delayed_route, send_state_event_or_delayed_route,
95 update_delayed_event_by_body_route, update_delayed_event_route,
96 },
97 device::{
98 delete_device_route, delete_devices_route, get_device_route, get_devices_route,
99 update_device_route,
100 },
101 directory::{
102 get_public_rooms_filtered_route, get_public_rooms_route, get_room_visibility_route,
103 set_room_visibility_route,
104 },
105 events::events_route,
106 filter::{create_filter_route, get_filter_route},
107 keys::{
108 claim_keys_route, get_key_changes_route, get_keys_route, upload_keys_route,
109 upload_signatures_route, upload_signing_keys_route,
110 },
111 media::{
112 create_content_async_route, create_content_route, create_mxc_uri_route,
113 get_content_as_filename_route, get_content_route, get_content_thumbnail_route,
114 get_media_config_route, get_media_preview_route,
115 },
116 media_legacy::{
117 get_content_as_filename_legacy_route, get_content_legacy_route,
118 get_content_thumbnail_legacy_route, get_media_config_legacy_route,
119 get_media_preview_legacy_route,
120 },
121 membership::{
122 ban_user_route, forget_room_route, get_member_events_route, invite_user_route,
123 join_room_by_id_or_alias_route, join_room_by_id_route, joined_members_route,
124 joined_rooms_route, kick_user_route, knock_room_route, leave_room_route,
125 unban_user_route,
126 },
127 message::{get_message_events_route, ignored_filter, is_ignored_pdu},
128 openid::create_openid_token_route,
129 presence::{get_presence_route, set_presence_route},
130 profile::{
131 delete_profile_field_route, get_profile_field_route, get_profile_route,
132 set_profile_field_route,
133 },
134 push::{
135 delete_pushrule_route, get_notifications_route, get_pushers_route,
136 get_pushrule_actions_route, get_pushrule_enabled_route, get_pushrule_route,
137 get_pushrules_all_route, get_pushrules_global_route, set_pushers_route,
138 set_pushrule_actions_route, set_pushrule_enabled_route, set_pushrule_route,
139 },
140 read_marker::{create_receipt_route, set_read_marker_route},
141 redact::redact_event_route,
142 register::{check_registration_token_validity, get_register_available_route, register_route},
143 relations::{
144 get_relating_events_route, get_relating_events_with_rel_type_and_event_type_route,
145 get_relating_events_with_rel_type_route,
146 },
147 rendezvous::{
148 create_msc4388_route, create_rendezvous_route, delete_msc4388_route,
149 delete_rendezvous_route, discover_msc4388_route, get_msc4388_route, get_rendezvous_route,
150 put_msc4388_route, put_rendezvous_route,
151 },
152 report::{report_event_route, report_room_route, report_user_route},
153 room::{
154 create_room_route, get_event_by_timestamp_route, get_room_aliases_route,
155 get_room_event_route, get_room_summary, get_room_summary_legacy, room_initial_sync_route,
156 upgrade_room_route,
157 },
158 rtc::get_transports_route,
159 search::search_events_route,
160 session::{
161 get_login_types_route, login_route, login_token_route, logout_all_route, logout_route,
162 refresh_token_route, sso_callback_route, sso_complete_js_route, sso_css_route,
163 sso_fallback_route, sso_login_route, sso_login_with_provider_route,
164 },
165 space::get_hierarchy_route,
166 state::{
167 get_state_events_for_empty_key_route, get_state_events_for_key_route,
168 get_state_events_route,
169 },
170 sync::{sync_events_route, sync_events_v5_route},
171 tag::{delete_tag_route, get_tags_route, update_tag_route},
172 thirdparty::{
173 get_location_for_protocol_route, get_location_for_room_alias_route, get_protocol_route,
174 get_protocols_route, get_user_for_protocol_route, get_user_for_user_id_route,
175 },
176 threads::get_threads_route,
177 to_device::send_event_to_device_route,
178 tuwunel::{tuwunel_local_user_count, tuwunel_remote_version, tuwunel_server_version},
179 typing::create_typing_event_route,
180 unstable::get_mutual_rooms_route,
181 user_directory::search_users_route,
182 versions::get_supported_versions_route,
183 voip::turn_server_route,
184 well_known::{well_known_client, well_known_support},
185};
186pub use self::{
187 context::{ContextArgs, event_context},
188 directory::get_public_rooms_filtered_helper,
189 keys::{claim_keys_helper, get_keys_helper},
190 message::{MessagesArgs, get_messages, with_membership},
191 notice::{notice_tag, room_is_notice},
192 space::{HierarchyArgs, get_client_hierarchy},
193 sync::calculate_heroes,
194};
195
196const TOKEN_LENGTH: usize = tuwunel_service::users::device::TOKEN_LENGTH;
198
199const SESSION_ID_LENGTH: usize = tuwunel_service::uiaa::SESSION_ID_LENGTH;
201
202#[inline]
207async fn visibility_filter(
208 services: &Services,
209 item: PdusIterItem,
210 user_id: &UserId,
211) -> Option<PdusIterItem> {
212 let (_, pdu) = &item;
213
214 services
215 .state_accessor
216 .user_can_see_event(user_id, pdu)
217 .await
218 .then_some(item)
219}
220
221tuwunel_core::mod_ctor! {}
222tuwunel_core::mod_dtor! {}