5
5
package utils
6
6
7
7
import (
8
+ "net/url"
8
9
"strings"
9
10
"time"
10
11
@@ -15,28 +16,47 @@ import (
15
16
16
17
// GetQueryBeforeSince return parsed time (unix format) from URL query's before and since
17
18
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
27
32
}
28
33
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 )
32
45
if err != nil {
33
- return 0 , 0 , err
46
+ return 0 , err
34
47
}
35
- if ! createdAfter .IsZero () {
36
- since = createdAfter .Unix ()
48
+ if ! t .IsZero () {
49
+ return t .Unix (), nil
37
50
}
38
51
}
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
40
60
}
41
61
42
62
// GetListOptions returns list options using the page and limit parameters
0 commit comments