Private
Public Access
1
0

daemon: Token store

This commit is contained in:
2025-04-27 14:01:19 -07:00
parent 84f782cc03
commit 49f8b81b9c
8 changed files with 51 additions and 26 deletions

View File

@@ -12,7 +12,7 @@ use thiserror::Error;
use tokio::sync::mpsc::{Sender, Receiver};
use std::sync::Arc;
use tokio::sync::Mutex;
use futures_util::FutureExt;
use async_trait::async_trait;
use kordophone_db::{
database::{Database, DatabaseAccess},
@@ -24,7 +24,7 @@ use kordophone::model::JwtToken;
use kordophone::api::{
http_client::{Credentials, HTTPAPIClient},
APIInterface,
TokenManagement,
TokenStore,
};
#[derive(Debug, Error)]
@@ -35,6 +35,21 @@ pub enum DaemonError {
pub type DaemonResult<T> = Result<T, Box<dyn Error + Send + Sync>>;
struct DatabaseTokenStore {
database: Arc<Mutex<Database>>,
}
#[async_trait]
impl TokenStore for DatabaseTokenStore {
async fn get_token(&mut self) -> Option<JwtToken> {
self.database.lock().await.get_token().await
}
async fn set_token(&mut self, token: JwtToken) {
self.database.lock().await.set_token(token).await;
}
}
pub struct Daemon {
pub event_sender: Sender<Event>,
event_receiver: Receiver<Event>,
@@ -122,7 +137,8 @@ impl Daemon {
}
),
_ => None,
}
},
DatabaseTokenStore { database: database.clone() }
);
// This function needed to implement TokenManagement
@@ -169,7 +185,7 @@ impl Daemon {
Ok(settings)
}
async fn get_client(&mut self) -> Result<HTTPAPIClient> {
async fn get_client(&mut self) -> Result<HTTPAPIClient<DatabaseTokenStore>> {
let settings = self.database.with_settings(|s|
Settings::from_db(s)
).await?;
@@ -188,7 +204,8 @@ impl Daemon {
}
),
_ => None,
}
},
DatabaseTokenStore { database: self.database.clone() }
);
Ok(client)