Use API error helpers and improve response codes (#2366)

This commit is contained in:
qwerty287 2023-09-02 13:31:10 +02:00 committed by GitHub
parent 3bee51dc7a
commit 3e563ef198
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
25 changed files with 117 additions and 156 deletions

View file

@ -605,7 +605,7 @@ const docTemplate = `{
},
"/healthz": {
"get": {
"description": "If everything is fine, just a 200 will be returned, a 500 signals server state is unhealthy.",
"description": "If everything is fine, just a 204 will be returned, a 500 signals server state is unhealthy.",
"produces": [
"text/plain"
],
@ -614,8 +614,8 @@ const docTemplate = `{
],
"summary": "Health information",
"responses": {
"200": {
"description": "OK"
"204": {
"description": "No Content"
},
"500": {
"description": "Internal Server Error"
@ -869,7 +869,7 @@ const docTemplate = `{
"delete": {
"description": "Deletes the given org. Requires admin rights.",
"produces": [
"application/json"
"text/plain"
],
"tags": [
"Orgs"
@ -894,10 +894,7 @@ const docTemplate = `{
],
"responses": {
"204": {
"description": "No Content",
"schema": {
"$ref": "#/definitions/Org"
}
"description": "No Content"
}
}
}
@ -1838,8 +1835,8 @@ const docTemplate = `{
}
],
"responses": {
"200": {
"description": "OK"
"204": {
"description": "No Content"
}
}
},
@ -1928,8 +1925,8 @@ const docTemplate = `{
}
],
"responses": {
"200": {
"description": "OK"
"204": {
"description": "No Content"
}
}
}
@ -2667,8 +2664,8 @@ const docTemplate = `{
}
],
"responses": {
"200": {
"description": "OK"
"204": {
"description": "No Content"
}
}
},
@ -3307,7 +3304,7 @@ const docTemplate = `{
"tags": [
"User"
],
"summary": "Return the token of the current user as stringª",
"summary": "Return the token of the current user as string",
"parameters": [
{
"type": "string",
@ -3473,7 +3470,7 @@ const docTemplate = `{
"delete": {
"description": "Deletes the given user. Requires admin rights.",
"produces": [
"application/json"
"text/plain"
],
"tags": [
"Users"
@ -3497,11 +3494,8 @@ const docTemplate = `{
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/User"
}
"204": {
"description": "No Content"
}
}
},

View file

@ -65,7 +65,7 @@ func GetAgent(c *gin.Context) {
agent, err := store.FromContext(c).AgentFind(agentID)
if err != nil {
handleDbGetError(c, err)
handleDbError(c, err)
return
}
c.JSON(http.StatusOK, agent)
@ -89,7 +89,7 @@ func GetAgentTasks(c *gin.Context) {
agent, err := store.FromContext(c).AgentFind(agentID)
if err != nil {
c.String(http.StatusNotFound, "Cannot find agent. %s", err)
handleDbError(c, err)
return
}
@ -132,7 +132,7 @@ func PatchAgent(c *gin.Context) {
agent, err := _store.AgentFind(agentID)
if err != nil {
handleDbGetError(c, err)
handleDbError(c, err)
return
}
agent.Name = in.Name
@ -201,12 +201,12 @@ func DeleteAgent(c *gin.Context) {
agent, err := _store.AgentFind(agentID)
if err != nil {
handleDbGetError(c, err)
handleDbError(c, err)
return
}
if err = _store.AgentDelete(agent); err != nil {
c.String(http.StatusInternalServerError, "Error deleting user. %s", err)
return
}
c.String(http.StatusNoContent, "")
c.Status(http.StatusNoContent)
}

View file

@ -62,11 +62,7 @@ func GetBadge(c *gin.Context) {
}
if err != nil {
if errors.Is(err, types.RecordNotExist) {
c.AbortWithStatus(http.StatusNotFound)
return
}
_ = c.AbortWithError(http.StatusInternalServerError, err)
handleDbError(c, err)
return
}
@ -107,7 +103,7 @@ func GetCC(c *gin.Context) {
_store := store.FromContext(c)
repo, err := _store.GetRepoName(c.Param("owner") + "/" + c.Param("name"))
if err != nil {
handleDbGetError(c, err)
handleDbError(c, err)
return
}

View file

@ -20,6 +20,7 @@ import (
"time"
"github.com/gin-gonic/gin"
"github.com/woodpecker-ci/woodpecker/server"
cronScheduler "github.com/woodpecker-ci/woodpecker/server/cron"
"github.com/woodpecker-ci/woodpecker/server/model"
@ -48,7 +49,7 @@ func GetCron(c *gin.Context) {
cron, err := store.FromContext(c).CronFind(repo, id)
if err != nil {
handleDbGetError(c, err)
handleDbError(c, err)
return
}
c.JSON(http.StatusOK, cron)
@ -75,7 +76,7 @@ func RunCron(c *gin.Context) {
cron, err := _store.CronFind(repo, id)
if err != nil {
handleDbGetError(c, err)
handleDbError(c, err)
return
}
@ -182,7 +183,7 @@ func PatchCron(c *gin.Context) {
cron, err := _store.CronFind(repo, id)
if err != nil {
handleDbGetError(c, err)
handleDbError(c, err)
return
}
if in.Branch != "" {
@ -245,7 +246,7 @@ func GetCronList(c *gin.Context) {
// @Summary Delete a cron job by id
// @Router /repos/{repo_id}/cron/{cron} [delete]
// @Produce plain
// @Success 200
// @Success 204
// @Tags Repository cron jobs
// @Param Authorization header string true "Insert your personal access token" default(Bearer <personal access token>)
// @Param repo_id path int true "the repository id"
@ -258,8 +259,8 @@ func DeleteCron(c *gin.Context) {
return
}
if err := store.FromContext(c).CronDelete(repo, id); err != nil {
handleDbGetError(c, err)
handleDbError(c, err)
return
}
c.String(http.StatusNoContent, "")
c.Status(http.StatusNoContent)
}

View file

@ -18,6 +18,7 @@ import (
"net/http"
"github.com/gin-gonic/gin"
"github.com/woodpecker-ci/woodpecker/server/router/middleware/session"
"github.com/woodpecker-ci/woodpecker/server"
@ -61,7 +62,7 @@ func GetGlobalSecret(c *gin.Context) {
name := c.Param("secret")
secret, err := server.Config.Services.Secrets.GlobalSecretFind(name)
if err != nil {
handleDbGetError(c, err)
handleDbError(c, err)
return
}
c.JSON(http.StatusOK, secret.Copy())
@ -122,7 +123,7 @@ func PatchGlobalSecret(c *gin.Context) {
secret, err := server.Config.Services.Secrets.GlobalSecretFind(name)
if err != nil {
handleDbGetError(c, err)
handleDbError(c, err)
return
}
if in.Value != "" {
@ -159,8 +160,8 @@ func PatchGlobalSecret(c *gin.Context) {
func DeleteGlobalSecret(c *gin.Context) {
name := c.Param("secret")
if err := server.Config.Services.Secrets.GlobalSecretDelete(name); err != nil {
handleDbGetError(c, err)
handleDbError(c, err)
return
}
c.String(http.StatusNoContent, "")
c.Status(http.StatusNoContent)
}

View file

@ -35,13 +35,13 @@ func handlePipelineErr(c *gin.Context, err error) {
} else if errors.Is(err, &pipeline.ErrBadRequest{}) {
c.String(http.StatusBadRequest, "%s", err)
} else if errors.Is(err, &pipeline.ErrFiltered{}) {
c.String(http.StatusNoContent, "%s", err)
c.Status(http.StatusNoContent)
} else {
_ = c.AbortWithError(http.StatusInternalServerError, err)
}
}
func handleDbGetError(c *gin.Context, err error) {
func handleDbError(c *gin.Context, err error) {
if errors.Is(err, types.RecordNotExist) {
c.AbortWithStatus(http.StatusNotFound)
return

View file

@ -143,23 +143,20 @@ func PostHook(c *gin.Context) {
repo, err := _store.GetRepoNameFallback(tmpRepo.ForgeRemoteID, tmpRepo.FullName)
if err != nil {
msg := fmt.Sprintf("failure to get repo %s from store", tmpRepo.FullName)
log.Error().Err(err).Msg(msg)
c.String(http.StatusNotFound, msg)
log.Error().Err(err).Msgf("failure to get repo %s from store", tmpRepo.FullName)
handleDbError(c, err)
return
}
if !repo.IsActive {
msg := fmt.Sprintf("ignoring hook: repo %s is inactive", tmpRepo.FullName)
log.Debug().Msg(msg)
c.String(http.StatusNoContent, msg)
log.Debug().Msgf("ignoring hook: repo %s is inactive", tmpRepo.FullName)
c.Status(http.StatusNoContent)
return
}
oldFullName := repo.FullName
if repo.UserID == 0 {
msg := fmt.Sprintf("ignoring hook. repo %s has no owner.", repo.FullName)
log.Warn().Msg(msg)
c.String(http.StatusNoContent, msg)
log.Warn().Msgf("ignoring hook. repo %s has no owner.", repo.FullName)
c.Status(http.StatusNoContent)
return
}
@ -220,9 +217,8 @@ func PostHook(c *gin.Context) {
//
if tmpPipeline.Event == model.EventPull && !repo.AllowPull {
msg := "ignoring hook: pull requests are disabled for this repo in woodpecker"
log.Debug().Str("repo", repo.FullName).Msg(msg)
c.String(http.StatusNoContent, msg)
log.Debug().Str("repo", repo.FullName).Msg("ignoring hook: pull requests are disabled for this repo in woodpecker")
c.Status(http.StatusNoContent)
return
}

View file

@ -210,7 +210,7 @@ func GetLoginToken(c *gin.Context) {
user, err := _store.GetUserLogin(login)
if err != nil {
_ = c.AbortWithError(http.StatusNotFound, err)
handleDbError(c, err)
return
}

View file

@ -43,14 +43,14 @@ func PromHandler() gin.HandlerFunc {
header := c.Request.Header.Get("Authorization")
if header == "" {
c.String(401, errInvalidToken.Error())
c.String(http.StatusUnauthorized, errInvalidToken.Error())
return
}
bearer := fmt.Sprintf("Bearer %s", token)
if header != bearer {
c.String(401, errInvalidToken.Error())
c.String(http.StatusForbidden, errInvalidToken.Error())
return
}

View file

@ -15,19 +15,18 @@
package api
import (
"errors"
"net/http"
"strconv"
"strings"
"github.com/rs/zerolog/log"
"github.com/gin-gonic/gin"
"github.com/woodpecker-ci/woodpecker/server"
"github.com/woodpecker-ci/woodpecker/server/model"
"github.com/woodpecker-ci/woodpecker/server/router/middleware/session"
"github.com/woodpecker-ci/woodpecker/server/store"
"github.com/woodpecker-ci/woodpecker/server/store/types"
"github.com/gin-gonic/gin"
)
// GetOrg
@ -50,11 +49,7 @@ func GetOrg(c *gin.Context) {
org, err := _store.OrgGet(orgID)
if err != nil {
if errors.Is(err, types.RecordNotExist) {
c.AbortWithStatus(http.StatusNotFound)
return
}
_ = c.AbortWithError(http.StatusInternalServerError, err)
handleDbError(c, err)
return
}
@ -127,12 +122,7 @@ func LookupOrg(c *gin.Context) {
org, err := _store.OrgFindByName(orgFullName)
if err != nil {
if errors.Is(err, types.RecordNotExist) {
c.AbortWithStatus(http.StatusNotFound)
return
}
_ = c.AbortWithError(http.StatusInternalServerError, err)
handleDbError(c, err)
return
}
@ -151,7 +141,7 @@ func LookupOrg(c *gin.Context) {
perm, err := server.Config.Services.Membership.Get(c, user, org.Name)
if err != nil {
log.Error().Msgf("Failed to check membership: %v", err)
c.String(http.StatusInternalServerError, http.StatusText(http.StatusInternalServerError))
c.Status(http.StatusInternalServerError)
return
}

View file

@ -19,6 +19,7 @@ import (
"strconv"
"github.com/gin-gonic/gin"
"github.com/woodpecker-ci/woodpecker/server/router/middleware/session"
"github.com/woodpecker-ci/woodpecker/server"
@ -46,7 +47,7 @@ func GetOrgSecret(c *gin.Context) {
secret, err := server.Config.Services.Secrets.OrgSecretFind(orgID, name)
if err != nil {
handleDbGetError(c, err)
handleDbError(c, err)
return
}
c.JSON(http.StatusOK, secret.Copy())
@ -152,7 +153,7 @@ func PatchOrgSecret(c *gin.Context) {
secret, err := server.Config.Services.Secrets.OrgSecretFind(orgID, name)
if err != nil {
handleDbGetError(c, err)
handleDbError(c, err)
return
}
if in.Value != "" {
@ -196,8 +197,8 @@ func DeleteOrgSecret(c *gin.Context) {
}
if err := server.Config.Services.Secrets.OrgSecretDelete(orgID, name); err != nil {
handleDbGetError(c, err)
handleDbError(c, err)
return
}
c.String(http.StatusNoContent, "")
c.Status(http.StatusNoContent)
}

View file

@ -38,10 +38,10 @@ import (
func GetOrgs(c *gin.Context) {
orgs, err := store.FromContext(c).OrgList(session.Pagination(c))
if err != nil {
c.String(500, "Error getting user list. %s", err)
c.String(http.StatusInternalServerError, "Error getting user list. %s", err)
return
}
c.JSON(200, orgs)
c.JSON(http.StatusOK, orgs)
}
// DeleteOrg
@ -49,8 +49,8 @@ func GetOrgs(c *gin.Context) {
// @Summary Delete an org
// @Description Deletes the given org. Requires admin rights.
// @Router /orgs/{id} [delete]
// @Produce json
// @Success 204 {object} Org
// @Produce plain
// @Success 204
// @Tags Orgs
// @Param Authorization header string true "Insert your personal access token" default(Bearer <personal access token>)
// @Param id path string true "the org's id"
@ -65,8 +65,9 @@ func DeleteOrg(c *gin.Context) {
err = _store.OrgDelete(orgID)
if err != nil {
c.String(http.StatusInternalServerError, "Error deleting org %d. %s", orgID, err)
handleDbError(c, err)
return
}
c.String(http.StatusNoContent, "")
c.Status(http.StatusNoContent)
}

View file

@ -33,7 +33,6 @@ import (
"github.com/woodpecker-ci/woodpecker/server/pipeline"
"github.com/woodpecker-ci/woodpecker/server/router/middleware/session"
"github.com/woodpecker-ci/woodpecker/server/store"
"github.com/woodpecker-ci/woodpecker/server/store/types"
)
// CreatePipeline
@ -109,10 +108,6 @@ func GetPipelines(c *gin.Context) {
pipelines, err := store.FromContext(c).GetPipelineList(repo, session.Pagination(c))
if err != nil {
if errors.Is(err, types.RecordNotExist) {
c.AbortWithStatus(http.StatusNotFound)
return
}
_ = c.AbortWithError(http.StatusInternalServerError, err)
return
}
@ -145,11 +140,7 @@ func GetPipeline(c *gin.Context) {
pl, err := _store.GetPipelineNumber(repo, num)
if err != nil {
if errors.Is(err, types.RecordNotExist) {
c.AbortWithStatus(http.StatusNotFound)
return
}
_ = c.AbortWithError(http.StatusInternalServerError, err)
handleDbError(c, err)
return
}
if pl.Workflows, err = _store.WorkflowGetTree(pl); err != nil {
@ -167,7 +158,7 @@ func GetPipelineLast(c *gin.Context) {
pl, err := _store.GetPipelineLast(repo, branch)
if err != nil {
handleDbGetError(c, err)
handleDbError(c, err)
return
}
@ -203,7 +194,7 @@ func GetStepLogs(c *gin.Context) {
pl, err := _store.GetPipelineNumber(repo, num)
if err != nil {
handleDbGetError(c, err)
handleDbError(c, err)
return
}
@ -215,7 +206,7 @@ func GetStepLogs(c *gin.Context) {
step, err := _store.StepLoad(stepID)
if err != nil {
handleDbGetError(c, err)
handleDbError(c, err)
return
}
@ -227,7 +218,7 @@ func GetStepLogs(c *gin.Context) {
logs, err := _store.LogFind(step)
if err != nil {
handleDbGetError(c, err)
handleDbError(c, err)
return
}
@ -255,7 +246,7 @@ func GetPipelineConfig(c *gin.Context) {
pl, err := _store.GetPipelineNumber(repo, num)
if err != nil {
handleDbGetError(c, err)
handleDbError(c, err)
return
}
@ -286,7 +277,7 @@ func CancelPipeline(c *gin.Context) {
pl, err := _store.GetPipelineNumber(repo, num)
if err != nil {
handleDbGetError(c, err)
handleDbError(c, err)
return
}
@ -317,7 +308,7 @@ func PostApproval(c *gin.Context) {
pl, err := _store.GetPipelineNumber(repo, num)
if err != nil {
handleDbGetError(c, err)
handleDbError(c, err)
return
}
@ -349,7 +340,7 @@ func PostDecline(c *gin.Context) {
pl, err := _store.GetPipelineNumber(repo, num)
if err != nil {
c.String(http.StatusNotFound, "%v", err)
handleDbError(c, err)
return
}
@ -404,25 +395,17 @@ func PostPipeline(c *gin.Context) {
user, err := _store.GetUser(repo.UserID)
if err != nil {
if errors.Is(err, types.RecordNotExist) {
c.AbortWithStatus(http.StatusNotFound)
return
}
_ = c.AbortWithError(http.StatusInternalServerError, err)
handleDbError(c, err)
return
}
pl, err := _store.GetPipelineNumber(repo, num)
if err != nil {
if errors.Is(err, types.RecordNotExist) {
c.AbortWithStatus(http.StatusNotFound)
return
}
_ = c.AbortWithError(http.StatusInternalServerError, err)
handleDbError(c, err)
return
}
// refresh the token to make sure, pipeline.ReStart can still obtain the pipeline config if necessary again
// refresh the token to make sure, pipeline.Restart can still obtain the pipeline config if necessary again
refreshUserToken(c, user)
// make Deploy overridable
@ -472,7 +455,7 @@ func PostPipeline(c *gin.Context) {
// @Summary Deletes log
// @Router /repos/{repo_id}/logs/{number} [post]
// @Produce plain
// @Success 200
// @Success 204
// @Tags Pipeline logs
// @Param Authorization header string true "Insert your personal access token" default(Bearer <personal access token>)
// @Param repo_id path int true "the repository id"
@ -485,13 +468,13 @@ func DeletePipelineLogs(c *gin.Context) {
pl, err := _store.GetPipelineNumber(repo, num)
if err != nil {
handleDbGetError(c, err)
handleDbError(c, err)
return
}
steps, err := _store.StepList(pl)
if err != nil {
_ = c.AbortWithError(http.StatusNotFound, err)
_ = c.AbortWithError(http.StatusInternalServerError, err)
return
}
@ -511,5 +494,5 @@ func DeletePipelineLogs(c *gin.Context) {
return
}
c.String(http.StatusNoContent, "")
c.Status(http.StatusNoContent)
}

View file

@ -41,7 +41,7 @@ func GetRegistry(c *gin.Context) {
)
registry, err := server.Config.Services.Registries.RegistryFind(repo, name)
if err != nil {
handleDbGetError(c, err)
handleDbError(c, err)
return
}
c.JSON(200, registry.Copy())
@ -110,7 +110,7 @@ func PatchRegistry(c *gin.Context) {
registry, err := server.Config.Services.Registries.RegistryFind(repo, name)
if err != nil {
handleDbGetError(c, err)
handleDbError(c, err)
return
}
if in.Username != "" {
@ -168,7 +168,7 @@ func GetRegistryList(c *gin.Context) {
// @Summary Delete a named registry
// @Router /repos/{repo_id}/registry/{registry} [delete]
// @Produce plain
// @Success 200
// @Success 204
// @Tags Repository registries
// @Param Authorization header string true "Insert your personal access token" default(Bearer <personal access token>)
// @Param repo_id path int true "the repository id"
@ -180,8 +180,8 @@ func DeleteRegistry(c *gin.Context) {
)
err := server.Config.Services.Registries.RegistryDelete(repo, name)
if err != nil {
handleDbGetError(c, err)
handleDbError(c, err)
return
}
c.String(http.StatusNoContent, "")
c.Status(http.StatusNoContent)
}

View file

@ -198,7 +198,7 @@ func PatchRepo(c *gin.Context) {
return
}
if in.IsTrusted != nil && *in.IsTrusted != repo.IsTrusted && !user.Admin {
log.Trace().Msgf("user '%s' wants to make repo trusted without being an instance admin ", user.Login)
log.Trace().Msgf("user '%s' wants to make repo trusted without being an instance admin", user.Login)
c.String(http.StatusForbidden, "Insufficient privileges")
return
}
@ -384,7 +384,7 @@ func DeleteRepo(c *gin.Context) {
if remove {
if err := _store.DeleteRepo(repo); err != nil {
_ = c.AbortWithError(http.StatusInternalServerError, err)
handleDbError(c, err)
return
}
}
@ -464,7 +464,7 @@ func RepairRepo(c *gin.Context) {
return
}
c.Writer.WriteHeader(http.StatusOK)
c.Status(http.StatusOK)
}
// MoveRepo
@ -485,7 +485,7 @@ func MoveRepo(c *gin.Context) {
to, exists := c.GetQuery("to")
if !exists {
err := fmt.Errorf("Missing required to query value")
err := fmt.Errorf("missing required to query value")
_ = c.AbortWithError(http.StatusInternalServerError, err)
return
}
@ -548,5 +548,5 @@ func MoveRepo(c *gin.Context) {
c.String(http.StatusInternalServerError, err.Error())
return
}
c.Writer.WriteHeader(http.StatusOK)
c.Status(http.StatusOK)
}

View file

@ -42,7 +42,7 @@ func GetSecret(c *gin.Context) {
)
secret, err := server.Config.Services.Secrets.SecretFind(repo, name)
if err != nil {
handleDbGetError(c, err)
handleDbError(c, err)
return
}
c.JSON(http.StatusOK, secret.Copy())
@ -111,7 +111,7 @@ func PatchSecret(c *gin.Context) {
secret, err := server.Config.Services.Secrets.SecretFind(repo, name)
if err != nil {
handleDbGetError(c, err)
handleDbError(c, err)
return
}
if in.Value != "" {
@ -178,8 +178,8 @@ func DeleteSecret(c *gin.Context) {
name = c.Param("secret")
)
if err := server.Config.Services.Secrets.SecretDelete(repo, name); err != nil {
handleDbGetError(c, err)
handleDbError(c, err)
return
}
c.String(http.StatusNoContent, "")
c.Status(http.StatusNoContent)
}

View file

@ -138,7 +138,7 @@ func GetRepos(c *gin.Context) {
// PostToken
//
// @Summary Return the token of the current user as stringª
// @Summary Return the token of the current user as string
// @Router /user/token [post]
// @Produce plain
// @Success 200

View file

@ -40,10 +40,10 @@ import (
func GetUsers(c *gin.Context) {
users, err := store.FromContext(c).GetUserList(session.Pagination(c))
if err != nil {
c.String(500, "Error getting user list. %s", err)
c.String(http.StatusInternalServerError, "Error getting user list. %s", err)
return
}
c.JSON(200, users)
c.JSON(http.StatusOK, users)
}
// GetUser
@ -59,10 +59,10 @@ func GetUsers(c *gin.Context) {
func GetUser(c *gin.Context) {
user, err := store.FromContext(c).GetUserLogin(c.Param("login"))
if err != nil {
handleDbGetError(c, err)
handleDbError(c, err)
return
}
c.JSON(200, user)
c.JSON(http.StatusOK, user)
}
// PatchUser
@ -89,7 +89,7 @@ func PatchUser(c *gin.Context) {
user, err := _store.GetUserLogin(c.Param("login"))
if err != nil {
handleDbGetError(c, err)
handleDbError(c, err)
return
}
@ -149,8 +149,8 @@ func PostUser(c *gin.Context) {
// @Summary Delete a user
// @Description Deletes the given user. Requires admin rights.
// @Router /users/{login} [delete]
// @Produce json
// @Success 200 {object} User
// @Produce plain
// @Success 204
// @Tags Users
// @Param Authorization header string true "Insert your personal access token" default(Bearer <personal access token>)
// @Param login path string true "the user's login name"
@ -159,12 +159,12 @@ func DeleteUser(c *gin.Context) {
user, err := _store.GetUserLogin(c.Param("login"))
if err != nil {
c.String(404, "Cannot find user. %s", err)
handleDbError(c, err)
return
}
if err = _store.DeleteUser(user); err != nil {
c.String(500, "Error deleting user. %s", err)
handleDbError(c, err)
return
}
c.String(200, "")
c.Status(http.StatusNoContent)
}

View file

@ -28,10 +28,10 @@ import (
// Health
//
// @Summary Health information
// @Description If everything is fine, just a 200 will be returned, a 500 signals server state is unhealthy.
// @Description If everything is fine, just a 204 will be returned, a 500 signals server state is unhealthy.
// @Router /healthz [get]
// @Produce plain
// @Success 200
// @Success 204
// @Failure 500
// @Tags System
func Health(c *gin.Context) {
@ -39,7 +39,7 @@ func Health(c *gin.Context) {
c.String(http.StatusInternalServerError, err.Error())
return
}
c.String(http.StatusOK, "")
c.Status(http.StatusNoContent)
}
// Version

View file

@ -28,7 +28,7 @@ import (
// wrapGet return error if err not nil or if requested entry do not exist
func wrapGet(exist bool, err error) error {
if !exist {
err = types.RecordNotExist
return types.RecordNotExist
}
if err != nil {
// we only ask for the function's name if needed, as it's not as preformatted as to just execute it
@ -41,7 +41,7 @@ func wrapGet(exist bool, err error) error {
// wrapDelete return error if err not nil or if requested entry do not exist
func wrapDelete(c int64, err error) error {
if c == 0 {
err = types.RecordNotExist
return types.RecordNotExist
}
if err != nil {
// we only ask for the function's name if needed, as it's not as preformatted as to just execute it

View file

@ -156,6 +156,5 @@ func deletePipeline(sess *xorm.Session, pipelineID int64) error {
if _, err := sess.Where("pipeline_id = ?", pipelineID).Delete(new(model.PipelineConfig)); err != nil {
return err
}
_, err := sess.ID(pipelineID).Delete(new(model.Pipeline))
return err
return wrapDelete(sess.ID(pipelineID).Delete(new(model.Pipeline)))
}

View file

@ -48,6 +48,5 @@ func (s storage) RegistryDelete(repo *model.Repo, addr string) error {
if err != nil {
return err
}
_, err = s.engine.ID(registry.ID).Delete(new(model.Registry))
return err
return wrapDelete(s.engine.ID(registry.ID).Delete(new(model.Registry)))
}

View file

@ -131,7 +131,7 @@ func (s storage) DeleteRepo(repo *model.Repo) error {
}
}
if _, err := sess.ID(repo.ID).Delete(new(model.Repo)); err != nil {
if err := wrapDelete(sess.ID(repo.ID).Delete(new(model.Repo))); err != nil {
return err
}

View file

@ -105,6 +105,5 @@ func deleteStep(sess *xorm.Session, stepID int64) error {
if _, err := sess.Where("step_id = ?", stepID).Delete(new(model.LogEntry)); err != nil {
return err
}
_, err := sess.ID(stepID).Delete(new(model.Step))
return err
return wrapDelete(sess.ID(stepID).Delete(new(model.Step)))
}

View file

@ -15,8 +15,9 @@
package datastore
import (
"github.com/woodpecker-ci/woodpecker/server/model"
"xorm.io/xorm"
"github.com/woodpecker-ci/woodpecker/server/model"
)
func (s storage) GetUser(id int64) (*model.User, error) {