Fix duration saying never when it's unlimited

This commit is contained in:
2026-09-13 09:10:46 +02:00
parent e7344f8aab
commit b24467c37d
5 changed files with 22 additions and 4 deletions
+8
View File
@@ -78,6 +78,14 @@ func TestFormatRoundTrips(t *testing.T) {
if got, err := ParseDuration(FormatDuration(d)); err != nil || got != d { if got, err := ParseDuration(FormatDuration(d)); err != nil || got != d {
t.Errorf("FormatDuration(%s) = %q, which parses back to %s (%v)", d, FormatDuration(d), got, err) t.Errorf("FormatDuration(%s) = %q, which parses back to %s (%v)", d, FormatDuration(d), got, err)
} }
// FormatLifetime reaches the upload form as the expiry placeholder, so
// what it prints has to be something a caller could type back.
if got, err := ParseDuration(FormatLifetime(d)); err != nil || got != d {
t.Errorf("FormatLifetime(%s) = %q, which parses back to %s (%v)", d, FormatLifetime(d), got, err)
}
}
if got := FormatLifetime(Unlimited); got != "unlimited" {
t.Errorf("FormatLifetime(Unlimited) = %q, want %q", got, "unlimited")
} }
} }
+10
View File
@@ -103,6 +103,16 @@ func ParseDuration(s string) (time.Duration, error) {
return d, nil return d, nil
} }
// FormatLifetime renders a lifetime *limit*, where FormatDuration's "never"
// would describe the wrong thing: a ceiling of Unlimited is not a file that
// never expires, it is the absence of a ceiling.
func FormatLifetime(d time.Duration) string {
if d == Unlimited {
return "unlimited"
}
return FormatDuration(d)
}
// FormatDuration is the human-facing inverse of ParseDuration. // FormatDuration is the human-facing inverse of ParseDuration.
func FormatDuration(d time.Duration) string { func FormatDuration(d time.Duration) string {
switch { switch {
+1 -1
View File
@@ -159,7 +159,7 @@ func (s *Server) adminTokens() []adminToken {
out = append(out, adminToken{ out = append(out, adminToken{
Name: t.Name, Name: t.Name,
MaxSize: config.FormatSize(l.MaxSize), MaxSize: config.FormatSize(l.MaxSize),
MaxExpiry: config.FormatDuration(l.MaxExpiry), MaxExpiry: config.FormatLifetime(l.MaxExpiry),
Vanity: l.AllowVanity, Vanity: l.AllowVanity,
Admin: l.Admin, Admin: l.Admin,
}) })
+1 -1
View File
@@ -45,7 +45,7 @@ func (s *Server) handleLoginPage(w http.ResponseWriter, r *http.Request) {
page: s.page(r, "Log in", false), page: s.page(r, "Log in", false),
Next: next, Next: next,
MaxSize: config.FormatSize(lim.MaxSize), MaxSize: config.FormatSize(lim.MaxSize),
MaxExpiry: config.FormatDuration(lim.MaxExpiry), MaxExpiry: config.FormatLifetime(lim.MaxExpiry),
Vanity: lim.AllowVanity, Vanity: lim.AllowVanity,
}) })
return return
+2 -2
View File
@@ -69,8 +69,8 @@ func (s *Server) handleIndex(w http.ResponseWriter, r *http.Request) {
s.render(w, http.StatusOK, "index.html", indexPage{ s.render(w, http.StatusOK, "index.html", indexPage{
page: s.page(r, "Upload", true), page: s.page(r, "Upload", true),
MaxSize: config.FormatSize(lim.MaxSize), MaxSize: config.FormatSize(lim.MaxSize),
MaxExpiry: config.FormatDuration(lim.MaxExpiry), MaxExpiry: config.FormatLifetime(lim.MaxExpiry),
DefaultExpiry: config.FormatDuration(lim.DefaultExpiry), DefaultExpiry: config.FormatLifetime(lim.DefaultExpiry),
AbsBase: s.absBase(r), AbsBase: s.absBase(r),
AllowVanity: lim.AllowVanity, AllowVanity: lim.AllowVanity,
MaxSizeBytes: lim.MaxSize, MaxSizeBytes: lim.MaxSize,