diff --git a/internal/config/settings.go b/internal/config/settings.go index f73005a..f60d298 100644 --- a/internal/config/settings.go +++ b/internal/config/settings.go @@ -485,17 +485,15 @@ func setDefaultsLocked() { if currentSettings.Language == "" { currentSettings.Language = "en" } - if currentSettings.Port == 0 { - // Check for PORT environment variable first - if portEnv := os.Getenv("PORT"); portEnv != "" { - if port, err := strconv.Atoi(portEnv); err == nil && port > 0 && port <= 65535 { - currentSettings.Port = port - } else { - currentSettings.Port = 8080 - } - } else { + // Check for PORT environment variable first - it always takes priority + if portEnv := os.Getenv("PORT"); portEnv != "" { + if port, err := strconv.Atoi(portEnv); err == nil && port > 0 && port <= 65535 { + currentSettings.Port = port + } else if currentSettings.Port == 0 { currentSettings.Port = 8080 } + } else if currentSettings.Port == 0 { + currentSettings.Port = 8080 } if currentSettings.CallbackURL == "" { currentSettings.CallbackURL = fmt.Sprintf("http://127.0.0.1:%d", currentSettings.Port) @@ -1112,6 +1110,18 @@ func SetDefaultServer(id string) (Fail2banServer, error) { } // GetSettings returns a copy of the current settings +// GetPortFromEnv returns the PORT environment variable value if set, and whether it's set +func GetPortFromEnv() (int, bool) { + portEnv := os.Getenv("PORT") + if portEnv == "" { + return 0, false + } + if port, err := strconv.Atoi(portEnv); err == nil && port > 0 && port <= 65535 { + return port, true + } + return 0, false +} + func GetSettings() AppSettings { settingsLock.RLock() defer settingsLock.RUnlock() diff --git a/internal/locales/de.json b/internal/locales/de.json index f1ec653..c7160a9 100644 --- a/internal/locales/de.json +++ b/internal/locales/de.json @@ -93,6 +93,11 @@ "settings.title": "Einstellungen", "settings.general": "Allgemeine Einstellungen", "settings.language": "Sprache", + "settings.server_port": "Server-Port", + "settings.server_port_placeholder": "z.B. 8080", + "settings.port_env_set": "Port wird über die PORT-Umgebungsvariable gesetzt:", + "settings.port_env_hint": "Um den Port über die Weboberfläche zu ändern, entfernen Sie die PORT-Umgebungsvariable und starten Sie den Container neu.", + "settings.port_restart_hint": "⚠️ Port-Änderungen erfordern einen Neustart des Containers, um wirksam zu werden.", "settings.enable_debug": "Debug-Protokoll aktivieren", "settings.alert": "Alarm-Einstellungen", "settings.callback_url": "Fail2ban Callback-URL", diff --git a/internal/locales/de_ch.json b/internal/locales/de_ch.json index f91870f..a89c973 100644 --- a/internal/locales/de_ch.json +++ b/internal/locales/de_ch.json @@ -93,6 +93,11 @@ "settings.title": "Istellige", "settings.general": "Allgemeini Istellige", "settings.language": "Sprach", + "settings.server_port": "Server-Port", + "settings.server_port_placeholder": "z.B. 8080", + "settings.port_env_set": "Port wird über d PORT-Umgebigsvariable gsetzt:", + "settings.port_env_hint": "Um de Port über d Weboberflächi z ändere, entferne d PORT-Umgebigsvariable und start de Container neu.", + "settings.port_restart_hint": "⚠️ Port-Änderige erfordere ä Neustart vom Container, zum wirksam z werde.", "settings.enable_debug": "Debug-Modus aktivierä", "settings.alert": "Alarm-Istellige", "settings.callback_url": "Fail2ban Callback-URL", diff --git a/internal/locales/en.json b/internal/locales/en.json index 628ee12..a514824 100644 --- a/internal/locales/en.json +++ b/internal/locales/en.json @@ -93,6 +93,11 @@ "settings.title": "Settings", "settings.general": "General Settings", "settings.language": "Language", + "settings.server_port": "Server Port", + "settings.server_port_placeholder": "e.g., 8080", + "settings.port_env_set": "Port is set via PORT environment variable:", + "settings.port_env_hint": "To change the port via Web UI, remove the PORT environment variable and restart the container.", + "settings.port_restart_hint": "⚠️ Port changes require a container restart to take effect.", "settings.enable_debug": "Enable Debug Log", "settings.alert": "Alert Settings", "settings.callback_url": "Fail2ban Callback URL", diff --git a/internal/locales/es.json b/internal/locales/es.json index 70a5845..4a5cb95 100644 --- a/internal/locales/es.json +++ b/internal/locales/es.json @@ -93,6 +93,11 @@ "settings.title": "Configuración", "settings.general": "Configuración general", "settings.language": "Idioma", + "settings.server_port": "Puerto del servidor", + "settings.server_port_placeholder": "ej. 8080", + "settings.port_env_set": "El puerto está configurado mediante la variable de entorno PORT:", + "settings.port_env_hint": "Para cambiar el puerto mediante la interfaz web, elimine la variable de entorno PORT y reinicie el contenedor.", + "settings.port_restart_hint": "⚠️ Los cambios de puerto requieren un reinicio del contenedor para surtir efecto.", "settings.enable_debug": "Habilitar el modo de depuración", "settings.alert": "Configuración de alertas", "settings.callback_url": "URL de retorno de Fail2ban", diff --git a/internal/locales/fr.json b/internal/locales/fr.json index 088bd55..0d1d1b1 100644 --- a/internal/locales/fr.json +++ b/internal/locales/fr.json @@ -93,6 +93,11 @@ "settings.title": "Paramètres", "settings.general": "Paramètres généraux", "settings.language": "Langue", + "settings.server_port": "Port du serveur", + "settings.server_port_placeholder": "p. ex. 8080", + "settings.port_env_set": "Le port est défini via la variable d'environnement PORT :", + "settings.port_env_hint": "Pour modifier le port via l'interface Web, supprimez la variable d'environnement PORT et redémarrez le conteneur.", + "settings.port_restart_hint": "⚠️ Les modifications du port nécessitent un redémarrage du conteneur pour prendre effet.", "settings.enable_debug": "Activer le mode débogage", "settings.alert": "Paramètres d'alerte", "settings.callback_url": "URL de rappel Fail2ban", diff --git a/internal/locales/it.json b/internal/locales/it.json index 764d82d..c199cf2 100644 --- a/internal/locales/it.json +++ b/internal/locales/it.json @@ -93,6 +93,11 @@ "settings.title": "Impostazioni", "settings.general": "Impostazioni generali", "settings.language": "Lingua", + "settings.server_port": "Porta del server", + "settings.server_port_placeholder": "es. 8080", + "settings.port_env_set": "La porta è impostata tramite la variabile d'ambiente PORT:", + "settings.port_env_hint": "Per modificare la porta tramite l'interfaccia Web, rimuovere la variabile d'ambiente PORT e riavviare il contenitore.", + "settings.port_restart_hint": "⚠️ Le modifiche alla porta richiedono un riavvio del contenitore per avere effetto.", "settings.enable_debug": "Abilita debug", "settings.alert": "Impostazioni di allarme", "settings.callback_url": "URL di callback Fail2ban", diff --git a/pkg/web/handlers.go b/pkg/web/handlers.go index d6eb8cb..a952bec 100644 --- a/pkg/web/handlers.go +++ b/pkg/web/handlers.go @@ -857,7 +857,25 @@ func GetSettingsHandler(c *gin.Context) { config.DebugLog("----------------------------") config.DebugLog("GetSettingsHandler called (handlers.go)") // entry point s := config.GetSettings() - c.JSON(http.StatusOK, s) + + // Check if PORT environment variable is set + envPort, envPortSet := config.GetPortFromEnv() + + // Create response with PORT env info + response := make(map[string]interface{}) + responseBytes, _ := json.Marshal(s) + json.Unmarshal(responseBytes, &response) + + // Add PORT environment variable information + response["portFromEnv"] = envPort + response["portEnvSet"] = envPortSet + + // If PORT env is set, override the port value in response + if envPortSet { + response["port"] = envPort + } + + c.JSON(http.StatusOK, response) } // UpdateSettingsHandler updates the AppSettings from a JSON body @@ -875,6 +893,13 @@ func UpdateSettingsHandler(c *gin.Context) { } config.DebugLog("JSON binding successful, updating settings (handlers.go)") + // Check if PORT environment variable is set - if so, ignore port changes from request + envPort, envPortSet := config.GetPortFromEnv() + if envPortSet { + // Don't allow port changes when PORT env is set + req.Port = envPort + } + oldSettings := config.GetSettings() newSettings, err := config.UpdateSettings(req) if err != nil { diff --git a/pkg/web/templates/index.html b/pkg/web/templates/index.html index e4eb1fd..bd1a9b3 100644 --- a/pkg/web/templates/index.html +++ b/pkg/web/templates/index.html @@ -343,6 +343,10 @@ +
+