Compare commits

...

28 Commits

Author SHA1 Message Date
github-actions
366829bfeb GitHub bot: changelog [nobuild] 2026-06-03 12:18:10 +00:00
Alexandre
cf140b13b8 Update config.yaml 2026-06-03 14:15:26 +02:00
Alexandre
c9526c645a Update 99-run.sh 2026-06-03 14:15:08 +02:00
Alexandre
5f2442acee Update 99-run.sh 2026-06-03 14:10:51 +02:00
github-actions
e49df23a04 GitHub bot: changelog [nobuild] 2026-06-03 11:32:55 +00:00
Alexandre
6d044741d2 Update config.yaml 2026-06-03 13:30:16 +02:00
Alexandre
d2fc4713bb Update 99-run.sh 2026-06-03 13:30:06 +02:00
Alexandre
4e065f33bd Update CHANGELOG.md 2026-06-03 13:24:37 +02:00
Alexandre
5f952008b4 Update config.yaml 2026-06-03 13:24:28 +02:00
Alexandre
b0abe9a45c Refactor FileBrowser config update script 2026-06-03 13:24:21 +02:00
Alexandre
04346dc433 Update 99-run.sh 2026-06-03 13:21:48 +02:00
Alexandre
3fa2e85c6b Nobuild 2026-06-03 11:37:05 +02:00
github-actions
e2b538fc21 GitHub bot: changelog [nobuild] 2026-06-03 09:05:11 +00:00
Alexandre
ce52de1dfa Update config.yaml 2026-06-03 11:02:06 +02:00
Alexandre
6253d1de2c Update 99-run.sh 2026-06-03 11:01:57 +02:00
Alexandre
73fd43741f Update CHANGELOG.md 2026-06-03 10:52:23 +02:00
Alexandre
069aa315b6 Update config.yaml 2026-06-03 10:52:12 +02:00
Alexandre
f3c62f0412 Update Dockerfile 2026-06-03 10:51:58 +02:00
github-actions
02ed4a906f GitHub bot: changelog [nobuild] 2026-06-03 08:51:21 +00:00
Alexandre
c878f47287 Update version to 1.3.3-3 in config.yaml 2026-06-03 10:48:41 +02:00
Alexandre
96a72a2d87 filebrowser_quantum: use case statement for auth method selection 2026-06-03 10:48:18 +02:00
Alexandre
758491d04d Update 99-run.sh 2026-06-03 10:47:05 +02:00
Alexandre
3c629f2a60 filebrowser_quantum: replace Python config script with yq commands 2026-06-03 10:41:18 +02:00
Alexandre
4476f62c77 Update 99-run.sh 2026-06-03 10:38:06 +02:00
github-actions
33a4c50d9d GitHub bot: changelog [nobuild] 2026-06-03 08:29:12 +00:00
Alexandre
7eb671f6b3 Update config.yaml 2026-06-03 10:26:26 +02:00
Alexandre
3b791ccc8f clean 2026-06-03 10:25:23 +02:00
Alexandre
9f2cd2ef39 Update Dockerfile 2026-06-03 10:22:39 +02:00
5 changed files with 58 additions and 196 deletions

View File

@@ -1,3 +1,7 @@
## 1.3.3-8 (03-06-2026)
- Minor bugs fixed
## 1.3.3-7 (03-06-2026)
- Allow config persistence
## 1.3.3 (2026-05-19)
- Update to latest version from gtsteffaniak/filebrowser (changelog : https://github.com/gtsteffaniak/filebrowser/releases)

View File

@@ -52,7 +52,7 @@ RUN chmod 744 /ha_automodules.sh && /ha_automodules.sh "$MODULES" && rm /ha_auto
# Manual apps
ENV PACKAGES="bind-tools \
nginx \
python3"
python3 yq"
# Automatic apps & bashio
COPY ha_autoapps.sh /ha_autoapps.sh
@@ -71,7 +71,8 @@ RUN chmod 777 /ha_entrypoint.sh
COPY bashio-standalone.sh /usr/local/lib/bashio-standalone.sh
RUN chmod 0755 /usr/local/lib/bashio-standalone.sh
RUN sed -i "s|/command/with-contenv|/usr/bin/env|g" "/ha_entrypoint.sh"
RUN sed -i "s|/command/with-contenv|/usr/bin/env|g" "/ha_entrypoint.sh" && \
[[ -f /etc/cont-init.d/01-config_yaml.sh ]] && rm -r /etc/cont-init.d/01-config_yaml.sh
VOLUME [ "/data" ]
WORKDIR /

View File

@@ -73,6 +73,8 @@ devices:
- /dev/md3
environment:
FB_BASEURL: /filebrowser_quantum
FILEBROWSER_CONFIG: "/config/config.yaml"
FILEBROWSER_DATABASE: "/config/database.db"
PGID: "0"
PUID: "0"
image: ghcr.io/alexbelgium/filebrowser_quantum-{arch}
@@ -110,4 +112,4 @@ schema:
slug: filebrowser_quantum
udev: true
url: https://github.com/alexbelgium/hassio-addons
version: "1.3.3"
version: "1.3.3-8"

View File

@@ -1,42 +0,0 @@
#!/usr/bin/with-contenv bashio
# shellcheck shell=bash
set -e
####################
# Migrate database #
####################
if [ -f /homeassistant/addons_config/filebrowser_quantum/filebrowser_quantum.db ]; then
echo "Moving database to new location /config"
cp -rnf /homeassistant/addons_config/filebrowser_quantum/* /config/
rm -r /homeassistant/addons_config/filebrowser_quantum
fi
######################
# Link addon folders #
######################
# Clean symlinks
find /config -maxdepth 1 -type l -delete
if [ -d /homeassistant/addons_config ]; then
find /homeassistant/addons_config -maxdepth 1 -type l -delete
fi
# Remove erroneous folders
if [ -d /homeassistant ]; then
if [ -d /config/addons_config ]; then
rm -r /config/addons_config
fi
if [ -d /config/addons_autoscripts ]; then
rm -r /config/addons_autoscripts
fi
fi
# Create symlinks with legacy folders
if [ -d /homeassistant/addons_config ]; then
ln -s /homeassistant/addons_config /config
find /addon_configs/ -maxdepth 1 -mindepth 1 -type d -not -name "*filebrowser_quantum*" -exec ln -s {} /config/addons_config/ \;
fi
if [ -d /homeassistant/addons_autoscripts ]; then
ln -s /homeassistant/addons_autoscripts /config
fi

View File

@@ -65,163 +65,60 @@ mkdir -p /var/log/nginx && touch /var/log/nginx/error.log
# FILEBROWSER CONFIGURATION #
############################
CONFIG_PATH="/config/filebrowser_quantum.yaml"
mkdir -p /config /cache
export FILEBROWSER_CONFIG="${CONFIG_PATH}"
# Copy default config if not existing
if [ ! -f "$FILEBROWSER_CONFIG" ]; then
cp /home/filebrowser/data/config.yaml "$FILEBROWSER_CONFIG"
fi
python3 - <<'PY'
import json
import os
bashio::log.info "Updating FileBrowser config..."
options_path = "/data/options.json"
config_path = os.environ["FILEBROWSER_CONFIG"]
# --- Server (hardcoded values) ---
bashio::log.info "... set server"
yq e -i ".server.port = 8080" "$FILEBROWSER_CONFIG"
yq e -i ".server.listen = \"0.0.0.0\"" "$FILEBROWSER_CONFIG"
yq e -i ".server.database = \"/config/database.db\"" "$FILEBROWSER_CONFIG"
yq e -i ".server.cacheDir = \"/cache\"" "$FILEBROWSER_CONFIG"
yq e -i ".server.source.path = \"/\"" "$FILEBROWSER_CONFIG"
with open(options_path, "r", encoding="utf-8") as f:
options = json.load(f)
# --- Base URL (from env or config) ---
bashio::log.info "... set base URL to allow ingress"
BASE_URL=$(bashio::config 'base_url' "${FB_BASEURL:-/}")
yq e -i ".server.baseURL = \"${BASE_URL}\"" "$FILEBROWSER_CONFIG"
base_url = options.get("base_url") or os.environ.get("FB_BASEURL") or "/"
def bool_or_none(value):
return value if isinstance(value, bool) else None
sources = []
for source in options.get("sources") or [{"path": "/", "name": "Root", "default_enabled": True}]:
entry = {"path": source.get("path", "/")}
if source.get("name"):
entry["name"] = source["name"]
source_config = {}
config_mappings = {
"default_enabled": "defaultEnabled",
"default_user_scope": "defaultUserScope",
"create_user_dir": "createUserDir",
"disable_indexing": "disableIndexing",
"deny_by_default": "denyByDefault",
"private": "private",
"indexing_interval_minutes": "indexingIntervalMinutes",
}
for option_key, config_key in config_mappings.items():
if option_key in source and source[option_key] not in (None, ""):
value = source[option_key]
if option_key == "indexing_interval_minutes" and not value:
continue
source_config[config_key] = value
conditionals = {}
if "ignore_hidden" in source:
value = bool_or_none(source.get("ignore_hidden"))
if value is not None:
conditionals["ignoreHidden"] = value
if "ignore_zero_size_folders" in source:
value = bool_or_none(source.get("ignore_zero_size_folders"))
if value is not None:
conditionals["ignoreZeroSizeFolders"] = value
if conditionals:
source_config["conditionals"] = conditionals
if source_config:
entry["config"] = source_config
sources.append(entry)
server = {
"port": 8080,
"listen": "0.0.0.0",
"baseURL": base_url,
"logging": [
{
"levels": options.get("log_levels", "info|warning|error"),
}
],
"database": "/config/filebrowser_quantum.db",
"cacheDir": "/cache",
"cacheDirCleanup": options.get("cache_dir_cleanup", True),
"disablePreviews": options.get("disable_previews", False),
"disablePreviewResize": options.get("disable_preview_resize", False),
"disableTypeDetectionByHeader": options.get("disable_type_detection_by_header", False),
"disableUpdateCheck": options.get("disable_update_check", False),
"sources": sources,
}
if options.get("external_url"):
server["externalUrl"] = options["external_url"]
if options.get("internal_url"):
server["internalUrl"] = options["internal_url"]
if options.get("max_archive_size_gb"):
server["maxArchiveSize"] = options["max_archive_size_gb"]
certfile = os.environ.get("CERTFILE")
keyfile = os.environ.get("KEYFILE")
if certfile and keyfile:
server["tlsCert"] = certfile
server["tlsKey"] = keyfile
auth_method = options.get("auth_method", "password")
password_config = {
"enabled": auth_method == "password",
"minLength": options.get("password_min_length", 5),
"signup": options.get("password_signup", False),
"enforcedOtp": options.get("password_enforced_otp", False),
}
proxy_config = {
"enabled": auth_method == "proxy",
}
if options.get("proxy_auth_header"):
proxy_config["header"] = options["proxy_auth_header"]
proxy_config["createUser"] = options.get("proxy_auth_create_user", False)
if options.get("proxy_auth_logout_redirect_url"):
proxy_config["logoutRedirectUrl"] = options["proxy_auth_logout_redirect_url"]
oidc_config = {
"enabled": auth_method == "oidc",
}
if options.get("oidc_client_id"):
oidc_config["clientId"] = options["oidc_client_id"]
if options.get("oidc_client_secret"):
oidc_config["clientSecret"] = options["oidc_client_secret"]
if options.get("oidc_issuer_url"):
oidc_config["issuerUrl"] = options["oidc_issuer_url"]
if options.get("oidc_scopes"):
oidc_config["scopes"] = options["oidc_scopes"]
if options.get("oidc_user_identifier"):
oidc_config["userIdentifier"] = options["oidc_user_identifier"]
if options.get("oidc_admin_group"):
oidc_config["adminGroup"] = options["oidc_admin_group"]
if options.get("oidc_groups_claim"):
oidc_config["groupsClaim"] = options["oidc_groups_claim"]
if options.get("oidc_logout_redirect_url"):
oidc_config["logoutRedirectUrl"] = options["oidc_logout_redirect_url"]
oidc_config["createUser"] = options.get("oidc_create_user", False)
oidc_config["disableVerifyTLS"] = options.get("oidc_disable_verify_tls", False)
auth = {
"tokenExpirationHours": options.get("token_expiration_hours", 2),
"adminUsername": options.get("admin_username", "admin"),
"adminPassword": options.get("admin_password", "admin"),
"methods": {
"noauth": auth_method == "noauth",
"password": password_config,
"proxy": proxy_config,
"oidc": oidc_config,
},
}
frontend = {
"name": "FileBrowser Quantum",
}
config = {
"server": server,
"auth": auth,
"frontend": frontend,
}
with open(config_path, "w", encoding="utf-8") as f:
json.dump(config, f, indent=2)
f.write("\n")
PY
# --- Auth method ---
AUTH_METHOD=$(bashio::config 'auth_method' 'password')
bashio::log.info "... authentication method set to $AUTH_METHOD"
case "$AUTH_METHOD" in
noauth)
yq e -i ".auth.methods.noauth = true" "$FILEBROWSER_CONFIG"
yq e -i ".auth.methods.password.enabled = false" "$FILEBROWSER_CONFIG"
yq e -i ".auth.methods.proxy.enabled = false" "$FILEBROWSER_CONFIG"
yq e -i ".auth.methods.oidc.enabled = false" "$FILEBROWSER_CONFIG"
;;
password)
yq e -i ".auth.methods.noauth = false" "$FILEBROWSER_CONFIG"
yq e -i ".auth.methods.password.enabled = true" "$FILEBROWSER_CONFIG"
yq e -i ".auth.methods.proxy.enabled = false" "$FILEBROWSER_CONFIG"
yq e -i ".auth.methods.oidc.enabled = false" "$FILEBROWSER_CONFIG"
;;
proxy)
yq e -i ".auth.methods.noauth = false" "$FILEBROWSER_CONFIG"
yq e -i ".auth.methods.password.enabled = false" "$FILEBROWSER_CONFIG"
yq e -i ".auth.methods.proxy.enabled = true" "$FILEBROWSER_CONFIG"
yq e -i ".auth.methods.oidc.enabled = false" "$FILEBROWSER_CONFIG"
;;
oidc)
yq e -i ".auth.methods.noauth = false" "$FILEBROWSER_CONFIG"
yq e -i ".auth.methods.password.enabled = false" "$FILEBROWSER_CONFIG"
yq e -i ".auth.methods.proxy.enabled = false" "$FILEBROWSER_CONFIG"
yq e -i ".auth.methods.oidc.enabled = true" "$FILEBROWSER_CONFIG"
;;
*)
bashio::log.fatal "Unknown auth_method: $AUTH_METHOD"
;;
esac
######################
# LAUNCH FILEBROWSER #