implement signed session data
This commit is contained in:
@@ -1,38 +1,45 @@
|
||||
use crate::shared::models::app::{AuthAPI, CodeLoggedInSession, CodeLoginData, Icon, KeyLoggedInSession};
|
||||
use crate::shared::models::email::Email;
|
||||
use crate::shared::models::opaque::UserSecretKey;
|
||||
use crate::shared::email::Email;
|
||||
use crate::shared::opaque::UserSecretKey;
|
||||
use anyhow::Result;
|
||||
use async_trait::async_trait;
|
||||
use nkode_rs::nkode_core::policy::{NKodePolicy, DEFAULT_POLICY};
|
||||
use crate::client::opaque::{OpaqueAuthData, OpaqueAuth, ServerConnectionLogin, ServerConnectionRegister};
|
||||
use crate::shared::models::store::UserAuthStore;
|
||||
use crate::shared::signed_session_data::SignedSessionData;
|
||||
use crate::shared::user_api::UserAPI;
|
||||
|
||||
pub struct ClientAuth<'a, R, U>
|
||||
where
|
||||
R: ServerConnectionRegister + ServerConnectionLogin + Clone,
|
||||
U: UserAuthStore
|
||||
R: ServerConnectionRegister + ServerConnectionLogin,
|
||||
U: UserAPI
|
||||
{
|
||||
opaque_key_register: OpaqueAuth<'a, R>,
|
||||
opaque_key_login: OpaqueAuth<'a, R>,
|
||||
opaque_code_register: OpaqueAuth<'a, R>,
|
||||
opaque_code_login: OpaqueAuth<'a, R>,
|
||||
user_store: U
|
||||
user_api: U
|
||||
}
|
||||
|
||||
#[async_trait]
|
||||
impl<'a, R, U> AuthAPI for ClientAuth<'a, R, U>
|
||||
where
|
||||
R: ServerConnectionRegister + ServerConnectionLogin + Clone + Sync + Send,
|
||||
U: UserAuthStore + Sync + Send,
|
||||
R: ServerConnectionRegister + ServerConnectionLogin,
|
||||
U: UserAPI,
|
||||
{
|
||||
async fn register_key(&self, email: &Email, secret_key: &UserSecretKey) -> Result<(), String> {
|
||||
let auth_data = OpaqueAuthData::from_secret_key(email.as_str(), secret_key.as_slice());
|
||||
self.opaque_key_register.register(&auth_data).await.map_err(|e| format!("error: {}", e))
|
||||
}
|
||||
|
||||
async fn register_code(&self, email: &Email, passcode: &[u64], key_login_session: &KeyLoggedInSession, data: &CodeLoginData) -> Result<(), String> {
|
||||
async fn register_code(&self, email: &Email, passcode: &[u64], key_login_session: &KeyLoggedInSession, data: CodeLoginData) -> Result<(), String> {
|
||||
let auth_data = OpaqueAuthData::from_code(email.as_str(), passcode);
|
||||
self.opaque_code_register.register(&auth_data).await.map_err(|e| format!("error: {}", e))
|
||||
self.opaque_code_register.register(&auth_data).await.map_err(|e| format!("error: {}", e))?;
|
||||
let signed_session = SignedSessionData::new(
|
||||
key_login_session.0.session_id,
|
||||
data,
|
||||
&key_login_session.0.session_key
|
||||
).map_err(|e| format!("error: {e:?}"))?;
|
||||
self.user_api.set_code_login_data(signed_session).await
|
||||
}
|
||||
|
||||
async fn login_key(&self, email: &Email, secret_key: &UserSecretKey) -> Result<KeyLoggedInSession, String> {
|
||||
@@ -49,28 +56,29 @@ where
|
||||
|
||||
async fn get_new_icons(
|
||||
&self,
|
||||
key_login_session: &KeyLoggedInSession,
|
||||
) -> Result<Vec<Icon>, String> {
|
||||
// self.nkode_api
|
||||
// .get_new_icons(key_login_session)
|
||||
// .await
|
||||
//
|
||||
todo!()
|
||||
self.user_api.get_new_icons().await
|
||||
}
|
||||
|
||||
async fn get_login_data(
|
||||
&self,
|
||||
key_login_session: &KeyLoggedInSession,
|
||||
) -> Result<CodeLoginData, String> {
|
||||
// self.nkode_api
|
||||
// .get_login_data(key_login_session)
|
||||
// .await
|
||||
todo!()
|
||||
let session = SignedSessionData::new(
|
||||
key_login_session.0.session_id,
|
||||
key_login_session.0.email.clone(),
|
||||
&key_login_session.0.session_key
|
||||
).map_err(|e| format!("error: {e:?}"))?;
|
||||
self.user_api.get_login_data(session).await
|
||||
}
|
||||
|
||||
async fn is_code_registered(&self, key_login_session: &KeyLoggedInSession) -> Result<bool, String> {
|
||||
// self.nkode_api.is_code_registered(key_login_session).await
|
||||
todo!()
|
||||
let session = SignedSessionData::new(
|
||||
key_login_session.0.session_id,
|
||||
key_login_session.0.email.clone(),
|
||||
&key_login_session.0.session_key
|
||||
).map_err(|e| format!("error: {e:?}"))?;
|
||||
self.user_api.is_code_registered(session).await
|
||||
}
|
||||
|
||||
async fn get_policy(&self) -> Result<NKodePolicy, String> {
|
||||
|
||||
Reference in New Issue
Block a user