From b895321e9e5fa5181e35cdb8de58edaf1c8795c7 Mon Sep 17 00:00:00 2001 From: Odboy Date: Fri, 13 Feb 2026 21:11:47 +0800 Subject: [PATCH] =?UTF-8?q?feat(app):=20=E6=B7=BB=E5=8A=A0=E7=94=9F?= =?UTF-8?q?=E6=88=90/=E5=88=A0=E9=99=A4=E5=BA=94=E7=94=A8=20Token=20?= =?UTF-8?q?=E7=9A=84=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - GenerateToken: 生成 64 字符随机 Token 并保存到应用 - DeleteToken: 清空应用 Token --- server/internal/handler/app.go | 49 ++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/server/internal/handler/app.go b/server/internal/handler/app.go index e061911..48e45d7 100644 --- a/server/internal/handler/app.go +++ b/server/internal/handler/app.go @@ -1,6 +1,8 @@ package handler import ( + "crypto/rand" + "encoding/hex" "kenaito-conf/server/internal/dao" "kenaito-conf/server/internal/middleware" "kenaito-conf/server/internal/model" @@ -300,3 +302,50 @@ type AppTreeModel struct { ServiceId string `json:"serviceId,omitempty"` Children []*AppTreeModel `json:"children"` } + +func (h *AppHandler) GenerateToken(c *gin.Context) { + id, _ := strconv.Atoi(c.Param("id")) + userInfo := middleware.GetUserInfo(c) + + var app model.Application + has, _ := dao.Engine.ID(id).Get(&app) + if !has { + c.JSON(http.StatusOK, model.WrapperResponse{Code: 404, Msg: "应用不存在"}) + return + } + + bytes := make([]byte, 32) + if _, err := rand.Read(bytes); err != nil { + c.JSON(http.StatusOK, model.WrapperResponse{Code: 500, Msg: "生成 Token 失败"}) + return + } + token := hex.EncodeToString(bytes) + + app.Token = token + app.UpdatedBy = userInfo.Name + now := time.Now() + app.UpdatedAt = &now + dao.Engine.ID(app.Id).Cols("token", "updated_by", "updated_at").Update(&app) + + c.JSON(http.StatusOK, model.WrapperResponse{Code: 0, Data: token}) +} + +func (h *AppHandler) DeleteToken(c *gin.Context) { + id, _ := strconv.Atoi(c.Param("id")) + userInfo := middleware.GetUserInfo(c) + + var app model.Application + has, _ := dao.Engine.ID(id).Get(&app) + if !has { + c.JSON(http.StatusOK, model.WrapperResponse{Code: 404, Msg: "应用不存在"}) + return + } + + app.Token = "" + app.UpdatedBy = userInfo.Name + now := time.Now() + app.UpdatedAt = &now + dao.Engine.ID(app.Id).Cols("token", "updated_by", "updated_at").Update(&app) + + c.JSON(http.StatusOK, model.WrapperResponse{Code: 0, Data: true}) +}