git: 6ce5dd4a530f - main - www/bunkerweb: Update to 1.6.15

From: Jochen Neumeister <joneum_at_FreeBSD.org>
Date: Tue, 22 Sep 2026 04:25:45 UTC
The branch main has been updated by joneum:

URL: https://cgit.FreeBSD.org/ports/commit/?id=6ce5dd4a530fcbd05350e0f04883b7e8417aefa8

commit 6ce5dd4a530fcbd05350e0f04883b7e8417aefa8
Author:     Jochen Neumeister <joneum@FreeBSD.org>
AuthorDate: 2026-09-22 04:24:54 +0000
Commit:     Jochen Neumeister <joneum@FreeBSD.org>
CommitDate: 2026-09-22 04:25:33 +0000

    www/bunkerweb: Update to 1.6.15
    
    Fixes an unauthenticated RCE in the worker API (GHSA-xcv3-gjwr-rwxw),
    a WAF filename bypass via RFC 2231 encoding (GHSA-cvfx-2ffg-cqmj) and
    three API permission flaws.
    
    1.6.15 imports Configurator in the scheduler and the web UI, so add
    common/gen to their PYTHONPATH. Run the Alembic migration before the
    scheduler starts, upstream does this in its systemd wrapper, without
    it the scheduler dies on the new is_draft column.
    
    Ship a sample api.yml, the API refused to start without that file, and
    bind it to localhost by default. Drop the ModSecurity directives from
    the reverse proxy and web UI templates too, OpenResty has no such
    module.
    
    Changelog: https://github.com/bunkerity/bunkerweb/releases/tag/v1.6.15
    
    Sponsored by:   Netzkommune GmbH
---
 www/bunkerweb/Makefile                             | 10 +++-
 www/bunkerweb/distinfo                             |  6 +-
 www/bunkerweb/files/api.yml.sample                 | 32 +++++++++++
 www/bunkerweb/files/bunkerweb_api.in               |  2 +-
 www/bunkerweb/files/bunkerweb_scheduler.in         | 10 +++-
 www/bunkerweb/files/bunkerweb_ui.in                |  2 +-
 www/bunkerweb/files/freebsd-migrate.py             | 67 ++++++++++++++++++++++
 ...rc_common_core_grpc_confs_server-http_grpc.conf | 12 ++--
 ...verseproxy_confs_server-http_reverse-proxy.conf | 16 ++++++
 ...ommon_core_ui_confs_default-server-http_ui.conf | 58 +++++++++++++++++++
 www/bunkerweb/pkg-plist                            | 57 +++++++++++++++++-
 11 files changed, 256 insertions(+), 16 deletions(-)

diff --git a/www/bunkerweb/Makefile b/www/bunkerweb/Makefile
index 3841f920ac8b..34461f646613 100644
--- a/www/bunkerweb/Makefile
+++ b/www/bunkerweb/Makefile
@@ -1,6 +1,6 @@
 PORTNAME=	bunkerweb
-DISTVERSION=	1.6.14
-PORTREVISION=	1
+DISTVERSION=	1.6.15
+PORTREVISION=	0
 CATEGORIES=	www security
 
 MAINTAINER=	joneum@FreeBSD.org
@@ -21,6 +21,7 @@ RUN_DEPENDS=	openresty:www/openresty \
 		${PYTHON_PKGNAMEPREFIX}pydantic-settings>0:devel/py-pydantic-settings@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}schedule>0:devel/py-schedule@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}user_agents>0:devel/py-user_agents@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}alembic>0:databases/py-alembic@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}sqlalchemy20>0:databases/py-sqlalchemy20@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}sqlite3>0:databases/py-sqlite3@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}pymysql>0:databases/py-pymysql@${PY_FLAVOR} \
@@ -85,4 +86,9 @@ post-install:
 	${CHMOD} 0755 ${STAGEDIR}${DATADIR}/common/gen/main.py
 	${CHMOD} 0755 ${STAGEDIR}${DATADIR}/common/gen/save_config.py
 
+	${INSTALL_SCRIPT} ${FILESDIR}/freebsd-migrate.py \
+		${STAGEDIR}${DATADIR}/common/db/
+
+	${INSTALL_DATA} ${FILESDIR}/api.yml.sample ${STAGEDIR}${ETCDIR}/
+
 .include <bsd.port.mk>
diff --git a/www/bunkerweb/distinfo b/www/bunkerweb/distinfo
index 1bf6662545bf..219b4ade54ca 100644
--- a/www/bunkerweb/distinfo
+++ b/www/bunkerweb/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1787930198
-SHA256 (bunkerity-bunkerweb-1.6.14-v1.6.14_GH0.tar.gz) = 5032adb180ea5e965ea8256dc875bb69a3c55711a003662475ed5e254e156fa0
-SIZE (bunkerity-bunkerweb-1.6.14-v1.6.14_GH0.tar.gz) = 100583982
+TIMESTAMP = 1790016449
+SHA256 (bunkerity-bunkerweb-1.6.15-v1.6.15_GH0.tar.gz) = 9f69a2d6cc649c6db5c79f6a93454cffa1b8677da96e73e2195eedc035f87515
+SIZE (bunkerity-bunkerweb-1.6.15-v1.6.15_GH0.tar.gz) = 101332028
diff --git a/www/bunkerweb/files/api.yml.sample b/www/bunkerweb/files/api.yml.sample
new file mode 100644
index 000000000000..2d4f8bdd0f85
--- /dev/null
+++ b/www/bunkerweb/files/api.yml.sample
@@ -0,0 +1,32 @@
+# BunkerWeb API configuration.
+#
+# Every key is optional, the file only has to exist for the API to start.
+# Environment variables take precedence over the values set here.
+# See https://docs.bunkerweb.io/1.6.15/api/ for the full list.
+#
+# The listen address is not read from this file, it comes from the
+# environment. The rc script binds to 127.0.0.1, override it in rc.conf
+# if the API has to be reachable from other instances:
+#
+#   bunkerweb_api_env="API_LISTEN_ADDR=0.0.0.0 API_LISTEN_PORT=8888"
+
+# Bearer token for the /auth endpoint, unset means Biscuit tokens only.
+#API_TOKEN: ""
+
+# Clients allowed to reach the API. 127.0.0.1 is needed because the rc
+# script binds the API to localhost.
+#API_WHITELIST_ENABLED: "yes"
+API_WHITELIST_IPS: "127.0.0.1 192.168.0.0/16 172.16.0.0/12 10.0.0.0/8"
+
+# Lifetime of issued Biscuit tokens in seconds, 0 disables expiry.
+#API_BISCUIT_TTL_SECONDS: 3600
+
+# Rate limiting.
+#API_RATE_LIMIT_ENABLED: "yes"
+#API_RATE_LIMIT: "100r/m"
+#API_RATE_LIMIT_AUTH: "10r/m"
+
+# Documentation endpoints.
+#API_DOCS_URL: "/docs"
+#API_REDOC_URL: "/redoc"
+#API_OPENAPI_URL: "/openapi.json"
diff --git a/www/bunkerweb/files/bunkerweb_api.in b/www/bunkerweb/files/bunkerweb_api.in
index 8dde469ac220..2983135e7aac 100644
--- a/www/bunkerweb/files/bunkerweb_api.in
+++ b/www/bunkerweb/files/bunkerweb_api.in
@@ -15,7 +15,7 @@ load_rc_config "$name"
 : ${bunkerweb_api_python:="%%PREFIX%%/bin/%%PYTHON_VERSION%%"}
 : ${bunkerweb_api_pidfile:="/var/run/${name}.pid"}
 : ${bunkerweb_api_logfile:="/var/log/bunkerweb/api.log"}
-: ${bunkerweb_api_env:=""}
+: ${bunkerweb_api_env:="API_LISTEN_ADDR=127.0.0.1"}
 
 pidfile="${bunkerweb_api_pidfile}"
 command="/usr/sbin/daemon"
diff --git a/www/bunkerweb/files/bunkerweb_scheduler.in b/www/bunkerweb/files/bunkerweb_scheduler.in
index 903cee1697f6..ef171176c841 100644
--- a/www/bunkerweb/files/bunkerweb_scheduler.in
+++ b/www/bunkerweb/files/bunkerweb_scheduler.in
@@ -12,11 +12,14 @@ rcvar="bunkerweb_scheduler_enable"
 load_rc_config "$name"
 
 : ${bunkerweb_scheduler_enable:="NO"}
+: ${bunkerweb_scheduler_database_uri:="sqlite:////var/lib/bunkerweb/db.sqlite3"}
+
+_bunkerweb_pythonpath="/usr/local/share/bunkerweb/common/gen:/usr/local/share/bunkerweb/common/utils:/usr/local/share/bunkerweb/common/db:/usr/local/share/bunkerweb/common/api:/usr/local/share/bunkerweb/deps/python"
 
 pidfile="/var/run/${name}.pid"
 procname="%%PREFIX%%/bin/%%PYTHON_VERSION%%"
 command="/usr/sbin/daemon"
-command_args="-f -p ${pidfile} /usr/bin/env PYTHONPATH=/usr/local/share/bunkerweb/common/utils:/usr/local/share/bunkerweb/common/db:/usr/local/share/bunkerweb/common/api:/usr/local/share/bunkerweb/deps/python %%PREFIX%%/bin/%%PYTHON_VERSION%% /usr/local/share/bunkerweb/scheduler/main.py"
+command_args="-f -p ${pidfile} /usr/bin/env PYTHONPATH=${_bunkerweb_pythonpath} %%PREFIX%%/bin/%%PYTHON_VERSION%% /usr/local/share/bunkerweb/scheduler/main.py"
 
 bunkerweb_scheduler_precmd()
 {
@@ -52,6 +55,11 @@ bunkerweb_scheduler_precmd()
 
 	chown bunkerweb:bunkerweb /var/run/bunkerweb
 	chown -R bunkerweb:bunkerweb /var/log/bunkerweb
+
+	# Upstream migrates the database from its systemd wrapper, which
+	# FreeBSD does not use, so do it here before the scheduler starts.
+	env PYTHONPATH="${_bunkerweb_pythonpath}" DATABASE_URI="${bunkerweb_scheduler_database_uri}" \
+		%%PREFIX%%/bin/%%PYTHON_VERSION%% /usr/local/share/bunkerweb/common/db/freebsd-migrate.py
 }
 
 start_precmd="bunkerweb_scheduler_precmd"
diff --git a/www/bunkerweb/files/bunkerweb_ui.in b/www/bunkerweb/files/bunkerweb_ui.in
index 99234c094f61..378b225cb2a6 100644
--- a/www/bunkerweb/files/bunkerweb_ui.in
+++ b/www/bunkerweb/files/bunkerweb_ui.in
@@ -17,7 +17,7 @@ load_rc_config $name
 pidfile="${bunkerweb_ui_pidfile}"
 command="/usr/sbin/daemon"
 procname="%%PREFIX%%/bin/%%PYTHON_VERSION%%"
-command_args="-f -p ${pidfile} -o ${bunkerweb_ui_logfile} /usr/bin/env ENABLE_HEALTHCHECK=yes LISTEN_ADDR=0.0.0.0 LISTEN_PORT=7000 PYTHONPATH=/usr/local/share/bunkerweb/ui:/usr/local/share/bunkerweb/common/utils:/usr/local/share/bunkerweb/common/db:/usr/local/share/bunkerweb/common/api /usr/local/bin/gunicorn --bind 0.0.0.0:7000 -c /usr/local/share/bunkerweb/ui/utils/gunicorn.conf.py main:app"
+command_args="-f -p ${pidfile} -o ${bunkerweb_ui_logfile} /usr/bin/env ENABLE_HEALTHCHECK=yes LISTEN_ADDR=0.0.0.0 LISTEN_PORT=7000 PYTHONPATH=/usr/local/share/bunkerweb/ui:/usr/local/share/bunkerweb/common/gen:/usr/local/share/bunkerweb/common/utils:/usr/local/share/bunkerweb/common/db:/usr/local/share/bunkerweb/common/api /usr/local/bin/gunicorn --bind 0.0.0.0:7000 -c /usr/local/share/bunkerweb/ui/utils/gunicorn.conf.py main:app"
 
 start_precmd="${name}_prestart"
 
diff --git a/www/bunkerweb/files/freebsd-migrate.py b/www/bunkerweb/files/freebsd-migrate.py
new file mode 100644
index 000000000000..885d299bc5c5
--- /dev/null
+++ b/www/bunkerweb/files/freebsd-migrate.py
@@ -0,0 +1,67 @@
+"""Bring the BunkerWeb database schema up to the installed version.
+
+Upstream runs the migration from its systemd wrapper, which FreeBSD does not
+use, so the scheduler rc script calls this script before starting.
+"""
+
+from os import environ
+from pathlib import Path
+from subprocess import run
+from sys import executable, exit, stderr
+
+import sqlalchemy as sa
+
+ALEMBIC = Path(__file__).resolve().parent / "alembic"
+DATADIR = Path(__file__).resolve().parents[2]
+INI = Path("/var/lib/bunkerweb/alembic.ini")
+URI = environ.get("DATABASE_URI") or "sqlite:////var/lib/bunkerweb/db.sqlite3"
+
+
+def alembic(*args):
+    return run([executable, "-m", "alembic", "-c", str(INI), *args], cwd=ALEMBIC, capture_output=True, text=True)
+
+
+def main():
+    installed = (DATADIR / "VERSION").read_text().strip()
+    engine = sa.create_engine(URI)
+    tables = sa.inspect(engine).get_table_names()
+    if "bw_metadata" not in tables:
+        return 0
+
+    with engine.connect() as conn:
+        rows = conn.execute(sa.text("SELECT version FROM bw_metadata WHERE id = 1"))
+        current = next(iter(rows))[0]
+    if current in (installed, "dev", "testing"):
+        return 0
+
+    dbtype = URI.split(":", 1)[0].split("+", 1)[0]
+    INI.parent.mkdir(parents=True, exist_ok=True)
+    lines = []
+    for line in (ALEMBIC / "alembic.ini").read_text().splitlines():
+        if line.startswith("version_locations"):
+            line = "version_locations = " + dbtype + "_versions"
+        lines.append(line)
+    INI.write_text(chr(10).join(lines) + chr(10))
+
+    if "alembic_version" not in tables:
+        normalized = current.replace(".", "_").replace("-", "_").replace("~", "_")
+        pattern = "*_upgrade_to_version_" + normalized + ".py"
+        matches = sorted((ALEMBIC / (dbtype + "_versions")).glob(pattern))
+        if not matches:
+            print("no migration file for database version " + current, file=stderr)
+            return 1
+        stamped = alembic("stamp", matches[0].name.split("_", 1)[0])
+        if stamped.returncode != 0:
+            print(stamped.stderr.strip(), file=stderr)
+            return 1
+
+    upgraded = alembic("upgrade", "head")
+    if upgraded.returncode != 0:
+        print(upgraded.stderr.strip(), file=stderr)
+        return 1
+
+    print("database migrated from " + current + " to " + installed)
+    return 0
+
+
+exit(main())
diff --git a/www/bunkerweb/files/patch-src_common_core_grpc_confs_server-http_grpc.conf b/www/bunkerweb/files/patch-src_common_core_grpc_confs_server-http_grpc.conf
index 1039e675c956..f59f15528cb6 100644
--- a/www/bunkerweb/files/patch-src_common_core_grpc_confs_server-http_grpc.conf
+++ b/www/bunkerweb/files/patch-src_common_core_grpc_confs_server-http_grpc.conf
@@ -1,10 +1,10 @@
---- src/common/core/grpc/confs/server-http/grpc.conf.orig	2026-05-10 11:05:38 UTC
+--- src/common/core/grpc/confs/server-http/grpc.conf.orig	2026-09-21 08:05:39 UTC
 +++ src/common/core/grpc/confs/server-http/grpc.conf
-@@ -40,7 +40,6 @@ location {{ url }} {
- 			{% set includes = all[k.replace("HOST", "INCLUDES")] if k.replace("HOST", "INCLUDES") in all else "" %}
- location {{ url }} {
+@@ -98,7 +98,6 @@
+ location {% if url_modifier %}{{ url_modifier }} {% endif %}"{{ quoted_url }}" {
  			{% if USE_MODSECURITY == "yes" %}
+ 	# ModSecurity does not reliably support gRPC traffic patterns, it is always disabled on gRPC locations.
 -	modsecurity off;
  			{% endif %}
- 	set $grpc_backend{{ index }} "{{ host }}";
- 	grpc_pass $grpc_backend{{ index }};
+ 			{% if max_client_size != "" %}
+ 	client_max_body_size {{ max_client_size }};
diff --git a/www/bunkerweb/files/patch-src_common_core_reverseproxy_confs_server-http_reverse-proxy.conf b/www/bunkerweb/files/patch-src_common_core_reverseproxy_confs_server-http_reverse-proxy.conf
new file mode 100644
index 000000000000..b610e01a9df6
--- /dev/null
+++ b/www/bunkerweb/files/patch-src_common_core_reverseproxy_confs_server-http_reverse-proxy.conf
@@ -0,0 +1,16 @@
+--- src/common/core/reverseproxy/confs/server-http/reverse-proxy.conf.orig	2026-09-21 08:05:39 UTC
++++ src/common/core/reverseproxy/confs/server-http/reverse-proxy.conf
+@@ -130,13 +130,11 @@
+ location {% if url_modifier %}{{ url_modifier }} {% endif %}"{{ quoted_url }}" {
+ 	etag off;
+ 			{% if USE_MODSECURITY == "yes" and modsecurity_location == "no" %}
+-	modsecurity off;
+ 			{% endif %}
+ 			{% if max_client_size != "" %}
+ 	client_max_body_size {{ max_client_size }};
+ 				{% if USE_MODSECURITY == "yes" and modsecurity_location != "no" %}
+ 					{% set max_client_size_bytes = (max_client_size[:-1]|int * {"k": 1024, "K": 1024, "m": 1048576, "M": 1048576, "g": 1073741824, "G": 1073741824}[max_client_size[-1]]) if max_client_size[-1] in "kKmMgG" else max_client_size|int %}
+-	modsecurity_rules 'SecRequestBodyLimit {{ max_client_size_bytes }}';
+ 				{% endif %}
+ 			{% endif %}
+ 	set $backend{{ index }} "{{ host }}";
diff --git a/www/bunkerweb/files/patch-src_common_core_ui_confs_default-server-http_ui.conf b/www/bunkerweb/files/patch-src_common_core_ui_confs_default-server-http_ui.conf
new file mode 100644
index 000000000000..090c0d580a9a
--- /dev/null
+++ b/www/bunkerweb/files/patch-src_common_core_ui_confs_default-server-http_ui.conf
@@ -0,0 +1,58 @@
+--- src/common/core/ui/confs/default-server-http/ui.conf.orig	2026-09-21 08:05:39 UTC
++++ src/common/core/ui/confs/default-server-http/ui.conf
+@@ -35,7 +35,6 @@
+     # in http/ui.modsec-crs cannot match. Disable modsec on the UI proxy
+     # locations only — other defenses (limit, badbehavior, crowdsec, allowlists)
+     # still run via the BunkerWeb Lua pipeline.
+-    modsecurity off;
+     proxy_pass $backendui;
+     proxy_set_header Host $host;
+     proxy_set_header X-Real-IP $remote_addr;
+@@ -53,7 +52,6 @@
+ }
+ 
+ location = /login {
+-    modsecurity off;
+     etag off;
+     add_header Last-Modified "";
+     proxy_pass $backendui;
+@@ -73,7 +71,6 @@
+ }
+ 
+ location = /logout {
+-    modsecurity off;
+     etag off;
+     add_header Last-Modified "";
+     proxy_pass $backendui;
+@@ -94,7 +91,6 @@
+ 
+ # Serve CSS, Fonts, Images, JavaScript and Libs without modifying the response body
+ location ~ ^/setup/(css|fonts|img|js|libs|locales)(.*)$ {
+-    modsecurity off;
+     # Capture the asset type and the remaining path
+     # Example: /setup/js/app.js -> /js/app.js
+     proxy_pass $backendui/$1$2;
+@@ -122,7 +118,6 @@
+ }
+ 
+ location /setup {
+-    modsecurity off;
+     etag off;
+     add_header Last-Modified "";
+     proxy_pass $backendui;
+@@ -171,7 +166,6 @@
+ }
+ 
+ location /setup/loading {
+-    modsecurity off;
+     etag off;
+     add_header Last-Modified "";
+     proxy_pass $backendui;
+@@ -220,7 +214,6 @@
+ }
+ 
+ location /setup/check {
+-    modsecurity off;
+     etag off;
+     add_header Last-Modified "";
+     add_header 'Access-Control-Allow-Origin' '*' always;
diff --git a/www/bunkerweb/pkg-plist b/www/bunkerweb/pkg-plist
index b2fdc4d231eb..d0fea5224053 100644
--- a/www/bunkerweb/pkg-plist
+++ b/www/bunkerweb/pkg-plist
@@ -19,6 +19,7 @@
 %%DATADIR%%/all-in-one/supervisor.d/autoconf.ini
 %%DATADIR%%/all-in-one/supervisor.d/bunkerweb.ini
 %%DATADIR%%/all-in-one/supervisor.d/crowdsec.ini
+%%DATADIR%%/all-in-one/supervisor.d/logrotate.ini
 %%DATADIR%%/all-in-one/supervisor.d/logstream.ini
 %%DATADIR%%/all-in-one/supervisor.d/redis.ini
 %%DATADIR%%/all-in-one/supervisor.d/scheduler.ini
@@ -44,6 +45,7 @@
 %%DATADIR%%/api/app/routers/cache.py
 %%DATADIR%%/api/app/routers/configs.py
 %%DATADIR%%/api/app/routers/core.py
+%%DATADIR%%/api/app/routers/crowdsec.py
 %%DATADIR%%/api/app/routers/global_settings.py
 %%DATADIR%%/api/app/routers/instances.py
 %%DATADIR%%/api/app/routers/jobs.py
@@ -55,7 +57,6 @@
 %%DATADIR%%/api/entrypoint.sh
 %%DATADIR%%/api/requirements.in
 %%DATADIR%%/api/requirements.txt
-%%DATADIR%%/api/tests/test_biscuit_run_limit.py
 %%DATADIR%%/api/utils/__init__.py
 %%DATADIR%%/api/utils/gunicorn.conf.py
 %%DATADIR%%/api/utils/logger.py
@@ -76,6 +77,7 @@
 %%DATADIR%%/bw/Dockerfile
 %%DATADIR%%/bw/entrypoint.sh
 %%DATADIR%%/bw/loading/index.html
+%%DATADIR%%/bw/lua/bunkerweb/acme.lua
 %%DATADIR%%/bw/lua/bunkerweb/api.lua
 %%DATADIR%%/bw/lua/bunkerweb/cachestore.lua
 %%DATADIR%%/bw/lua/bunkerweb/clusterstore.lua
@@ -234,6 +236,7 @@
 %%DATADIR%%/common/core/crowdsec/README.zh.md
 %%DATADIR%%/common/core/crowdsec/cache_partition.lua
 %%DATADIR%%/common/core/crowdsec/confs/http/crowdsec.conf
+%%DATADIR%%/common/core/crowdsec/control.lua
 %%DATADIR%%/common/core/crowdsec/crowdsec.lua
 %%DATADIR%%/common/core/crowdsec/jobs/crowdsec-conf.py
 %%DATADIR%%/common/core/crowdsec/jobs/crowdsec_conf_utils.py
@@ -242,8 +245,10 @@
 %%DATADIR%%/common/core/crowdsec/lib/bouncer.lua
 %%DATADIR%%/common/core/crowdsec/lib/captcha.lua
 %%DATADIR%%/common/core/crowdsec/lib/config.lua
+%%DATADIR%%/common/core/crowdsec/lib/decision_cache.lua
 %%DATADIR%%/common/core/crowdsec/lib/flag.lua
 %%DATADIR%%/common/core/crowdsec/lib/iputils.lua
+%%DATADIR%%/common/core/crowdsec/lib/stream_lock.lua
 %%DATADIR%%/common/core/crowdsec/lib/template.lua
 %%DATADIR%%/common/core/crowdsec/lib/url.lua
 %%DATADIR%%/common/core/crowdsec/lib/utils.lua
@@ -301,6 +306,7 @@
 %%DATADIR%%/common/core/grpc/README.md
 %%DATADIR%%/common/core/grpc/README.zh.md
 %%DATADIR%%/common/core/grpc/confs/server-http/grpc.conf
+%%DATADIR%%/common/core/grpc/jobs/grpc-trusted-cert.py
 %%DATADIR%%/common/core/grpc/plugin.json
 %%DATADIR%%/common/core/gzip/README.de.md
 %%DATADIR%%/common/core/gzip/README.es.md
@@ -865,6 +871,7 @@
 %%DATADIR%%/common/core/mtls/confs/server-http/mtls.conf
 %%DATADIR%%/common/core/mtls/confs/server-stream/mtls.conf
 %%DATADIR%%/common/core/mtls/jobs/client-cert.py
+%%DATADIR%%/common/core/mtls/misc/placeholder-ca.pem
 %%DATADIR%%/common/core/mtls/mtls.lua
 %%DATADIR%%/common/core/mtls/plugin.json
 %%DATADIR%%/common/core/order.json
@@ -1003,6 +1010,7 @@
 %%DATADIR%%/common/db/alembic/mariadb_versions/002e685396c1_upgrade_to_version_1_6_8_rc2.py
 %%DATADIR%%/common/db/alembic/mariadb_versions/0229aafe5e96_upgrade_to_version_1_5_12.py
 %%DATADIR%%/common/db/alembic/mariadb_versions/07406d0af7c0_upgrade_to_version_1_6_11.py
+%%DATADIR%%/common/db/alembic/mariadb_versions/087f746b707b_upgrade_to_version_1_6_15.py
 %%DATADIR%%/common/db/alembic/mariadb_versions/0949ce7a3875_upgrade_to_version_1_5_8.py
 %%DATADIR%%/common/db/alembic/mariadb_versions/0fe0711317f9_upgrade_to_version_1_6_12.py
 %%DATADIR%%/common/db/alembic/mariadb_versions/166ec9cfef46_upgrade_to_version_1_6_5_rc3.py
@@ -1030,6 +1038,7 @@
 %%DATADIR%%/common/db/alembic/mariadb_versions/522ba97eba84_upgrade_to_version_1_6_2_rc7.py
 %%DATADIR%%/common/db/alembic/mariadb_versions/5412d3de3f3f_upgrade_to_version_1_6_13.py
 %%DATADIR%%/common/db/alembic/mariadb_versions/5444767fb8e6_upgrade_to_version_1_6_11_rc1.py
+%%DATADIR%%/common/db/alembic/mariadb_versions/581b304b1118_upgrade_to_version_1_6_15_rc1.py
 %%DATADIR%%/common/db/alembic/mariadb_versions/5ceb08f3ea45_upgrade_to_version_1_6_0.py
 %%DATADIR%%/common/db/alembic/mariadb_versions/5db76033c2ab_upgrade_to_version_1_6_2_rc3.py
 %%DATADIR%%/common/db/alembic/mariadb_versions/63ef1e83a086_upgrade_to_version_1_6_3_rc1.py
@@ -1065,6 +1074,8 @@
 %%DATADIR%%/common/db/alembic/mariadb_versions/cb5750a9d1f7_upgrade_to_version_1_6_0_rc2.py
 %%DATADIR%%/common/db/alembic/mariadb_versions/cc61497f1976_upgrade_to_version_1_5_1.py
 %%DATADIR%%/common/db/alembic/mariadb_versions/ce73d5bafffd_upgrade_to_version_1_6_2_rc5.py
+%%DATADIR%%/common/db/alembic/mariadb_versions/d10f1615a003_upgrade_to_version_1_6_15_rc2.py
+%%DATADIR%%/common/db/alembic/mariadb_versions/d44fd8ddd0c5_upgrade_to_version_1_6_15_rc3.py
 %%DATADIR%%/common/db/alembic/mariadb_versions/d4d8df48d14d_upgrade_to_version_1_5_5.py
 %%DATADIR%%/common/db/alembic/mariadb_versions/d68c293ef7ab_upgrade_to_version_1_6_14_rc1.py
 %%DATADIR%%/common/db/alembic/mariadb_versions/d8762250b263_upgrade_to_version_1_6_14_rc3.py
@@ -1107,8 +1118,10 @@
 %%DATADIR%%/common/db/alembic/mysql_versions/75253944b270_upgrade_to_version_1_6_10_rc6.py
 %%DATADIR%%/common/db/alembic/mysql_versions/7b000e03cdcd_upgrade_to_version_1_6_9_rc2.py
 %%DATADIR%%/common/db/alembic/mysql_versions/7ff687d13019_upgrade_to_version_1_6_9_rc1.py
+%%DATADIR%%/common/db/alembic/mysql_versions/802a9e43a5d2_upgrade_to_version_1_6_15_rc3.py
 %%DATADIR%%/common/db/alembic/mysql_versions/81a4439e7193_upgrade_to_version_1_6_10_rc4.py
 %%DATADIR%%/common/db/alembic/mysql_versions/81db6b219029_upgrade_to_version_1_6_10_rc3.py
+%%DATADIR%%/common/db/alembic/mysql_versions/82bf69b29509_upgrade_to_version_1_6_15_rc1.py
 %%DATADIR%%/common/db/alembic/mysql_versions/839424d81cf7_upgrade_to_version_1_6_0_beta.py
 %%DATADIR%%/common/db/alembic/mysql_versions/85241481d5a4_upgrade_to_version_1_6_14.py
 %%DATADIR%%/common/db/alembic/mysql_versions/88edf42fd04e_upgrade_to_version_1_6_11_rc1.py
@@ -1117,6 +1130,7 @@
 %%DATADIR%%/common/db/alembic/mysql_versions/8c6516301ef6_upgrade_to_version_1_6_12.py
 %%DATADIR%%/common/db/alembic/mysql_versions/8d546dcb3f14_upgrade_to_version_1_6_2_rc4.py
 %%DATADIR%%/common/db/alembic/mysql_versions/960458c3e944_upgrade_to_version_1_6_1_rc2.py
+%%DATADIR%%/common/db/alembic/mysql_versions/9f5c8bc80fe0_upgrade_to_version_1_6_15.py
 %%DATADIR%%/common/db/alembic/mysql_versions/9f917f5e76b3_upgrade_to_version_1_6_0.py
 %%DATADIR%%/common/db/alembic/mysql_versions/9fe40a1e8f4d_upgrade_to_version_1_6_8.py
 %%DATADIR%%/common/db/alembic/mysql_versions/a48eacc5e5b6_upgrade_to_version_1_6_11.py
@@ -1135,6 +1149,7 @@
 %%DATADIR%%/common/db/alembic/mysql_versions/c6fcd4f6971d_upgrade_to_version_1_5_9.py
 %%DATADIR%%/common/db/alembic/mysql_versions/cd5d566cc52d_upgrade_to_version_1_6_2_rc3.py
 %%DATADIR%%/common/db/alembic/mysql_versions/cd7386afa422_upgrade_to_version_1_6_2_rc5.py
+%%DATADIR%%/common/db/alembic/mysql_versions/d10f1615a002_upgrade_to_version_1_6_15_rc2.py
 %%DATADIR%%/common/db/alembic/mysql_versions/d133bc8ef96d_upgrade_to_version_1_6_8_rc2.py
 %%DATADIR%%/common/db/alembic/mysql_versions/d2bb8a70b034_upgrade_to_version_1_6_10_rc2.py
 %%DATADIR%%/common/db/alembic/mysql_versions/d7578fb6ec98_upgrade_to_version_1_6_9.py
@@ -1168,6 +1183,7 @@
 %%DATADIR%%/common/db/alembic/postgresql_versions/1df628a38b78_upgrade_to_version_1_6_13_rc1.py
 %%DATADIR%%/common/db/alembic/postgresql_versions/1e3b377594f6_upgrade_to_version_1_6_7.py
 %%DATADIR%%/common/db/alembic/postgresql_versions/25255ccae247_upgrade_to_version_1_6_10_rc6.py
+%%DATADIR%%/common/db/alembic/postgresql_versions/292f91a16c0d_upgrade_to_version_1_6_15_rc1.py
 %%DATADIR%%/common/db/alembic/postgresql_versions/3133d7320b63_upgrade_to_version_1_5_1.py
 %%DATADIR%%/common/db/alembic/postgresql_versions/32500d8cf3b0_upgrade_to_version_1_6_2_rc2.py
 %%DATADIR%%/common/db/alembic/postgresql_versions/32d89d02c8e5_upgrade_to_version_1_6_9_rc2.py
@@ -1203,6 +1219,7 @@
 %%DATADIR%%/common/db/alembic/postgresql_versions/9cd5363ac925_upgrade_to_version_1_6_9_rc4.py
 %%DATADIR%%/common/db/alembic/postgresql_versions/9dc610f067ed_upgrade_to_version_1_6_6_rc3.py
 %%DATADIR%%/common/db/alembic/postgresql_versions/9f96ae876cdf_upgrade_to_version_1_6_6_rc2.py
+%%DATADIR%%/common/db/alembic/postgresql_versions/a46c619258a2_upgrade_to_version_1_6_15_rc3.py
 %%DATADIR%%/common/db/alembic/postgresql_versions/a8efcf62aea1_upgrade_to_version_1_6_9.py
 %%DATADIR%%/common/db/alembic/postgresql_versions/ac4c8572cc1f_upgrade_to_version_1_6_9_rc1.py
 %%DATADIR%%/common/db/alembic/postgresql_versions/b2cc53a7208f_upgrade_to_version_1_6_12_rc2.py
@@ -1216,8 +1233,10 @@
 %%DATADIR%%/common/db/alembic/postgresql_versions/c975711f7afa_upgrade_to_version_1_6_0_rc3.py
 %%DATADIR%%/common/db/alembic/postgresql_versions/c9c2b1bb33d6_upgrade_to_version_1_6_8_rc3.py
 %%DATADIR%%/common/db/alembic/postgresql_versions/cf17ba9f0d5f_upgrade_to_version_1_6_4.py
+%%DATADIR%%/common/db/alembic/postgresql_versions/d10f1615a004_upgrade_to_version_1_6_15_rc2.py
 %%DATADIR%%/common/db/alembic/postgresql_versions/d15ee0d0f93a_upgrade_to_version_1_6_2_rc4.py
 %%DATADIR%%/common/db/alembic/postgresql_versions/d15ff778dbeb_upgrade_to_version_1_6_10_rc5.py
+%%DATADIR%%/common/db/alembic/postgresql_versions/dafb358e2ae1_upgrade_to_version_1_6_15.py
 %%DATADIR%%/common/db/alembic/postgresql_versions/dc32f5dabb70_upgrade_to_version_1_6_10.py
 %%DATADIR%%/common/db/alembic/postgresql_versions/e4f3ef364f5c_upgrade_to_version_1_6_10_rc3.py
 %%DATADIR%%/common/db/alembic/postgresql_versions/e9b703e3d747_upgrade_to_version_1_5_3.py
@@ -1244,6 +1263,7 @@
 %%DATADIR%%/common/db/alembic/sqlite_versions/2e3e5668c409_upgrade_to_version_1_6_7_rc1.py
 %%DATADIR%%/common/db/alembic/sqlite_versions/30862abba879_upgrade_to_version_1_6_10_rc7.py
 %%DATADIR%%/common/db/alembic/sqlite_versions/38ff6a439525_upgrade_to_version_1_6_12_rc3.py
+%%DATADIR%%/common/db/alembic/sqlite_versions/447a2b82a6c7_upgrade_to_version_1_6_15_rc1.py
 %%DATADIR%%/common/db/alembic/sqlite_versions/4d48b391ee8c_upgrade_to_version_1_6_10_rc6.py
 %%DATADIR%%/common/db/alembic/sqlite_versions/4e98a08c5902_upgrade_to_version_1_6_2_rc2.py
 %%DATADIR%%/common/db/alembic/sqlite_versions/4f7bdc32c662_upgrade_to_version_1_5_9.py
@@ -1264,6 +1284,7 @@
 %%DATADIR%%/common/db/alembic/sqlite_versions/78db0feeb89a_upgrade_to_version_1_6_1.py
 %%DATADIR%%/common/db/alembic/sqlite_versions/7a8df0c89512_upgrade_to_version_1_6_5_rc2.py
 %%DATADIR%%/common/db/alembic/sqlite_versions/7ba2eb8412ef_upgrade_to_version_1_6_8_rc1.py
+%%DATADIR%%/common/db/alembic/sqlite_versions/7bdd2a9f3786_upgrade_to_version_1_6_15_rc3.py
 %%DATADIR%%/common/db/alembic/sqlite_versions/7be1a99223e6_upgrade_to_version_1_6_4.py
 %%DATADIR%%/common/db/alembic/sqlite_versions/81ef5f1e4bf2_upgrade_to_version_1_6_10_rc4.py
 %%DATADIR%%/common/db/alembic/sqlite_versions/864a1dbd2430_upgrade_to_version_1_6_1_rc1.py
@@ -1274,6 +1295,7 @@
 %%DATADIR%%/common/db/alembic/sqlite_versions/91859f8f75ad_upgrade_to_version_1_5_7.py
 %%DATADIR%%/common/db/alembic/sqlite_versions/92038d1e365e_upgrade_to_version_1_6_0_rc2.py
 %%DATADIR%%/common/db/alembic/sqlite_versions/927114675a7d_upgrade_to_version_1_6_0_rc4.py
+%%DATADIR%%/common/db/alembic/sqlite_versions/92cc379052ad_upgrade_to_version_1_6_15.py
 %%DATADIR%%/common/db/alembic/sqlite_versions/940d4e056335_upgrade_to_version_1_6_3_rc2.py
 %%DATADIR%%/common/db/alembic/sqlite_versions/9bf722264d33_upgrade_to_version_1_6_2_rc6.py
 %%DATADIR%%/common/db/alembic/sqlite_versions/9c5dcacc541a_upgrade_to_version_1_6_10_rc5.py
@@ -1294,6 +1316,7 @@
 %%DATADIR%%/common/db/alembic/sqlite_versions/c9586782cd77_upgrade_to_version_1_5_5.py
 %%DATADIR%%/common/db/alembic/sqlite_versions/cc59051c313d_upgrade_to_version_1_6_3_rc1.py
 %%DATADIR%%/common/db/alembic/sqlite_versions/ccba73ada551_upgrade_to_version_1_6_14_rc1.py
+%%DATADIR%%/common/db/alembic/sqlite_versions/d10f1615a001_upgrade_to_version_1_6_15_rc2.py
 %%DATADIR%%/common/db/alembic/sqlite_versions/e2e2207cf9eb_upgrade_to_version_1_6_10_rc3.py
 %%DATADIR%%/common/db/alembic/sqlite_versions/e677ecffa402_upgrade_to_version_1_6_13_rc1.py
 %%DATADIR%%/common/db/alembic/sqlite_versions/eb3ca0f3f20c_upgrade_to_version_1_5_3.py
@@ -1305,6 +1328,7 @@
 %%DATADIR%%/common/db/alembic/sqlite_versions/f8c0912c8f34_upgrade_to_version_1_6_12_rc2.py
 %%DATADIR%%/common/db/alembic/sqlite_versions/f9c3d7b2dba8_upgrade_to_version_1_6_12.py
 %%DATADIR%%/common/db/alembic/sqlite_versions/fd214d08928f_upgrade_to_version_1_6_5_rc3.py
+%%DATADIR%%/common/db/freebsd-migrate.py
 %%DATADIR%%/common/db/model.py
 %%DATADIR%%/common/db/requirements.arm.in
 %%DATADIR%%/common/db/requirements.arm.txt
@@ -1328,11 +1352,16 @@
 %%DATADIR%%/common/helpers/utils.sh
 %%DATADIR%%/common/settings.json
 %%DATADIR%%/common/utils/ApiCaller.py
+%%DATADIR%%/common/utils/CrowdSec.py
+%%DATADIR%%/common/utils/cache_restore.py
 %%DATADIR%%/common/utils/certificate_validation.py
 %%DATADIR%%/common/utils/common_utils.py
+%%DATADIR%%/common/utils/env_file.py
 %%DATADIR%%/common/utils/jobs.py
 %%DATADIR%%/common/utils/letsencrypt_consistency.py
 %%DATADIR%%/common/utils/logger.py
+%%DATADIR%%/common/utils/mmdb.py
+%%DATADIR%%/common/utils/modsecurity_audit.py
 %%DATADIR%%/common/utils/pip-hashes.sh
 %%DATADIR%%/deps/deps.json
 %%DATADIR%%/deps/init_deps.sh
@@ -1341,6 +1370,8 @@
 %%DATADIR%%/deps/misc/ipmatcher.patch
 %%DATADIR%%/deps/misc/lua-ffi-zlib.patch
 %%DATADIR%%/deps/misc/lua-pack.Makefile
+%%DATADIR%%/deps/misc/lua-resty-redis-connector.patch
+%%DATADIR%%/deps/misc/mlcache-ipc-skip-evicted.patch
 %%DATADIR%%/deps/misc/mmdb.patch
 %%DATADIR%%/deps/misc/modsecurity-nginx-common.patch
 %%DATADIR%%/deps/misc/modsecurity-nginx-config.patch
@@ -1744,9 +1775,15 @@
 %%DATADIR%%/deps/src/libmaxminddb/dev-bin/valgrind-all.pl
 %%DATADIR%%/deps/src/libmaxminddb/doc/libmaxminddb.md
 %%DATADIR%%/deps/src/libmaxminddb/doc/mmdblookup.md
+%%DATADIR%%/deps/src/libmaxminddb/docs/assets/css/main.css
+%%DATADIR%%/deps/src/libmaxminddb/docs/hugo.toml
+%%DATADIR%%/deps/src/libmaxminddb/docs/layouts/404.html
+%%DATADIR%%/deps/src/libmaxminddb/docs/layouts/_default/_markup/render-heading.html
+%%DATADIR%%/deps/src/libmaxminddb/docs/layouts/_default/default.html
 %%DATADIR%%/deps/src/libmaxminddb/include/maxminddb.h
 %%DATADIR%%/deps/src/libmaxminddb/include/maxminddb_config.h.cmake.in
 %%DATADIR%%/deps/src/libmaxminddb/include/maxminddb_config.h.in
+%%DATADIR%%/deps/src/libmaxminddb/lychee.toml
 %%DATADIR%%/deps/src/libmaxminddb/mise.lock
 %%DATADIR%%/deps/src/libmaxminddb/mise.toml
 %%DATADIR%%/deps/src/libmaxminddb/src/Makefile.am
@@ -1768,6 +1805,7 @@
 %%DATADIR%%/deps/src/libmaxminddb/t/data-pool-t.c
 %%DATADIR%%/deps/src/libmaxminddb/t/data_entry_list_t.c
 %%DATADIR%%/deps/src/libmaxminddb/t/data_types_t.c
+%%DATADIR%%/deps/src/libmaxminddb/t/decoder_limits_t.pl
 %%DATADIR%%/deps/src/libmaxminddb/t/double_close_t.c
 %%DATADIR%%/deps/src/libmaxminddb/t/dump_t.c
 %%DATADIR%%/deps/src/libmaxminddb/t/empty_container_metadata_t.c
@@ -1776,16 +1814,19 @@
 %%DATADIR%%/deps/src/libmaxminddb/t/gai_error_t.c
 %%DATADIR%%/deps/src/libmaxminddb/t/get_value_pointer_bug_t.c
 %%DATADIR%%/deps/src/libmaxminddb/t/get_value_t.c
+%%DATADIR%%/deps/src/libmaxminddb/t/invalid_sockaddr_t.c
 %%DATADIR%%/deps/src/libmaxminddb/t/ipv4_start_cache_t.c
 %%DATADIR%%/deps/src/libmaxminddb/t/ipv6_lookup_in_ipv4_t.c
 %%DATADIR%%/deps/src/libmaxminddb/t/max_depth_t.c
 %%DATADIR%%/deps/src/libmaxminddb/t/maxminddb_test_helper.c
 %%DATADIR%%/deps/src/libmaxminddb/t/maxminddb_test_helper.h
+%%DATADIR%%/deps/src/libmaxminddb/t/metadata_marker_t.c
 %%DATADIR%%/deps/src/libmaxminddb/t/metadata_pointers_t.c
 %%DATADIR%%/deps/src/libmaxminddb/t/metadata_t.c
 %%DATADIR%%/deps/src/libmaxminddb/t/mmdblookup_t.pl
 %%DATADIR%%/deps/src/libmaxminddb/t/no_map_get_value_t.c
 %%DATADIR%%/deps/src/libmaxminddb/t/overflow_bounds_t.c
+%%DATADIR%%/deps/src/libmaxminddb/t/pointer_dos_t.c
 %%DATADIR%%/deps/src/libmaxminddb/t/read_node_t.c
 %%DATADIR%%/deps/src/libmaxminddb/t/threads_t.c
 %%DATADIR%%/deps/src/libmaxminddb/t/version_t.c
@@ -2443,12 +2484,14 @@
 %%DATADIR%%/deps/src/lua-resty-session/lib/resty/session/redis/sentinel.lua
 %%DATADIR%%/deps/src/lua-resty-session/lib/resty/session/shm.lua
 %%DATADIR%%/deps/src/lua-resty-session/lib/resty/session/utils.lua
-%%DATADIR%%/deps/src/lua-resty-session/lua-resty-session-4.1.5-1.rockspec
+%%DATADIR%%/deps/src/lua-resty-session/lua-resty-session-4.2.0-1.rockspec
 %%DATADIR%%/deps/src/lua-resty-session/spec/01-utils_spec.lua
 %%DATADIR%%/deps/src/lua-resty-session/spec/02-file-utils_spec.lua
 %%DATADIR%%/deps/src/lua-resty-session/spec/03-session_spec.lua
 %%DATADIR%%/deps/src/lua-resty-session/spec/04-storage-1_spec.lua
 %%DATADIR%%/deps/src/lua-resty-session/spec/05-storage-2_spec.lua
+%%DATADIR%%/deps/src/lua-resty-session/spec/06-revocation-1_spec.lua
+%%DATADIR%%/deps/src/lua-resty-session/spec/07-revocation-2_spec.lua
 %%DATADIR%%/deps/src/lua-resty-signal/.gitignore
 %%DATADIR%%/deps/src/lua-resty-signal/.travis.yml
 %%DATADIR%%/deps/src/lua-resty-signal/Makefile
@@ -7639,17 +7682,20 @@
 %%DATADIR%%/ui/app/models/config.py
 %%DATADIR%%/ui/app/models/instance.py
 %%DATADIR%%/ui/app/models/models.py
+%%DATADIR%%/ui/app/models/resilient_session.py
 %%DATADIR%%/ui/app/models/reverse_proxied.py
 %%DATADIR%%/ui/app/models/safe_session_cache.py
 %%DATADIR%%/ui/app/models/template.py
 %%DATADIR%%/ui/app/models/totp.py
 %%DATADIR%%/ui/app/models/ui_data.py
 %%DATADIR%%/ui/app/models/ui_database.py
+%%DATADIR%%/ui/app/raw_drafts.py
 %%DATADIR%%/ui/app/routes/__init__.py
 %%DATADIR%%/ui/app/routes/about.py
 %%DATADIR%%/ui/app/routes/bans.py
 %%DATADIR%%/ui/app/routes/cache.py
 %%DATADIR%%/ui/app/routes/configs.py
+%%DATADIR%%/ui/app/routes/crowdsec.py
 %%DATADIR%%/ui/app/routes/global_settings.py
 %%DATADIR%%/ui/app/routes/home.py
 %%DATADIR%%/ui/app/routes/instances.py
@@ -7670,6 +7716,7 @@
 %%DATADIR%%/ui/app/static/css/core.css
 %%DATADIR%%/ui/app/static/css/main.css
 %%DATADIR%%/ui/app/static/css/overrides.css
+%%DATADIR%%/ui/app/static/css/pages/crowdsec.css
 %%DATADIR%%/ui/app/static/css/pages/home.css
 %%DATADIR%%/ui/app/static/css/pages/login.css
 %%DATADIR%%/ui/app/static/css/pages/logs.css
@@ -7715,6 +7762,7 @@
 %%DATADIR%%/ui/app/static/img/brands/ace.png
 %%DATADIR%%/ui/app/static/img/brands/apexcharts.png
 %%DATADIR%%/ui/app/static/img/brands/bootstrap.png
+%%DATADIR%%/ui/app/static/img/brands/crowdsec.svg
 %%DATADIR%%/ui/app/static/img/brands/datatables.png
 %%DATADIR%%/ui/app/static/img/brands/flask.png
 %%DATADIR%%/ui/app/static/img/brands/gunicorn.svg
@@ -8336,6 +8384,7 @@
 %%DATADIR%%/ui/app/static/js/menu.js
 %%DATADIR%%/ui/app/static/js/mode-modsecurity.js
 %%DATADIR%%/ui/app/static/js/modules/certificate-validation.js
+%%DATADIR%%/ui/app/static/js/modules/raw-settings.js
 %%DATADIR%%/ui/app/static/js/modules/setting_controls.js
 %%DATADIR%%/ui/app/static/js/pages/ace-mode-bunkerweb_log.js
 %%DATADIR%%/ui/app/static/js/pages/ace-mode-bunkerweb_settings.js
@@ -8344,6 +8393,7 @@
 %%DATADIR%%/ui/app/static/js/pages/cache_view.js
 %%DATADIR%%/ui/app/static/js/pages/config_edit.js
 %%DATADIR%%/ui/app/static/js/pages/configs.js
+%%DATADIR%%/ui/app/static/js/pages/crowdsec.js
 %%DATADIR%%/ui/app/static/js/pages/home.js
 %%DATADIR%%/ui/app/static/js/pages/instances.js
 %%DATADIR%%/ui/app/static/js/pages/jobs.js
@@ -8421,6 +8471,7 @@
 %%DATADIR%%/ui/app/static/locales/es.json
 %%DATADIR%%/ui/app/static/locales/fr.json
 %%DATADIR%%/ui/app/static/locales/hi.json
+%%DATADIR%%/ui/app/static/locales/id.json
 %%DATADIR%%/ui/app/static/locales/it.json
 %%DATADIR%%/ui/app/static/locales/ko.json
 %%DATADIR%%/ui/app/static/locales/pl.json
@@ -8440,6 +8491,7 @@
 %%DATADIR%%/ui/app/templates/cache_view.html
 %%DATADIR%%/ui/app/templates/config_edit.html
 %%DATADIR%%/ui/app/templates/configs.html
+%%DATADIR%%/ui/app/templates/crowdsec.html
 %%DATADIR%%/ui/app/templates/dashboard.html
 %%DATADIR%%/ui/app/templates/flash.html
 %%DATADIR%%/ui/app/templates/footer.html
@@ -8488,6 +8540,7 @@
 %%DATADIR%%/ui/utils/gunicorn.conf.py
 %%DATADIR%%/ui/utils/logger.py
 %%DATADIR%%/ui/utils/tmp-gunicorn.conf.py
+@sample %%ETCDIR%%/api.yml.sample
 @dir %%ETCDIR%%/plugins
 @dir %%ETCDIR%%/pro/plugins
 @dir(bunkerweb,bunkerweb,) /var/cache/bunkerweb/bunkernet