2017-07-12 04:23:41 +03:00
// Copyright 2017 The Gitea Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2017-07-12 04:23:41 +03:00
2022-04-07 21:59:56 +03:00
package context
2017-07-12 04:23:41 +03:00
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"
)
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
2023-05-21 04:50:53 +03:00
func GetQueryBeforeSince ( ctx * Base ) ( 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
2023-05-21 04:50:53 +03:00
func prepareQueryArg ( ctx * Base , 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 )
2022-06-20 13:02:49 +03:00
return value , err
2020-01-09 00:14:00 +03:00
}