Skip to main content

tuwunel_api_client/keys/
mod.rs

1mod claim_keys;
2mod get_key_changes;
3mod get_keys;
4mod upload_keys;
5mod upload_signatures;
6mod upload_signing_keys;
7
8use std::{collections::BTreeMap, num::NonZeroUsize, time::Duration};
9
10pub use claim_keys::claim_keys_helper;
11pub(crate) use claim_keys::claim_keys_route;
12pub(crate) use get_key_changes::get_key_changes_route;
13pub use get_keys::get_keys_helper;
14pub(crate) use get_keys::get_keys_route;
15use serde_json::{Value as JsonValue, json};
16use tuwunel_core::debug_warn;
17use tuwunel_service::{
18	Services,
19	federation::feds::{Fault, Faults, Opts},
20};
21pub(crate) use upload_keys::upload_keys_route;
22pub(crate) use upload_signatures::upload_signatures_route;
23pub(crate) use upload_signing_keys::upload_signing_keys_route;
24
25type FailureMap = BTreeMap<String, JsonValue>;
26
27fn federation_opts(services: &Services) -> Opts {
28	let config = &services.server.config.federation;
29
30	Opts {
31		width: NonZeroUsize::new(config.fanout.max_width),
32		timeout: Some(Duration::from_secs(config.transport.keys_timeout)),
33		..Default::default()
34	}
35}
36
37fn federation_failures(
38	endpoint: &'static str,
39	faults: Faults,
40) -> impl Iterator<Item = (String, JsonValue)> {
41	faults.into_iter().map(move |(server, fault)| {
42		match &fault {
43			| Fault::Error(error) =>
44				debug_warn!(%server, %error, endpoint, "key federation request failed"),
45			| _ => debug_warn!(%server, ?fault, endpoint, "key federation request failed"),
46		}
47
48		(server.to_string(), json!({}))
49	})
50}