aboutsummaryrefslogtreecommitdiff
path: root/crates/secd/src/command/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--crates/secd/src/command/mod.rs58
1 files changed, 33 insertions, 25 deletions
diff --git a/crates/secd/src/command/mod.rs b/crates/secd/src/command/mod.rs
index cd0d8c3..c14cf6c 100644
--- a/crates/secd/src/command/mod.rs
+++ b/crates/secd/src/command/mod.rs
@@ -1,42 +1,54 @@
-pub mod admin;
pub mod authn;
-use crate::client::{
- email,
- sqldb::{PgClient, SqliteClient},
+use super::{AuthEmailMessenger, AuthStore, Secd, SecdError};
+use crate::{
+ client::{
+ email,
+ store::sql_db::{PgClient, SqliteClient},
+ },
+ ENV_AUTH_STORE_CONN_STRING, ENV_EMAIL_MESSENGER, ENV_EMAIL_MESSENGER_CLIENT_ID,
+ ENV_EMAIL_MESSENGER_CLIENT_SECRET,
};
-use crate::{AuthEmail, AuthStore, Secd, SecdError};
-use log::error;
-use std::sync::Arc;
+use log::{error, info};
+use std::{env::var, str::FromStr, sync::Arc};
impl Secd {
/// init
///
/// Initialize SecD with the specified configuration, established the necessary
/// constraints, persistance stores, and options.
- pub async fn init(
- auth_store: AuthStore,
- conn_string: Option<&str>,
- email_messenger: AuthEmail,
- email_template_login: Option<String>,
- email_template_signup: Option<String>,
- ) -> Result<Self, SecdError> {
+ pub async fn init() -> Result<Self, SecdError> {
+ let auth_store = AuthStore::from(var(ENV_AUTH_STORE_CONN_STRING).ok());
+ let email_messenger = AuthEmailMessenger::from_str(
+ &var(ENV_EMAIL_MESSENGER).unwrap_or(AuthEmailMessenger::Local.to_string()),
+ )
+ .expect("unreachable f4ad0f48-0812-427f-b477-0f9c67bb69c5");
+ let email_messenger_client_id = var(ENV_EMAIL_MESSENGER_CLIENT_ID).ok();
+ let email_messenger_client_secret = var(ENV_EMAIL_MESSENGER_CLIENT_SECRET).ok();
+
+ info!("starting client with auth_store: {:?}", auth_store);
+ info!("starting client with email_messenger: {:?}", auth_store);
+
let store = match auth_store {
- AuthStore::Sqlite => {
+ AuthStore::Sqlite { conn } => {
SqliteClient::new(
sqlx::sqlite::SqlitePoolOptions::new()
- .connect(conn_string.unwrap_or("sqlite::memory:".into()))
+ .connect(&conn)
.await
- .map_err(|e| SecdError::InitializationFailure(e))?,
+ .map_err(|e| {
+ SecdError::StoreInitFailure(format!("failed to init sqlite: {}", e))
+ })?,
)
.await
}
- AuthStore::Postgres => {
+ AuthStore::Postgres { conn } => {
PgClient::new(
sqlx::postgres::PgPoolOptions::new()
- .connect(conn_string.expect("No postgres connection string provided."))
+ .connect(&conn)
.await
- .map_err(|e| SecdError::InitializationFailure(e))?,
+ .map_err(|e| {
+ SecdError::StoreInitFailure(format!("failed to init sqlite: {}", e))
+ })?,
)
.await
}
@@ -50,11 +62,7 @@ impl Secd {
};
let email_sender = match email_messenger {
- // TODO: initialize email and SMS templates with secd
- AuthEmail::LocalStub => email::LocalEmailStubber {
- email_template_login,
- email_template_signup,
- },
+ AuthEmailMessenger::Local => email::LocalMailer {},
_ => unimplemented!(),
};