Return encryption recovery status on API

This commit is contained in:
2025-11-10 08:32:17 +01:00
parent 70a246355b
commit 4a72411d65
4 changed files with 38 additions and 0 deletions

View File

@@ -9,6 +9,7 @@ use matrix_sdk::authentication::oauth::error::{
use matrix_sdk::authentication::oauth::{
ClientId, OAuthError, OAuthSession, UrlOrQuery, UserSession,
};
use matrix_sdk::encryption::recovery::RecoveryState;
use matrix_sdk::ruma::serde::Raw;
use matrix_sdk::{Client, ClientBuildError, RefreshTokenError};
use ractor::ActorRef;
@@ -25,6 +26,14 @@ struct StoredSession {
client_id: ClientId,
}
#[derive(Debug, Serialize, Deserialize, Copy, Clone)]
pub enum EncryptionRecoveryState {
Unknown,
Enabled,
Disabled,
Incomplete,
}
/// Matrix Gateway session errors
#[derive(thiserror::Error, Debug)]
enum MatrixClientError {
@@ -64,6 +73,8 @@ enum MatrixClientError {
FinishLogin(matrix_sdk::Error),
#[error("Failed to write session file! {0}")]
WriteSessionFile(std::io::Error),
#[error("Failed to rename device! {0}")]
RenameDevice(matrix_sdk::HttpError),
}
#[derive(serde::Deserialize)]
@@ -232,6 +243,19 @@ impl MatrixClient {
// Persist session tokens
self.save_stored_session().await?;
// Rename created session to give it a more explicit name
self.client
.rename_device(
self.client
.session_meta()
.context("Missing device ID!")?
.device_id
.as_ref(),
&AppConfig::get().website_origin,
)
.await
.map_err(MatrixClientError::RenameDevice)?;
Ok(())
}
@@ -304,4 +328,14 @@ impl MatrixClient {
Ok(())
}
/// Get current encryption keys recovery state
pub fn recovery_state(&self) -> EncryptionRecoveryState {
match self.client.encryption().recovery().state() {
RecoveryState::Unknown => EncryptionRecoveryState::Unknown,
RecoveryState::Enabled => EncryptionRecoveryState::Enabled,
RecoveryState::Disabled => EncryptionRecoveryState::Disabled,
RecoveryState::Incomplete => EncryptionRecoveryState::Incomplete,
}
}
}