refactor(auth): setup convenience for OAuth
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
Signed-off-by: kjuulh <contact@kjuulh.io>
This commit is contained in:
parent
0bb7074334
commit
acde8b17e1
@ -1,4 +1,5 @@
|
|||||||
pub use introspection::IntrospectionConfigClap;
|
pub use introspection::IntrospectionConfigClap;
|
||||||
|
use oauth::{OAuth, ZitadelConfig};
|
||||||
|
|
||||||
mod introspection;
|
mod introspection;
|
||||||
mod oauth;
|
mod oauth;
|
||||||
@ -47,7 +48,16 @@ pub struct ZitadelClap {
|
|||||||
pub token_url: Option<String>,
|
pub token_url: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl AuthClap {}
|
impl TryFrom<AuthClap> for OAuth {
|
||||||
|
type Error = anyhow::Error;
|
||||||
|
|
||||||
|
fn try_from(value: AuthClap) -> Result<Self, Self::Error> {
|
||||||
|
match value.engine {
|
||||||
|
AuthEngine::Noop => Ok(OAuth::new_noop()),
|
||||||
|
AuthEngine::Zitadel => Ok(OAuth::from(ZitadelConfig::try_from(value.zitadel)?)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
|
@ -3,6 +3,8 @@ use oauth2::{basic::BasicClient, AuthUrl, ClientId, ClientSecret, RedirectUrl, T
|
|||||||
use std::ops::Deref;
|
use std::ops::Deref;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
use crate::ZitadelClap;
|
||||||
|
|
||||||
#[async_trait]
|
#[async_trait]
|
||||||
pub trait OAuthClient {
|
pub trait OAuthClient {
|
||||||
async fn get_token(&self) -> anyhow::Result<()>;
|
async fn get_token(&self) -> anyhow::Result<()>;
|
||||||
@ -104,6 +106,33 @@ impl From<ZitadelConfig> for ZitadelOAuthClient {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl TryFrom<ZitadelClap> for ZitadelConfig {
|
||||||
|
type Error = anyhow::Error;
|
||||||
|
|
||||||
|
fn try_from(value: ZitadelClap) -> Result<Self, Self::Error> {
|
||||||
|
Ok(Self {
|
||||||
|
auth_url: value
|
||||||
|
.auth_url
|
||||||
|
.ok_or(anyhow::anyhow!("auth_url was not set"))?,
|
||||||
|
client_id: value
|
||||||
|
.client_id
|
||||||
|
.ok_or(anyhow::anyhow!("client_id was not set"))?,
|
||||||
|
client_secret: value
|
||||||
|
.client_secret
|
||||||
|
.ok_or(anyhow::anyhow!("client_secret was not set"))?,
|
||||||
|
redirect_url: value
|
||||||
|
.redirect_url
|
||||||
|
.ok_or(anyhow::anyhow!("redirect_url was not set"))?,
|
||||||
|
token_url: value
|
||||||
|
.token_url
|
||||||
|
.ok_or(anyhow::anyhow!("token_url was not set"))?,
|
||||||
|
authority_url: value
|
||||||
|
.authority_url
|
||||||
|
.ok_or(anyhow::anyhow!("authority_url was not set"))?,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl OAuthClient for ZitadelOAuthClient {
|
impl OAuthClient for ZitadelOAuthClient {
|
||||||
async fn get_token(&self) -> anyhow::Result<()> {
|
async fn get_token(&self) -> anyhow::Result<()> {
|
||||||
@ -113,10 +142,7 @@ impl OAuthClient for ZitadelOAuthClient {
|
|||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use crate::{
|
use crate::ZitadelClap;
|
||||||
oauth::{OAuth, ZitadelConfig},
|
|
||||||
ZitadelClap,
|
|
||||||
};
|
|
||||||
use clap::Parser;
|
use clap::Parser;
|
||||||
use sealed_test::prelude::*;
|
use sealed_test::prelude::*;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user