diff --git a/openflare_server/controller/access_log.go b/openflare_server/controller/access_log.go index 5a784fed..8aea06ae 100644 --- a/openflare_server/controller/access_log.go +++ b/openflare_server/controller/access_log.go @@ -1,7 +1,6 @@ package controller import ( - "net/http" "openflare/service" "strconv" @@ -164,12 +163,7 @@ func GetAccessLogIPTrend(c *gin.Context) { // @Router /api/access-logs/cleanup [post] func CleanupAccessLogs(c *gin.Context) { var input service.AccessLogCleanupInput - if err := c.ShouldBindJSON(&input); err != nil { - c.JSON(http.StatusBadRequest, gin.H{ - "success": false, - "message": "参数错误", - "error": err.Error(), - }) + if !bindJSON(c, &input) { return } result, err := service.CleanupAccessLogs(input) diff --git a/openflare_server/controller/agent.go b/openflare_server/controller/agent.go index 56c066a0..70f74fea 100644 --- a/openflare_server/controller/agent.go +++ b/openflare_server/controller/agent.go @@ -26,8 +26,7 @@ import ( // @Router /api/agent/nodes/register [post] func AgentRegister(c *gin.Context) { var payload service.AgentNodePayload - if err := decodeJSONBody(c.Request.Body, &payload); err != nil { - respondBadRequest(c, "") + if !bindJSON(c, &payload) { return } payload.IP = service.ResolveReportedNodeIP(payload.IP, c.Request.RemoteAddr) @@ -60,8 +59,7 @@ func AgentRegister(c *gin.Context) { // @Router /api/agent/nodes/heartbeat [post] func AgentHeartbeat(c *gin.Context) { var payload service.AgentNodePayload - if err := decodeJSONBody(c.Request.Body, &payload); err != nil { - respondBadRequest(c, "") + if !bindJSON(c, &payload) { return } payload.IP = service.ResolveReportedNodeIP(payload.IP, c.Request.RemoteAddr) @@ -111,8 +109,7 @@ func AgentGetActiveConfig(c *gin.Context) { // @Router /api/agent/apply-logs [post] func AgentReportApplyLog(c *gin.Context) { var payload service.ApplyLogPayload - if err := decodeJSONBody(c.Request.Body, &payload); err != nil { - respondBadRequest(c, "") + if !bindJSON(c, &payload) { return } @@ -301,8 +298,7 @@ func GetApplyLogs(c *gin.Context) { // @Router /api/apply-logs/cleanup [post] func CleanupApplyLogs(c *gin.Context) { var input service.ApplyLogCleanupInput - if err := c.ShouldBindJSON(&input); err != nil { - respondBadRequest(c, "") + if !bindJSON(c, &input) { return } result, err := service.CleanupApplyLogs(input) diff --git a/openflare_server/controller/config_version.go b/openflare_server/controller/config_version.go index dfd7d177..b14e913f 100644 --- a/openflare_server/controller/config_version.go +++ b/openflare_server/controller/config_version.go @@ -1,9 +1,7 @@ package controller import ( - "net/http" "openflare/service" - "strconv" "github.com/gin-gonic/gin" ) @@ -18,17 +16,10 @@ import ( func GetConfigVersions(c *gin.Context) { versions, err := service.ListConfigVersions() 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": "", - "data": versions, - }) + respondSuccess(c, versions) } // GetConfigVersion godoc @@ -41,27 +32,16 @@ func GetConfigVersions(c *gin.Context) { // @Failure 400 {object} map[string]interface{} // @Router /api/config-versions/{id} [get] func GetConfigVersion(c *gin.Context) { - id, err := strconv.ParseUint(c.Param("id"), 10, 64) - if err != nil || id == 0 { - c.JSON(http.StatusBadRequest, gin.H{ - "success": false, - "message": "invalid id", - }) + id, ok := parseIDParam(c) + if !ok { return } - version, err := service.GetConfigVersionDetail(uint(id)) + version, err := service.GetConfigVersionDetail(id) 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": "", - "data": version, - }) + respondSuccess(c, version) } // GetActiveConfigVersion godoc @@ -74,17 +54,10 @@ func GetConfigVersion(c *gin.Context) { func GetActiveConfigVersion(c *gin.Context) { version, err := service.GetActiveConfigVersion() if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": "当前没有激活版本", - }) + respondFailure(c, "当前没有激活版本") return } - c.JSON(http.StatusOK, gin.H{ - "success": true, - "message": "", - "data": version, - }) + respondSuccess(c, version) } // PreviewConfigVersion godoc @@ -97,17 +70,10 @@ func GetActiveConfigVersion(c *gin.Context) { func PreviewConfigVersion(c *gin.Context) { preview, err := service.PreviewConfigVersion() 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": "", - "data": preview, - }) + respondSuccess(c, preview) } // DiffConfigVersion godoc @@ -120,17 +86,10 @@ func PreviewConfigVersion(c *gin.Context) { func DiffConfigVersion(c *gin.Context) { diff, err := service.DiffConfigVersion() 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": "", - "data": diff, - }) + respondSuccess(c, diff) } // PublishConfigVersion godoc @@ -145,17 +104,10 @@ func PublishConfigVersion(c *gin.Context) { force := c.Query("force") == "true" result, err := service.PublishConfigVersion(username, force) 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": "", - "data": result.Version, - }) + respondSuccess(c, result.Version) } // ActivateConfigVersion godoc @@ -168,27 +120,16 @@ func PublishConfigVersion(c *gin.Context) { // @Failure 400 {object} map[string]interface{} // @Router /api/config-versions/{id}/activate [post] func ActivateConfigVersion(c *gin.Context) { - id, err := strconv.ParseUint(c.Param("id"), 10, 64) - if err != nil || id == 0 { - c.JSON(http.StatusBadRequest, gin.H{ - "success": false, - "message": "invalid id", - }) + id, ok := parseIDParam(c) + if !ok { return } - version, err := service.ActivateConfigVersion(uint(id)) + version, err := service.ActivateConfigVersion(id) 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": "", - "data": version, - }) + respondSuccess(c, version) } type CleanupConfigVersionRequest struct { @@ -206,26 +147,17 @@ type CleanupConfigVersionRequest struct { // @Router /api/config-versions/cleanup [post] func CleanupConfigVersions(c *gin.Context) { var req CleanupConfigVersionRequest - if err := c.ShouldBindJSON(&req); err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": "参数错误", - }) + if !bindJSON(c, &req) { return } deletedCount, err := service.CleanupConfigVersions(req.KeepCount) 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, + respondSuccessWithExtras(c, map[string]interface{}{"deleted_count": deletedCount}, gin.H{ "message": "清理成功", - "data": map[string]interface{}{"deleted_count": deletedCount}, }) } diff --git a/openflare_server/controller/update.go b/openflare_server/controller/update.go index 741b0338..55bcaf51 100644 --- a/openflare_server/controller/update.go +++ b/openflare_server/controller/update.go @@ -1,9 +1,6 @@ package controller import ( - "errors" - "io" - "net/http" "openflare/service" "strings" "time" @@ -24,23 +21,16 @@ type serverUpgradeRequest struct { // @Summary Get latest GitHub release // @Tags Update // @Produce json +// @Security BearerAuth // @Success 200 {object} map[string]interface{} // @Router /api/update/latest-release [get] func GetLatestRelease(c *gin.Context) { release, err := service.GetLatestServerRelease(c.Request.Context(), c.Query("channel")) 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": "", - "data": release, - }) + respondSuccess(c, release) } // UpgradeServer godoc @@ -52,27 +42,19 @@ func GetLatestRelease(c *gin.Context) { func UpgradeServer(c *gin.Context) { var request serverUpgradeRequest if c.Request.ContentLength > 0 { - if err := c.ShouldBindJSON(&request); err != nil && !errors.Is(err, io.EOF) { - c.JSON(http.StatusBadRequest, gin.H{ - "success": false, - "message": "无效的参数", - }) + if err := decodeOptionalJSONBody(c.Request.Body, &request); err != nil { + respondBadRequest(c, "无效的参数") return } } release, err := service.ScheduleServerUpgrade(request.Channel) 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, + respondSuccessWithExtras(c, release, gin.H{ "message": "服务升级任务已启动,下载完成后将自动重启。", - "data": release, }) } @@ -122,19 +104,13 @@ func StreamServerUpgradeLogs(c *gin.Context) { func UploadManualServerBinary(c *gin.Context) { fileHeader, err := c.FormFile("binary") if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": "请先选择要上传的服务端二进制文件。", - }) + respondFailure(c, "请先选择要上传的服务端二进制文件。") return } file, err := fileHeader.Open() if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": "读取上传文件失败。", - }) + respondFailure(c, "读取上传文件失败。") return } defer func() { @@ -143,10 +119,7 @@ func UploadManualServerBinary(c *gin.Context) { info, err := service.UploadManualServerBinary(c.Request.Context(), fileHeader.Filename, file) if err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": err.Error(), - }) + respondFailure(c, err.Error()) return } @@ -155,10 +128,8 @@ func UploadManualServerBinary(c *gin.Context) { message = "已完成上传并检查升级包版本。" } - c.JSON(http.StatusOK, gin.H{ - "success": true, + respondSuccessWithExtras(c, info, gin.H{ "message": message, - "data": info, }) } @@ -171,26 +142,17 @@ func UploadManualServerBinary(c *gin.Context) { // @Router /api/update/manual-upgrade [post] func ConfirmManualServerUpgrade(c *gin.Context) { var request confirmManualUpgradeRequest - if err := c.ShouldBindJSON(&request); err != nil { - c.JSON(http.StatusOK, gin.H{ - "success": false, - "message": "升级确认参数无效。", - }) + if !bindJSON(c, &request) { return } info, err := service.ConfirmManualServerUpgrade(request.UploadToken) 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, + respondSuccessWithExtras(c, info, gin.H{ "message": "服务升级任务已启动,确认无误后将自动重启。", - "data": info, }) }