Add server endpoint for server information page

This commit is contained in:
Ethan O'Brien 2024-07-11 09:09:02 -05:00
parent 8c9af03928
commit 002070ad91
4 changed files with 53 additions and 8 deletions

View file

@ -41,7 +41,24 @@ pub struct Args {
https: bool,
#[arg(long, default_value = "http://127.0.0.1:51376", help = "Address to NPPS4 server for sif account linking")]
npps4: String
npps4: String,
//below options are for the "Help" page
#[arg(long, default_value = "", help = "Link to patched android global apk for this server.")]
global_android: String,
#[arg(long, default_value = "", help = "Link to patched android japan apk for this server.")]
japan_android: String,
#[arg(long, default_value = "", help = "Link to patched iOS global apk for this server.")]
global_ios: String,
#[arg(long, default_value = "", help = "Link to patched iOS japan apk for this server.")]
japan_ios: String,
#[arg(long, default_value = "", help = "Link to asset server.")]
assets_url: String
}
#[actix_web::main]

View file

@ -181,6 +181,7 @@ pub async fn request(req: HttpRequest, body: String) -> HttpResponse {
"/webui/logout" => webui::logout(req),
"/api/webui/admin" => webui::admin(req),
"/api/webui/export" => webui::export(req),
"/api/webui/serverInfo" => webui::server_info(req),
_ => api_req(req, body).await
}
}

View file

@ -172,7 +172,7 @@ pub fn main(req: HttpRequest) -> HttpResponse {
}
}
}
if req.path() != "/" && req.path() != "/home/" && req.path() != "/import/" && req.path() != "/admin/" {
if req.path() != "/" && req.path() != "/home/" && req.path() != "/import/" && req.path() != "/admin/" && req.path() != "/help/" {
return HttpResponse::Found()
.insert_header(("Location", "/"))
.body("");
@ -238,3 +238,26 @@ pub fn export(req: HttpRequest) -> HttpResponse {
.body(json::stringify(resp))
}
pub fn server_info(_req: HttpRequest) -> HttpResponse {
let args = crate::get_args();
let resp = object!{
result: "OK",
data: {
account_import: get_config()["import"].as_bool().unwrap(),
links: {
global: args.global_android,
japan: args.japan_android,
ios: {
global: args.global_ios,
japan: args.japan_ios
},
assets: args.assets_url
}
}
};
HttpResponse::Ok()
.insert_header(ContentType::json())
.body(json::stringify(resp))
}

View file

@ -1,19 +1,19 @@
import { useState, useParams, useEffect } from 'react'
import './Help.css'
import Request from '../Request.jsx'
let init = false;
function Help() {
const [downloadUrl, setDownloadUrl] = useState(<div>Contact your server admin, asking for a patched apk. Examples can be found <a href="https://ethanthesleepy.one/public/lovelive/sif2/">here</a>.</div>);
const [downloadUrliOSGL, setDownloadUrliOSGL] = useState("https://ethanthesleepy.one/public/lovelive/sif2/sif2-gl.ipa");
const [downloadUrliOSJP, setDownloadUrliOSJP] = useState("https://ethanthesleepy.one/public/lovelive/sif2/sif2-jp.ipa");
const [assetUrl, setAssetUrl] = useState("http://sif2.sif.moe");
let init = false;
const [assetUrl, setAssetUrl] = useState("https://sif2.sif.moe");
useEffect(() => {
if (init) return;
init = true;
(async () => {
if (init) return;
init = true;
let resp = await Request("/api/webui/serverInfo");
if (resp.result !== "OK") {
return;
@ -32,12 +32,16 @@ function Help() {
<div>Your server admin has a link to download! Download <a href={resp.data.links.japan}>Japan</a></div>
);
}
if (resp.data.links.assets) {
setAssetUrl(resp.data.links.assets);
}
if (!resp.data.links.ios) return;
if (resp.data.links.ios.japan) {
setDownloadUrliOSJP(resp.data.links.ios.japan);
}
if (resp.data.links.ios.global) {
setDownloadUrliOSJP(resp.data.links.ios.global);
setDownloadUrliOSGL(resp.data.links.ios.global);
}
})();
@ -53,7 +57,7 @@ function Help() {
<p>{downloadUrl}</p>
<h2>So I got the server running, how do I install the app? (iOS)</h2>
<p>Running on iOS is much simpler than Android, thanks to triangle on the discord. You first download an ipa file for <a href={downloadUrliOSGL}>global</a> or <a href={downloadUrliOSJP}>Japan</a>, and use <a href="https://sideloadly.io/">Sideloadly</a> (or your preferred application installer) to install the app. Then open settings, navigate to the app you just installed, and input the server url (Which is likely "{window.location.origin}", though this may not be the case). If you have any errors opening the app, make sure none of the urls in settings end with a slash (/).</p>
<p>Running on iOS is much simpler than Android, thanks to triangle on the discord. You first download an ipa file for <a href={downloadUrliOSGL}>global</a> or <a href={downloadUrliOSJP}>Japan</a>, and use <a href="https://sideloadly.io/">Sideloadly</a> (or your preferred application installer) to install the app. Then open settings, navigate to the app you just installed, and input the server url (Which is likely "{window.location.origin}", though this may not be the case), and the asset url, which is "{assetUrl}". If you have any errors opening the app, make sure none of the urls in settings end with a slash (/).</p>
<h2>Help! I'm trying to open the app and it shows as "unavailable" (iOS)</h2>
<p>Do not delete it, Just re-sideload the app. This is an Apple "security" feature.</p>