This commit is contained in:
Jacob Lifshay 2024-04-08 01:50:25 -07:00
commit 663af59488
Signed by: programmerjake
SSH key fingerprint: SHA256:B1iRVvUJkvd7upMIiMqn6OyxvD2SgJkAH3ZnUOj6z+c
8 changed files with 3534 additions and 0 deletions

54
src/main.rs Normal file
View file

@ -0,0 +1,54 @@
use crate::cli::{Listen, ListenFdSocket, ListenFdSockets};
use actix_session::{
config::{BrowserSession, SessionMiddlewareBuilder},
storage::CookieSessionStore,
SessionMiddleware,
};
use actix_web::{cookie::Key, web, App, HttpServer};
use clap::Parser;
use listenfd::ListenFd;
mod app;
mod cli;
mod config;
#[tokio::main]
async fn main() -> eyre::Result<()> {
let mut listenfd = ListenFd::from_env();
color_eyre::install()?;
let mut args = cli::CLI::parse();
args.resolve(&mut listenfd).await?;
let config = web::Data::new(args.config);
let cookie_session_key = Key::generate();
let mut server = HttpServer::new(move || {
let cookie_session =
SessionMiddleware::builder(CookieSessionStore::default(), cookie_session_key.clone())
.cookie_name("session".into())
.build();
App::new()
.wrap(cookie_session)
.app_data(config.clone())
.configure(app::all_services)
});
let Listen {
listen_tcp,
listen_unix,
listen_fd,
} = &mut args.listen;
for sock in listen_tcp.iter() {
server = server.bind_auto_h2c(sock)?;
}
for sock in listen_unix.iter() {
server = server.bind_uds(sock)?;
}
if let Some(ListenFdSockets(sockets)) = listen_fd {
for sock in sockets.drain(..) {
server = match sock {
ListenFdSocket::Tcp(sock) => server.listen_auto_h2c(sock)?,
ListenFdSocket::Unix(sock) => server.listen_uds(sock)?,
};
}
}
server.run().await?;
Ok(())
}