2017-07-11 21:23:41 -04:00
// Copyright 2017 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package utils
2020-01-08 22:14:00 +01:00
import (
2020-11-14 15:05:40 +01:00
"net/url"
2020-01-08 22:14:00 +01:00
"strings"
"time"
2020-01-24 19:00:29 +00:00
"code.gitea.io/gitea/models"
2020-01-08 22:14:00 +01:00
"code.gitea.io/gitea/modules/context"
2020-01-24 19:00:29 +00:00
"code.gitea.io/gitea/modules/convert"
2020-01-08 22:14:00 +01:00
)
2017-07-11 21:23:41 -04:00
2020-01-08 22:14:00 +01:00
// GetQueryBeforeSince return parsed time (unix format) from URL query's before and since
func GetQueryBeforeSince ( ctx * context . APIContext ) ( before , since int64 , err error ) {
2020-11-14 15:05:40 +01:00
qCreatedBefore , err := prepareQueryArg ( ctx , "before" )
if err != nil {
return 0 , 0 , err
}
qCreatedSince , err := prepareQueryArg ( ctx , "since" )
if err != nil {
return 0 , 0 , err
}
before , err = parseTime ( qCreatedBefore )
if err != nil {
return 0 , 0 , err
2020-01-08 22:14:00 +01:00
}
2020-11-14 15:05:40 +01:00
since , err = parseTime ( qCreatedSince )
if err != nil {
return 0 , 0 , err
}
return before , since , nil
}
// parseTime parse time and return unix timestamp
func parseTime ( value string ) ( int64 , error ) {
if len ( value ) != 0 {
t , err := time . Parse ( time . RFC3339 , value )
2020-01-08 22:14:00 +01:00
if err != nil {
2020-11-14 15:05:40 +01:00
return 0 , err
2020-01-08 22:14:00 +01:00
}
2020-11-14 15:05:40 +01:00
if ! t . IsZero ( ) {
return t . Unix ( ) , nil
2020-01-08 22:14:00 +01:00
}
}
2020-11-14 15:05:40 +01:00
return 0 , nil
}
// prepareQueryArg unescape and trim a query arg
func prepareQueryArg ( ctx * context . APIContext , name string ) ( value string , err error ) {
value , err = url . PathUnescape ( ctx . Query ( name ) )
value = strings . Trim ( value , " " )
return
2020-01-08 22:14:00 +01:00
}
2020-01-24 19:00:29 +00:00
// GetListOptions returns list options using the page and limit parameters
func GetListOptions ( ctx * context . APIContext ) models . ListOptions {
return models . ListOptions {
Page : ctx . QueryInt ( "page" ) ,
PageSize : convert . ToCorrectPageSize ( ctx . QueryInt ( "limit" ) ) ,
}
}