2017-07-12 04:23:41 +03: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-09 00:14:00 +03:00
import (
2020-11-14 17:05:40 +03:00
"net/url"
2020-01-09 00:14:00 +03:00
"strings"
"time"
2021-09-24 14:32:56 +03:00
"code.gitea.io/gitea/models/db"
2020-01-09 00:14:00 +03:00
"code.gitea.io/gitea/modules/context"
2020-01-24 22:00:29 +03:00
"code.gitea.io/gitea/modules/convert"
2020-01-09 00:14:00 +03:00
)
2017-07-12 04:23:41 +03:00
2020-01-09 00:14:00 +03: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 17:05:40 +03: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-09 00:14:00 +03:00
}
2020-11-14 17:05:40 +03: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-09 00:14:00 +03:00
if err != nil {
2020-11-14 17:05:40 +03:00
return 0 , err
2020-01-09 00:14:00 +03:00
}
2020-11-14 17:05:40 +03:00
if ! t . IsZero ( ) {
return t . Unix ( ) , nil
2020-01-09 00:14:00 +03:00
}
}
2020-11-14 17:05:40 +03:00
return 0 , nil
}
// prepareQueryArg unescape and trim a query arg
func prepareQueryArg ( ctx * context . APIContext , name string ) ( value string , err error ) {
2021-08-11 03:31:13 +03:00
value , err = url . PathUnescape ( ctx . FormString ( name ) )
2021-06-18 02:24:55 +03:00
value = strings . TrimSpace ( value )
2020-11-14 17:05:40 +03:00
return
2020-01-09 00:14:00 +03:00
}
2020-01-24 22:00:29 +03:00
// GetListOptions returns list options using the page and limit parameters
2021-09-24 14:32:56 +03:00
func GetListOptions ( ctx * context . APIContext ) db . ListOptions {
return db . ListOptions {
2021-07-29 04:42:15 +03:00
Page : ctx . FormInt ( "page" ) ,
PageSize : convert . ToCorrectPageSize ( ctx . FormInt ( "limit" ) ) ,
2020-01-24 22:00:29 +03:00
}
}