diff --git a/kenaito-conf-springboot2-client/src/main/java/cn/odboy/confcenter/ConfigcenterContext.java b/kenaito-conf-springboot2-client/src/main/java/cn/odboy/confcenter/ConfigcenterContext.java
index cadbe7a..0e0a732 100644
--- a/kenaito-conf-springboot2-client/src/main/java/cn/odboy/confcenter/ConfigcenterContext.java
+++ b/kenaito-conf-springboot2-client/src/main/java/cn/odboy/confcenter/ConfigcenterContext.java
@@ -483,12 +483,10 @@ public class ConfigcenterContext {
}
public String buildTokenParameter(String url) {
- if (token == null || token.length() < 8) {
+ if (token == null || token.isEmpty()) {
return url;
}
- String str = md5Short(token).concat(String.valueOf(new Date().getTime()));
- String authtoken = desEncrypt(token.substring(0, 8), str).toLowerCase();
- return url + (url.contains("?") ? "&" : "?") + "authtoken=" + authtoken;
+ return url + (url.contains("?") ? "&" : "?") + "token=" + token;
}
public void close() {
diff --git a/kenaito-conf-springboot3-client/src/main/java/cn/odboy/confcenter/ConfigcenterContext.java b/kenaito-conf-springboot3-client/src/main/java/cn/odboy/confcenter/ConfigcenterContext.java
index c31625b..8ecb3cb 100644
--- a/kenaito-conf-springboot3-client/src/main/java/cn/odboy/confcenter/ConfigcenterContext.java
+++ b/kenaito-conf-springboot3-client/src/main/java/cn/odboy/confcenter/ConfigcenterContext.java
@@ -355,12 +355,10 @@ public class ConfigcenterContext {
}
public String buildTokenParameter(String url) {
- if (token == null || token.length() < 8) {
+ if (token == null || token.isEmpty()) {
return url;
}
- String str = md5Short(token).concat(String.valueOf(new Date().getTime()));
- String authtoken = desEncrypt(token.substring(0, 8), str).toLowerCase();
- return url + (url.contains("?") ? "&" : "?") + "authtoken=" + authtoken;
+ return url + (url.contains("?") ? "&" : "?") + "token=" + token;
}
public void close() {
diff --git a/nodejs-client/lib/client.js b/nodejs-client/lib/client.js
index cee77a4..a49ca4a 100644
--- a/nodejs-client/lib/client.js
+++ b/nodejs-client/lib/client.js
@@ -62,7 +62,7 @@ export class ConfigClient {
}
async fetchAll() {
- const url = `${this.config.baseUrl}/api/fetchAllConfigs?appName=${encodeURIComponent(this.config.appName)}&env=${encodeURIComponent(this.config.env)}&version=${encodeURIComponent(this.config.version)}&ignoreGlobal=${this.config.ignoreGlobal}`;
+ const url = `${this.config.baseUrl}/api/fetchAllConfigs?appName=${encodeURIComponent(this.config.appName)}&env=${encodeURIComponent(this.config.env)}&version=${encodeURIComponent(this.config.version)}&ignoreGlobal=${this.config.ignoreGlobal}&token=${encodeURIComponent(this.config.token)}`;
const resp = await fetch(url, {
headers: this.config.token ? { Authorization: `Bearer ${this.config.token}` } : {},
signal: AbortSignal.timeout(10000),
@@ -101,6 +101,7 @@ export class ConfigClient {
version: this.config.version,
lastTime: this.lastTime,
ignoreGlobal: this.config.ignoreGlobal,
+ token: this.config.token,
};
const resp = await fetch(url, {
method: 'POST',
diff --git a/python-client/kenaito_conf/client.py b/python-client/kenaito_conf/client.py
index f999375..24165a4 100644
--- a/python-client/kenaito_conf/client.py
+++ b/python-client/kenaito_conf/client.py
@@ -66,6 +66,7 @@ class ConfigClient:
f"&env={self._config.env}"
f"&version={self._config.version}"
f"&ignoreGlobal={str(self._config.ignore_global).lower()}"
+ f"&token={self._config.token}"
)
resp = requests.get(url, timeout=10)
resp.raise_for_status()
@@ -98,6 +99,7 @@ class ConfigClient:
"version": self._config.version,
"lastTime": self._last_time,
"ignoreGlobal": self._config.ignore_global,
+ "token": self._config.token,
}
resp = requests.post(url, json=payload, timeout=10)
resp.raise_for_status()
diff --git a/server/internal/handler/config_api.go b/server/internal/handler/config_api.go
index 30f0813..9b5de8e 100644
--- a/server/internal/handler/config_api.go
+++ b/server/internal/handler/config_api.go
@@ -26,6 +26,7 @@ func (h *ConfigApiHandler) FetchAllConfigs(c *gin.Context) {
env := c.Query("env")
version := c.DefaultQuery("version", "latest")
ignoreGlobal := c.DefaultQuery("ignoreGlobal", "false") == "true"
+ token := c.Query("token")
if appName == "" || env == "" {
c.JSON(http.StatusBadRequest, model.WrapperResponse{Code: 400, Msg: "参数缺失"})
@@ -40,6 +41,12 @@ func (h *ConfigApiHandler) FetchAllConfigs(c *gin.Context) {
return
}
+ // validate token if app has token configured
+ if app.Token != "" && app.Token != token {
+ c.JSON(http.StatusForbidden, model.WrapperResponse{Code: 403, Msg: "Token 无效"})
+ return
+ }
+
result := make(map[string]interface{})
// load global configs
@@ -101,6 +108,7 @@ type FetchChangedRequest struct {
LastTime int64 `json:"lastTime" binding:"required"`
IgnoreGlobal bool `json:"ignoreGlobal"`
FetchAll bool `json:"fetchAll"`
+ Token string `json:"token"`
}
func (h *ConfigApiHandler) FetchChangedConfigs(c *gin.Context) {
@@ -117,6 +125,12 @@ func (h *ConfigApiHandler) FetchChangedConfigs(c *gin.Context) {
return
}
+ // validate token if app has token configured
+ if app.Token != "" && app.Token != req.Token {
+ c.JSON(http.StatusForbidden, model.WrapperResponse{Code: 403, Msg: "Token 无效"})
+ return
+ }
+
version := req.Version
if version == "" {
version = "latest"
diff --git a/web/src/api/app.js b/web/src/api/app.js
index b25590d..2af89a6 100644
--- a/web/src/api/app.js
+++ b/web/src/api/app.js
@@ -51,3 +51,17 @@ export function getAppOptions() {
method: 'get'
})
}
+
+export function generateToken(id) {
+ return request({
+ url: `/admin/app/generateToken/${id}`,
+ method: 'post'
+ })
+}
+
+export function deleteToken(id) {
+ return request({
+ url: `/admin/app/deleteToken/${id}`,
+ method: 'post'
+ })
+}
diff --git a/web/src/views/app/AppList.vue b/web/src/views/app/AppList.vue
index 3ae615e..bd48ebc 100644
--- a/web/src/views/app/AppList.vue
+++ b/web/src/views/app/AppList.vue
@@ -10,14 +10,23 @@
+
+
+ 已设置
+ 未设置
+
+
-
+
编辑
+
+ {{ scope.row.token ? '删除Token' : '生成Token' }}
+
删除
@@ -62,7 +71,7 @@