mirror of
https://github.com/swissmakers/fail2ban-ui.git
synced 2026-04-11 13:47:05 +02:00
PORT environment variable always takes priority over database settings. Lock UI, when defined
This commit is contained in:
@@ -485,18 +485,16 @@ func setDefaultsLocked() {
|
||||
if currentSettings.Language == "" {
|
||||
currentSettings.Language = "en"
|
||||
}
|
||||
if currentSettings.Port == 0 {
|
||||
// Check for PORT environment variable first
|
||||
// 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 {
|
||||
} else if currentSettings.Port == 0 {
|
||||
currentSettings.Port = 8080
|
||||
}
|
||||
} else {
|
||||
} 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()
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -343,6 +343,10 @@
|
||||
<label for="uiPort" class="block text-sm font-medium text-gray-700 mb-2" data-i18n="settings.server_port">Server Port</label>
|
||||
<input type="number" class="w-full border border-gray-300 rounded-md px-3 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500" id="uiPort"
|
||||
data-i18n-placeholder="settings.server_port_placeholder" placeholder="e.g., 8080" required min="80" max="65535" />
|
||||
<p class="mt-1 text-sm text-gray-500" id="portEnvHint" style="display: none;">
|
||||
<span data-i18n="settings.port_env_set">Port is set via PORT environment variable:</span> <span id="portEnvValue"></span>. <span data-i18n="settings.port_env_hint">To change the port via Web UI, remove the PORT environment variable and restart the container.</span>
|
||||
</p>
|
||||
<p class="mt-1 text-sm text-amber-600" id="portRestartHint" style="display: none;" data-i18n="settings.port_restart_hint">⚠️ Port changes require a container restart to take effect.</p>
|
||||
</div>
|
||||
<div class="mb-4">
|
||||
<label for="callbackURL" class="block text-sm font-medium text-gray-700 mb-2" data-i18n="settings.callback_url">Fail2ban Callback URL</label>
|
||||
@@ -3149,7 +3153,30 @@
|
||||
.then(res => res.json())
|
||||
.then(data => {
|
||||
document.getElementById('languageSelect').value = data.language || 'en';
|
||||
document.getElementById('uiPort').value = data.port || 8080,
|
||||
|
||||
// Handle PORT environment variable
|
||||
const uiPortInput = document.getElementById('uiPort');
|
||||
const portEnvHint = document.getElementById('portEnvHint');
|
||||
const portEnvValue = document.getElementById('portEnvValue');
|
||||
const portRestartHint = document.getElementById('portRestartHint');
|
||||
|
||||
if (data.portEnvSet) {
|
||||
// PORT env is set - make field readonly and show hint
|
||||
uiPortInput.value = data.port || data.portFromEnv || 8080;
|
||||
uiPortInput.readOnly = true;
|
||||
uiPortInput.classList.add('bg-gray-100', 'cursor-not-allowed');
|
||||
portEnvValue.textContent = data.portFromEnv || data.port || 8080;
|
||||
portEnvHint.style.display = 'block';
|
||||
portRestartHint.style.display = 'none';
|
||||
} else {
|
||||
// PORT env not set - allow editing
|
||||
uiPortInput.value = data.port || 8080;
|
||||
uiPortInput.readOnly = false;
|
||||
uiPortInput.classList.remove('bg-gray-100', 'cursor-not-allowed');
|
||||
portEnvHint.style.display = 'none';
|
||||
portRestartHint.style.display = 'block';
|
||||
}
|
||||
|
||||
document.getElementById('debugMode').checked = data.debug || false;
|
||||
document.getElementById('callbackURL').value = data.callbackUrl || '';
|
||||
|
||||
|
||||
Reference in New Issue
Block a user