mirror of
https://github.com/pomerium/pomerium.git
synced 2025-05-10 15:47:36 +02:00
urlutil: add time validation functions (#3776)
This commit is contained in:
parent
457fca08dc
commit
090601873f
3 changed files with 111 additions and 1 deletions
43
internal/urlutil/time.go
Normal file
43
internal/urlutil/time.go
Normal file
|
@ -0,0 +1,43 @@
|
|||
package urlutil
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/url"
|
||||
"strconv"
|
||||
"time"
|
||||
)
|
||||
|
||||
// BuildTimeParameters adds the issued and expiry timestamps to the query parameters.
|
||||
func BuildTimeParameters(params url.Values, expiry time.Duration) {
|
||||
now := time.Now()
|
||||
|
||||
params.Set(QueryIssued, fmt.Sprint(now.UnixMilli()))
|
||||
params.Set(QueryExpiry, fmt.Sprint(now.Add(expiry).UnixMilli()))
|
||||
}
|
||||
|
||||
// ValidateTimeParameters validates that the issued and expiry timestamps in the query parameters are valid.
|
||||
func ValidateTimeParameters(params url.Values) error {
|
||||
now := time.Now()
|
||||
|
||||
issuedMS, err := strconv.ParseInt(params.Get(QueryIssued), 10, 64)
|
||||
if err != nil {
|
||||
return fmt.Errorf("invalid issued timestamp: %w", err)
|
||||
}
|
||||
issued := time.UnixMilli(issuedMS)
|
||||
|
||||
if now.Add(DefaultLeeway).Before(issued) {
|
||||
return ErrIssuedInTheFuture
|
||||
}
|
||||
|
||||
expiryMS, err := strconv.ParseInt(params.Get(QueryExpiry), 10, 64)
|
||||
if err != nil {
|
||||
return fmt.Errorf("invalid expiry timestamp: %w", err)
|
||||
}
|
||||
expiry := time.UnixMilli(expiryMS)
|
||||
|
||||
if now.Add(-DefaultLeeway).After(expiry) {
|
||||
return ErrExpired
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue