Files
packager/rust/src/main.rs

60 lines
1.6 KiB
Rust
Raw Normal View History

2023-08-29 21:34:00 +02:00
use packager::{auth, routing, sqlite, AppState, ClientState, StartError};
2023-05-10 00:42:42 +02:00
2023-08-29 21:34:00 +02:00
use std::net::{IpAddr, SocketAddr};
use std::str::FromStr;
2023-05-08 00:05:45 +02:00
2023-08-29 21:34:00 +02:00
use clap::Parser;
#[derive(Parser, Debug)]
#[command(author, version, about, long_about = None)]
struct Args {
#[arg(long)]
2023-08-29 21:34:00 +02:00
database_url: String,
#[arg(long, default_value_t = 3000)]
port: u16,
2023-08-29 21:34:00 +02:00
#[arg(long)]
bind: String,
2023-08-29 21:34:00 +02:00
#[arg(long, name = "USERNAME")]
disable_auth_and_assume_user: Option<String>,
2023-08-29 21:34:00 +02:00
}
2023-05-08 00:05:45 +02:00
#[tokio::main]
2023-08-29 21:34:00 +02:00
async fn main() -> Result<(), StartError> {
2023-05-08 22:31:01 +02:00
tracing_subscriber::fmt()
.with_max_level(tracing::Level::DEBUG)
.init();
2023-08-29 21:34:00 +02:00
let args = Args::parse();
2023-08-29 21:34:00 +02:00
let database_pool = sqlite::init_database_pool(&args.database_url).await?;
2023-08-29 21:34:00 +02:00
sqlite::migrate(&database_pool).await?;
2023-05-10 00:42:42 +02:00
let state = AppState {
database_pool,
client_state: ClientState::new(),
2023-08-29 21:34:00 +02:00
auth_config: if let Some(assume_user) = args.disable_auth_and_assume_user {
2023-08-29 21:34:00 +02:00
auth::AuthConfig::Disabled { assume_user }
2023-08-29 21:34:00 +02:00
} else {
2023-08-29 21:34:00 +02:00
auth::AuthConfig::Enabled
2023-08-29 21:34:00 +02:00
},
2023-05-10 00:42:42 +02:00
};
2023-05-08 00:05:45 +02:00
// build our application with a route
2023-08-29 21:34:00 +02:00
let app = routing::router(state);
2023-08-29 21:34:00 +02:00
let addr = SocketAddr::from((
IpAddr::from_str(&args.bind)
.map_err(|error| format!("error parsing bind address {}: {}", &args.bind, error))
.unwrap(),
args.port,
));
2023-05-08 00:05:45 +02:00
tracing::debug!("listening on {}", addr);
2023-08-29 21:34:00 +02:00
axum::Server::try_bind(&addr)
.map_err(|error| format!("error binding to {}: {}", addr, error))
.unwrap()
2023-05-08 00:05:45 +02:00
.serve(app.into_make_service())
.await
.unwrap();
Ok(())
}