From f87fbddef79f306b9b9c1d4d35c8c6dd86dc4b26 Mon Sep 17 00:00:00 2001 From: MaysWind Date: Sun, 10 Nov 2024 17:54:32 +0800 Subject: [PATCH] code refactor --- cmd/webserver.go | 35 ++-- package-lock.json | 190 ++++++++++------------ package.json | 1 - pkg/api/server_settings.go | 169 +++++++++++++++++++ pkg/middlewares/server_settings_cookie.go | 113 ------------- src/DesktopApp.vue | 3 - src/MobileApp.vue | 3 - src/desktop.html | 1 + src/index.html | 1 + src/lib/server_settings.js | 66 +++----- src/mobile.html | 1 + third-party-dependencies.json | 6 - vite.config.js | 10 +- 13 files changed, 312 insertions(+), 287 deletions(-) create mode 100644 pkg/api/server_settings.go delete mode 100644 pkg/middlewares/server_settings_cookie.go diff --git a/cmd/webserver.go b/cmd/webserver.go index 6d6c5a9e..7291574e 100644 --- a/cmd/webserver.go +++ b/cmd/webserver.go @@ -103,6 +103,8 @@ func startWebServer(c *core.CliContext) error { router.NoRoute(bindApi(api.Default.ApiNotFound)) router.NoMethod(bindApi(api.Default.MethodNotAllowed)) + serverSettingsCacheStore := persistence.NewInMemoryStore(time.Minute) + router.StaticFile("/", filepath.Join(config.StaticRootPath, "index.html")) router.Static("/js", filepath.Join(config.StaticRootPath, "js")) router.Static("/css", filepath.Join(config.StaticRootPath, "css")) @@ -114,12 +116,9 @@ func startWebServer(c *core.CliContext) error { router.StaticFile("favicon.png", filepath.Join(config.StaticRootPath, "favicon.png")) router.StaticFile("touchicon.png", filepath.Join(config.StaticRootPath, "touchicon.png")) router.StaticFile("manifest.json", filepath.Join(config.StaticRootPath, "manifest.json")) + router.GET("/server_settings.js", bindCachedJs(api.ServerSettings.ServerSettingsJavascriptHandler, serverSettingsCacheStore)) - mobileEntryRoute := router.Group("/mobile") - mobileEntryRoute.Use(bindMiddleware(middlewares.ServerSettingsCookie(config))) - { - mobileEntryRoute.StaticFile("/", filepath.Join(config.StaticRootPath, "mobile.html")) - } + router.StaticFile("/mobile", filepath.Join(config.StaticRootPath, "mobile.html")) router.Static("/mobile/js", filepath.Join(config.StaticRootPath, "js")) router.Static("/mobile/css", filepath.Join(config.StaticRootPath, "css")) router.Static("/mobile/img", filepath.Join(config.StaticRootPath, "img")) @@ -129,16 +128,13 @@ func startWebServer(c *core.CliContext) error { router.StaticFile("/mobile/touchicon.png", filepath.Join(config.StaticRootPath, "touchicon.png")) router.StaticFile("/mobile/manifest.json", filepath.Join(config.StaticRootPath, "manifest.json")) router.StaticFile("/mobile/sw.js", filepath.Join(config.StaticRootPath, "sw.js")) + router.GET("/mobile/server_settings.js", bindCachedJs(api.ServerSettings.ServerSettingsJavascriptHandler, serverSettingsCacheStore)) for i := 0; i < len(workboxFileNames); i++ { router.StaticFile("/mobile/"+workboxFileNames[i], filepath.Join(config.StaticRootPath, workboxFileNames[i])) } - desktopEntryRoute := router.Group("/desktop") - desktopEntryRoute.Use(bindMiddleware(middlewares.ServerSettingsCookie(config))) - { - desktopEntryRoute.StaticFile("/", filepath.Join(config.StaticRootPath, "desktop.html")) - } + router.StaticFile("/desktop", filepath.Join(config.StaticRootPath, "desktop.html")) router.Static("/desktop/js", filepath.Join(config.StaticRootPath, "js")) router.Static("/desktop/css", filepath.Join(config.StaticRootPath, "css")) router.Static("/desktop/img", filepath.Join(config.StaticRootPath, "img")) @@ -148,6 +144,7 @@ func startWebServer(c *core.CliContext) error { router.StaticFile("/desktop/touchicon.png", filepath.Join(config.StaticRootPath, "touchicon.png")) router.StaticFile("/desktop/manifest.json", filepath.Join(config.StaticRootPath, "manifest.json")) router.StaticFile("/desktop/sw.js", filepath.Join(config.StaticRootPath, "sw.js")) + router.GET("/desktop/server_settings.js", bindCachedJs(api.ServerSettings.ServerSettingsJavascriptHandler, serverSettingsCacheStore)) for i := 0; i < len(workboxFileNames); i++ { router.StaticFile("/desktop/"+workboxFileNames[i], filepath.Join(config.StaticRootPath, workboxFileNames[i])) @@ -171,11 +168,6 @@ func startWebServer(c *core.CliContext) error { router.GET("/healthz.json", bindApi(api.Healths.HealthStatusHandler)) - if config.Mode == settings.MODE_DEVELOPMENT { - devRoute := router.Group("/dev") - devRoute.GET("/cookies", bindMiddleware(middlewares.ServerSettingsCookie(config))) - } - proxyRoute := router.Group("/proxy") proxyRoute.Use(bindMiddleware(middlewares.JWTAuthorizationByQueryString)) { @@ -420,6 +412,19 @@ func bindApiWithTokenUpdate(fn core.ApiHandlerFunc, config *settings.Config) gin } } +func bindCachedJs(fn core.DataHandlerFunc, store persistence.CacheStore) gin.HandlerFunc { + return cache.CachePage(store, time.Minute, func(ginCtx *gin.Context) { + c := core.WrapWebContext(ginCtx) + result, _, err := fn(c) + + if err != nil { + utils.PrintDataErrorResult(c, "text/javascript", err) + } else { + utils.PrintDataSuccessResult(c, "text/javascript", "", result) + } + }) +} + func bindCsv(fn core.DataHandlerFunc) gin.HandlerFunc { return func(ginCtx *gin.Context) { c := core.WrapWebContext(ginCtx) diff --git a/package-lock.json b/package-lock.json index 5e941df6..3406f217 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,6 @@ "framework7": "^8.3.4", "framework7-icons": "^5.0.5", "framework7-vue": "^8.3.4", - "js-cookie": "^3.0.5", "leaflet": "^1.9.4", "line-awesome": "^1.3.0", "moment": "^2.30.1", @@ -3328,9 +3327,9 @@ } }, "node_modules/@humanwhocodes/retry": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.0.tgz", - "integrity": "sha512-xnRgu9DxZbkWak/te3fcytNyp8MTbuiZIaueg2rgEvBuN55n04nwLYLU9TX/VVlusc9L2ZNXi99nUFNkHXtr5g==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", + "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -3835,9 +3834,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.4.tgz", - "integrity": "sha512-jfUJrFct/hTA0XDM5p/htWKoNNTbDLY0KRwEt6pyOA6k2fmk0WVwl65PdUdJZgzGEHWx+49LilkcSaumQRyNQw==", + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.25.0.tgz", + "integrity": "sha512-CC/ZqFZwlAIbU1wUPisHyV/XRc5RydFrNLtgl3dGYskdwPZdt4HERtKm50a/+DtTlKeCq9IXFEWR+P6blwjqBA==", "cpu": [ "arm" ], @@ -3848,9 +3847,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.4.tgz", - "integrity": "sha512-j4nrEO6nHU1nZUuCfRKoCcvh7PIywQPUCBa2UsootTHvTHIoIu2BzueInGJhhvQO/2FTRdNYpf63xsgEqH9IhA==", + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.25.0.tgz", + "integrity": "sha512-/Y76tmLGUJqVBXXCfVS8Q8FJqYGhgH4wl4qTA24E9v/IJM0XvJCGQVSW1QZ4J+VURO9h8YCa28sTFacZXwK7Rg==", "cpu": [ "arm64" ], @@ -3861,9 +3860,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.4.tgz", - "integrity": "sha512-GmU/QgGtBTeraKyldC7cDVVvAJEOr3dFLKneez/n7BvX57UdhOqDsVwzU7UOnYA7AAOt+Xb26lk79PldDHgMIQ==", + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.25.0.tgz", + "integrity": "sha512-YVT6L3UrKTlC0FpCZd0MGA7NVdp7YNaEqkENbWQ7AOVOqd/7VzyHpgIpc1mIaxRAo1ZsJRH45fq8j4N63I/vvg==", "cpu": [ "arm64" ], @@ -3874,9 +3873,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.4.tgz", - "integrity": "sha512-N6oDBiZCBKlwYcsEPXGDE4g9RoxZLK6vT98M8111cW7VsVJFpNEqvJeIPfsCzbf0XEakPslh72X0gnlMi4Ddgg==", + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.25.0.tgz", + "integrity": "sha512-ZRL+gexs3+ZmmWmGKEU43Bdn67kWnMeWXLFhcVv5Un8FQcx38yulHBA7XR2+KQdYIOtD0yZDWBCudmfj6lQJoA==", "cpu": [ "x64" ], @@ -3887,9 +3886,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.24.4.tgz", - "integrity": "sha512-py5oNShCCjCyjWXCZNrRGRpjWsF0ic8f4ieBNra5buQz0O/U6mMXCpC1LvrHuhJsNPgRt36tSYMidGzZiJF6mw==", + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.25.0.tgz", + "integrity": "sha512-xpEIXhiP27EAylEpreCozozsxWQ2TJbOLSivGfXhU4G1TBVEYtUPi2pOZBnvGXHyOdLAUUhPnJzH3ah5cqF01g==", "cpu": [ "arm64" ], @@ -3900,9 +3899,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.24.4.tgz", - "integrity": "sha512-L7VVVW9FCnTTp4i7KrmHeDsDvjB4++KOBENYtNYAiYl96jeBThFfhP6HVxL74v4SiZEVDH/1ILscR5U9S4ms4g==", + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.25.0.tgz", + "integrity": "sha512-sC5FsmZGlJv5dOcURrsnIK7ngc3Kirnx3as2XU9uER+zjfyqIjdcMVgzy4cOawhsssqzoAX19qmxgJ8a14Qrqw==", "cpu": [ "x64" ], @@ -3913,9 +3912,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.4.tgz", - "integrity": "sha512-10ICosOwYChROdQoQo589N5idQIisxjaFE/PAnX2i0Zr84mY0k9zul1ArH0rnJ/fpgiqfu13TFZR5A5YJLOYZA==", + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.25.0.tgz", + "integrity": "sha512-uD/dbLSs1BEPzg564TpRAQ/YvTnCds2XxyOndAO8nJhaQcqQGFgv/DAVko/ZHap3boCvxnzYMa3mTkV/B/3SWA==", "cpu": [ "arm" ], @@ -3926,9 +3925,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.4.tgz", - "integrity": "sha512-ySAfWs69LYC7QhRDZNKqNhz2UKN8LDfbKSMAEtoEI0jitwfAG2iZwVqGACJT+kfYvvz3/JgsLlcBP+WWoKCLcw==", + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.25.0.tgz", + "integrity": "sha512-ZVt/XkrDlQWegDWrwyC3l0OfAF7yeJUF4fq5RMS07YM72BlSfn2fQQ6lPyBNjt+YbczMguPiJoCfaQC2dnflpQ==", "cpu": [ "arm" ], @@ -3939,9 +3938,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.4.tgz", - "integrity": "sha512-uHYJ0HNOI6pGEeZ/5mgm5arNVTI0nLlmrbdph+pGXpC9tFHFDQmDMOEqkmUObRfosJqpU8RliYoGz06qSdtcjg==", + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.25.0.tgz", + "integrity": "sha512-qboZ+T0gHAW2kkSDPHxu7quaFaaBlynODXpBVnPxUgvWYaE84xgCKAPEYE+fSMd3Zv5PyFZR+L0tCdYCMAtG0A==", "cpu": [ "arm64" ], @@ -3952,9 +3951,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.4.tgz", - "integrity": "sha512-38yiWLemQf7aLHDgTg85fh3hW9stJ0Muk7+s6tIkSUOMmi4Xbv5pH/5Bofnsb6spIwD5FJiR+jg71f0CH5OzoA==", + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.25.0.tgz", + "integrity": "sha512-ndWTSEmAaKr88dBuogGH2NZaxe7u2rDoArsejNslugHZ+r44NfWiwjzizVS1nUOHo+n1Z6qV3X60rqE/HlISgw==", "cpu": [ "arm64" ], @@ -3965,9 +3964,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.4.tgz", - "integrity": "sha512-q73XUPnkwt9ZNF2xRS4fvneSuaHw2BXuV5rI4cw0fWYVIWIBeDZX7c7FWhFQPNTnE24172K30I+dViWRVD9TwA==", + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.25.0.tgz", + "integrity": "sha512-BVSQvVa2v5hKwJSy6X7W1fjDex6yZnNKy3Kx1JGimccHft6HV0THTwNtC2zawtNXKUu+S5CjXslilYdKBAadzA==", "cpu": [ "ppc64" ], @@ -3978,9 +3977,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.4.tgz", - "integrity": "sha512-Aie/TbmQi6UXokJqDZdmTJuZBCU3QBDA8oTKRGtd4ABi/nHgXICulfg1KI6n9/koDsiDbvHAiQO3YAUNa/7BCw==", + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.25.0.tgz", + "integrity": "sha512-G4hTREQrIdeV0PE2JruzI+vXdRnaK1pg64hemHq2v5fhv8C7WjVaeXc9P5i4Q5UC06d/L+zA0mszYIKl+wY8oA==", "cpu": [ "riscv64" ], @@ -3991,9 +3990,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.4.tgz", - "integrity": "sha512-P8MPErVO/y8ohWSP9JY7lLQ8+YMHfTI4bAdtCi3pC2hTeqFJco2jYspzOzTUB8hwUWIIu1xwOrJE11nP+0JFAQ==", + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.25.0.tgz", + "integrity": "sha512-9T/w0kQ+upxdkFL9zPVB6zy9vWW1deA3g8IauJxojN4bnz5FwSsUAD034KpXIVX5j5p/rn6XqumBMxfRkcHapQ==", "cpu": [ "s390x" ], @@ -4004,9 +4003,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.4.tgz", - "integrity": "sha512-K03TljaaoPK5FOyNMZAAEmhlyO49LaE4qCsr0lYHUKyb6QacTNF9pnfPpXnFlFD3TXuFbFbz7tJ51FujUXkXYA==", + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.25.0.tgz", + "integrity": "sha512-ThcnU0EcMDn+J4B9LD++OgBYxZusuA7iemIIiz5yzEcFg04VZFzdFjuwPdlURmYPZw+fgVrFzj4CA64jSTG4Ig==", "cpu": [ "x64" ], @@ -4017,9 +4016,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.4.tgz", - "integrity": "sha512-VJYl4xSl/wqG2D5xTYncVWW+26ICV4wubwN9Gs5NrqhJtayikwCXzPL8GDsLnaLU3WwhQ8W02IinYSFJfyo34Q==", + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.25.0.tgz", + "integrity": "sha512-zx71aY2oQxGxAT1JShfhNG79PnjYhMC6voAjzpu/xmMjDnKNf6Nl/xv7YaB/9SIa9jDYf8RBPWEnjcdlhlv1rQ==", "cpu": [ "x64" ], @@ -4030,9 +4029,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.4.tgz", - "integrity": "sha512-ku2GvtPwQfCqoPFIJCqZ8o7bJcj+Y54cZSr43hHca6jLwAiCbZdBUOrqE6y29QFajNAzzpIOwsckaTFmN6/8TA==", + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.25.0.tgz", + "integrity": "sha512-JT8tcjNocMs4CylWY/CxVLnv8e1lE7ff1fi6kbGocWwxDq9pj30IJ28Peb+Y8yiPNSF28oad42ApJB8oUkwGww==", "cpu": [ "arm64" ], @@ -4043,9 +4042,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.4.tgz", - "integrity": "sha512-V3nCe+eTt/W6UYNr/wGvO1fLpHUrnlirlypZfKCT1fG6hWfqhPgQV/K/mRBXBpxc0eKLIF18pIOFVPh0mqHjlg==", + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.25.0.tgz", + "integrity": "sha512-dRLjLsO3dNOfSN6tjyVlG+Msm4IiZnGkuZ7G5NmpzwF9oOc582FZG05+UdfTbz5Jd4buK/wMb6UeHFhG18+OEg==", "cpu": [ "ia32" ], @@ -4056,9 +4055,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.4.tgz", - "integrity": "sha512-LTw1Dfd0mBIEqUVCxbvTE/LLo+9ZxVC9k99v1v4ahg9Aak6FpqOfNu5kRkeTAn0wphoC4JU7No1/rL+bBCEwhg==", + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.25.0.tgz", + "integrity": "sha512-/RqrIFtLB926frMhZD0a5oDa4eFIbyNEwLLloMTEjmqfwZWXywwVVOVmwTsuyhC9HKkVEZcOOi+KV4U9wmOdlg==", "cpu": [ "x64" ], @@ -4620,9 +4619,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001677", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001677.tgz", - "integrity": "sha512-fmfjsOlJUpMWu+mAAtZZZHz7UEwsUxIIvu1TJfO1HqFQvB/B+ii0xr9B5HpbZY/mC4XZ8SvjHJqtAY6pDPQEog==", + "version": "1.0.30001679", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001679.tgz", + "integrity": "sha512-j2YqID/YwpLnKzCmBOS4tlZdWprXm3ZmQLBH9ZBXFOhoxLA46fwyBvx6toCBWBmnuwUY/qB3kEU6gFx8qgCroA==", "dev": true, "funding": [ { @@ -4787,9 +4786,9 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz", + "integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==", "dev": true, "license": "MIT", "dependencies": { @@ -5180,9 +5179,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.50", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.50.tgz", - "integrity": "sha512-eMVObiUQ2LdgeO1F/ySTXsvqvxb6ZH2zPGaMYsWzRDdOddUa77tdmI0ltg+L16UpbWdhPmuF3wIQYyQq65WfZw==", + "version": "1.5.55", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.55.tgz", + "integrity": "sha512-6maZ2ASDOTBtjt9FhqYPRnbvKU5tjG0IN9SztUOWYw2AzNDNpKJYLJmlK0/En4Hs/aiWnB+JZ+gW19PIGszgKg==", "dev": true, "license": "ISC" }, @@ -6603,15 +6602,6 @@ "node": ">=10" } }, - "node_modules/js-cookie": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", - "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", - "license": "MIT", - "engines": { - "node": ">=14" - } - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -6957,9 +6947,9 @@ } }, "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", "dev": true, "license": "MIT", "engines": { @@ -8319,9 +8309,9 @@ } }, "node_modules/rollup": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.4.tgz", - "integrity": "sha512-vGorVWIsWfX3xbcyAS+I047kFKapHYivmkaT63Smj77XwvLSJos6M1xGqZnBPFQFBRZDOcG1QnYEIxAvTr/HjA==", + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.25.0.tgz", + "integrity": "sha512-uVbClXmR6wvx5R1M3Od4utyLUxrmOcEm3pAtMphn73Apq19PDtHpgZoEvqH2YnnaNUuvKmg2DgRd2Sqv+odyqg==", "devOptional": true, "license": "MIT", "dependencies": { @@ -8335,24 +8325,24 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.24.4", - "@rollup/rollup-android-arm64": "4.24.4", - "@rollup/rollup-darwin-arm64": "4.24.4", - "@rollup/rollup-darwin-x64": "4.24.4", - "@rollup/rollup-freebsd-arm64": "4.24.4", - "@rollup/rollup-freebsd-x64": "4.24.4", - "@rollup/rollup-linux-arm-gnueabihf": "4.24.4", - "@rollup/rollup-linux-arm-musleabihf": "4.24.4", - "@rollup/rollup-linux-arm64-gnu": "4.24.4", - "@rollup/rollup-linux-arm64-musl": "4.24.4", - "@rollup/rollup-linux-powerpc64le-gnu": "4.24.4", - "@rollup/rollup-linux-riscv64-gnu": "4.24.4", - "@rollup/rollup-linux-s390x-gnu": "4.24.4", - "@rollup/rollup-linux-x64-gnu": "4.24.4", - "@rollup/rollup-linux-x64-musl": "4.24.4", - "@rollup/rollup-win32-arm64-msvc": "4.24.4", - "@rollup/rollup-win32-ia32-msvc": "4.24.4", - "@rollup/rollup-win32-x64-msvc": "4.24.4", + "@rollup/rollup-android-arm-eabi": "4.25.0", + "@rollup/rollup-android-arm64": "4.25.0", + "@rollup/rollup-darwin-arm64": "4.25.0", + "@rollup/rollup-darwin-x64": "4.25.0", + "@rollup/rollup-freebsd-arm64": "4.25.0", + "@rollup/rollup-freebsd-x64": "4.25.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.25.0", + "@rollup/rollup-linux-arm-musleabihf": "4.25.0", + "@rollup/rollup-linux-arm64-gnu": "4.25.0", + "@rollup/rollup-linux-arm64-musl": "4.25.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.25.0", + "@rollup/rollup-linux-riscv64-gnu": "4.25.0", + "@rollup/rollup-linux-s390x-gnu": "4.25.0", + "@rollup/rollup-linux-x64-gnu": "4.25.0", + "@rollup/rollup-linux-x64-musl": "4.25.0", + "@rollup/rollup-win32-arm64-msvc": "4.25.0", + "@rollup/rollup-win32-ia32-msvc": "4.25.0", + "@rollup/rollup-win32-x64-msvc": "4.25.0", "fsevents": "~2.3.2" } }, diff --git a/package.json b/package.json index 0357b06e..9185e5bc 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,6 @@ "framework7": "^8.3.4", "framework7-icons": "^5.0.5", "framework7-vue": "^8.3.4", - "js-cookie": "^3.0.5", "leaflet": "^1.9.4", "line-awesome": "^1.3.0", "moment": "^2.30.1", diff --git a/pkg/api/server_settings.go b/pkg/api/server_settings.go new file mode 100644 index 00000000..6e16fac3 --- /dev/null +++ b/pkg/api/server_settings.go @@ -0,0 +1,169 @@ +package api + +import ( + "fmt" + "strings" + + "github.com/mayswind/ezbookkeeping/pkg/core" + "github.com/mayswind/ezbookkeeping/pkg/errs" + "github.com/mayswind/ezbookkeeping/pkg/settings" +) + +const ezbookkeepingServerSettingsGlobalVariableName = "EZBOOKKEEPING_SERVER_SETTINGS" +const ezbookkeepingServerSettingsGlobalVariableFullName = "window." + ezbookkeepingServerSettingsGlobalVariableName +const ezbookkeepingServerSettingsJavascriptFileHeader = ezbookkeepingServerSettingsGlobalVariableFullName + + "=" + ezbookkeepingServerSettingsGlobalVariableFullName + "||{};\n" + +// ServerSettingsApi represents server settings api +type ServerSettingsApi struct { + ApiUsingConfig +} + +// Initialize a server settings api singleton instance +var ( + ServerSettings = &ServerSettingsApi{ + ApiUsingConfig: ApiUsingConfig{ + container: settings.Container, + }, + } +) + +// ServerSettingsJavascriptHandler returns the javascript contains server settings +func (a *ServerSettingsApi) ServerSettingsJavascriptHandler(c *core.WebContext) ([]byte, string, *errs.Error) { + config := a.CurrentConfig() + builder := &strings.Builder{} + builder.WriteString(ezbookkeepingServerSettingsJavascriptFileHeader) + + a.appendBooleanSetting(builder, "r", config.EnableUserRegister) + a.appendBooleanSetting(builder, "f", config.EnableUserForgetPassword) + a.appendBooleanSetting(builder, "v", config.EnableUserVerifyEmail) + a.appendBooleanSetting(builder, "p", config.EnableTransactionPictures) + a.appendBooleanSetting(builder, "s", config.EnableScheduledTransaction) + a.appendBooleanSetting(builder, "e", config.EnableDataExport) + a.appendBooleanSetting(builder, "i", config.EnableDataImport) + a.appendStringSetting(builder, "m", config.MapProvider) + + if config.EnableMapDataFetchProxy && + (config.MapProvider == settings.OpenStreetMapProvider || + config.MapProvider == settings.OpenStreetMapHumanitarianStyleProvider || + config.MapProvider == settings.OpenTopoMapProvider || + config.MapProvider == settings.OPNVKarteMapProvider || + config.MapProvider == settings.CyclOSMMapProvider || + config.MapProvider == settings.CartoDBMapProvider || + config.MapProvider == settings.TomTomMapProvider || + config.MapProvider == settings.TianDiTuProvider || + config.MapProvider == settings.CustomProvider) { + a.appendBooleanSetting(builder, "mp", config.EnableMapDataFetchProxy) + } + + if config.MapProvider == settings.CustomProvider { + a.appendStringSetting(builder, "cmzl", fmt.Sprintf("%d-%d-%d", config.CustomMapTileServerMinZoomLevel, config.CustomMapTileServerMaxZoomLevel, config.CustomMapTileServerDefaultZoomLevel)) + + if !config.EnableMapDataFetchProxy { + a.appendStringSetting(builder, "cmsu", config.CustomMapTileServerTileLayerUrl) + + if config.CustomMapTileServerAnnotationLayerUrl != "" { + a.appendStringSetting(builder, "cmau", config.CustomMapTileServerAnnotationLayerUrl) + } + } else { + if config.CustomMapTileServerAnnotationLayerUrl != "" { + a.appendBooleanSetting(builder, "cmap", config.EnableMapDataFetchProxy) + } + } + } + + if config.MapProvider == settings.TomTomMapProvider && config.TomTomMapAPIKey != "" && !config.EnableMapDataFetchProxy { + a.appendStringSetting(builder, "tmak", config.TomTomMapAPIKey) + } + + if config.MapProvider == settings.TianDiTuProvider && config.TianDiTuAPIKey != "" && !config.EnableMapDataFetchProxy { + a.appendStringSetting(builder, "tdak", config.TianDiTuAPIKey) + } + + if config.MapProvider == settings.GoogleMapProvider && config.GoogleMapAPIKey != "" { + a.appendStringSetting(builder, "gmak", config.GoogleMapAPIKey) + } + + if config.MapProvider == settings.BaiduMapProvider && config.BaiduMapAK != "" { + a.appendStringSetting(builder, "bmak", config.BaiduMapAK) + } + + if config.MapProvider == settings.AmapProvider && config.AmapApplicationKey != "" { + a.appendStringSetting(builder, "amak", config.AmapApplicationKey) + } + + if config.MapProvider == settings.AmapProvider && config.AmapSecurityVerificationMethod != "" { + a.appendStringSetting(builder, "amsv", config.AmapSecurityVerificationMethod) + + if config.AmapSecurityVerificationMethod == settings.AmapSecurityVerificationExternalProxyMethod { + a.appendStringSetting(builder, "amep", config.AmapApiExternalProxyUrl) + } + + if config.AmapSecurityVerificationMethod == settings.AmapSecurityVerificationPlainTextMethod { + a.appendStringSetting(builder, "amas", config.AmapApplicationSecret) + } + } + + return []byte(builder.String()), "", nil +} + +func (a *ServerSettingsApi) appendStringSetting(builder *strings.Builder, key string, value string) { + builder.WriteString(ezbookkeepingServerSettingsGlobalVariableFullName) + builder.WriteString("[") + a.appendEncodedString(builder, key) + builder.WriteString("]=") + + a.appendEncodedString(builder, value) + + builder.WriteString(";\n") +} + +func (a *ServerSettingsApi) appendBooleanSetting(builder *strings.Builder, key string, value bool) { + builder.WriteString(ezbookkeepingServerSettingsGlobalVariableFullName) + builder.WriteString("[") + a.appendEncodedString(builder, key) + builder.WriteString("]=") + + if value { + builder.WriteRune('1') + } else { + builder.WriteRune('0') + } + + builder.WriteString(";\n") +} + +func (a *ServerSettingsApi) appendEncodedString(builder *strings.Builder, content string) { + builder.WriteRune('\'') + runes := []rune(content) + + for i := 0; i < len(runes); i++ { + switch runes[i] { + case '\\': + builder.WriteRune('\\') + builder.WriteRune('\\') + case '\'': + builder.WriteRune('\\') + builder.WriteRune('\'') + case '\n': + builder.WriteRune('\\') + builder.WriteRune('n') + case '\r': + builder.WriteRune('\\') + builder.WriteRune('r') + case '\t': + builder.WriteRune('\\') + builder.WriteRune('t') + case '\f': + builder.WriteRune('\\') + builder.WriteRune('f') + case '\b': + builder.WriteRune('\\') + builder.WriteRune('b') + default: + builder.WriteRune(runes[i]) + } + } + + builder.WriteRune('\'') +} diff --git a/pkg/middlewares/server_settings_cookie.go b/pkg/middlewares/server_settings_cookie.go deleted file mode 100644 index 486785ad..00000000 --- a/pkg/middlewares/server_settings_cookie.go +++ /dev/null @@ -1,113 +0,0 @@ -package middlewares - -import ( - "encoding/base64" - "fmt" - "net/url" - "strings" - - "github.com/mayswind/ezbookkeeping/pkg/core" - "github.com/mayswind/ezbookkeeping/pkg/settings" -) - -const settingsCookieName = "ebk_server_settings" - -// ServerSettingsCookie adds server settings to cookies in response -func ServerSettingsCookie(config *settings.Config) core.MiddlewareHandlerFunc { - return func(c *core.WebContext) { - settingsArr := []string{ - buildBooleanSetting("r", config.EnableUserRegister), - buildBooleanSetting("f", config.EnableUserForgetPassword), - buildBooleanSetting("v", config.EnableUserVerifyEmail), - buildBooleanSetting("p", config.EnableTransactionPictures), - buildBooleanSetting("s", config.EnableScheduledTransaction), - buildBooleanSetting("e", config.EnableDataExport), - buildBooleanSetting("i", config.EnableDataImport), - buildStringSetting("m", strings.Replace(config.MapProvider, "_", "-", -1)), - } - - if config.EnableMapDataFetchProxy && - (config.MapProvider == settings.OpenStreetMapProvider || - config.MapProvider == settings.OpenStreetMapHumanitarianStyleProvider || - config.MapProvider == settings.OpenTopoMapProvider || - config.MapProvider == settings.OPNVKarteMapProvider || - config.MapProvider == settings.CyclOSMMapProvider || - config.MapProvider == settings.CartoDBMapProvider || - config.MapProvider == settings.TomTomMapProvider || - config.MapProvider == settings.TianDiTuProvider || - config.MapProvider == settings.CustomProvider) { - settingsArr = append(settingsArr, buildBooleanSetting("mp", config.EnableMapDataFetchProxy)) - } - - if config.MapProvider == settings.CustomProvider { - settingsArr = append(settingsArr, buildStringSetting("cmzl", fmt.Sprintf("%d-%d-%d", config.CustomMapTileServerMinZoomLevel, config.CustomMapTileServerMaxZoomLevel, config.CustomMapTileServerDefaultZoomLevel))) - - if !config.EnableMapDataFetchProxy { - settingsArr = append(settingsArr, buildEncodedStringSetting("cmsu", config.CustomMapTileServerTileLayerUrl)) - - if config.CustomMapTileServerAnnotationLayerUrl != "" { - settingsArr = append(settingsArr, buildEncodedStringSetting("cmau", config.CustomMapTileServerAnnotationLayerUrl)) - } - } else { - if config.CustomMapTileServerAnnotationLayerUrl != "" { - settingsArr = append(settingsArr, buildBooleanSetting("cmap", config.EnableMapDataFetchProxy)) - } - } - } - - if config.MapProvider == settings.TomTomMapProvider && config.TomTomMapAPIKey != "" && !config.EnableMapDataFetchProxy { - settingsArr = append(settingsArr, buildEncodedStringSetting("tmak", config.TomTomMapAPIKey)) - } - - if config.MapProvider == settings.TianDiTuProvider && config.TianDiTuAPIKey != "" && !config.EnableMapDataFetchProxy { - settingsArr = append(settingsArr, buildEncodedStringSetting("tdak", config.TianDiTuAPIKey)) - } - - if config.MapProvider == settings.GoogleMapProvider && config.GoogleMapAPIKey != "" { - settingsArr = append(settingsArr, buildEncodedStringSetting("gmak", config.GoogleMapAPIKey)) - } - - if config.MapProvider == settings.BaiduMapProvider && config.BaiduMapAK != "" { - settingsArr = append(settingsArr, buildEncodedStringSetting("bmak", config.BaiduMapAK)) - } - - if config.MapProvider == settings.AmapProvider && config.AmapApplicationKey != "" { - settingsArr = append(settingsArr, buildEncodedStringSetting("amak", config.AmapApplicationKey)) - } - - if config.MapProvider == settings.AmapProvider && config.AmapSecurityVerificationMethod != "" { - settingsArr = append(settingsArr, buildStringSetting("amsv", strings.Replace(config.AmapSecurityVerificationMethod, "_", "", -1))) - - if config.AmapSecurityVerificationMethod == settings.AmapSecurityVerificationExternalProxyMethod { - settingsArr = append(settingsArr, buildEncodedStringSetting("amep", config.AmapApiExternalProxyUrl)) - } - - if config.AmapSecurityVerificationMethod == settings.AmapSecurityVerificationPlainTextMethod { - settingsArr = append(settingsArr, buildEncodedStringSetting("amas", config.AmapApplicationSecret)) - } - } - - bundledSettings := strings.Join(settingsArr, "_") - c.SetCookie(settingsCookieName, bundledSettings, int(config.TokenExpiredTime), "", "", false, false) - - c.Next() - } -} - -func buildStringSetting(key string, value string) string { - return fmt.Sprintf("%s.%s", key, value) -} - -func buildEncodedStringSetting(key string, value string) string { - urlEncodedValue := url.QueryEscape(value) - base64Value := base64.StdEncoding.EncodeToString([]byte(urlEncodedValue)) - return fmt.Sprintf("%s.%s", key, base64Value) -} - -func buildBooleanSetting(key string, value bool) string { - if value { - return fmt.Sprintf("%s.1", key) - } else { - return fmt.Sprintf("%s.0", key) - } -} diff --git a/src/DesktopApp.vue b/src/DesktopApp.vue index de71f2eb..869dad93 100644 --- a/src/DesktopApp.vue +++ b/src/DesktopApp.vue @@ -1,5 +1,4 @@