56 lines
2.1 KiB
Rust
56 lines
2.1 KiB
Rust
use std::sync::Arc;
|
|
|
|
use actix_web::{http::header, HttpResponse};
|
|
use url::Url;
|
|
|
|
use crate::forge::auth::application::port::input::ui::{
|
|
errors::*, login::RequestAuthorizationInterface,
|
|
};
|
|
use crate::forge::auth::application::port::out::db::save_oauth_state::SaveOAuthState;
|
|
use crate::forge::auth::application::port::out::forge::oauth_auth_req_uri::OAuthAuthReqUri;
|
|
use crate::forge::auth::application::services::request_authorization::{
|
|
command::RequestAuthorizationCommand, service::RequestAuthorizationService,
|
|
RequestAuthorizationUserCase,
|
|
};
|
|
//use crate::forge::auth::application::services::request_authorization::command::RequestAuthorizationCommand;
|
|
|
|
pub struct RequestAuthorizationHandler {
|
|
save_oauth_state_adapter: Arc<dyn SaveOAuthState>,
|
|
oauth_auth_req_uri_adapter: Arc<dyn OAuthAuthReqUri>,
|
|
process_authorization_response_redirect_uri: Url,
|
|
}
|
|
|
|
impl RequestAuthorizationHandler {
|
|
pub fn new(
|
|
save_oauth_state_adapter: Arc<dyn SaveOAuthState>,
|
|
oauth_auth_req_uri_adapter: Arc<dyn OAuthAuthReqUri>,
|
|
process_authorization_response_redirect_uri: Url,
|
|
) -> Self {
|
|
Self {
|
|
save_oauth_state_adapter,
|
|
oauth_auth_req_uri_adapter,
|
|
process_authorization_response_redirect_uri,
|
|
}
|
|
}
|
|
}
|
|
|
|
#[async_trait::async_trait]
|
|
impl RequestAuthorizationInterface for RequestAuthorizationHandler {
|
|
#[tracing::instrument(name = "web adapter request_oauth_authorization", skip(self))]
|
|
async fn request_oauth_authorization(&self, forge_name: String) -> InUIResult<HttpResponse> {
|
|
let service = RequestAuthorizationService::new(
|
|
self.save_oauth_state_adapter.clone(),
|
|
self.oauth_auth_req_uri_adapter.clone(),
|
|
self.process_authorization_response_redirect_uri.clone(),
|
|
);
|
|
|
|
log::info!("service found");
|
|
|
|
let cmd = RequestAuthorizationCommand::new_command(forge_name)?;
|
|
let auth_page = service.request_authorization(cmd).await?;
|
|
Ok(HttpResponse::Found()
|
|
.insert_header((header::LOCATION, auth_page.as_str()))
|
|
.finish())
|
|
}
|
|
}
|