1
Fork 0
mirror of https://github.com/redstrate/Kawari.git synced 2025-04-28 09:27:45 +00:00
kawari/src/bin/kawari-admin.rs

74 lines
2.1 KiB
Rust
Raw Normal View History

2023-10-05 12:09:05 -04:00
use axum::response::{Html, Redirect};
use axum::routing::post;
use axum::{Router, extract::Form, routing::get};
use kawari::config::get_config;
use kawari::setup_default_environment;
use minijinja::context;
2025-03-08 13:27:41 -05:00
use serde::{Deserialize, Serialize};
2023-10-05 12:09:05 -04:00
#[derive(Debug, Clone, Serialize, Deserialize)]
struct GateStatus {
status: i32,
}
async fn root() -> Html<String> {
tracing::info!("Requesting gate status...");
let config = get_config();
2023-10-05 12:09:05 -04:00
let environment = setup_default_environment();
let template = environment.get_template("admin.html").unwrap();
2025-03-23 07:35:11 -04:00
Html(template.render(context! { worlds_open => config.frontier.worlds_open, login_open => config.frontier.login_open, boot_patch_location => config.patch.patches_location }).unwrap())
2023-10-05 12:09:05 -04:00
}
#[derive(Deserialize, Debug)]
#[allow(dead_code)]
struct Input {
2024-06-29 14:06:44 -04:00
worlds_open: Option<String>,
login_open: Option<String>,
boot_patch_location: Option<String>,
2023-10-05 12:09:05 -04:00
}
async fn apply(Form(input): Form<Input>) -> Redirect {
tracing::info!("Apply config changes...");
let mut config = get_config();
2023-10-05 12:09:05 -04:00
2024-06-29 14:06:44 -04:00
if let Some(gate_open) = input.worlds_open {
config.frontier.worlds_open = gate_open == "on";
} else {
config.frontier.worlds_open = false;
2024-06-29 14:06:44 -04:00
}
if let Some(gate_open) = input.login_open {
config.frontier.login_open = gate_open == "on";
2024-06-29 14:06:44 -04:00
} else {
config.frontier.login_open = false;
2023-10-05 12:09:05 -04:00
}
if let Some(boot_patch_location) = input.boot_patch_location {
2025-03-23 07:35:11 -04:00
config.patch.patches_location = boot_patch_location;
}
serde_yaml_ng::to_writer(&std::fs::File::create("config.yaml").unwrap(), &config)
2025-03-08 13:27:41 -05:00
.expect("TODO: panic message");
2023-10-05 12:09:05 -04:00
Redirect::to("/")
}
#[tokio::main]
async fn main() {
tracing_subscriber::fmt::init();
let app = Router::new()
.route("/", get(root))
.route("/apply", post(apply));
let config = get_config();
let addr = config.admin.get_socketaddr();
tracing::info!("Admin server started on {addr}");
let listener = tokio::net::TcpListener::bind(addr).await.unwrap();
axum::serve(listener, app).await.unwrap();
2025-03-08 13:27:41 -05:00
}