mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-12-27 08:42:14 +01:00
Merge pull request #227 from go-gitea/api/github-compliance
GitHub API Compliance Fixes
This commit is contained in:
commit
d7ed78a919
6 changed files with 78 additions and 9 deletions
|
@ -67,7 +67,7 @@ func (label *Label) APIFormat() *api.Label {
|
||||||
return &api.Label{
|
return &api.Label{
|
||||||
ID: label.ID,
|
ID: label.ID,
|
||||||
Name: label.Name,
|
Name: label.Name,
|
||||||
Color: label.Color,
|
Color: strings.TrimLeft(label.Color, "#"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,6 +102,27 @@ func NewLabels(labels ...*Label) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// getLabelInRepoByName returns a label by Name in given repository.
|
||||||
|
// If pass repoID as 0, then ORM will ignore limitation of repository
|
||||||
|
// and can return arbitrary label with any valid ID.
|
||||||
|
func getLabelInRepoByName(e Engine, repoID int64, labelName string) (*Label, error) {
|
||||||
|
if len(labelName) <= 0 {
|
||||||
|
return nil, ErrLabelNotExist{0, repoID}
|
||||||
|
}
|
||||||
|
|
||||||
|
l := &Label{
|
||||||
|
Name: labelName,
|
||||||
|
RepoID: repoID,
|
||||||
|
}
|
||||||
|
has, err := x.Get(l)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
} else if !has {
|
||||||
|
return nil, ErrLabelNotExist{0, l.RepoID}
|
||||||
|
}
|
||||||
|
return l, nil
|
||||||
|
}
|
||||||
|
|
||||||
// getLabelInRepoByID returns a label by ID in given repository.
|
// getLabelInRepoByID returns a label by ID in given repository.
|
||||||
// If pass repoID as 0, then ORM will ignore limitation of repository
|
// If pass repoID as 0, then ORM will ignore limitation of repository
|
||||||
// and can return arbitrary label with any valid ID.
|
// and can return arbitrary label with any valid ID.
|
||||||
|
@ -128,6 +149,11 @@ func GetLabelByID(id int64) (*Label, error) {
|
||||||
return getLabelInRepoByID(x, 0, id)
|
return getLabelInRepoByID(x, 0, id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetLabelInRepoByName returns a label by name in given repository.
|
||||||
|
func GetLabelInRepoByName(repoID int64, labelName string) (*Label, error) {
|
||||||
|
return getLabelInRepoByName(x, repoID, labelName)
|
||||||
|
}
|
||||||
|
|
||||||
// GetLabelInRepoByID returns a label by ID in given repository.
|
// GetLabelInRepoByID returns a label by ID in given repository.
|
||||||
func GetLabelInRepoByID(repoID, labelID int64) (*Label, error) {
|
func GetLabelInRepoByID(repoID, labelID int64) (*Label, error) {
|
||||||
return getLabelInRepoByID(x, repoID, labelID)
|
return getLabelInRepoByID(x, repoID, labelID)
|
||||||
|
|
|
@ -35,6 +35,9 @@ func SignedInID(ctx *macaron.Context, sess session.Store) int64 {
|
||||||
// Check access token.
|
// Check access token.
|
||||||
if IsAPIPath(ctx.Req.URL.Path) {
|
if IsAPIPath(ctx.Req.URL.Path) {
|
||||||
tokenSHA := ctx.Query("token")
|
tokenSHA := ctx.Query("token")
|
||||||
|
if len(tokenSHA) <= 0 {
|
||||||
|
tokenSHA = ctx.Query("access_token")
|
||||||
|
}
|
||||||
if len(tokenSHA) == 0 {
|
if len(tokenSHA) == 0 {
|
||||||
// Well, check with header again.
|
// Well, check with header again.
|
||||||
auHead := ctx.Req.Header.Get("Authorization")
|
auHead := ctx.Req.Header.Get("Authorization")
|
||||||
|
|
|
@ -243,6 +243,8 @@ func RegisterRoutes(m *macaron.Macaron) {
|
||||||
m.Get("/search", repo.Search)
|
m.Get("/search", repo.Search)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
m.Combo("/repositories/:id", reqToken()).Get(repo.GetByID)
|
||||||
|
|
||||||
m.Group("/repos", func() {
|
m.Group("/repos", func() {
|
||||||
m.Post("/migrate", bind(auth.MigrateRepoForm{}), repo.Migrate)
|
m.Post("/migrate", bind(auth.MigrateRepoForm{}), repo.Migrate)
|
||||||
m.Combo("/:username/:reponame", context.ExtractOwnerAndRepo()).
|
m.Combo("/:username/:reponame", context.ExtractOwnerAndRepo()).
|
||||||
|
|
|
@ -17,14 +17,26 @@ import (
|
||||||
|
|
||||||
// ListIssues list the issues of a repository
|
// ListIssues list the issues of a repository
|
||||||
func ListIssues(ctx *context.APIContext) {
|
func ListIssues(ctx *context.APIContext) {
|
||||||
issues, err := models.Issues(&models.IssuesOptions{
|
issueOpts := models.IssuesOptions{
|
||||||
RepoID: ctx.Repo.Repository.ID,
|
RepoID: ctx.Repo.Repository.ID,
|
||||||
Page: ctx.QueryInt("page"),
|
Page: ctx.QueryInt("page"),
|
||||||
})
|
IsClosed: ctx.Query("state") == "closed",
|
||||||
|
}
|
||||||
|
|
||||||
|
issues, err := models.Issues(&issueOpts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.Error(500, "Issues", err)
|
ctx.Error(500, "Issues", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if ctx.Query("state") == "all" {
|
||||||
|
issueOpts.IsClosed = !issueOpts.IsClosed
|
||||||
|
tempIssues, err := models.Issues(&issueOpts)
|
||||||
|
if err != nil {
|
||||||
|
ctx.Error(500, "Issues", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
issues = append(issues, tempIssues...)
|
||||||
|
}
|
||||||
|
|
||||||
// FIXME: use IssueList to improve performance.
|
// FIXME: use IssueList to improve performance.
|
||||||
apiIssues := make([]*api.Issue, len(issues))
|
apiIssues := make([]*api.Issue, len(issues))
|
||||||
|
|
|
@ -5,6 +5,8 @@
|
||||||
package repo
|
package repo
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"strconv"
|
||||||
|
|
||||||
api "code.gitea.io/sdk/gitea"
|
api "code.gitea.io/sdk/gitea"
|
||||||
|
|
||||||
"code.gitea.io/gitea/models"
|
"code.gitea.io/gitea/models"
|
||||||
|
@ -28,7 +30,16 @@ func ListLabels(ctx *context.APIContext) {
|
||||||
|
|
||||||
// GetLabel get label by repository and label id
|
// GetLabel get label by repository and label id
|
||||||
func GetLabel(ctx *context.APIContext) {
|
func GetLabel(ctx *context.APIContext) {
|
||||||
label, err := models.GetLabelInRepoByID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id"))
|
var (
|
||||||
|
label *models.Label
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
strID := ctx.Params(":id")
|
||||||
|
if intID, err2 := strconv.ParseInt(strID, 10, 64); err2 != nil {
|
||||||
|
label, err = models.GetLabelInRepoByName(ctx.Repo.Repository.ID, strID)
|
||||||
|
} else {
|
||||||
|
label, err = models.GetLabelInRepoByID(ctx.Repo.Repository.ID, intID)
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if models.IsErrLabelNotExist(err) {
|
if models.IsErrLabelNotExist(err) {
|
||||||
ctx.Status(404)
|
ctx.Status(404)
|
||||||
|
|
|
@ -141,7 +141,7 @@ func CreateUserRepo(ctx *context.APIContext, owner *models.User, opt api.CreateR
|
||||||
ctx.JSON(201, repo.APIFormat(&api.Permission{true, true, true}))
|
ctx.JSON(201, repo.APIFormat(&api.Permission{true, true, true}))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create create one repository of mine
|
// Create one repository of mine
|
||||||
// see https://github.com/gogits/go-gogs-client/wiki/Repositories#create
|
// see https://github.com/gogits/go-gogs-client/wiki/Repositories#create
|
||||||
func Create(ctx *context.APIContext, opt api.CreateRepoOption) {
|
func Create(ctx *context.APIContext, opt api.CreateRepoOption) {
|
||||||
// Shouldn't reach this condition, but just in case.
|
// Shouldn't reach this condition, but just in case.
|
||||||
|
@ -244,14 +244,29 @@ func Migrate(ctx *context.APIContext, form auth.MigrateRepoForm) {
|
||||||
ctx.JSON(201, repo.APIFormat(&api.Permission{true, true, true}))
|
ctx.JSON(201, repo.APIFormat(&api.Permission{true, true, true}))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get get one repository
|
// Get one repository
|
||||||
// see https://github.com/gogits/go-gogs-client/wiki/Repositories#get
|
// see https://github.com/gogits/go-gogs-client/wiki/Repositories#get
|
||||||
func Get(ctx *context.APIContext) {
|
func Get(ctx *context.APIContext) {
|
||||||
repo := ctx.Repo.Repository
|
repo := ctx.Repo.Repository
|
||||||
ctx.JSON(200, repo.APIFormat(&api.Permission{true, true, true}))
|
ctx.JSON(200, repo.APIFormat(&api.Permission{true, true, true}))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Delete delete one repository
|
// GetByID returns a single Repository
|
||||||
|
func GetByID(ctx *context.APIContext) {
|
||||||
|
repo, err := models.GetRepositoryByID(ctx.ParamsInt64(":id"))
|
||||||
|
if err != nil {
|
||||||
|
if models.IsErrRepoNotExist(err) {
|
||||||
|
ctx.Status(404)
|
||||||
|
} else {
|
||||||
|
ctx.Error(500, "GetRepositoryByID", err)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.JSON(200, repo.APIFormat(&api.Permission{true, true, true}))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete one repository
|
||||||
// see https://github.com/gogits/go-gogs-client/wiki/Repositories#delete
|
// see https://github.com/gogits/go-gogs-client/wiki/Repositories#delete
|
||||||
func Delete(ctx *context.APIContext) {
|
func Delete(ctx *context.APIContext) {
|
||||||
owner := ctx.Repo.Owner
|
owner := ctx.Repo.Owner
|
||||||
|
|
Loading…
Reference in a new issue