From 4d69c29bbecc630c57f384e4eb5ac23cfa989b54 Mon Sep 17 00:00:00 2001 From: yaoresugi Date: Mon, 20 Oct 2025 22:52:36 +0900 Subject: [PATCH 1/5] =?UTF-8?q?=E3=83=99=E3=83=BC=E3=82=B9=E3=83=91?= =?UTF-8?q?=E3=82=B9=E3=82=92=E6=8C=87=E5=AE=9A=E3=81=A7=E3=81=8D=E3=82=8B?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/internal/api/config.go | 4 ++++ backend/internal/api/routes.go | 2 +- backend/internal/conf/read.go | 2 ++ backend/internal/conf/write.go | 1 + backend/internal/models/models.go | 1 + backend/internal/web/index.go | 11 +++++++++- backend/internal/web/public/assets/Config.js | 2 +- backend/internal/web/public/assets/index.js | 4 ++-- backend/internal/web/templates/index.html | 12 ++++++++--- backend/internal/web/webgui.go | 22 +++++++++++++------- docker-compose-auth.yml | 9 ++++---- docker-compose.yml | 3 ++- frontend/package-lock.json | 4 ++-- frontend/src/App.tsx | 2 +- frontend/src/components/Header.tsx | 12 +++++------ frontend/src/functions/api.ts | 2 +- frontend/src/vite-env.d.ts | 9 ++++++++ 17 files changed, 71 insertions(+), 31 deletions(-) diff --git a/backend/internal/api/config.go b/backend/internal/api/config.go index 9f1999c..d7aaecb 100644 --- a/backend/internal/api/config.go +++ b/backend/internal/api/config.go @@ -3,6 +3,7 @@ package api import ( "net/http" "strconv" + "strings" "github.com/gin-gonic/gin" @@ -20,6 +21,9 @@ func saveConfigHandler(c *gin.Context) { conf.AppConfig.NodePath = c.PostForm("node") conf.AppConfig.ShoutURL = c.PostForm("shout") + basePath := c.PostForm("basepath") + conf.AppConfig.BasePath = strings.TrimRight(basePath, "/") + conf.Write(conf.AppConfig) c.Redirect(http.StatusFound, c.Request.Referer()) diff --git a/backend/internal/api/routes.go b/backend/internal/api/routes.go index f27223a..b2205ce 100644 --- a/backend/internal/api/routes.go +++ b/backend/internal/api/routes.go @@ -8,7 +8,7 @@ import ( ) // Routes - start API routes -func Routes(router *gin.Engine) { +func Routes(router gin.IRouter) { r0 := router.Group("/api") { diff --git a/backend/internal/conf/read.go b/backend/internal/conf/read.go index 6f5d0ae..23d98a3 100644 --- a/backend/internal/conf/read.go +++ b/backend/internal/conf/read.go @@ -13,6 +13,7 @@ func read(path string) (config models.Conf) { viper.SetDefault("HOST", "0.0.0.0") viper.SetDefault("PORT", "8840") + viper.SetDefault("BASE_PATH", "") viper.SetDefault("THEME", "sand") viper.SetDefault("COLOR", "dark") viper.SetDefault("NODEPATH", "") @@ -40,6 +41,7 @@ func read(path string) (config models.Conf) { config.Host = viper.Get("HOST").(string) config.Port = viper.Get("PORT").(string) + config.BasePath = strings.Trim(viper.GetString("BASE_PATH"), "/") config.Theme = viper.Get("THEME").(string) config.Color = viper.Get("COLOR").(string) config.NodePath = viper.Get("NODEPATH").(string) diff --git a/backend/internal/conf/write.go b/backend/internal/conf/write.go index 201ecb9..d6acdb2 100644 --- a/backend/internal/conf/write.go +++ b/backend/internal/conf/write.go @@ -19,6 +19,7 @@ func Write(config models.Conf) { viper.Set("HOST", config.Host) viper.Set("PORT", config.Port) + viper.Set("BASE_PATH", "") // Can be set only with ENV viper.Set("THEME", config.Theme) viper.Set("COLOR", config.Color) viper.Set("NODEPATH", config.NodePath) diff --git a/backend/internal/models/models.go b/backend/internal/models/models.go index 7fcfd16..6e16901 100644 --- a/backend/internal/models/models.go +++ b/backend/internal/models/models.go @@ -4,6 +4,7 @@ package models type Conf struct { Host string Port string + BasePath string Theme string Color string DirPath string diff --git a/backend/internal/web/index.go b/backend/internal/web/index.go index cb4b4ff..7057c49 100644 --- a/backend/internal/web/index.go +++ b/backend/internal/web/index.go @@ -3,10 +3,19 @@ package web import ( "net/http" + "github.com/aceberg/WatchYourLAN/internal/conf" "github.com/gin-gonic/gin" ) func indexHandler(c *gin.Context) { + basePath := "" + if conf.AppConfig.BasePath != "" { + basePath = "/" + conf.AppConfig.BasePath + } - c.HTML(http.StatusOK, "index.html", true) + data := gin.H{ + "BasePath": basePath, + } + + c.HTML(http.StatusOK, "index.html", data) } diff --git a/backend/internal/web/public/assets/Config.js b/backend/internal/web/public/assets/Config.js index 894ad64..b683b28 100644 --- a/backend/internal/web/public/assets/Config.js +++ b/backend/internal/web/public/assets/Config.js @@ -1 +1 @@ -import{c as J,o as K,a as X,t,i as r,b,s as H,d as W,e as c,S as V,f as e,F as M,g as Z,h as tt,j as Q}from"./index.js";var et=t('
About ()
Swagger API docs/swagger/index.html
Local node-bootstrap URLlocal themes and fonts (optional). If empty, the app will pull everything from cdn
Shoutrrr URLprovides notifications to Discord, Email, Gotify, Telegram and other services. Link to documentation
Interfacesone or more, space separated
Timeout (seconds)time between scans
Args for arp-scanpass your own arguments to arp-scan. Enable debug log level to see resulting command. (Example: -r 1). See docs for more
Arp Stringscan setup scans for vlans, docker0 and etcetera. See docs for more
Trim Historyremove history after (hours)
PG Connect URLaddress to connect to PostgreSQL DB. (Example: postgres://username:password@192.168.0.1:5432/dbname?sslmode=disable). Full list of URL parameters here');function rt(){const[i,d]=J(""),[s,a]=J("");return K(async()=>{const l=await X();d(l),a("https://github.com/aceberg/WatchYourLAN/releases/tag/"+l)}),(()=>{var l=et(),n=l.firstChild,o=n.firstChild,p=o.nextSibling;return r(p,i),b(()=>H(p,"href",s())),l})()}var lt=t("