use matrix_sdk::Client;
#[derive(Clone, Debug, PartialEq)]
pub enum CrossSigningState {
NotSetUp,
Setting,
Active,
Error(String),
}
impl Default for CrossSigningState {
fn default() -> Self {
Self::NotSetUp
}
}
pub async fn get_cross_signing_status(client: &Client) -> CrossSigningState {
let encryption = client.encryption();
match encryption.cross_signing_status().await {
Some(status) => {
if status.has_master && status.has_self_signing && status.has_user_signing {
CrossSigningState::Active
} else {
CrossSigningState::NotSetUp
}
}
None => CrossSigningState::NotSetUp,
}
}
pub async fn bootstrap_cross_signing(client: &Client) -> Result<(), String> {
let encryption = client.encryption();
tracing::info!("Bootstrapping cross-signing...");
encryption
.bootstrap_cross_signing(None)
.await
.map_err(|e| format!("Failed to bootstrap cross-signing: {e}"))?;
tracing::info!("Cross-signing bootstrapped successfully");
Ok(())
}