74 lines
1.5 KiB
Go
74 lines
1.5 KiB
Go
|
|
package server
|
||
|
|
|
||
|
|
import (
|
||
|
|
"errors"
|
||
|
|
"fmt"
|
||
|
|
"strconv"
|
||
|
|
"strings"
|
||
|
|
"time"
|
||
|
|
)
|
||
|
|
|
||
|
|
func parseOptionalInt64(raw string) (*int64, error) {
|
||
|
|
raw = strings.TrimSpace(raw)
|
||
|
|
if raw == "" {
|
||
|
|
return nil, nil
|
||
|
|
}
|
||
|
|
value, err := strconv.ParseInt(raw, 10, 64)
|
||
|
|
if err != nil {
|
||
|
|
return nil, errors.New("must be an integer")
|
||
|
|
}
|
||
|
|
if value < 0 {
|
||
|
|
return nil, errors.New("must be at least 0")
|
||
|
|
}
|
||
|
|
return &value, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func parseCSVInt64(raw string) ([]int64, error) {
|
||
|
|
raw = strings.TrimSpace(raw)
|
||
|
|
if raw == "" {
|
||
|
|
return nil, nil
|
||
|
|
}
|
||
|
|
parts := strings.Split(raw, ",")
|
||
|
|
values := make([]int64, 0, len(parts))
|
||
|
|
for _, part := range parts {
|
||
|
|
part = strings.TrimSpace(part)
|
||
|
|
if part == "" {
|
||
|
|
continue
|
||
|
|
}
|
||
|
|
value, err := strconv.ParseInt(part, 10, 64)
|
||
|
|
if err != nil {
|
||
|
|
return nil, fmt.Errorf("allowed expiry durations must be comma-separated seconds")
|
||
|
|
}
|
||
|
|
if value < 0 {
|
||
|
|
return nil, fmt.Errorf("allowed expiry durations must be at least 0")
|
||
|
|
}
|
||
|
|
values = append(values, value)
|
||
|
|
}
|
||
|
|
return values, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func optionalInt64Label(value *int64) string {
|
||
|
|
if value == nil {
|
||
|
|
return "-"
|
||
|
|
}
|
||
|
|
return strconv.FormatInt(*value, 10)
|
||
|
|
}
|
||
|
|
|
||
|
|
func joinInt64s(values []int64) string {
|
||
|
|
if len(values) == 0 {
|
||
|
|
return "-"
|
||
|
|
}
|
||
|
|
parts := make([]string, 0, len(values))
|
||
|
|
for _, value := range values {
|
||
|
|
parts = append(parts, strconv.FormatInt(value, 10))
|
||
|
|
}
|
||
|
|
return strings.Join(parts, ", ")
|
||
|
|
}
|
||
|
|
|
||
|
|
func formatAdminTime(value time.Time) string {
|
||
|
|
if value.IsZero() {
|
||
|
|
return "-"
|
||
|
|
}
|
||
|
|
return value.Local().Format("2006-01-02 15:04:05")
|
||
|
|
}
|