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,17 +485,15 @@ func setDefaultsLocked() {
|
|||||||
if currentSettings.Language == "" {
|
if currentSettings.Language == "" {
|
||||||
currentSettings.Language = "en"
|
currentSettings.Language = "en"
|
||||||
}
|
}
|
||||||
if currentSettings.Port == 0 {
|
// Check for PORT environment variable first - it always takes priority
|
||||||
// Check for PORT environment variable first
|
if portEnv := os.Getenv("PORT"); portEnv != "" {
|
||||||
if portEnv := os.Getenv("PORT"); portEnv != "" {
|
if port, err := strconv.Atoi(portEnv); err == nil && port > 0 && port <= 65535 {
|
||||||
if port, err := strconv.Atoi(portEnv); err == nil && port > 0 && port <= 65535 {
|
currentSettings.Port = port
|
||||||
currentSettings.Port = port
|
} else if currentSettings.Port == 0 {
|
||||||
} else {
|
|
||||||
currentSettings.Port = 8080
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
currentSettings.Port = 8080
|
currentSettings.Port = 8080
|
||||||
}
|
}
|
||||||
|
} else if currentSettings.Port == 0 {
|
||||||
|
currentSettings.Port = 8080
|
||||||
}
|
}
|
||||||
if currentSettings.CallbackURL == "" {
|
if currentSettings.CallbackURL == "" {
|
||||||
currentSettings.CallbackURL = fmt.Sprintf("http://127.0.0.1:%d", currentSettings.Port)
|
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
|
// 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 {
|
func GetSettings() AppSettings {
|
||||||
settingsLock.RLock()
|
settingsLock.RLock()
|
||||||
defer settingsLock.RUnlock()
|
defer settingsLock.RUnlock()
|
||||||
|
|||||||
@@ -93,6 +93,11 @@
|
|||||||
"settings.title": "Einstellungen",
|
"settings.title": "Einstellungen",
|
||||||
"settings.general": "Allgemeine Einstellungen",
|
"settings.general": "Allgemeine Einstellungen",
|
||||||
"settings.language": "Sprache",
|
"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.enable_debug": "Debug-Protokoll aktivieren",
|
||||||
"settings.alert": "Alarm-Einstellungen",
|
"settings.alert": "Alarm-Einstellungen",
|
||||||
"settings.callback_url": "Fail2ban Callback-URL",
|
"settings.callback_url": "Fail2ban Callback-URL",
|
||||||
|
|||||||
@@ -93,6 +93,11 @@
|
|||||||
"settings.title": "Istellige",
|
"settings.title": "Istellige",
|
||||||
"settings.general": "Allgemeini Istellige",
|
"settings.general": "Allgemeini Istellige",
|
||||||
"settings.language": "Sprach",
|
"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.enable_debug": "Debug-Modus aktivierä",
|
||||||
"settings.alert": "Alarm-Istellige",
|
"settings.alert": "Alarm-Istellige",
|
||||||
"settings.callback_url": "Fail2ban Callback-URL",
|
"settings.callback_url": "Fail2ban Callback-URL",
|
||||||
|
|||||||
@@ -93,6 +93,11 @@
|
|||||||
"settings.title": "Settings",
|
"settings.title": "Settings",
|
||||||
"settings.general": "General Settings",
|
"settings.general": "General Settings",
|
||||||
"settings.language": "Language",
|
"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.enable_debug": "Enable Debug Log",
|
||||||
"settings.alert": "Alert Settings",
|
"settings.alert": "Alert Settings",
|
||||||
"settings.callback_url": "Fail2ban Callback URL",
|
"settings.callback_url": "Fail2ban Callback URL",
|
||||||
|
|||||||
@@ -93,6 +93,11 @@
|
|||||||
"settings.title": "Configuración",
|
"settings.title": "Configuración",
|
||||||
"settings.general": "Configuración general",
|
"settings.general": "Configuración general",
|
||||||
"settings.language": "Idioma",
|
"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.enable_debug": "Habilitar el modo de depuración",
|
||||||
"settings.alert": "Configuración de alertas",
|
"settings.alert": "Configuración de alertas",
|
||||||
"settings.callback_url": "URL de retorno de Fail2ban",
|
"settings.callback_url": "URL de retorno de Fail2ban",
|
||||||
|
|||||||
@@ -93,6 +93,11 @@
|
|||||||
"settings.title": "Paramètres",
|
"settings.title": "Paramètres",
|
||||||
"settings.general": "Paramètres généraux",
|
"settings.general": "Paramètres généraux",
|
||||||
"settings.language": "Langue",
|
"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.enable_debug": "Activer le mode débogage",
|
||||||
"settings.alert": "Paramètres d'alerte",
|
"settings.alert": "Paramètres d'alerte",
|
||||||
"settings.callback_url": "URL de rappel Fail2ban",
|
"settings.callback_url": "URL de rappel Fail2ban",
|
||||||
|
|||||||
@@ -93,6 +93,11 @@
|
|||||||
"settings.title": "Impostazioni",
|
"settings.title": "Impostazioni",
|
||||||
"settings.general": "Impostazioni generali",
|
"settings.general": "Impostazioni generali",
|
||||||
"settings.language": "Lingua",
|
"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.enable_debug": "Abilita debug",
|
||||||
"settings.alert": "Impostazioni di allarme",
|
"settings.alert": "Impostazioni di allarme",
|
||||||
"settings.callback_url": "URL di callback Fail2ban",
|
"settings.callback_url": "URL di callback Fail2ban",
|
||||||
|
|||||||
@@ -857,7 +857,25 @@ func GetSettingsHandler(c *gin.Context) {
|
|||||||
config.DebugLog("----------------------------")
|
config.DebugLog("----------------------------")
|
||||||
config.DebugLog("GetSettingsHandler called (handlers.go)") // entry point
|
config.DebugLog("GetSettingsHandler called (handlers.go)") // entry point
|
||||||
s := config.GetSettings()
|
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
|
// 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)")
|
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()
|
oldSettings := config.GetSettings()
|
||||||
newSettings, err := config.UpdateSettings(req)
|
newSettings, err := config.UpdateSettings(req)
|
||||||
if err != nil {
|
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>
|
<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"
|
<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" />
|
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>
|
||||||
<div class="mb-4">
|
<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>
|
<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(res => res.json())
|
||||||
.then(data => {
|
.then(data => {
|
||||||
document.getElementById('languageSelect').value = data.language || 'en';
|
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('debugMode').checked = data.debug || false;
|
||||||
document.getElementById('callbackURL').value = data.callbackUrl || '';
|
document.getElementById('callbackURL').value = data.callbackUrl || '';
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user