server-dash-api/src/main.rs
2026-05-21 19:16:22 -07:00

53 lines
1.7 KiB
Rust

use axum::middleware;
use axum::response::Redirect;
use axum::{Router, routing::get, routing::post};
use std::sync::Arc;
mod auth;
mod config;
mod models;
mod routes;
#[tokio::main]
async fn main() {
let state = Arc::new(auth::AppState::new());
let protected = Router::new()
.route("/stats", get(routes::stats::get_stats))
.route("/power", get(routes::power::get_power))
.route("/power/{device}/on", post(routes::power::power_on))
.route("/power/{device}/off", post(routes::power::power_off))
.route(
"/services/{service}/restart",
post(routes::services::restart_service),
)
.route(
"/services/{service}/start",
post(routes::services::start_service),
)
.route(
"/services/{service}/stop",
post(routes::services::stop_service),
)
.route(
"/services/{service}/logs",
get(routes::services::service_logs),
)
.route("/system/reboot", post(routes::system::system_reboot))
.route("/system/shutdown", post(routes::system::system_shutdown))
.route_layer(middleware::from_fn(auth::require_auth));
let app = Router::new()
.route("/", get(|| async { Redirect::permanent("/stats") }))
.route("/auth/login", post(auth::post_login))
.route("/auth/verify", post(auth::post_verify))
.route("/auth/register/start", post(auth::post_register_start))
.route("/auth/register/finish", post(auth::post_register_finish))
.merge(protected)
.with_state(state);
let listener = tokio::net::TcpListener::bind("127.0.0.1:3001")
.await
.unwrap();
axum::serve(listener, app).await.unwrap();
}