ForgeFlux/src/auth/adapter/mod.rs

54 lines
1.6 KiB
Rust

use std::sync::Arc;
use actix_web::web;
use sqlx::postgres::PgPool;
pub mod input;
pub mod out;
use crate::settings;
use out::db::postgres::DBOutPostgresAdapter;
use out::forge::{forge_repository::ForgeRepository, forgejo::Forgejo};
use input::web::types::*;
pub fn load_adapters(
pool: PgPool,
settings: &settings::Settings,
) -> impl FnOnce(&mut web::ServiceConfig) {
let forgejo = Forgejo::new(
settings.forges.forgejo.url.clone(),
settings.forges.forgejo.client_id.clone(),
settings.forges.forgejo.client_secret.clone(),
);
let forge_repository_interface =
WebForgeRepositoryInterface::new(Arc::new(ForgeRepository::new(forgejo)));
let db = DBOutPostgresAdapter::new(pool);
let save_oauth_state_adapter: WebSaveOauthState = WebSaveOauthState::new(Arc::new(db.clone()));
let delete_oauth_state_adapter: WebDeleteOauthState =
WebDeleteOauthState::new(Arc::new(db.clone()));
let save_oauth_access_token: WebSaveOAuthAccessToken =
WebSaveOAuthAccessToken::new(Arc::new(db.clone()));
let oauth_state_exists_adapter: WebOauthStateExists =
WebOauthStateExists::new(Arc::new(db.clone()));
let s = WebSettings::new(settings.clone());
let f = move |cfg: &mut web::ServiceConfig| {
cfg.app_data(save_oauth_state_adapter);
cfg.app_data(delete_oauth_state_adapter);
cfg.app_data(save_oauth_access_token);
cfg.app_data(oauth_state_exists_adapter);
cfg.app_data(forge_repository_interface);
cfg.app_data(s);
cfg.configure(input::web::load_ctx());
};
Box::new(f)
}