Skip to content

Commit e9d284f

Browse files
Merge branch 'master' into master
2 parents 9465ec3 + 3f3447a commit e9d284f

File tree

5 files changed

+43
-23
lines changed

5 files changed

+43
-23
lines changed

routers/api/v1/notify/repo.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ func ListRepoNotifications(ctx *context.APIContext) {
101101

102102
before, since, err := utils.GetQueryBeforeSince(ctx)
103103
if err != nil {
104-
ctx.InternalServerError(err)
104+
ctx.Error(http.StatusUnprocessableEntity, "GetQueryBeforeSince", err)
105105
return
106106
}
107107
opts := models.FindNotificationOptions{

routers/api/v1/notify/user.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ func ListNotifications(ctx *context.APIContext) {
6363

6464
before, since, err := utils.GetQueryBeforeSince(ctx)
6565
if err != nil {
66-
ctx.InternalServerError(err)
66+
ctx.Error(http.StatusUnprocessableEntity, "GetQueryBeforeSince", err)
6767
return
6868
}
6969
opts := models.FindNotificationOptions{

routers/api/v1/repo/issue_comment.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ func ListIssueComments(ctx *context.APIContext) {
5757

5858
before, since, err := utils.GetQueryBeforeSince(ctx)
5959
if err != nil {
60-
ctx.Error(http.StatusInternalServerError, "GetQueryBeforeSince", err)
60+
ctx.Error(http.StatusUnprocessableEntity, "GetQueryBeforeSince", err)
6161
return
6262
}
6363
issue, err := models.GetIssueByIndex(ctx.Repo.Repository.ID, ctx.ParamsInt64(":index"))
@@ -133,7 +133,7 @@ func ListRepoIssueComments(ctx *context.APIContext) {
133133

134134
before, since, err := utils.GetQueryBeforeSince(ctx)
135135
if err != nil {
136-
ctx.Error(http.StatusInternalServerError, "GetQueryBeforeSince", err)
136+
ctx.Error(http.StatusUnprocessableEntity, "GetQueryBeforeSince", err)
137137
return
138138
}
139139

routers/api/v1/repo/issue_tracked_time.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ func ListTrackedTimes(ctx *context.APIContext) {
8686
}
8787

8888
if opts.CreatedBeforeUnix, opts.CreatedAfterUnix, err = utils.GetQueryBeforeSince(ctx); err != nil {
89-
ctx.InternalServerError(err)
89+
ctx.Error(http.StatusUnprocessableEntity, "GetQueryBeforeSince", err)
9090
return
9191
}
9292

@@ -491,7 +491,7 @@ func ListTrackedTimesByRepository(ctx *context.APIContext) {
491491

492492
var err error
493493
if opts.CreatedBeforeUnix, opts.CreatedAfterUnix, err = utils.GetQueryBeforeSince(ctx); err != nil {
494-
ctx.InternalServerError(err)
494+
ctx.Error(http.StatusUnprocessableEntity, "GetQueryBeforeSince", err)
495495
return
496496
}
497497

@@ -554,7 +554,7 @@ func ListMyTrackedTimes(ctx *context.APIContext) {
554554

555555
var err error
556556
if opts.CreatedBeforeUnix, opts.CreatedAfterUnix, err = utils.GetQueryBeforeSince(ctx); err != nil {
557-
ctx.InternalServerError(err)
557+
ctx.Error(http.StatusUnprocessableEntity, "GetQueryBeforeSince", err)
558558
return
559559
}
560560

routers/api/v1/utils/utils.go

Lines changed: 36 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
package utils
66

77
import (
8+
"net/url"
89
"strings"
910
"time"
1011

@@ -15,28 +16,47 @@ import (
1516

1617
// GetQueryBeforeSince return parsed time (unix format) from URL query's before and since
1718
func GetQueryBeforeSince(ctx *context.APIContext) (before, since int64, err error) {
18-
qCreatedBefore := strings.Trim(ctx.Query("before"), " ")
19-
if qCreatedBefore != "" {
20-
createdBefore, err := time.Parse(time.RFC3339, qCreatedBefore)
21-
if err != nil {
22-
return 0, 0, err
23-
}
24-
if !createdBefore.IsZero() {
25-
before = createdBefore.Unix()
26-
}
19+
qCreatedBefore, err := prepareQueryArg(ctx, "before")
20+
if err != nil {
21+
return 0, 0, err
22+
}
23+
24+
qCreatedSince, err := prepareQueryArg(ctx, "since")
25+
if err != nil {
26+
return 0, 0, err
27+
}
28+
29+
before, err = parseTime(qCreatedBefore)
30+
if err != nil {
31+
return 0, 0, err
2732
}
2833

29-
qCreatedAfter := strings.Trim(ctx.Query("since"), " ")
30-
if qCreatedAfter != "" {
31-
createdAfter, err := time.Parse(time.RFC3339, qCreatedAfter)
34+
since, err = parseTime(qCreatedSince)
35+
if err != nil {
36+
return 0, 0, err
37+
}
38+
return before, since, nil
39+
}
40+
41+
// parseTime parse time and return unix timestamp
42+
func parseTime(value string) (int64, error) {
43+
if len(value) != 0 {
44+
t, err := time.Parse(time.RFC3339, value)
3245
if err != nil {
33-
return 0, 0, err
46+
return 0, err
3447
}
35-
if !createdAfter.IsZero() {
36-
since = createdAfter.Unix()
48+
if !t.IsZero() {
49+
return t.Unix(), nil
3750
}
3851
}
39-
return before, since, nil
52+
return 0, nil
53+
}
54+
55+
// prepareQueryArg unescape and trim a query arg
56+
func prepareQueryArg(ctx *context.APIContext, name string) (value string, err error) {
57+
value, err = url.PathUnescape(ctx.Query(name))
58+
value = strings.Trim(value, " ")
59+
return
4060
}
4161

4262
// GetListOptions returns list options using the page and limit parameters

0 commit comments

Comments
 (0)