diff --git a/models/issue_label.go b/models/issue_label.go index 13bf2005f..03db23130 100644 --- a/models/issue_label.go +++ b/models/issue_label.go @@ -68,7 +68,7 @@ func (label *Label) APIFormat() *api.Label { return &api.Label{ ID: label.ID, Name: label.Name, - Color: label.Color, + Color: strings.TrimLeft(label.Color, "#"), } } @@ -103,6 +103,27 @@ func NewLabels(labels ...*Label) error { 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. // If pass repoID as 0, then ORM will ignore limitation of repository // and can return arbitrary label with any valid ID. @@ -129,6 +150,11 @@ func GetLabelByID(id int64) (*Label, error) { return getLabelInRepoByID(x, 0, id) } +// GetLabelInRepoByID returns a label by ID 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. func GetLabelInRepoByID(repoID, labelID int64) (*Label, error) { return getLabelInRepoByID(x, repoID, labelID) diff --git a/modules/auth/auth.go b/modules/auth/auth.go index 3265b326c..ce34d0b63 100644 --- a/modules/auth/auth.go +++ b/modules/auth/auth.go @@ -34,6 +34,9 @@ func SignedInID(ctx *macaron.Context, sess session.Store) int64 { // Check access token. if IsAPIPath(ctx.Req.URL.Path) { tokenSHA := ctx.Query("token") + if len(tokenSHA) <= 0 { + tokenSHA = ctx.Query("access_token") + } if len(tokenSHA) == 0 { // Well, check with header again. auHead := ctx.Req.Header.Get("Authorization") diff --git a/routers/api/v1/repo/issue.go b/routers/api/v1/repo/issue.go index fe967ae0a..24df74224 100644 --- a/routers/api/v1/repo/issue.go +++ b/routers/api/v1/repo/issue.go @@ -16,14 +16,26 @@ import ( ) func ListIssues(ctx *context.APIContext) { - issues, err := models.Issues(&models.IssuesOptions{ - RepoID: ctx.Repo.Repository.ID, - Page: ctx.QueryInt("page"), - }) + issueOpts := models.IssuesOptions{ + RepoID: ctx.Repo.Repository.ID, + Page: ctx.QueryInt("page"), + IsClosed: ctx.Query("state") == "closed", + } + + issues, err := models.Issues(&issueOpts) if err != nil { ctx.Error(500, "Issues", err) return } + if ctx.Query("state") == "all" { + issueOpts.IsClosed = !issueOpts.IsClosed + temp_issues, err := models.Issues(&issueOpts) + if err != nil { + ctx.Error(500, "Issues", err) + return + } + issues = append(issues, temp_issues...) + } // FIXME: use IssueList to improve performance. apiIssues := make([]*api.Issue, len(issues)) diff --git a/routers/api/v1/repo/label.go b/routers/api/v1/repo/label.go index 705206cef..3f7638d80 100644 --- a/routers/api/v1/repo/label.go +++ b/routers/api/v1/repo/label.go @@ -5,6 +5,8 @@ package repo import ( + "strconv" + api "github.com/gogits/go-gogs-client" "github.com/gogits/gogs/models" @@ -26,7 +28,16 @@ func ListLabels(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 models.IsErrLabelNotExist(err) { ctx.Status(404)