All checks were successful
Frontend CI / build (push) Successful in 1m7s
### Description - Login with configured OIDC issuer, and then save the logged in information in server session. - Endpoints: - GET `/auth/login` - GET `/auth/callback` - GET `/auth/logout` ### Package Changes ```toml actix-session = { version = "0.10.1", features = ["redis-session"] } hex = "0.4.3" openidconnect = { version = "4.0.1", features = [ "reqwest", "reqwest-blocking", ] } ``` ### Screenshots <video src="attachments/8b15b576-61db-41b9-8587-b4b885018c93" title="Screencast From 2025-07-30 03-34-26.mp4" controls></video> ### Reference Resolves #85 ### Checklist - [x] A milestone is set - [x] The related issuse has been linked to this branch Reviewed-on: #93 Co-authored-by: SquidSpirit <squid@squidspirit.com> Co-committed-by: SquidSpirit <squid@squidspirit.com>
74 lines
2.3 KiB
Rust
74 lines
2.3 KiB
Rust
use actix_session::{
|
|
SessionMiddleware, config::SessionMiddlewareBuilder, storage::RedisSessionStore,
|
|
};
|
|
use actix_web::{
|
|
App, Error, HttpServer,
|
|
body::MessageBody,
|
|
dev::{ServiceFactory, ServiceRequest, ServiceResponse},
|
|
web,
|
|
};
|
|
use auth::framework::web::auth_web_routes::configure_auth_routes;
|
|
use image::framework::web::image_web_routes::configure_image_routes;
|
|
use openidconnect::reqwest;
|
|
use post::framework::web::post_web_routes::configure_post_routes;
|
|
use server::{configuration::Configuration, container::Container};
|
|
use sqlx::{Pool, Postgres};
|
|
|
|
#[actix_web::main]
|
|
async fn main() -> std::io::Result<()> {
|
|
dotenv::dotenv().ok();
|
|
env_logger::init();
|
|
|
|
let http_client = reqwest::ClientBuilder::new()
|
|
.redirect(reqwest::redirect::Policy::none())
|
|
.build()
|
|
.expect("Failed to create HTTP client");
|
|
|
|
let configuration = Configuration::new(http_client.clone()).await;
|
|
|
|
let host = configuration.server.host.clone();
|
|
let port = configuration.server.port;
|
|
|
|
let db_pool = configuration.db.create_connection().await;
|
|
let session_key = configuration.session.session_key.clone();
|
|
let session_store = configuration.session.create_session_store().await;
|
|
|
|
HttpServer::new(move || {
|
|
create_app(
|
|
db_pool.clone(),
|
|
http_client.clone(),
|
|
SessionMiddleware::builder(session_store.clone(), session_key.clone()),
|
|
configuration.clone(),
|
|
)
|
|
})
|
|
.bind((host, port))?
|
|
.run()
|
|
.await
|
|
}
|
|
|
|
fn create_app(
|
|
db_pool: Pool<Postgres>,
|
|
http_client: reqwest::Client,
|
|
session_middleware_builder: SessionMiddlewareBuilder<RedisSessionStore>,
|
|
configuration: Configuration,
|
|
) -> App<
|
|
impl ServiceFactory<
|
|
ServiceRequest,
|
|
Response = ServiceResponse<impl MessageBody>,
|
|
Config = (),
|
|
InitError = (),
|
|
Error = Error,
|
|
>,
|
|
> {
|
|
let container = Container::new(db_pool, http_client, configuration);
|
|
|
|
App::new()
|
|
.wrap(session_middleware_builder.build())
|
|
.app_data(web::Data::from(container.auth_controller))
|
|
.app_data(web::Data::from(container.image_controller))
|
|
.app_data(web::Data::from(container.post_controller))
|
|
.configure(configure_auth_routes)
|
|
.configure(configure_image_routes)
|
|
.configure(configure_post_routes)
|
|
}
|