77 lines
1.5 KiB
Go
77 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/dustin/go-humanize"
|
|
)
|
|
|
|
var defaultExpiryList = []uint64{
|
|
60,
|
|
300,
|
|
3600,
|
|
86400,
|
|
604800,
|
|
2419200,
|
|
31536000,
|
|
}
|
|
|
|
type ExpirationTime struct {
|
|
Seconds uint64
|
|
Human string
|
|
}
|
|
|
|
var neverExpire = time.Unix(0, 0)
|
|
|
|
// Determine if a file with expiry set to "ts" has expired yet
|
|
func isTsExpired(ts time.Time) bool {
|
|
now := time.Now()
|
|
return ts != neverExpire && now.After(ts)
|
|
}
|
|
|
|
// Determine if the given filename is expired
|
|
func isFileExpired(filename string) (bool, error) {
|
|
metadata, err := metadataRead(filename)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
|
|
return isTsExpired(metadata.Expiry), nil
|
|
}
|
|
|
|
// Return a list of expiration times and their humanized versions
|
|
func listExpirationTimes() []ExpirationTime {
|
|
epoch := time.Now()
|
|
actualExpiryInList := false
|
|
var expiryList []ExpirationTime
|
|
|
|
for _, expiry := range defaultExpiryList {
|
|
if Config.maxExpiry == 0 || expiry <= Config.maxExpiry {
|
|
if expiry == Config.maxExpiry {
|
|
actualExpiryInList = true
|
|
}
|
|
|
|
duration := time.Duration(expiry) * time.Second
|
|
expiryList = append(expiryList, ExpirationTime{
|
|
expiry,
|
|
humanize.RelTime(epoch, epoch.Add(duration), "", ""),
|
|
})
|
|
}
|
|
}
|
|
|
|
if Config.maxExpiry == 0 {
|
|
expiryList = append(expiryList, ExpirationTime{
|
|
0,
|
|
"never",
|
|
})
|
|
} else if actualExpiryInList == false {
|
|
duration := time.Duration(Config.maxExpiry) * time.Second
|
|
expiryList = append(expiryList, ExpirationTime{
|
|
Config.maxExpiry,
|
|
humanize.RelTime(epoch, epoch.Add(duration), "", ""),
|
|
})
|
|
}
|
|
|
|
return expiryList
|
|
}
|