2024-05-11 14:02:55 -04:00
|
|
|
use std::net::SocketAddr;
|
|
|
|
|
|
|
|
use axum::response::{Html, Redirect};
|
|
|
|
use axum::routing::post;
|
2025-03-08 21:54:03 -05:00
|
|
|
use axum::{Router, extract::Form, routing::get};
|
|
|
|
use kawari::config::get_config;
|
2024-05-11 14:02:55 -04:00
|
|
|
use kawari::setup_default_environment;
|
2025-03-08 21:54:03 -05:00
|
|
|
use minijinja::context;
|
2025-03-08 13:27:41 -05:00
|
|
|
use serde::{Deserialize, Serialize};
|
2024-05-11 14:02:55 -04:00
|
|
|
|
|
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
|
|
struct GateStatus {
|
|
|
|
status: i32,
|
|
|
|
}
|
|
|
|
|
|
|
|
async fn root() -> Html<String> {
|
|
|
|
let environment = setup_default_environment();
|
|
|
|
let template = environment.get_template("web.html").unwrap();
|
2025-03-08 13:27:41 -05:00
|
|
|
Html(template.render(context! {}).unwrap())
|
2024-05-11 14:02:55 -04:00
|
|
|
}
|
|
|
|
|
2024-05-11 14:10:49 -04:00
|
|
|
async fn login() -> Html<String> {
|
|
|
|
let environment = setup_default_environment();
|
|
|
|
let template = environment.get_template("login.html").unwrap();
|
2025-03-08 13:27:41 -05:00
|
|
|
Html(template.render(context! {}).unwrap())
|
2024-05-11 14:10:49 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
async fn register() -> Html<String> {
|
|
|
|
let environment = setup_default_environment();
|
|
|
|
let template = environment.get_template("register.html").unwrap();
|
2025-03-08 13:27:41 -05:00
|
|
|
Html(template.render(context! {}).unwrap())
|
2024-06-29 14:14:07 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
async fn world_status() -> Html<String> {
|
|
|
|
let config = get_config();
|
|
|
|
|
|
|
|
let environment = setup_default_environment();
|
|
|
|
let template = environment.get_template("worldstatus.html").unwrap();
|
2025-03-08 13:27:41 -05:00
|
|
|
Html(
|
|
|
|
template
|
|
|
|
.render(context! { login_open => config.login_open, worlds_open => config.worlds_open })
|
|
|
|
.unwrap(),
|
|
|
|
)
|
2024-05-11 14:10:49 -04:00
|
|
|
}
|
|
|
|
|
2024-05-11 14:02:55 -04:00
|
|
|
#[derive(Deserialize, Debug)]
|
|
|
|
#[allow(dead_code)]
|
|
|
|
struct Input {
|
2025-03-08 23:07:55 -05:00
|
|
|
login_open: Option<String>,
|
|
|
|
worlds_open: Option<String>,
|
2024-05-11 14:02:55 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
async fn apply(Form(input): Form<Input>) -> Redirect {
|
|
|
|
tracing::info!("Apply config changes...");
|
|
|
|
|
2025-03-08 23:07:55 -05:00
|
|
|
let mut config = get_config();
|
|
|
|
config.login_open = input.login_open == Some("1".to_string());
|
|
|
|
config.worlds_open = input.worlds_open == Some("1".to_string());
|
2024-05-11 14:02:55 -04:00
|
|
|
|
2025-03-08 13:27:41 -05:00
|
|
|
serde_json::to_writer(&std::fs::File::create("config.json").unwrap(), &config)
|
2024-05-11 14:02:55 -04:00
|
|
|
.expect("TODO: panic message");
|
|
|
|
|
|
|
|
Redirect::to("/")
|
|
|
|
}
|
|
|
|
|
|
|
|
#[tokio::main]
|
|
|
|
async fn main() {
|
|
|
|
tracing_subscriber::fmt::init();
|
|
|
|
|
|
|
|
let app = Router::new()
|
|
|
|
.route("/", get(root))
|
2024-05-11 14:10:49 -04:00
|
|
|
.route("/login", get(login))
|
|
|
|
.route("/register", get(register))
|
2024-06-29 14:14:07 -04:00
|
|
|
.route("/worldstatus", get(world_status))
|
2024-05-11 14:02:55 -04:00
|
|
|
.route("/apply", post(apply));
|
|
|
|
|
|
|
|
let addr = SocketAddr::from(([127, 0, 0, 1], 5801));
|
|
|
|
tracing::info!("Web server started on {}", addr);
|
|
|
|
axum::Server::bind(&addr)
|
|
|
|
.serve(app.into_make_service())
|
|
|
|
.await
|
|
|
|
.unwrap();
|
2025-03-08 13:27:41 -05:00
|
|
|
}
|