mirror of
https://github.com/redstrate/Kawari.git
synced 2025-04-25 16:27:46 +00:00
Begin adding a user accessible web server
This commit is contained in:
parent
3278452ac3
commit
f37840d44f
6 changed files with 93 additions and 0 deletions
|
@ -6,6 +6,10 @@ admin.ffxiv.local:80 {
|
||||||
reverse_proxy :5800
|
reverse_proxy :5800
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ffxiv.local:80 {
|
||||||
|
reverse_proxy :5801
|
||||||
|
}
|
||||||
|
|
||||||
frontier.ffxiv.local:80 {
|
frontier.ffxiv.local:80 {
|
||||||
reverse_proxy :5857
|
reverse_proxy :5857
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,9 @@ name = "kawari-login"
|
||||||
[[bin]]
|
[[bin]]
|
||||||
name = "kawari-patch"
|
name = "kawari-patch"
|
||||||
|
|
||||||
|
[[bin]]
|
||||||
|
name = "kawari-web"
|
||||||
|
|
||||||
[profile.release]
|
[profile.release]
|
||||||
lto = true
|
lto = true
|
||||||
strip = true
|
strip = true
|
||||||
|
|
|
@ -6,6 +6,8 @@ A substitute for a few official servers such as “ffxiv.com” and “square-en
|
||||||
|
|
||||||
## Components
|
## Components
|
||||||
|
|
||||||
|
* Web
|
||||||
|
* A simple website used for account management and other misc features.
|
||||||
* Admin
|
* Admin
|
||||||
* The admin panel for configuring the multitude of servers.
|
* The admin panel for configuring the multitude of servers.
|
||||||
* [Frontier](https://docs.xiv.zone/server/frontier/)
|
* [Frontier](https://docs.xiv.zone/server/frontier/)
|
||||||
|
@ -28,6 +30,7 @@ You will need some kind of reverse proxy because simply editing the `hosts` file
|
||||||
First you need to edit your `hosts` file. Assuming you're using the default ports for each server, add the following:
|
First you need to edit your `hosts` file. Assuming you're using the default ports for each server, add the following:
|
||||||
|
|
||||||
```
|
```
|
||||||
|
127.0.0.1 ffxiv.local
|
||||||
127.0.0.1 admin.ffxiv.local
|
127.0.0.1 admin.ffxiv.local
|
||||||
127.0.0.1 frontier.ffxiv.local
|
127.0.0.1 frontier.ffxiv.local
|
||||||
127.0.0.1 patch-bootver.ffxiv.local
|
127.0.0.1 patch-bootver.ffxiv.local
|
||||||
|
|
70
src/bin/kawari-web.rs
Normal file
70
src/bin/kawari-web.rs
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
use std::net::SocketAddr;
|
||||||
|
|
||||||
|
use axum::{
|
||||||
|
Json,
|
||||||
|
Router, routing::get,
|
||||||
|
extract::Form
|
||||||
|
};
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
use axum::response::{Html, Redirect};
|
||||||
|
use axum::routing::post;
|
||||||
|
use kawari::config::{Config, get_config};
|
||||||
|
use minijinja::{Environment, context};
|
||||||
|
use kawari::setup_default_environment;
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
|
struct GateStatus {
|
||||||
|
status: i32,
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn root() -> Html<String> {
|
||||||
|
tracing::info!("Requesting gate status...");
|
||||||
|
|
||||||
|
let config = get_config();
|
||||||
|
|
||||||
|
let environment = setup_default_environment();
|
||||||
|
let template = environment.get_template("web.html").unwrap();
|
||||||
|
Html(template.render(context! { gate_open => config.gate_open }).unwrap())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize, Debug)]
|
||||||
|
#[allow(dead_code)]
|
||||||
|
struct Input {
|
||||||
|
gate_open: Option<String>,
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn apply(Form(input): Form<Input>) -> Redirect {
|
||||||
|
tracing::info!("Apply config changes...");
|
||||||
|
|
||||||
|
let mut config = get_config();
|
||||||
|
|
||||||
|
if let Some(gate_open) = input.gate_open {
|
||||||
|
config.gate_open = gate_open == "on";
|
||||||
|
} else {
|
||||||
|
config.gate_open = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
serde_json::to_writer(
|
||||||
|
&std::fs::File::create("config.json").unwrap(),
|
||||||
|
&config,
|
||||||
|
)
|
||||||
|
.expect("TODO: panic message");
|
||||||
|
|
||||||
|
Redirect::to("/")
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::main]
|
||||||
|
async fn main() {
|
||||||
|
tracing_subscriber::fmt::init();
|
||||||
|
|
||||||
|
let app = Router::new()
|
||||||
|
.route("/", get(root))
|
||||||
|
.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();
|
||||||
|
}
|
|
@ -16,6 +16,7 @@ pub fn generate_sid() -> String {
|
||||||
pub fn setup_default_environment() -> Environment<'static> {
|
pub fn setup_default_environment() -> Environment<'static> {
|
||||||
let mut env = Environment::new();
|
let mut env = Environment::new();
|
||||||
env.add_template("admin.html", include_str!("../templates/admin.html")).unwrap();
|
env.add_template("admin.html", include_str!("../templates/admin.html")).unwrap();
|
||||||
|
env.add_template("web.html", include_str!("../templates/web.html")).unwrap();
|
||||||
|
|
||||||
env
|
env
|
||||||
}
|
}
|
12
templates/web.html
Normal file
12
templates/web.html
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>FFXIV</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<p>Welcome to Final Fantasy XIV!</p>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
Add table
Reference in a new issue