From aa8c20d501b58001a5e1b24964c62363e2112ff8 Mon Sep 17 00:00:00 2001 From: benj Date: Fri, 25 Nov 2022 16:42:16 -0800 Subject: some shell is coming together and a rough API --- src/client/mod.rs | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 src/client/mod.rs (limited to 'src/client/mod.rs') diff --git a/src/client/mod.rs b/src/client/mod.rs new file mode 100644 index 0000000..bb32e2c --- /dev/null +++ b/src/client/mod.rs @@ -0,0 +1,81 @@ +pub mod sqldb; + +use thiserror::Error; +use uuid::Uuid; + +use super::Identity; + +#[derive(Error, Debug)] +pub enum StoreError { + #[error("sqlx client error")] + SqlxError(#[from] sqlx::Error), + #[error( + "More than one oauth provider identified, but no client_id was provided for disambiguation" + )] + TooManyOauthProviders, + #[error("Oath provider not registered. First register the Oauth provider before executing")] + OauthProviderNotRegistered, + #[error("An unknown error occurred")] + Unknown, +} + +#[async_trait::async_trait] +pub trait Store { + // async fn read_oauth_authorization_location( + // &self, + // provider: OauthProvider, + // client_id: Option, + // ) -> Result; + + // async fn write_oauth_authorization_request( + // &self, + // identity_id: Uuid, + // provider: OauthProvider, + // raw: String, + // state: String, + // ) -> Result<(), StoreError>; + + // async fn write_oauth_provider( + // &self, + // provider: OauthProvider, + // consent_uri: OauthConsentUri, + // client_id: OauthClientId, + // client_secret: OauthClientSecretEncrypted, + // redirect_uri: String, + // ) -> Result<(), StoreError>; + + // fn read_email_challenge(&self) -> Result; + // fn write_email_challenge(&self) -> Result; + + async fn write_email(&self, id: Uuid, email_address: &str) -> Result<(), StoreError>; + async fn write_email_validation_request( + &self, + id: Uuid, + email_address: &str, + ) -> Result; + + async fn find_identity( + &self, + id: Option<&Uuid>, + email: Option<&str>, + ) -> Result, StoreError>; + async fn write_identity(&self, i: &Identity) -> Result<(), StoreError>; + async fn read_identity(&self, id: &Uuid) -> Result; + + // fn read_sms_challenge(&self) -> Result; + // fn write_sms_challenge(&self) -> Result; +} + +// #[derive(sqlx::FromRow, Debug)] +// struct Identity { +// #[sqlx(rename = "identity_public_id")] +// id: Uuid, +// } + +// #[derive(sqlx::FromRow, Debug)] +// struct OauthProviderRecord { +// consent_uri: String, +// client_id: OauthClientId, +// client_secret_encrypted: OauthClientSecretEncrypted, +// redirect_uri: String, +// } -- cgit v1.2.3