unified API error response
This commit is contained in:
parent
b1941f1da1
commit
aff49b1c9e
13 changed files with 61 additions and 67 deletions
|
@ -226,7 +226,7 @@ func runWeb(ctx *cli.Context) {
|
||||||
|
|
||||||
m.Group("", func() {
|
m.Group("", func() {
|
||||||
m.Post("/migrate", bindIgnErr(auth.MigrateRepoForm{}), v1.MigrateRepo)
|
m.Post("/migrate", bindIgnErr(auth.MigrateRepoForm{}), v1.MigrateRepo)
|
||||||
m.Delete("/:owner/:reponame", v1.RemoveRepo)
|
m.Delete("/:username/:reponame", v1.DeleteRepo)
|
||||||
}, middleware.ApiReqToken())
|
}, middleware.ApiReqToken())
|
||||||
|
|
||||||
m.Group("/:username/:reponame", func() {
|
m.Group("/:username/:reponame", func() {
|
||||||
|
@ -239,7 +239,7 @@ func runWeb(ctx *cli.Context) {
|
||||||
})
|
})
|
||||||
|
|
||||||
m.Any("/*", func(ctx *middleware.Context) {
|
m.Any("/*", func(ctx *middleware.Context) {
|
||||||
ctx.HandleAPI(404, "Page not found")
|
ctx.Error(404)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}, ignSignIn)
|
}, ignSignIn)
|
||||||
|
|
2
gogs.go
2
gogs.go
|
@ -17,7 +17,7 @@ import (
|
||||||
"github.com/gogits/gogs/modules/setting"
|
"github.com/gogits/gogs/modules/setting"
|
||||||
)
|
)
|
||||||
|
|
||||||
const APP_VER = "0.6.16.1007 Beta"
|
const APP_VER = "0.6.16.1008 Beta"
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
runtime.GOMAXPROCS(runtime.NumCPU())
|
runtime.GOMAXPROCS(runtime.NumCPU())
|
||||||
|
|
|
@ -8,11 +8,6 @@ const DOC_URL = "https://github.com/gogits/go-gogs-client/wiki"
|
||||||
|
|
||||||
type (
|
type (
|
||||||
TplName string
|
TplName string
|
||||||
|
|
||||||
ApiJsonErr struct {
|
|
||||||
Message string `json:"message"`
|
|
||||||
DocUrl string `json:"url"`
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var GoGetMetas = make(map[string]bool)
|
var GoGetMetas = make(map[string]bool)
|
||||||
|
|
|
@ -95,7 +95,7 @@ func Toggle(options *ToggleOptions) macaron.Handler {
|
||||||
if !ctx.IsSigned {
|
if !ctx.IsSigned {
|
||||||
// Restrict API calls with error message.
|
// Restrict API calls with error message.
|
||||||
if auth.IsAPIPath(ctx.Req.URL.Path) {
|
if auth.IsAPIPath(ctx.Req.URL.Path) {
|
||||||
ctx.HandleAPI(403, "Only signed in user is allowed to call APIs.")
|
ctx.APIError(403, "", "Only signed in user is allowed to call APIs.")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -157,15 +157,22 @@ func (ctx *Context) HandleText(status int, title string) {
|
||||||
ctx.RenderData(status, []byte(title))
|
ctx.RenderData(status, []byte(title))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ctx *Context) HandleAPI(status int, obj interface{}) {
|
// APIError logs error with title if status is 500.
|
||||||
|
func (ctx *Context) APIError(status int, title string, obj interface{}) {
|
||||||
var message string
|
var message string
|
||||||
if err, ok := obj.(error); ok {
|
if err, ok := obj.(error); ok {
|
||||||
message = err.Error()
|
message = err.Error()
|
||||||
} else {
|
} else {
|
||||||
message = obj.(string)
|
message = obj.(string)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if status == 500 {
|
||||||
|
log.Error(4, "%s: %s", title, message)
|
||||||
|
}
|
||||||
|
|
||||||
ctx.JSON(status, map[string]string{
|
ctx.JSON(status, map[string]string{
|
||||||
"message": message,
|
"message": message,
|
||||||
|
"url": base.DOC_URL,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,6 @@ import (
|
||||||
"github.com/mssola/user_agent"
|
"github.com/mssola/user_agent"
|
||||||
|
|
||||||
"github.com/gogits/gogs/models"
|
"github.com/gogits/gogs/models"
|
||||||
"github.com/gogits/gogs/modules/base"
|
|
||||||
"github.com/gogits/gogs/modules/git"
|
"github.com/gogits/gogs/modules/git"
|
||||||
"github.com/gogits/gogs/modules/log"
|
"github.com/gogits/gogs/modules/log"
|
||||||
"github.com/gogits/gogs/modules/setting"
|
"github.com/gogits/gogs/modules/setting"
|
||||||
|
@ -44,7 +43,7 @@ func ApiRepoAssignment() macaron.Handler {
|
||||||
if models.IsErrUserNotExist(err) {
|
if models.IsErrUserNotExist(err) {
|
||||||
ctx.Error(404)
|
ctx.Error(404)
|
||||||
} else {
|
} else {
|
||||||
ctx.JSON(500, &base.ApiJsonErr{"GetUserByName: " + err.Error(), base.DOC_URL})
|
ctx.APIError(500, "GetUserByName", err)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -57,17 +56,17 @@ func ApiRepoAssignment() macaron.Handler {
|
||||||
if models.IsErrRepoNotExist(err) {
|
if models.IsErrRepoNotExist(err) {
|
||||||
ctx.Error(404)
|
ctx.Error(404)
|
||||||
} else {
|
} else {
|
||||||
ctx.JSON(500, &base.ApiJsonErr{"GetRepositoryByName: " + err.Error(), base.DOC_URL})
|
ctx.APIError(500, "GetRepositoryByName", err)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
} else if err = repo.GetOwner(); err != nil {
|
} else if err = repo.GetOwner(); err != nil {
|
||||||
ctx.JSON(500, &base.ApiJsonErr{"GetOwner: " + err.Error(), base.DOC_URL})
|
ctx.APIError(500, "GetOwner", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
mode, err := models.AccessLevel(ctx.User, repo)
|
mode, err := models.AccessLevel(ctx.User, repo)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.JSON(500, &base.ApiJsonErr{"AccessLevel: " + err.Error(), base.DOC_URL})
|
ctx.APIError(500, "AccessLevel", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ import (
|
||||||
// Render an arbitrary Markdown document.
|
// Render an arbitrary Markdown document.
|
||||||
func Markdown(ctx *middleware.Context, form apiv1.MarkdownForm) {
|
func Markdown(ctx *middleware.Context, form apiv1.MarkdownForm) {
|
||||||
if ctx.HasApiError() {
|
if ctx.HasApiError() {
|
||||||
ctx.JSON(422, base.ApiJsonErr{ctx.GetErrMsg(), base.DOC_URL})
|
ctx.APIError(422, "", ctx.GetErrMsg())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ func Markdown(ctx *middleware.Context, form apiv1.MarkdownForm) {
|
||||||
func MarkdownRaw(ctx *middleware.Context) {
|
func MarkdownRaw(ctx *middleware.Context) {
|
||||||
body, err := ctx.Req.Body().Bytes()
|
body, err := ctx.Req.Body().Bytes()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.JSON(422, base.ApiJsonErr{err.Error(), base.DOC_URL})
|
ctx.APIError(422, "", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
ctx.Write(base.RenderRawMarkdown(body, ""))
|
ctx.Write(base.RenderRawMarkdown(body, ""))
|
||||||
|
|
|
@ -15,7 +15,6 @@ import (
|
||||||
|
|
||||||
"github.com/gogits/gogs/models"
|
"github.com/gogits/gogs/models"
|
||||||
"github.com/gogits/gogs/modules/auth"
|
"github.com/gogits/gogs/modules/auth"
|
||||||
"github.com/gogits/gogs/modules/base"
|
|
||||||
"github.com/gogits/gogs/modules/log"
|
"github.com/gogits/gogs/modules/log"
|
||||||
"github.com/gogits/gogs/modules/middleware"
|
"github.com/gogits/gogs/modules/middleware"
|
||||||
"github.com/gogits/gogs/modules/setting"
|
"github.com/gogits/gogs/modules/setting"
|
||||||
|
@ -104,14 +103,14 @@ func SearchRepos(ctx *middleware.Context) {
|
||||||
func ListMyRepos(ctx *middleware.Context) {
|
func ListMyRepos(ctx *middleware.Context) {
|
||||||
ownRepos, err := models.GetRepositories(ctx.User.Id, true)
|
ownRepos, err := models.GetRepositories(ctx.User.Id, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.JSON(500, &base.ApiJsonErr{"GetRepositories: " + err.Error(), base.DOC_URL})
|
ctx.APIError(500, "GetRepositories", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
numOwnRepos := len(ownRepos)
|
numOwnRepos := len(ownRepos)
|
||||||
|
|
||||||
accessibleRepos, err := ctx.User.GetAccessibleRepositories()
|
accessibleRepos, err := ctx.User.GetAccessibleRepositories()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.JSON(500, &base.ApiJsonErr{"GetAccessibleRepositories: " + err.Error(), base.DOC_URL})
|
ctx.APIError(500, "GetAccessibleRepositories", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -147,15 +146,14 @@ func createRepo(ctx *middleware.Context, owner *models.User, opt api.CreateRepoO
|
||||||
if models.IsErrRepoAlreadyExist(err) ||
|
if models.IsErrRepoAlreadyExist(err) ||
|
||||||
models.IsErrNameReserved(err) ||
|
models.IsErrNameReserved(err) ||
|
||||||
models.IsErrNamePatternNotAllowed(err) {
|
models.IsErrNamePatternNotAllowed(err) {
|
||||||
ctx.JSON(422, &base.ApiJsonErr{err.Error(), base.DOC_URL})
|
ctx.APIError(422, "", err)
|
||||||
} else {
|
} else {
|
||||||
log.Error(4, "CreateRepository: %v", err)
|
|
||||||
if repo != nil {
|
if repo != nil {
|
||||||
if err = models.DeleteRepository(ctx.User.Id, repo.ID); err != nil {
|
if err = models.DeleteRepository(ctx.User.Id, repo.ID); err != nil {
|
||||||
log.Error(4, "DeleteRepository: %v", err)
|
log.Error(4, "DeleteRepository: %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ctx.Error(500)
|
ctx.APIError(500, "CreateRepository", err)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -167,7 +165,7 @@ func createRepo(ctx *middleware.Context, owner *models.User, opt api.CreateRepoO
|
||||||
func CreateRepo(ctx *middleware.Context, opt api.CreateRepoOption) {
|
func CreateRepo(ctx *middleware.Context, opt api.CreateRepoOption) {
|
||||||
// Shouldn't reach this condition, but just in case.
|
// Shouldn't reach this condition, but just in case.
|
||||||
if ctx.User.IsOrganization() {
|
if ctx.User.IsOrganization() {
|
||||||
ctx.JSON(422, "not allowed creating repository for organization")
|
ctx.APIError(422, "", "not allowed creating repository for organization")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
createRepo(ctx, ctx.User, opt)
|
createRepo(ctx, ctx.User, opt)
|
||||||
|
@ -177,15 +175,15 @@ func CreateOrgRepo(ctx *middleware.Context, opt api.CreateRepoOption) {
|
||||||
org, err := models.GetOrgByName(ctx.Params(":org"))
|
org, err := models.GetOrgByName(ctx.Params(":org"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if models.IsErrUserNotExist(err) {
|
if models.IsErrUserNotExist(err) {
|
||||||
ctx.Error(404)
|
ctx.APIError(422, "", err)
|
||||||
} else {
|
} else {
|
||||||
ctx.Error(500)
|
ctx.APIError(500, "GetOrgByName", err)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !org.IsOwnedBy(ctx.User.Id) {
|
if !org.IsOwnedBy(ctx.User.Id) {
|
||||||
ctx.Error(403)
|
ctx.APIError(403, "", "Given user is not owner of organization.")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
createRepo(ctx, org, opt)
|
createRepo(ctx, org, opt)
|
||||||
|
@ -198,9 +196,9 @@ func MigrateRepo(ctx *middleware.Context, form auth.MigrateRepoForm) {
|
||||||
org, err := models.GetUserByID(form.Uid)
|
org, err := models.GetUserByID(form.Uid)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if models.IsErrUserNotExist(err) {
|
if models.IsErrUserNotExist(err) {
|
||||||
ctx.HandleAPI(422, err)
|
ctx.APIError(422, "", err)
|
||||||
} else {
|
} else {
|
||||||
ctx.HandleAPI(500, err)
|
ctx.APIError(500, "GetUserByID", err)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -208,14 +206,14 @@ func MigrateRepo(ctx *middleware.Context, form auth.MigrateRepoForm) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ctx.HasError() {
|
if ctx.HasError() {
|
||||||
ctx.HandleAPI(422, ctx.GetErrMsg())
|
ctx.APIError(422, "", ctx.GetErrMsg())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if ctxUser.IsOrganization() {
|
if ctxUser.IsOrganization() {
|
||||||
// Check ownership of organization.
|
// Check ownership of organization.
|
||||||
if !ctxUser.IsOwnedBy(ctx.User.Id) {
|
if !ctxUser.IsOwnedBy(ctx.User.Id) {
|
||||||
ctx.HandleAPI(403, "Given user is not owner of organization.")
|
ctx.APIError(403, "", "Given user is not owner of organization.")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -227,7 +225,7 @@ func MigrateRepo(ctx *middleware.Context, form auth.MigrateRepoForm) {
|
||||||
strings.HasPrefix(form.CloneAddr, "git://") {
|
strings.HasPrefix(form.CloneAddr, "git://") {
|
||||||
u, err := url.Parse(form.CloneAddr)
|
u, err := url.Parse(form.CloneAddr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.HandleAPI(422, err)
|
ctx.APIError(422, "", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if len(form.AuthUsername) > 0 || len(form.AuthPassword) > 0 {
|
if len(form.AuthUsername) > 0 || len(form.AuthPassword) > 0 {
|
||||||
|
@ -235,7 +233,7 @@ func MigrateRepo(ctx *middleware.Context, form auth.MigrateRepoForm) {
|
||||||
}
|
}
|
||||||
remoteAddr = u.String()
|
remoteAddr = u.String()
|
||||||
} else if !com.IsDir(remoteAddr) {
|
} else if !com.IsDir(remoteAddr) {
|
||||||
ctx.HandleAPI(422, "Invalid local path, it does not exist or not a directory.")
|
ctx.APIError(422, "", "Invalid local path, it does not exist or not a directory.")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -246,7 +244,7 @@ func MigrateRepo(ctx *middleware.Context, form auth.MigrateRepoForm) {
|
||||||
log.Error(4, "DeleteRepository: %v", errDelete)
|
log.Error(4, "DeleteRepository: %v", errDelete)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ctx.HandleAPI(500, err)
|
ctx.APIError(500, "MigrateRepository", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -254,13 +252,13 @@ func MigrateRepo(ctx *middleware.Context, form auth.MigrateRepoForm) {
|
||||||
ctx.JSON(201, ToApiRepository(ctxUser, repo, api.Permission{true, true, true}))
|
ctx.JSON(201, ToApiRepository(ctxUser, repo, api.Permission{true, true, true}))
|
||||||
}
|
}
|
||||||
|
|
||||||
func RemoveRepo(ctx *middleware.Context) {
|
func DeleteRepo(ctx *middleware.Context) {
|
||||||
user, err := models.GetUserByName(ctx.Params(":owner"))
|
user, err := models.GetUserByName(ctx.Params(":username"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if models.IsErrUserNotExist(err) {
|
if models.IsErrUserNotExist(err) {
|
||||||
ctx.HandleAPI(404, err)
|
ctx.APIError(422, "", err)
|
||||||
} else {
|
} else {
|
||||||
ctx.JSON(500, &base.ApiJsonErr{"GetUserByName: " + err.Error(), base.DOC_URL})
|
ctx.APIError(500, "GetUserByName", err)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -268,21 +266,20 @@ func RemoveRepo(ctx *middleware.Context) {
|
||||||
repo, err := models.GetRepositoryByName(user.Id, ctx.Params(":reponame"))
|
repo, err := models.GetRepositoryByName(user.Id, ctx.Params(":reponame"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if models.IsErrRepoNotExist(err) {
|
if models.IsErrRepoNotExist(err) {
|
||||||
ctx.HandleAPI(404, err)
|
ctx.Error(404)
|
||||||
} else {
|
} else {
|
||||||
ctx.JSON(500, &base.ApiJsonErr{"GetRepositoryByName: " + err.Error(), base.DOC_URL})
|
ctx.APIError(500, "GetRepositoryByName", err)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if user.IsOrganization() && !user.IsOwnedBy(ctx.User.Id) {
|
if user.IsOrganization() && !user.IsOwnedBy(ctx.User.Id) {
|
||||||
ctx.HandleAPI(403, "Given user is not owner of organization.")
|
ctx.APIError(403, "", "Given user is not owner of organization.")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := models.DeleteRepository(user.Id, repo.ID); err != nil {
|
if err := models.DeleteRepository(user.Id, repo.ID); err != nil {
|
||||||
log.Error(4, "DeleteRespository: %v:", err)
|
ctx.APIError(500, "DeleteRepository", err)
|
||||||
ctx.HandleAPI(500, err)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,6 @@ package v1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/gogits/gogs/models"
|
"github.com/gogits/gogs/models"
|
||||||
"github.com/gogits/gogs/modules/base"
|
|
||||||
"github.com/gogits/gogs/modules/git"
|
"github.com/gogits/gogs/modules/git"
|
||||||
"github.com/gogits/gogs/modules/middleware"
|
"github.com/gogits/gogs/modules/middleware"
|
||||||
"github.com/gogits/gogs/routers/repo"
|
"github.com/gogits/gogs/routers/repo"
|
||||||
|
@ -23,12 +22,12 @@ func GetRepoRawFile(ctx *middleware.Context) {
|
||||||
if err == git.ErrNotExist {
|
if err == git.ErrNotExist {
|
||||||
ctx.Error(404)
|
ctx.Error(404)
|
||||||
} else {
|
} else {
|
||||||
ctx.JSON(500, &base.ApiJsonErr{"GetBlobByPath: " + err.Error(), base.DOC_URL})
|
ctx.APIError(500, "GetBlobByPath", err)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if err = repo.ServeBlob(ctx, blob); err != nil {
|
if err = repo.ServeBlob(ctx, blob); err != nil {
|
||||||
ctx.JSON(500, &base.ApiJsonErr{"ServeBlob: " + err.Error(), base.DOC_URL})
|
ctx.APIError(500, "ServeBlob", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,7 +35,7 @@ func GetRepoArchive(ctx *middleware.Context) {
|
||||||
repoPath := models.RepoPath(ctx.Params(":username"), ctx.Params(":reponame"))
|
repoPath := models.RepoPath(ctx.Params(":username"), ctx.Params(":reponame"))
|
||||||
gitRepo, err := git.OpenRepository(repoPath)
|
gitRepo, err := git.OpenRepository(repoPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.Handle(500, "RepoAssignment Invalid repo: "+repoPath, err)
|
ctx.APIError(500, "OpenRepository", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
ctx.Repo.GitRepo = gitRepo
|
ctx.Repo.GitRepo = gitRepo
|
||||||
|
|
|
@ -13,7 +13,6 @@ import (
|
||||||
api "github.com/gogits/go-gogs-client"
|
api "github.com/gogits/go-gogs-client"
|
||||||
|
|
||||||
"github.com/gogits/gogs/models"
|
"github.com/gogits/gogs/models"
|
||||||
"github.com/gogits/gogs/modules/base"
|
|
||||||
"github.com/gogits/gogs/modules/middleware"
|
"github.com/gogits/gogs/modules/middleware"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -47,7 +46,7 @@ func ToApiHook(repoLink string, w *models.Webhook) *api.Hook {
|
||||||
func ListRepoHooks(ctx *middleware.Context) {
|
func ListRepoHooks(ctx *middleware.Context) {
|
||||||
hooks, err := models.GetWebhooksByRepoId(ctx.Repo.Repository.ID)
|
hooks, err := models.GetWebhooksByRepoId(ctx.Repo.Repository.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.JSON(500, &base.ApiJsonErr{"GetWebhooksByRepoId: " + err.Error(), base.DOC_URL})
|
ctx.APIError(500, "GetWebhooksByRepoId", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,17 +61,17 @@ func ListRepoHooks(ctx *middleware.Context) {
|
||||||
// https://github.com/gogits/go-gogs-client/wiki/Repositories#create-a-hook
|
// https://github.com/gogits/go-gogs-client/wiki/Repositories#create-a-hook
|
||||||
func CreateRepoHook(ctx *middleware.Context, form api.CreateHookOption) {
|
func CreateRepoHook(ctx *middleware.Context, form api.CreateHookOption) {
|
||||||
if !models.IsValidHookTaskType(form.Type) {
|
if !models.IsValidHookTaskType(form.Type) {
|
||||||
ctx.JSON(422, &base.ApiJsonErr{"invalid hook type", base.DOC_URL})
|
ctx.APIError(422, "", "Invalid hook type")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
for _, name := range []string{"url", "content_type"} {
|
for _, name := range []string{"url", "content_type"} {
|
||||||
if _, ok := form.Config[name]; !ok {
|
if _, ok := form.Config[name]; !ok {
|
||||||
ctx.JSON(422, &base.ApiJsonErr{"missing config option: " + name, base.DOC_URL})
|
ctx.APIError(422, "", "Missing config option: "+name)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !models.IsValidHookContentType(form.Config["content_type"]) {
|
if !models.IsValidHookContentType(form.Config["content_type"]) {
|
||||||
ctx.JSON(422, &base.ApiJsonErr{"invalid content type", base.DOC_URL})
|
ctx.APIError(422, "", "Invalid content type")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -97,7 +96,7 @@ func CreateRepoHook(ctx *middleware.Context, form api.CreateHookOption) {
|
||||||
if w.HookTaskType == models.SLACK {
|
if w.HookTaskType == models.SLACK {
|
||||||
channel, ok := form.Config["channel"]
|
channel, ok := form.Config["channel"]
|
||||||
if !ok {
|
if !ok {
|
||||||
ctx.JSON(422, &base.ApiJsonErr{"missing config option: channel", base.DOC_URL})
|
ctx.APIError(422, "", "Missing config option: channel")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
meta, err := json.Marshal(&models.SlackMeta{
|
meta, err := json.Marshal(&models.SlackMeta{
|
||||||
|
@ -107,17 +106,17 @@ func CreateRepoHook(ctx *middleware.Context, form api.CreateHookOption) {
|
||||||
Color: form.Config["color"],
|
Color: form.Config["color"],
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.JSON(500, &base.ApiJsonErr{"slack: JSON marshal failed: " + err.Error(), base.DOC_URL})
|
ctx.APIError(500, "slack: JSON marshal failed", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
w.Meta = string(meta)
|
w.Meta = string(meta)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := w.UpdateEvent(); err != nil {
|
if err := w.UpdateEvent(); err != nil {
|
||||||
ctx.JSON(500, &base.ApiJsonErr{"UpdateEvent: " + err.Error(), base.DOC_URL})
|
ctx.APIError(500, "UpdateEvent", err)
|
||||||
return
|
return
|
||||||
} else if err := models.CreateWebhook(w); err != nil {
|
} else if err := models.CreateWebhook(w); err != nil {
|
||||||
ctx.JSON(500, &base.ApiJsonErr{"CreateWebhook: " + err.Error(), base.DOC_URL})
|
ctx.APIError(500, "CreateWebhook", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -128,7 +127,7 @@ func CreateRepoHook(ctx *middleware.Context, form api.CreateHookOption) {
|
||||||
func EditRepoHook(ctx *middleware.Context, form api.EditHookOption) {
|
func EditRepoHook(ctx *middleware.Context, form api.EditHookOption) {
|
||||||
w, err := models.GetWebhookByID(ctx.ParamsInt64(":id"))
|
w, err := models.GetWebhookByID(ctx.ParamsInt64(":id"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.JSON(500, &base.ApiJsonErr{"GetWebhookById: " + err.Error(), base.DOC_URL})
|
ctx.APIError(500, "GetWebhookById", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -138,7 +137,7 @@ func EditRepoHook(ctx *middleware.Context, form api.EditHookOption) {
|
||||||
}
|
}
|
||||||
if ct, ok := form.Config["content_type"]; ok {
|
if ct, ok := form.Config["content_type"]; ok {
|
||||||
if !models.IsValidHookContentType(ct) {
|
if !models.IsValidHookContentType(ct) {
|
||||||
ctx.JSON(422, &base.ApiJsonErr{"invalid content type", base.DOC_URL})
|
ctx.APIError(422, "", "Invalid content type")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
w.ContentType = models.ToHookContentType(ct)
|
w.ContentType = models.ToHookContentType(ct)
|
||||||
|
@ -153,7 +152,7 @@ func EditRepoHook(ctx *middleware.Context, form api.EditHookOption) {
|
||||||
Color: form.Config["color"],
|
Color: form.Config["color"],
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.JSON(500, &base.ApiJsonErr{"slack: JSON marshal failed: " + err.Error(), base.DOC_URL})
|
ctx.APIError(500, "slack: JSON marshal failed", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
w.Meta = string(meta)
|
w.Meta = string(meta)
|
||||||
|
@ -171,7 +170,7 @@ func EditRepoHook(ctx *middleware.Context, form api.EditHookOption) {
|
||||||
w.Create = com.IsSliceContainsStr(form.Events, string(models.HOOK_EVENT_CREATE))
|
w.Create = com.IsSliceContainsStr(form.Events, string(models.HOOK_EVENT_CREATE))
|
||||||
w.Push = com.IsSliceContainsStr(form.Events, string(models.HOOK_EVENT_PUSH))
|
w.Push = com.IsSliceContainsStr(form.Events, string(models.HOOK_EVENT_PUSH))
|
||||||
if err = w.UpdateEvent(); err != nil {
|
if err = w.UpdateEvent(); err != nil {
|
||||||
ctx.JSON(500, &base.ApiJsonErr{"UpdateEvent: " + err.Error(), base.DOC_URL})
|
ctx.APIError(500, "UpdateEvent", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -180,7 +179,7 @@ func EditRepoHook(ctx *middleware.Context, form api.EditHookOption) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := models.UpdateWebhook(w); err != nil {
|
if err := models.UpdateWebhook(w); err != nil {
|
||||||
ctx.JSON(500, &base.ApiJsonErr{"UpdateWebhook: " + err.Error(), base.DOC_URL})
|
ctx.APIError(500, "UpdateWebhook", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,6 @@ import (
|
||||||
api "github.com/gogits/go-gogs-client"
|
api "github.com/gogits/go-gogs-client"
|
||||||
|
|
||||||
"github.com/gogits/gogs/models"
|
"github.com/gogits/gogs/models"
|
||||||
"github.com/gogits/gogs/modules/base"
|
|
||||||
"github.com/gogits/gogs/modules/middleware"
|
"github.com/gogits/gogs/modules/middleware"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -69,7 +68,7 @@ func GetUserInfo(ctx *middleware.Context) {
|
||||||
if models.IsErrUserNotExist(err) {
|
if models.IsErrUserNotExist(err) {
|
||||||
ctx.Error(404)
|
ctx.Error(404)
|
||||||
} else {
|
} else {
|
||||||
ctx.JSON(500, &base.ApiJsonErr{"GetUserByName: " + err.Error(), base.DOC_URL})
|
ctx.APIError(500, "GetUserByName", err)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,6 @@ import (
|
||||||
api "github.com/gogits/go-gogs-client"
|
api "github.com/gogits/go-gogs-client"
|
||||||
|
|
||||||
"github.com/gogits/gogs/models"
|
"github.com/gogits/gogs/models"
|
||||||
"github.com/gogits/gogs/modules/base"
|
|
||||||
"github.com/gogits/gogs/modules/middleware"
|
"github.com/gogits/gogs/modules/middleware"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -16,7 +15,7 @@ import (
|
||||||
func ListAccessTokens(ctx *middleware.Context) {
|
func ListAccessTokens(ctx *middleware.Context) {
|
||||||
tokens, err := models.ListAccessTokens(ctx.User.Id)
|
tokens, err := models.ListAccessTokens(ctx.User.Id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.JSON(500, &base.ApiJsonErr{"ListAccessTokens: " + err.Error(), base.DOC_URL})
|
ctx.APIError(500, "ListAccessTokens", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,7 +37,7 @@ func CreateAccessToken(ctx *middleware.Context, form CreateAccessTokenForm) {
|
||||||
Name: form.Name,
|
Name: form.Name,
|
||||||
}
|
}
|
||||||
if err := models.NewAccessToken(t); err != nil {
|
if err := models.NewAccessToken(t); err != nil {
|
||||||
ctx.JSON(500, &base.ApiJsonErr{"NewAccessToken: " + err.Error(), base.DOC_URL})
|
ctx.APIError(500, "NewAccessToken", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
ctx.JSON(201, &api.AccessToken{t.Name, t.Sha1})
|
ctx.JSON(201, &api.AccessToken{t.Name, t.Sha1})
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
0.6.16.1007 Beta
|
0.6.16.1008 Beta
|
Loading…
Reference in a new issue