aboutsummaryrefslogtreecommitdiff
path: root/crates/secd/src/command/admin.rs
diff options
context:
space:
mode:
authorbenj <benj@rse8.com>2022-12-12 17:06:57 -0800
committerbenj <benj@rse8.com>2022-12-12 17:06:57 -0800
commit0920c4d4f30a3345870d385d5c6f3e0919228b56 (patch)
treef54668d91db469b7304758893a51b590c8f9b0de /crates/secd/src/command/admin.rs
parent3a4de13528fc85dcbe6bc9055d97ba5cc87f5712 (diff)
downloadsecdiam-0920c4d4f30a3345870d385d5c6f3e0919228b56.tar
secdiam-0920c4d4f30a3345870d385d5c6f3e0919228b56.tar.gz
secdiam-0920c4d4f30a3345870d385d5c6f3e0919228b56.tar.bz2
secdiam-0920c4d4f30a3345870d385d5c6f3e0919228b56.tar.lz
secdiam-0920c4d4f30a3345870d385d5c6f3e0919228b56.tar.xz
secdiam-0920c4d4f30a3345870d385d5c6f3e0919228b56.tar.zst
secdiam-0920c4d4f30a3345870d385d5c6f3e0919228b56.zip
(oauth2 + email added): a mess that may or may not really work and needs to be refactored...
Diffstat (limited to 'crates/secd/src/command/admin.rs')
-rw-r--r--crates/secd/src/command/admin.rs57
1 files changed, 57 insertions, 0 deletions
diff --git a/crates/secd/src/command/admin.rs b/crates/secd/src/command/admin.rs
new file mode 100644
index 0000000..b04dbef
--- /dev/null
+++ b/crates/secd/src/command/admin.rs
@@ -0,0 +1,57 @@
+use std::str::FromStr;
+
+use time::OffsetDateTime;
+use url::Url;
+
+use crate::{OauthProviderName, Secd, SecdError};
+
+impl OauthProviderName {
+ fn base_url(&self) -> Url {
+ match self {
+ OauthProviderName::Google => {
+ Url::from_str("https://accounts.google.com/o/oauth2/v2/auth").unwrap()
+ }
+ OauthProviderName::Microsoft => {
+ Url::from_str("https://login.microsoftonline.com/common/oauth2/v2.0/authorize")
+ .unwrap()
+ }
+ _ => unimplemented!(),
+ }
+ }
+
+ fn default_scope(&self) -> String {
+ match self {
+ OauthProviderName::Google => "openid%20email".into(),
+ OauthProviderName::Microsoft => "openid%20email".into(),
+ _ => unimplemented!(),
+ }
+ }
+}
+
+impl Secd {
+ pub async fn create_oauth_provider(
+ &self,
+ provider: &OauthProviderName,
+ client_id: String,
+ client_secret: String,
+ redirect_url: Url,
+ ) -> Result<(), SecdError> {
+ self.store
+ .write_oauth_provider(&crate::OauthProvider {
+ name: provider.clone(),
+ flow: Some("default".into()),
+ base_url: provider.base_url(),
+ response: crate::OauthResponseType::Code,
+ default_scope: provider.default_scope(),
+ client_id,
+ client_secret,
+ redirect_url,
+ created_at: OffsetDateTime::now_utc(),
+ deleted_at: None,
+ })
+ .await
+ .map_err(|_| SecdError::Todo)?;
+
+ Ok(())
+ }
+}