@@ -27,16 +27,17 @@ const (
2727// Fields with `options:"file"` support Docker secrets via the _FILE suffix.
2828// Available options: file, toLower, trimTrailingSlash
2929type Config struct {
30- AppUrl string `env:"APP_URL" default:"http://localhost:3552"`
31- DatabaseURL string `env:"DATABASE_URL" default:"file:data/arcane.db?_pragma=journal_mode(WAL)&_pragma=busy_timeout(2500)&_txlock=immediate" options:"file"`
32- Port string `env:"PORT" default:"3552"`
33- Listen string `env:"LISTEN" default:""`
34- TLSEnabled bool `env:"TLS_ENABLED" default:"false"`
35- TLSCertFile string `env:"TLS_CERT_FILE" default:""`
36- TLSKeyFile string `env:"TLS_KEY_FILE" default:""`
37- Environment AppEnvironment `env:"ENVIRONMENT" default:"production"`
38- JWTSecret string `env:"JWT_SECRET" default:"default-jwt-secret-change-me" options:"file"` //nolint:gosec // configuration field name is part of stable config API
39- EncryptionKey string `env:"ENCRYPTION_KEY" default:"arcane-dev-key-32-characters!!!" options:"file"`
30+ AppUrl string `env:"APP_URL" default:"http://localhost:3552"`
31+ DatabaseURL string `env:"DATABASE_URL" default:"file:data/arcane.db?_pragma=journal_mode(WAL)&_pragma=busy_timeout(2500)&_txlock=immediate" options:"file"`
32+ Port string `env:"PORT" default:"3552"`
33+ Listen string `env:"LISTEN" default:""`
34+ TLSEnabled bool `env:"TLS_ENABLED" default:"false"`
35+ TLSCertFile string `env:"TLS_CERT_FILE" default:""`
36+ TLSKeyFile string `env:"TLS_KEY_FILE" default:""`
37+ Environment AppEnvironment `env:"ENVIRONMENT" default:"production"`
38+ JWTSecret string `env:"JWT_SECRET" default:"default-jwt-secret-change-me" options:"file"` //nolint:gosec // configuration field name is part of stable config API
39+ JWTRefreshExpiry time.Duration `env:"JWT_REFRESH_EXPIRY" default:"168h"`
40+ EncryptionKey string `env:"ENCRYPTION_KEY" default:"arcane-dev-key-32-characters!!!" options:"file"`
4041
4142 OidcEnabled bool `env:"OIDC_ENABLED" default:"false"`
4243 OidcClientID string `env:"OIDC_CLIENT_ID" default:"" options:"file"`
@@ -274,6 +275,13 @@ func setFieldValue(field reflect.Value, value string) {
274275 return
275276 }
276277
278+ if field .Type () == reflect .TypeFor [time.Duration ]() {
279+ if d , err := time .ParseDuration (value ); err == nil {
280+ field .SetInt (int64 (d ))
281+ }
282+ return
283+ }
284+
277285 // Handle custom types based on underlying kind
278286 if field .Type ().ConvertibleTo (reflect .TypeFor [string ]()) {
279287 // String-based types like AppEnvironment
0 commit comments