From 5981c750a462b72af2e3006c15c928b70626bc2d Mon Sep 17 00:00:00 2001 From: clawbot Date: Fri, 27 Feb 2026 05:06:56 -0800 Subject: [PATCH] feat: add SESSION_IDLE_TIMEOUT config - New env var SESSION_IDLE_TIMEOUT (default 24h) - Parsed as time.Duration in handlers --- internal/config/config.go | 63 ++++++++++++++++++++------------------- 1 file changed, 33 insertions(+), 30 deletions(-) diff --git a/internal/config/config.go b/internal/config/config.go index 5999266..3117e02 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -23,21 +23,22 @@ type Params struct { // Config holds all application configuration values. type Config struct { - DBURL string - Debug bool - MaintenanceMode bool - MetricsPassword string - MetricsUsername string - Port int - SentryDSN string - MaxHistory int - SessionTimeout int - MaxMessageSize int - MOTD string - ServerName string - FederationKey string - params *Params - log *slog.Logger + DBURL string + Debug bool + MaintenanceMode bool + MetricsPassword string + MetricsUsername string + Port int + SentryDSN string + MaxHistory int + SessionTimeout int + MaxMessageSize int + MOTD string + ServerName string + FederationKey string + SessionIdleTimeout string + params *Params + log *slog.Logger } // New creates a new Config by reading from files and environment variables. @@ -66,6 +67,7 @@ func New( viper.SetDefault("MOTD", "") viper.SetDefault("SERVER_NAME", "") viper.SetDefault("FEDERATION_KEY", "") + viper.SetDefault("SESSION_IDLE_TIMEOUT", "24h") err := viper.ReadInConfig() if err != nil { @@ -77,21 +79,22 @@ func New( } cfg := &Config{ - DBURL: viper.GetString("DBURL"), - Debug: viper.GetBool("DEBUG"), - Port: viper.GetInt("PORT"), - SentryDSN: viper.GetString("SENTRY_DSN"), - MaintenanceMode: viper.GetBool("MAINTENANCE_MODE"), - MetricsUsername: viper.GetString("METRICS_USERNAME"), - MetricsPassword: viper.GetString("METRICS_PASSWORD"), - MaxHistory: viper.GetInt("MAX_HISTORY"), - SessionTimeout: viper.GetInt("SESSION_TIMEOUT"), - MaxMessageSize: viper.GetInt("MAX_MESSAGE_SIZE"), - MOTD: viper.GetString("MOTD"), - ServerName: viper.GetString("SERVER_NAME"), - FederationKey: viper.GetString("FEDERATION_KEY"), - log: log, - params: ¶ms, + DBURL: viper.GetString("DBURL"), + Debug: viper.GetBool("DEBUG"), + Port: viper.GetInt("PORT"), + SentryDSN: viper.GetString("SENTRY_DSN"), + MaintenanceMode: viper.GetBool("MAINTENANCE_MODE"), + MetricsUsername: viper.GetString("METRICS_USERNAME"), + MetricsPassword: viper.GetString("METRICS_PASSWORD"), + MaxHistory: viper.GetInt("MAX_HISTORY"), + SessionTimeout: viper.GetInt("SESSION_TIMEOUT"), + MaxMessageSize: viper.GetInt("MAX_MESSAGE_SIZE"), + MOTD: viper.GetString("MOTD"), + ServerName: viper.GetString("SERVER_NAME"), + FederationKey: viper.GetString("FEDERATION_KEY"), + SessionIdleTimeout: viper.GetString("SESSION_IDLE_TIMEOUT"), + log: log, + params: ¶ms, } if cfg.Debug {