Merge pull request #227 from go-gitea/api/github-compliance

GitHub API Compliance Fixes
This commit is contained in:
Kim "BKC" Carlbäcker 2016-12-02 10:04:15 +01:00 committed by GitHub
commit d7ed78a919
6 changed files with 78 additions and 9 deletions

View File

@ -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)

View File

@ -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")

View File

@ -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()).

View File

@ -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))

View File

@ -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)

View File

@ -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