From 97c10b8d0bf3b3b74a30aadabe14fa7b63d56efd Mon Sep 17 00:00:00 2001 From: ryan Date: Sun, 31 May 2026 20:21:46 +0800 Subject: [PATCH] =?UTF-8?q?[=E4=BC=98=E5=8C=96]=20=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- openflare_server/common/constants.go | 2 + openflare_server/common/logger.go | 3 +- openflare_server/common/redis.go | 3 +- openflare_server/controller/access_log.go | 14 ++-- openflare_server/controller/acme_account.go | 3 +- openflare_server/controller/dns_account.go | 3 +- openflare_server/controller/github.go | 84 ++++--------------- openflare_server/controller/managed_domain.go | 3 +- openflare_server/controller/user.go | 11 +-- openflare_server/service/node.go | 2 +- 10 files changed, 37 insertions(+), 91 deletions(-) diff --git a/openflare_server/common/constants.go b/openflare_server/common/constants.go index fa1a39ca..2cd2646f 100644 --- a/openflare_server/common/constants.go +++ b/openflare_server/common/constants.go @@ -49,6 +49,7 @@ var AgentDiscoveryToken = "" var NodeOfflineThreshold = 2 * time.Minute // V3 operational settings (hot-reloadable via Option table) + var AgentHeartbeatInterval = 10000 // milliseconds var AgentWebsocketUpgradeEnabled = true var AgentUpdateRepo = "Rain-kl/OpenFlare" @@ -57,6 +58,7 @@ var DatabaseAutoCleanupEnabled = false var DatabaseAutoCleanupRetentionDays = 30 // V5 OpenResty performance settings (hot-reloadable via Option table) + var OpenRestyWorkerProcesses = "auto" var OpenRestyWorkerConnections = 4096 var OpenRestyWorkerRlimitNofile = 65535 diff --git a/openflare_server/common/logger.go b/openflare_server/common/logger.go index 56c4d2c5..b6dafde7 100644 --- a/openflare_server/common/logger.go +++ b/openflare_server/common/logger.go @@ -3,7 +3,6 @@ package common import ( "context" "fmt" - "github.com/gin-gonic/gin" "io" "log/slog" "os" @@ -11,6 +10,8 @@ import ( "runtime" "slices" "strings" + + "github.com/gin-gonic/gin" ) type logLevel int diff --git a/openflare_server/common/redis.go b/openflare_server/common/redis.go index fa74ee19..54061aee 100644 --- a/openflare_server/common/redis.go +++ b/openflare_server/common/redis.go @@ -2,10 +2,11 @@ package common import ( "context" - "github.com/go-redis/redis/v8" "log/slog" "os" "time" + + "github.com/go-redis/redis/v8" ) var RDB *redis.Client diff --git a/openflare_server/controller/access_log.go b/openflare_server/controller/access_log.go index 8aea06ae..a7431391 100644 --- a/openflare_server/controller/access_log.go +++ b/openflare_server/controller/access_log.go @@ -10,7 +10,7 @@ import ( // GetAccessLogs godoc // @Summary List access logs // @Tags AccessLogs -// @Produce json +// @Produce JSON // @Security BearerAuth // @Param node_id query string false "Node ID" // @Param remote_addr query string false "Remote address" @@ -34,7 +34,7 @@ func GetAccessLogs(c *gin.Context) { // GetFoldedAccessLogs godoc // @Summary List folded access logs // @Tags AccessLogs -// @Produce json +// @Produce JSON // @Security BearerAuth // @Param node_id query string false "Node ID" // @Param remote_addr query string false "Remote address" @@ -61,7 +61,7 @@ func GetFoldedAccessLogs(c *gin.Context) { // GetFoldedAccessLogIPs godoc // @Summary List folded access log IP summaries // @Tags AccessLogs -// @Produce json +// @Produce JSON // @Security BearerAuth // @Param node_id query string false "Node ID" // @Param remote_addr query string false "Remote address" @@ -98,7 +98,7 @@ func GetFoldedAccessLogIPs(c *gin.Context) { // GetAccessLogIPSummaries godoc // @Summary List access log IP summaries // @Tags AccessLogs -// @Produce json +// @Produce JSON // @Security BearerAuth // @Param node_id query string false "Node ID" // @Param remote_addr query string false "Remote address" @@ -129,7 +129,7 @@ func GetAccessLogIPSummaries(c *gin.Context) { // GetAccessLogIPTrend godoc // @Summary Get access log IP trend // @Tags AccessLogs -// @Produce json +// @Produce JSON // @Security BearerAuth // @Param node_id query string false "Node ID" // @Param remote_addr query string true "Remote address" @@ -156,8 +156,8 @@ func GetAccessLogIPTrend(c *gin.Context) { // CleanupAccessLogs godoc // @Summary Cleanup access logs by retention days // @Tags AccessLogs -// @Accept json -// @Produce json +// @Accept JSON +// @Produce JSON // @Security BearerAuth // @Success 200 {object} map[string]interface{} // @Router /api/access-logs/cleanup [post] diff --git a/openflare_server/controller/acme_account.go b/openflare_server/controller/acme_account.go index 000b4084..5133a9d6 100644 --- a/openflare_server/controller/acme_account.go +++ b/openflare_server/controller/acme_account.go @@ -1,8 +1,9 @@ package controller import ( - "github.com/gin-gonic/gin" "openflare/model" + + "github.com/gin-gonic/gin" ) // GetDefaultAcmeAccount godoc diff --git a/openflare_server/controller/dns_account.go b/openflare_server/controller/dns_account.go index 4b4e2ef6..acc8697a 100644 --- a/openflare_server/controller/dns_account.go +++ b/openflare_server/controller/dns_account.go @@ -1,8 +1,9 @@ package controller import ( - "github.com/gin-gonic/gin" "openflare/model" + + "github.com/gin-gonic/gin" ) type DnsAccountInput struct { diff --git a/openflare_server/controller/github.go b/openflare_server/controller/github.go index 18283b58..b62b85fc 100644 --- a/openflare_server/controller/github.go +++ b/openflare_server/controller/github.go @@ -5,14 +5,14 @@ import ( "encoding/json" "errors" "fmt" - "github.com/gin-contrib/sessions" - "github.com/gin-gonic/gin" "log/slog" "net/http" "openflare/common" "openflare/model" - "strconv" "time" + + "github.com/gin-contrib/sessions" + "github.com/gin-gonic/gin" ) type GitHubOAuthResponse struct { @@ -87,19 +87,13 @@ func GitHubOAuth(c *gin.Context) { } if !common.GitHubOAuthEnabled { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": "管理员未开启通过 GitHub 登录以及注册", - }) + respondFailure(c, "管理员未开启通过 GitHub 登录以及注册") return } code := c.Query("code") githubUser, err := getGitHubUserInfoByCode(code) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + respondFailure(c, err.Error()) return } user := model.User{ @@ -108,45 +102,16 @@ func GitHubOAuth(c *gin.Context) { if model.IsGitHubIdAlreadyTaken(user.GitHubId) { err := user.FillUserByGitHubId() if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + respondFailure(c, err.Error()) return } } else { - if common.RegisterEnabled { - user.Username = "github_" + strconv.Itoa(model.GetMaxUserId()+1) - if githubUser.Name != "" { - user.DisplayName = githubUser.Name - } else { - user.DisplayName = "GitHub User" - } - user.Email = githubUser.Email - user.Role = common.RoleCommonUser - user.Status = common.UserStatusEnabled - - if err := user.Insert(); err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) - return - } - } else { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": "管理员关闭了新用户注册", - }) - return - } + respondFailure(c, "管理员关闭了新用户注册") + return } if user.Status != common.UserStatusEnabled { - c.JSON(http.StatusOK, gin.H{ - "message": "用户已被封禁", - "success": false, - }) + respondFailure(c, "用户已被封禁") return } setupLogin(&user, c) @@ -154,29 +119,20 @@ func GitHubOAuth(c *gin.Context) { func GitHubBind(c *gin.Context) { if !common.GitHubOAuthEnabled { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": "管理员未开启通过 GitHub 登录以及注册", - }) + respondFailure(c, "管理员未开启通过 GitHub 登录以及注册") return } code := c.Query("code") githubUser, err := getGitHubUserInfoByCode(code) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + respondFailure(c, err.Error()) return } user := model.User{ GitHubId: githubUser.Login, } if model.IsGitHubIdAlreadyTaken(user.GitHubId) { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": "该 GitHub 账户已被绑定", - }) + respondFailure(c, "该 GitHub 账户已被绑定") return } session := sessions.Default(c) @@ -185,24 +141,14 @@ func GitHubBind(c *gin.Context) { user.Id = id.(int) err = user.FillUserById() if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + respondFailure(c, err.Error()) return } user.GitHubId = githubUser.Login err = user.Update(false) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + respondFailure(c, err.Error()) return } - c.JSON(http.StatusOK, gin.H{ - "success": true, - "message": "bind", - }) - return + respondSuccessMessage(c, "bind") } diff --git a/openflare_server/controller/managed_domain.go b/openflare_server/controller/managed_domain.go index 4f163f5f..34c21ec3 100644 --- a/openflare_server/controller/managed_domain.go +++ b/openflare_server/controller/managed_domain.go @@ -1,9 +1,10 @@ package controller import ( - "github.com/gin-gonic/gin" "openflare/service" "strings" + + "github.com/gin-gonic/gin" ) // GetManagedDomains godoc diff --git a/openflare_server/controller/user.go b/openflare_server/controller/user.go index 9dc589d8..1cf36fe1 100644 --- a/openflare_server/controller/user.go +++ b/openflare_server/controller/user.go @@ -85,17 +85,10 @@ func setLoginSession(user *model.User, c *gin.Context) (*model.User, error) { func setupLogin(user *model.User, c *gin.Context) { cleanUser, err := setLoginSession(user, c) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "message": "无法保存会话信息,请重试", - "success": false, - }) + respondFailure(c, "无法保存会话信息,请重试") return } - c.JSON(http.StatusOK, gin.H{ - "message": "", - "success": true, - "data": *cleanUser, - }) + respondSuccess(c, *cleanUser) } func Logout(c *gin.Context) { diff --git a/openflare_server/service/node.go b/openflare_server/service/node.go index 2695b8a7..aa1636b6 100644 --- a/openflare_server/service/node.go +++ b/openflare_server/service/node.go @@ -247,7 +247,7 @@ func EnsureGlobalDiscoveryToken() (string, error) { model.InitOptionMap() } common.OptionMapRWMutex.RLock() - token := strings.TrimSpace(common.OptionMap["AgentDiscoveryToken"]) + token := strings.TrimSpace(common.AgentDiscoveryToken) common.OptionMapRWMutex.RUnlock() if token != "" { return token, nil