Add SVN management console
This commit is contained in:
@@ -7,16 +7,20 @@ import { fileURLToPath } from "node:url";
|
||||
import express from "express";
|
||||
import multer from "multer";
|
||||
|
||||
import { ensureSvnStorage, registerSvnRoutes } from "./svn-service.js";
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
const projectRoot = path.resolve(__dirname, "..");
|
||||
const storageRoot = process.env.SUMI_STORAGE_DIR ? path.resolve(process.env.SUMI_STORAGE_DIR) : "";
|
||||
const dataDir = path.resolve(process.env.SUMI_DATA_DIR || (storageRoot ? path.join(storageRoot, "data") : path.join(__dirname, "data")));
|
||||
const uploadDir = path.resolve(process.env.SUMI_UPLOAD_DIR || (storageRoot ? path.join(storageRoot, "uploads") : path.join(__dirname, "uploads")));
|
||||
const svnRoot = path.resolve(process.env.SUMI_SVN_DIR || (storageRoot ? path.join(storageRoot, "svn") : path.join(__dirname, "svn")));
|
||||
const packageDir = path.join(uploadDir, "packages");
|
||||
const iconDir = path.join(uploadDir, "icons");
|
||||
const manifestDir = path.join(uploadDir, "manifests");
|
||||
const dataFile = path.join(dataDir, "software.json");
|
||||
const playerFile = path.join(dataDir, "players.json");
|
||||
const svnDataFile = path.join(dataDir, "svn.json");
|
||||
const port = Number(process.env.PORT || 3030);
|
||||
const adminToken = process.env.ADMIN_TOKEN || "sumi-admin";
|
||||
const playerSessionCookie = "sumi_player_session";
|
||||
@@ -70,6 +74,7 @@ async function ensureStorage() {
|
||||
fsp.mkdir(packageDir, { recursive: true }),
|
||||
fsp.mkdir(iconDir, { recursive: true }),
|
||||
fsp.mkdir(manifestDir, { recursive: true }),
|
||||
fsp.mkdir(svnRoot, { recursive: true }),
|
||||
]);
|
||||
try {
|
||||
await fsp.access(dataFile);
|
||||
@@ -90,6 +95,8 @@ async function ensureStorage() {
|
||||
if (process.env.PLAYER_USERNAME && process.env.PLAYER_PASSWORD) {
|
||||
await upsertEnvPlayer();
|
||||
}
|
||||
|
||||
await ensureSvnStorage({ svnRoot, svnDataFile });
|
||||
}
|
||||
|
||||
async function readStore() {
|
||||
@@ -1143,15 +1150,19 @@ app.delete("/api/admin/software/:id", requirePlayer, requireAdmin, async (req, r
|
||||
}
|
||||
});
|
||||
|
||||
registerSvnRoutes(app, { svnRoot, svnDataFile, requirePlayer, requireAdmin });
|
||||
|
||||
app.get("/software", (req, res) => res.redirect(301, "/software.html"));
|
||||
app.get("/software/", (req, res) => res.sendFile(path.join(projectRoot, "software.html")));
|
||||
app.get("/login", (req, res) => res.redirect(301, "/login.html"));
|
||||
app.get("/admin/software", requirePlayer, (req, res) => res.sendFile(path.join(projectRoot, "admin", "software.html")));
|
||||
app.get("/admin/svn", requirePlayer, (req, res) => res.sendFile(path.join(projectRoot, "admin", "svn.html")));
|
||||
app.get("/", (req, res) => res.sendFile(path.join(projectRoot, "index.html")));
|
||||
app.get("/index.html", (req, res) => res.sendFile(path.join(projectRoot, "index.html")));
|
||||
app.get("/software.html", (req, res) => res.sendFile(path.join(projectRoot, "software.html")));
|
||||
app.get("/login.html", (req, res) => res.sendFile(path.join(projectRoot, "login.html")));
|
||||
app.get("/admin/software.html", requirePlayer, (req, res) => res.sendFile(path.join(projectRoot, "admin", "software.html")));
|
||||
app.get("/admin/svn.html", requirePlayer, (req, res) => res.sendFile(path.join(projectRoot, "admin", "svn.html")));
|
||||
app.use("/assets", express.static(path.join(projectRoot, "assets"), { fallthrough: false }));
|
||||
|
||||
app.use(async (error, req, res, next) => {
|
||||
@@ -1166,6 +1177,7 @@ app.listen(port, () => {
|
||||
console.log(`sumi.work software center running at http://localhost:${port}`);
|
||||
console.log(`data directory: ${dataDir}`);
|
||||
console.log(`upload directory: ${uploadDir}`);
|
||||
console.log(`svn directory: ${svnRoot}`);
|
||||
if (!process.env.ADMIN_TOKEN) {
|
||||
console.log("ADMIN_TOKEN is not set. Using development token: sumi-admin");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user