diff --git a/cmd/webserver.go b/cmd/webserver.go
index 5598f820..c20595d3 100644
--- a/cmd/webserver.go
+++ b/cmd/webserver.go
@@ -78,8 +78,9 @@ func startWebServer(c *cli.Context) error {
router.NoRoute(bindApi(api.Default.ApiNotFound))
router.NoMethod(bindApi(api.Default.MethodNotAllowed))
- router.StaticFile("/mobile", filepath.Join(config.StaticRootPath, "mobile.html"))
- router.StaticFile("/desktop", filepath.Join(config.StaticRootPath, "desktop.html"))
+ router.GET("/", func(c *gin.Context) {
+ c.Redirect(http.StatusMovedPermanently, "/mobile/")
+ })
router.StaticFile("robots.txt", filepath.Join(config.StaticRootPath, "robots.txt"))
router.Static("/js", filepath.Join(config.StaticRootPath, "js"))
@@ -87,9 +88,17 @@ func startWebServer(c *cli.Context) error {
router.Static("/img", filepath.Join(config.StaticRootPath, "img"))
router.Static("/fonts", filepath.Join(config.StaticRootPath, "fonts"))
- router.GET("/", func(c *gin.Context) {
- c.Redirect(http.StatusMovedPermanently, "/mobile")
- })
+ mobileEntryRoute := router.Group("/mobile")
+ mobileEntryRoute.Use(bindMiddleware(middlewares.ServerSettingsCookie(config)))
+ {
+ mobileEntryRoute.StaticFile("/", filepath.Join(config.StaticRootPath, "mobile.html"))
+ }
+
+ desktopEntryRoute := router.Group("/desktop")
+ desktopEntryRoute.Use(bindMiddleware(middlewares.ServerSettingsCookie(config)))
+ {
+ desktopEntryRoute.StaticFile("/", filepath.Join(config.StaticRootPath, "desktop.html"))
+ }
apiRoute := router.Group("/api")
diff --git a/package-lock.json b/package-lock.json
index 2f809b4c..c8669648 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -6755,6 +6755,11 @@
}
}
},
+ "js-cookie": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz",
+ "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ=="
+ },
"js-message": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.5.tgz",
diff --git a/package.json b/package.json
index 3df1a2a7..e2fd559b 100644
--- a/package.json
+++ b/package.json
@@ -13,6 +13,7 @@
"framework7": "^5.7.13",
"framework7-icons": "^3.0.1",
"framework7-vue": "^5.7.13",
+ "js-cookie": "^2.2.1",
"vue": "^2.6.11",
"vue-i18n": "^8.22.0"
},
diff --git a/pkg/middlewares/server_settings_cookie.go b/pkg/middlewares/server_settings_cookie.go
new file mode 100644
index 00000000..24a925f7
--- /dev/null
+++ b/pkg/middlewares/server_settings_cookie.go
@@ -0,0 +1,32 @@
+package middlewares
+
+import (
+ "fmt"
+ "strings"
+
+ "github.com/mayswind/lab/pkg/core"
+ "github.com/mayswind/lab/pkg/settings"
+)
+
+const SETTINGS_COOKIE_NAME = "ACP_SETTINGS"
+
+func ServerSettingsCookie(config *settings.Config) core.MiddlewareHandlerFunc {
+ return func(c *core.Context) {
+ settingsArr := []string{
+ buildBooleanSetting("r", config.EnableUserRegister),
+ }
+
+ bundledSettings := strings.Join(settingsArr, "_")
+ c.SetCookie(SETTINGS_COOKIE_NAME, bundledSettings, config.TokenExpiredTime, "", "", false, false)
+
+ c.Next()
+ }
+}
+
+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/lib/settings.js b/src/lib/settings.js
index 2ef7c8c9..bc442c41 100644
--- a/src/lib/settings.js
+++ b/src/lib/settings.js
@@ -1,4 +1,8 @@
+import Cookies from 'js-cookie'
+
const settingsLocalStorageKey = 'lab_user_settings';
+const serverSettingsCookieKey = 'ACP_SETTINGS';
+
const defaultSettings = {
lang: 'en'
};
@@ -37,7 +41,23 @@ function setOption(key, value) {
return setSettings(settings);
}
+function getServerSetting(key) {
+ const settings = Cookies.get(serverSettingsCookieKey) || '';
+ const settingsArr = settings.split('_');
+
+ for (let i = 0; i < settingsArr.length; i++) {
+ const pairs = settingsArr[i].split('.');
+
+ if (pairs[0] === key) {
+ return pairs[1];
+ }
+ }
+
+ return undefined;
+}
+
export default {
getLanguage: () => getOriginalOption('lang'),
- setLanguage: value => setOption('lang', value)
+ setLanguage: value => setOption('lang', value),
+ isUserRegistrationEnabled: () => getServerSetting('r') === '1'
};
diff --git a/src/mobile-main.js b/src/mobile-main.js
index 2715a1cc..1729609a 100644
--- a/src/mobile-main.js
+++ b/src/mobile-main.js
@@ -31,6 +31,8 @@ Vue.prototype.$setLanguage = function (locale) {
document.querySelector('html').setAttribute('lang', locale);
return locale;
};
+Vue.prototype.$isUserRegistrationEnabled = settings.isUserRegistrationEnabled;
+
Vue.prototype.$alert = function (message, confirmCallback) {
let parameters = {};
@@ -84,6 +86,7 @@ Vue.prototype.$toast = function (message, timeout) {
closeTimeout: timeout || 1500
}).open();
};
+
Vue.prototype.$services = services;
Vue.prototype.$user = userstate;
diff --git a/src/views/mobile/Login.vue b/src/views/mobile/Login.vue
index 9b24c154..d5c300ec 100644
--- a/src/views/mobile/Login.vue
+++ b/src/views/mobile/Login.vue
@@ -23,7 +23,7 @@
-
+
@@ -98,6 +98,9 @@ export default {
};
},
computed: {
+ isUserRegistrationEnabled() {
+ return this.$isUserRegistrationEnabled();
+ },
inputIsEmpty() {
return !this.username || !this.password;
},