first commit
This commit is contained in:
64
auth-api/src/main.rs
Normal file
64
auth-api/src/main.rs
Normal file
@@ -0,0 +1,64 @@
|
||||
mod routes;
|
||||
mod tokens;
|
||||
|
||||
use axum::{routing::post, Router};
|
||||
use sqlx::postgres::PgPoolOptions;
|
||||
use std::sync::Arc;
|
||||
use tokens::TokenService;
|
||||
use tower_http::cors::{Any, CorsLayer};
|
||||
use tower_http::trace::TraceLayer;
|
||||
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct AppState {
|
||||
pub db: sqlx::PgPool,
|
||||
pub tokens: Arc<TokenService>,
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> anyhow::Result<()> {
|
||||
dotenvy::dotenv().ok();
|
||||
tracing_subscriber::registry()
|
||||
.with(tracing_subscriber::EnvFilter::new(
|
||||
std::env::var("RUST_LOG").unwrap_or_else(|_| "auth_api=debug,tower_http=debug".into()),
|
||||
))
|
||||
.with(tracing_subscriber::fmt::layer())
|
||||
.init();
|
||||
|
||||
let database_url = std::env::var("DATABASE_URL").expect("DATABASE_URL must be set");
|
||||
let jwt_secret = std::env::var("JWT_SECRET").expect("JWT_SECRET must be set");
|
||||
|
||||
let db = PgPoolOptions::new()
|
||||
.max_connections(5)
|
||||
.connect(&database_url)
|
||||
.await?;
|
||||
|
||||
sqlx::migrate!("../../db/migrations")
|
||||
.run(&db)
|
||||
.await?;
|
||||
|
||||
let state = AppState {
|
||||
db,
|
||||
tokens: Arc::new(TokenService::new(jwt_secret)),
|
||||
};
|
||||
|
||||
let cors = CorsLayer::new()
|
||||
.allow_origin(Any)
|
||||
.allow_headers(Any)
|
||||
.allow_methods(Any);
|
||||
|
||||
let app = Router::new()
|
||||
.route("/register", post(routes::register::register))
|
||||
.route("/login", post(routes::login::login))
|
||||
.route("/refresh", post(routes::refresh::refresh))
|
||||
.route("/logout", post(routes::logout::logout))
|
||||
.layer(cors)
|
||||
.layer(TraceLayer::new_for_http())
|
||||
.with_state(state);
|
||||
|
||||
let addr = "0.0.0.0:3001";
|
||||
tracing::info!("auth-api listening on {addr}");
|
||||
let listener = tokio::net::TcpListener::bind(addr).await?;
|
||||
axum::serve(listener, app).await?;
|
||||
Ok(())
|
||||
}
|
||||
Reference in New Issue
Block a user