Skip to main content

tuwunel_api_client/
mod.rs

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;
36/// Provides the client route builder.
37///
38/// It assembles client endpoints using the server configuration.
39pub 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
196/// generated user access token length
197const TOKEN_LENGTH: usize = tuwunel_service::users::device::TOKEN_LENGTH;
198
199/// generated user session ID length
200const SESSION_ID_LENGTH: usize = tuwunel_service::uiaa::SESSION_ID_LENGTH;
201
202/// Keeps a timeline item only when the user may see its event.
203///
204/// The room's history visibility is read as it stood at that event rather than
205/// as it stands at the time of the request.
206#[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! {}