mirror of
https://github.com/redstrate/Kawari.git
synced 2025-06-08 17:37:46 +00:00
Add supported platforms config option
This commit is contained in:
parent
73679a35fe
commit
7d2765a2b6
3 changed files with 43 additions and 19 deletions
|
@ -8,15 +8,7 @@ use axum::{
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use axum::response::{Html, Redirect};
|
use axum::response::{Html, Redirect};
|
||||||
use axum::routing::post;
|
use axum::routing::post;
|
||||||
use kawari::config::Config;
|
use kawari::config::{Config, get_config};
|
||||||
|
|
||||||
fn get_config() -> Config {
|
|
||||||
if let Ok(data) = std::fs::read_to_string("config.json") {
|
|
||||||
serde_json::from_str(&data).expect("Failed to parse")
|
|
||||||
} else {
|
|
||||||
Config::default()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
struct GateStatus {
|
struct GateStatus {
|
||||||
|
|
|
@ -5,22 +5,31 @@ use axum::extract::Query;
|
||||||
use axum::response::Html;
|
use axum::response::Html;
|
||||||
use axum::routing::post;
|
use axum::routing::post;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use kawari::config::Config;
|
use kawari::config::{Config, get_config};
|
||||||
use axum::extract::Path;
|
use axum::extract::Path;
|
||||||
use axum::response::IntoResponse;
|
use axum::response::IntoResponse;
|
||||||
use axum::http::HeaderMap;
|
use axum::http::{HeaderMap, StatusCode};
|
||||||
|
|
||||||
|
async fn verify_session(Path((platform, game_version, sid)): Path<(String, String, String)>) -> impl IntoResponse {
|
||||||
|
let config = get_config();
|
||||||
|
if !config.supports_platform(&platform) {
|
||||||
|
return StatusCode::INTERNAL_SERVER_ERROR.into_response();
|
||||||
|
}
|
||||||
|
|
||||||
async fn verify_session(Path((game_version, sid)): Path<(String, String)>) -> impl IntoResponse {
|
|
||||||
let mut headers = HeaderMap::new();
|
let mut headers = HeaderMap::new();
|
||||||
headers.insert("X-Patch-Unique-Id", sid.parse().unwrap());
|
headers.insert("X-Patch-Unique-Id", sid.parse().unwrap());
|
||||||
|
|
||||||
(headers)
|
(headers).into_response()
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn verify_boot(Path(boot_version): Path<String>) -> impl IntoResponse {
|
async fn verify_boot(Path((platform, boot_version)): Path<(String, String)>) -> impl IntoResponse {
|
||||||
let mut headers = HeaderMap::new();
|
let config = get_config();
|
||||||
|
if !config.supports_platform(&platform) {
|
||||||
|
return StatusCode::INTERNAL_SERVER_ERROR.into_response();
|
||||||
|
}
|
||||||
|
|
||||||
(headers)
|
let mut headers = HeaderMap::new();
|
||||||
|
(headers).into_response()
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
|
@ -28,8 +37,8 @@ async fn main() {
|
||||||
tracing_subscriber::fmt::init();
|
tracing_subscriber::fmt::init();
|
||||||
|
|
||||||
let app = Router::new()
|
let app = Router::new()
|
||||||
.route("/http/win32/ffxivneo_release_game/:game_version/:sid", post(verify_session))
|
.route("/http/:platform/ffxivneo_release_game/:game_version/:sid", post(verify_session))
|
||||||
.route("/http/win32/ffxivneo_release_boot/:boot_version", get(verify_boot));
|
.route("/http/:platform/ffxivneo_release_boot/:boot_version", get(verify_boot));
|
||||||
|
|
||||||
let addr = SocketAddr::from(([127, 0, 0, 1], 6900));
|
let addr = SocketAddr::from(([127, 0, 0, 1], 6900));
|
||||||
tracing::info!("Patch server started on {}", addr);
|
tracing::info!("Patch server started on {}", addr);
|
||||||
|
|
|
@ -2,13 +2,36 @@ use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
pub struct Config {
|
pub struct Config {
|
||||||
pub gate_open: bool
|
#[serde(default)]
|
||||||
|
pub gate_open: bool,
|
||||||
|
|
||||||
|
#[serde(default = "default_supported_platforms")]
|
||||||
|
pub supported_platforms: Vec<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for Config {
|
impl Default for Config {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self {
|
Self {
|
||||||
gate_open: false,
|
gate_open: false,
|
||||||
|
supported_platforms: default_supported_platforms()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Config {
|
||||||
|
pub fn supports_platform(&self, platform: &String) -> bool {
|
||||||
|
self.supported_platforms.contains(platform)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn default_supported_platforms() -> Vec<String> {
|
||||||
|
vec!["win32".to_string()]
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_config() -> Config {
|
||||||
|
if let Ok(data) = std::fs::read_to_string("config.json") {
|
||||||
|
serde_json::from_str(&data).expect("Failed to parse")
|
||||||
|
} else {
|
||||||
|
Config::default()
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Add table
Reference in a new issue