tuwunel_api_client/keys/
mod.rs1mod 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}