mirror of
https://github.com/alexbelgium/hassio-addons.git
synced 2026-10-19 14:30:11 +02:00
fix(filebrowser_quantum): keep server.database siblings, sanitize direct XFF
Set only server.database.path (dropping migrateFrom) so user-set keys such as activity survive, and replace X-Forwarded-For on the published 8071 listener now that FileBrowser trusts proxy headers for login rate limits. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -11,6 +11,7 @@
|
|||||||
- Users, shares and settings in `/config/database.db` are migrated to `/config/database.sqlite` on first start.
|
- Users, shares and settings in `/config/database.db` are migrated to `/config/database.sqlite` on first start.
|
||||||
- `http.trustProxyHeaders` is set to `true`, because the add-on always runs behind nginx on a subpath.
|
- `http.trustProxyHeaders` is set to `true`, because the add-on always runs behind nginx on a subpath.
|
||||||
- The container healthcheck now uses upstream's `/health` endpoint.
|
- The container healthcheck now uses upstream's `/health` endpoint.
|
||||||
|
- Direct access on port 8071 no longer passes on a client-supplied `X-Forwarded-For`, so the IP-based login lockout cannot be bypassed now that proxy headers are trusted. Ingress keeps the forwarded chain.
|
||||||
|
|
||||||
## 2.0.0 (2026-10-10)
|
## 2.0.0 (2026-10-10)
|
||||||
- Update to latest version from gtsteffaniak/filebrowser (changelog : https://github.com/gtsteffaniak/filebrowser/releases)
|
- Update to latest version from gtsteffaniak/filebrowser (changelog : https://github.com/gtsteffaniak/filebrowser/releases)
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ if [ -f "$FILEBROWSER_CONFIG" ] && [ "$(yq e '.server.database | tag' "$FILEBROW
|
|||||||
cp "$FILEBROWSER_CONFIG" "${FILEBROWSER_CONFIG}.v1.bak"
|
cp "$FILEBROWSER_CONFIG" "${FILEBROWSER_CONFIG}.v1.bak"
|
||||||
yq e -i '
|
yq e -i '
|
||||||
.http *= (.server | pick(["socket", "tlsCert", "tlsKey", "externalUrl", "internalUrl", "disableWebDAV"])) |
|
.http *= (.server | pick(["socket", "tlsCert", "tlsKey", "externalUrl", "internalUrl", "disableWebDAV"])) |
|
||||||
del(.server.port, .server.listen, .server.baseURL, .server.socket, .server.tlsCert, .server.tlsKey, .server.externalUrl, .server.internalUrl, .server.disableWebDAV) |
|
del(.server.database, .server.port, .server.listen, .server.baseURL, .server.socket, .server.tlsCert, .server.tlsKey, .server.externalUrl, .server.internalUrl, .server.disableWebDAV) |
|
||||||
del(.http.trustedHeaders, .integrations.media.exiftoolPath, .userDefaults) |
|
del(.http.trustedHeaders, .integrations.media.exiftoolPath, .userDefaults) |
|
||||||
del(.server.sources[].config.conditionals, .server.sources[].config.indexingIntervalMinutes) |
|
del(.server.sources[].config.conditionals, .server.sources[].config.indexingIntervalMinutes) |
|
||||||
del(.server.sources[].config.rules[].fileNames, .server.sources[].config.rules[].folderNames)
|
del(.server.sources[].config.rules[].fileNames, .server.sources[].config.rules[].folderNames)
|
||||||
@@ -106,8 +106,7 @@ bashio::log.info "... set server"
|
|||||||
yq e -i ".http.port = 8080" "$FILEBROWSER_CONFIG"
|
yq e -i ".http.port = 8080" "$FILEBROWSER_CONFIG"
|
||||||
yq e -i ".http.listen = \"0.0.0.0\"" "$FILEBROWSER_CONFIG"
|
yq e -i ".http.listen = \"0.0.0.0\"" "$FILEBROWSER_CONFIG"
|
||||||
yq e -i ".http.trustProxyHeaders = true" "$FILEBROWSER_CONFIG"
|
yq e -i ".http.trustProxyHeaders = true" "$FILEBROWSER_CONFIG"
|
||||||
# Whole-object assignment also drops migrateFrom once the migration is done
|
yq e -i ".server.database.path = \"/config/database.sqlite\" | del(.server.database.migrateFrom)" "$FILEBROWSER_CONFIG"
|
||||||
yq e -i ".server.database = {\"path\": \"/config/database.sqlite\"}" "$FILEBROWSER_CONFIG"
|
|
||||||
# Import the 1.x BoltDB until the SQLite database exists
|
# Import the 1.x BoltDB until the SQLite database exists
|
||||||
if [ -s /config/database.db ] && [ ! -s /config/database.sqlite ]; then
|
if [ -s /config/database.db ] && [ ! -s /config/database.sqlite ]; then
|
||||||
yq e -i ".server.database.migrateFrom = \"/config/database.db\"" "$FILEBROWSER_CONFIG"
|
yq e -i ".server.database.migrateFrom = \"/config/database.db\"" "$FILEBROWSER_CONFIG"
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ proxy_set_header Accept-Encoding "";
|
|||||||
proxy_set_header Connection $connection_upgrade;
|
proxy_set_header Connection $connection_upgrade;
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
proxy_set_header Host $http_host;
|
proxy_set_header Host $http_host;
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
proxy_set_header X-Forwarded-For $fb_forwarded_for;
|
||||||
proxy_set_header X-Forwarded-Proto $scheme;
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
proxy_set_header X-NginX-Proxy true;
|
proxy_set_header X-NginX-Proxy true;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
|||||||
@@ -1,3 +1,11 @@
|
|||||||
|
# FileBrowser trusts X-Forwarded-For (http.trustProxyHeaders) for login rate
|
||||||
|
# limits: keep the chain from the Supervisor ingress proxy, but replace
|
||||||
|
# whatever a client sends straight to the published port
|
||||||
|
map $server_port $fb_forwarded_for {
|
||||||
|
8072 $remote_addr;
|
||||||
|
default $proxy_add_x_forwarded_for;
|
||||||
|
}
|
||||||
|
|
||||||
server {
|
server {
|
||||||
listen 0.0.0.0:8072 default_server;
|
listen 0.0.0.0:8072 default_server;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user