daemon: Token store
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user