oauth2
This commit is contained in:
36
src/initializers/oauth2.rs
Normal file
36
src/initializers/oauth2.rs
Normal file
@@ -0,0 +1,36 @@
|
||||
//! Builds the loco-oauth2 client store from `initializers.oauth2` config and
|
||||
//! injects it as an Axum extension so the oauth2 controllers can reach it.
|
||||
|
||||
use axum::{Extension, Router as AxumRouter};
|
||||
use loco_oauth2::{config::Config as OAuth2Config, OAuth2ClientStore};
|
||||
use loco_rs::prelude::*;
|
||||
|
||||
pub struct OAuth2StoreInitializer;
|
||||
|
||||
#[async_trait]
|
||||
impl Initializer for OAuth2StoreInitializer {
|
||||
fn name(&self) -> String {
|
||||
"oauth2-store".to_string()
|
||||
}
|
||||
|
||||
async fn after_routes(&self, router: AxumRouter, ctx: &AppContext) -> Result<AxumRouter> {
|
||||
let settings = ctx.config.initializers.clone().ok_or_else(|| {
|
||||
Error::Message("Initializers config not configured for OAuth2".to_string())
|
||||
})?;
|
||||
let oauth2_config_value = settings
|
||||
.get("oauth2")
|
||||
.ok_or_else(|| {
|
||||
Error::Message("oauth2 config not found in initializers configuration".to_string())
|
||||
})?
|
||||
.clone();
|
||||
let oauth2_config: OAuth2Config = oauth2_config_value.try_into().map_err(|e| {
|
||||
tracing::error!(error = ?e, "could not convert oauth2 config from yaml");
|
||||
Error::Message("could not convert oauth2 config from yaml".to_string())
|
||||
})?;
|
||||
let oauth2_store = OAuth2ClientStore::new(oauth2_config).map_err(|e| {
|
||||
tracing::error!(error = ?e, "could not create oauth2 store from config");
|
||||
Error::Message("could not create oauth2 store from config".to_string())
|
||||
})?;
|
||||
Ok(router.layer(Extension(oauth2_store)))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user