Merge pull request #3556 from bunkerity/dev
Some checks failed
Automatic tests (STAGING) / build-packages (ubuntu, deb) (push) Has been cancelled
Automatic tests (STAGING) / build-packages (ubuntu-jammy, deb) (push) Has been cancelled
Automatic tests (STAGING) / codeql (push) Has been cancelled
Automatic tests (STAGING) / build-containers (src/ui/Dockerfile, ui) (push) Has been cancelled
Automatic tests (STAGING) / build-packages (debian-bookworm, deb) (push) Has been cancelled
Automatic tests (STAGING) / build-packages (debian-trixie, deb) (push) Has been cancelled
Automatic tests (STAGING) / build-containers (src/api/Dockerfile, api) (push) Has been cancelled
Automatic tests (STAGING) / build-containers (src/autoconf/Dockerfile, autoconf) (push) Has been cancelled
Automatic tests (STAGING) / build-containers (src/bw/Dockerfile, bunkerweb) (push) Has been cancelled
Automatic tests (STAGING) / build-containers (src/scheduler/Dockerfile, scheduler) (push) Has been cancelled
Automatic tests (STAGING) / build-packages (fedora-43, rpm) (push) Has been cancelled
Automatic tests (STAGING) / build-packages (fedora-44, rpm) (push) Has been cancelled
Automatic tests (STAGING) / build-packages (rhel-10, rpm) (push) Has been cancelled
Automatic tests (STAGING) / build-packages (rhel-8, rpm) (push) Has been cancelled
Automatic tests (STAGING) / build-packages (rhel-9, rpm) (push) Has been cancelled
Automatic tests (STAGING) / build-containers (src/all-in-one/Dockerfile, all-in-one) (push) Has been cancelled
Automatic tests (STAGING) / create-infras (autoconf) (push) Has been cancelled
Automatic tests (STAGING) / create-infras (docker) (push) Has been cancelled
Automatic tests (STAGING) / create-infras (k8s) (push) Has been cancelled
Automatic tests (STAGING) / create-infras (linux) (push) Has been cancelled
Automatic tests (STAGING) / staging-tests (['self-hosted', 'bw-autoconf'], autoconf) (push) Has been cancelled
Automatic tests (STAGING) / staging-tests (['self-hosted', 'bw-docker'], docker) (push) Has been cancelled
Automatic tests (STAGING) / staging-tests (['self-hosted', 'bw-linux'], linux) (push) Has been cancelled
Automatic tests (STAGING) / staging-tests (['ubuntu-latest'], k8s) (push) Has been cancelled
Automatic tests (STAGING) / delete-infras (autoconf) (push) Has been cancelled
Automatic tests (STAGING) / delete-infras (k8s) (push) Has been cancelled
Automatic tests (STAGING) / delete-infras (linux) (push) Has been cancelled
Automatic tests (STAGING) / push-images (push) Has been cancelled
Automatic tests (STAGING) / delete-infras (docker) (push) Has been cancelled
Automatic tests (STAGING) / push-packages (amd64, debian-bookworm, deb, amd64, _, , bookworm) (push) Has been cancelled
Automatic tests (STAGING) / push-packages (amd64, debian-trixie, deb, amd64, _, , trixie) (push) Has been cancelled
Automatic tests (STAGING) / push-packages (amd64, el-10, rpm, x86_64, -, 1., 10) (push) Has been cancelled
Automatic tests (STAGING) / push-packages (amd64, el-8, rpm, x86_64, -, 1., 8) (push) Has been cancelled
Automatic tests (STAGING) / push-packages (amd64, el-9, rpm, x86_64, -, 1., 9) (push) Has been cancelled
Automatic tests (STAGING) / push-packages (amd64, ubuntu, deb, amd64, _, , noble) (push) Has been cancelled
Automatic tests (STAGING) / push-packages (amd64, ubuntu-jammy, deb, amd64, _, , jammy) (push) Has been cancelled
Automatic tests (STAGING) / push-packages (testing, bunkerweb) (push) Has been cancelled
Automatic tests (STAGING) / push-doc (push) Has been cancelled
Automatic tests (STAGING) / push-gh (push) Has been cancelled
Automatic tests (STAGING) / push-packages (amd64, fedora-43, rpm, x86_64, -, 1., 43) (push) Has been cancelled
Automatic tests (STAGING) / push-packages (amd64, fedora-44, rpm, x86_64, -, 1., 44) (push) Has been cancelled

Merge branch "dev" into branch "staging"
This commit is contained in:
Théophile Diot 2026-05-19 12:07:57 +02:00 committed by GitHub
commit f9f3054684
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
61 changed files with 2699 additions and 545 deletions

View file

@ -36,12 +36,12 @@ jobs:
python -m pip install --no-cache-dir --require-hashes -r src/common/db/requirements.txt
echo "CODEQL_PYTHON=$(which python)" >> $GITHUB_ENV
- name: Initialize CodeQL
uses: github/codeql-action/init@68bde559dea0fdcac2102bfdf6230c5f70eb485e # v4.35.4
uses: github/codeql-action/init@9e0d7b8d25671d64c341c19c0152d693099fb5ba # v4.35.5
with:
languages: ${{ matrix.language }}
config-file: ./.github/codeql.yml
setup-python-dependencies: false
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@68bde559dea0fdcac2102bfdf6230c5f70eb485e # v4.35.4
uses: github/codeql-action/analyze@9e0d7b8d25671d64c341c19c0152d693099fb5ba # v4.35.5
with:
category: "/language:${{matrix.language}}"

View file

@ -42,7 +42,7 @@ jobs:
- name: Check out repository code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Install ruby
uses: ruby/setup-ruby@c4e5b1316158f92e3d49443a9d58b31d25ac0f8f # v1.306.0
uses: ruby/setup-ruby@97ecb7b512899eb71ab1bf2310a624c6f1589ac6 # v1.308.0
with:
ruby-version: "3.0"
- name: Install packagecloud

View file

@ -25,6 +25,6 @@ jobs:
results_format: sarif
publish_results: true
- name: "Upload SARIF results to code scanning"
uses: github/codeql-action/upload-sarif@68bde559dea0fdcac2102bfdf6230c5f70eb485e # v4.35.4
uses: github/codeql-action/upload-sarif@9e0d7b8d25671d64c341c19c0152d693099fb5ba # v4.35.5
with:
sarif_file: results.sarif

View file

@ -23,7 +23,7 @@ jobs:
- name: Checkout source code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Install terraform
uses: hashicorp/setup-terraform@5e8dbf3c6d9deaf4193ca7a8fb23f2ac83bb6c85 # v4.0.0
uses: hashicorp/setup-terraform@dfe3c3f87815947d99a8997f908cb6525fc44e9e # v4.0.1
- name: Install kubectl
uses: azure/setup-kubectl@829323503d1be3d00ca8346e5391ca0b07a9ab0d # v5.1.0
if: inputs.TYPE == 'k8s'

View file

@ -22,7 +22,7 @@ jobs:
- name: Checkout source code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Install terraform
uses: hashicorp/setup-terraform@5e8dbf3c6d9deaf4193ca7a8fb23f2ac83bb6c85 # v4.0.0
uses: hashicorp/setup-terraform@dfe3c3f87815947d99a8997f908cb6525fc44e9e # v4.0.1
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
name: tf-${{ inputs.TYPE }}

View file

@ -41,7 +41,7 @@ jobs:
- name: Install test dependencies
run: PIP_BREAK_SYSTEM_PACKAGES=1 pip3 install --no-cache-dir --require-hashes --no-deps -r tests/requirements.txt
- name: Install Terraform
uses: hashicorp/setup-terraform@5e8dbf3c6d9deaf4193ca7a8fb23f2ac83bb6c85 # v4.0.0
uses: hashicorp/setup-terraform@dfe3c3f87815947d99a8997f908cb6525fc44e9e # v4.0.1
if: inputs.TYPE == 'k8s'
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:

View file

@ -3,6 +3,9 @@
## v1.6.10
- [SECURITY] `nginx` : update nginx to 1.30.1 to fix various CVEs
- [BUGFIX] `reverseproxy`: pin a `USE_UI=yes` service upstream to HTTP/1.1 so a global `REVERSE_PROXY_HTTP_VERSION=2` no longer locks out the web UI. (Fixes #3550)
- [BUGFIX] `autoconf`: fix Docker/Podman instance discovery looping on `No instance found`. Container conversion no longer assumes the inspect payload exposes `State.Health` (Podman/no-`HEALTHCHECK` may omit it): health falls back to run-state, env parsing is hardened, and the wait loop logs the exception instead of swallowing it.
- [ALL-IN-ONE] Update CrowdSec version to 1.7.8
## v1.6.10~rc7 - 2026/05/15

View file

@ -1882,7 +1882,7 @@ Die folgenden Abschnitte führen diese Schritte im Detail durch.
- bw-db
crowdsec:
image: crowdsecurity/crowdsec:v1.7.7 # Verwenden Sie die neueste Version, aber pinnen Sie immer die Version für bessere Stabilität/Sicherheit
image: crowdsecurity/crowdsec:v1.7.8 # Verwenden Sie die neueste Version, aber pinnen Sie immer die Version für bessere Stabilität/Sicherheit
volumes:
- cs-data:/var/lib/crowdsec/data # Zum Persistieren der CrowdSec-Daten
- bw-logs:/var/log:ro # Die BunkerWeb-Protokolle, die von CrowdSec analysiert werden sollen

View file

@ -1905,7 +1905,7 @@ Las siguientes secciones desarrollan cada paso.
- bw-db
crowdsec:
image: crowdsecurity/crowdsec:v1.7.7 # Use la última versión pero siempre fije la versión para una mejor estabilidad/seguridad
image: crowdsecurity/crowdsec:v1.7.8 # Use la última versión pero siempre fije la versión para una mejor estabilidad/seguridad
volumes:
- cs-data:/var/lib/crowdsec/data # Para persistir los datos de CrowdSec
- bw-logs:/var/log:ro # Los registros de BunkerWeb para que CrowdSec los analice

View file

@ -1917,7 +1917,7 @@ Follow one of the environment-specific guides below so the CrowdSec agent ingest
- bw-db
crowdsec:
image: crowdsecurity/crowdsec:v1.7.7 # Use the latest version but always pin the version for a better stability/security
image: crowdsecurity/crowdsec:v1.7.8 # Use the latest version but always pin the version for a better stability/security
volumes:
- cs-data:/var/lib/crowdsec/data # To persist the CrowdSec data
- bw-logs:/var/log:ro # The logs of BunkerWeb for CrowdSec to parse

View file

@ -1842,7 +1842,7 @@ Les sections suivantes détaillent chacune de ces étapes.
- bw-db
crowdsec:
image: crowdsecurity/crowdsec:v1.7.7 # Utilisez la dernière version mais épinglez toujours la version pour une meilleure stabilité/sécurité
image: crowdsecurity/crowdsec:v1.7.8 # Utilisez la dernière version mais épinglez toujours la version pour une meilleure stabilité/sécurité
volumes:
- cs-data:/var/lib/crowdsec/data # Pour persister les données de CrowdSec
- bw-logs:/var/log:ro # Les journaux de BunkerWeb à analyser par CrowdSec

View file

@ -249,9 +249,9 @@ charset-normalizer==3.4.7 \
--hash=sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79 \
--hash=sha256:fea24543955a6a729c45a73fe90e08c743f0b3334bbf3201e6c4bc1b0c7fa464
# via requests
click==8.3.3 \
--hash=sha256:398329ad4837b2ff7cbe1dd166a4c0f8900c3ca3a218de04466f38f6497f18a2 \
--hash=sha256:a2bf429bb3033c89fa4936ffb35d5cb471e3719e1f3c8a7c3fff0b8314305613
click==8.4.0 \
--hash=sha256:40c50b7c6c6adac2823d411041ec84f3f103f1b280d5e9ce0d7f998995832f81 \
--hash=sha256:638f1338fe1235c8f4e008e4a8a254fb5c5fbdcbb40ece3c9142ebb78e792973
# via mkdocs
colorama==0.4.6 \
--hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \
@ -275,9 +275,9 @@ ghp-import==2.1.0 \
--hash=sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619 \
--hash=sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343
# via mkdocs
idna==3.14 \
--hash=sha256:466d810d7a2cc1022bea9b037c39728d51ae7dad40d480fc9b7d7ecf98ba8ee3 \
--hash=sha256:e677eaf072e290f7b725f9acf0b3a2bd55f9fd6f7c70abe5f0e34823d0accf69
idna==3.15 \
--hash=sha256:048adeaf8c2d788c40fee287673ccaa74c24ffd8dcf09ffa555a2fbb59f10ac8 \
--hash=sha256:ca962446ea538f7092a95e057da437618e886f4d349216d2b1e294abfdb65fdc
# via requests
jinja2==3.1.6 \
--hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \
@ -557,9 +557,9 @@ pygments==2.20.0 \
--hash=sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f \
--hash=sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176
# via mkdocs-material
pymdown-extensions==10.21.2 \
--hash=sha256:5c0fd2a2bea14eb39af8ff284f1066d898ab2187d81b889b75d46d4348c01638 \
--hash=sha256:c3f55a5b8a1d0edf6699e35dcbea71d978d34ff3fa79f3d807b8a5b3fa90fbdc
pymdown-extensions==10.21.3 \
--hash=sha256:72cfcf55f07aea0d4af2c4f11dd4e52466ddfb1bb819673146398e0bd3a77354 \
--hash=sha256:d7a5d08014fc571e80ca21dd6f854e31f94c489800350564d55d15b3c41e76b6
# via mkdocs-material
pyparsing==3.3.2 \
--hash=sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d \
@ -665,9 +665,9 @@ pyyaml-env-tag==1.1 \
# via
# mike
# mkdocs
requests==2.33.1 \
--hash=sha256:18817f8c57c6263968bc123d237e3b8b08ac046f5456bd1e307ee8f4250d3517 \
--hash=sha256:4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a
requests==2.34.2 \
--hash=sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0 \
--hash=sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed
# via
# cssselect2
# tinycss2
@ -681,9 +681,9 @@ six==1.17.0 \
--hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \
--hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81
# via python-dateutil
tabledata==1.3.4 \
--hash=sha256:1f56e433bfdeb89f4487abfa48c4603a3b07c5d3a3c7e05ff73dd018c24bd0d4 \
--hash=sha256:e9649cab129d718f3bff4150083b77f8a78c30f6634a30caf692b10fdc60cb97
tabledata==1.3.5 \
--hash=sha256:98c64d0ad6b520846b41000fb3f5b2f42fa7ca2675c2c669e5ccab6b93082a36 \
--hash=sha256:a1e57afc4767b51bef551114c0df31f205d712dbb75e3caf9be7834a79f23136
# via pytablewriter
tcolorpy==0.1.7 \
--hash=sha256:0fbf6bf238890bbc2e32662aa25736769a29bf6d880328f310c910a327632614 \

View file

@ -1915,7 +1915,7 @@ CrowdSec 是一种现代的开源安全引擎,它基于行为分析和社区
- bw-db
crowdsec:
image: crowdsecurity/crowdsec:v1.7.7 # 使用最新版本,但为了更好的稳定性和安全性,请始终固定版本
image: crowdsecurity/crowdsec:v1.7.8 # 使用最新版本,但为了更好的稳定性和安全性,请始终固定版本
volumes:
- cs-data:/var/lib/crowdsec/data # 持久化 CrowdSec 数据
- bw-logs:/var/log:ro # BunkerWeb 的日志,供 CrowdSec 解析

File diff suppressed because it is too large Load diff

View file

@ -163,7 +163,7 @@ RUN if [ "$SKIP_MINIFY" != "yes" ] && [ "$SKIP_MINIFY_HTML" != "yes" ]; then \
echo "Skipping HTML minification"; \
fi
FROM nginx:1.30.1-alpine-slim@sha256:a5688ea5d06cccc298505dddac20e8e28bfe7de67b015a374006593bc23700b1
FROM nginx:1.30.1-alpine-slim@sha256:a5688ea5d06cccc298505dddac20e8e28bfe7de67b015a374006593bc23700b1
# Set default umask to prevent huge recursive chmod increasing the final image size
RUN umask 027
@ -172,7 +172,7 @@ RUN umask 027
RUN apk add --no-cache bash curl geoip grep libgcc libgd libmagic libpq libstdc++ libxml2 mariadb-client mariadb-connector-c openssl pcre2 python3 py3-pip sed sqlite postgresql-client tzdata unzip yajl supervisor brotli lmdb libfuzzy2
# Fix CVEs
RUN apk add --no-cache "nghttp2-libs>=1.68.1" "postgresql18-client>=18.4-r0" "curl>=8.19.0-r0"
# There are no CVEs for the following packages
COPY src/deps/requirements.txt /tmp/requirements-deps.txt

View file

@ -1,5 +1,5 @@
{
"version": "v1.7.7",
"version": "v1.7.8",
"url": "https://github.com/crowdsecurity/crowdsec.git",
"commit": "027974f20cf422bbe1406cf4297fbff37417bd03"
"commit": "632274597a88a6b01ed41c0e6affca0f87ff26df"
}

View file

@ -1,10 +1,10 @@
{
"version": "1.25.10",
"version": "1.26.3",
"url": "https://go.dev/dl/go{VERSION}.linux-{PLATFORM}.tar.gz",
"checksums": {
"386": "2f574f2e2e19ead5b280fec0e7af5c81b76632685f03b6ac42dfa34c4b773c52",
"amd64": "42d4f7a32316aa66591eca7e89867256057a4264451aca10570a715b3637ba70",
"arm64": "654da1f9b50a5d1c2a85ccf8ed405aa89c06e94d18384628bf186f7712677b08",
"armv6l": "39f168f158e693887d3ad006168af1b1a3007b19c5993cae4d9d57f82f52aaf8"
"386": "0ef3626a149b5811c813838c62b7d6618d03ea36047b32c90b0e4851cc42b1fa",
"amd64": "2b2cfc7148493da5e73981bffbf3353af381d5f93e789c82c79aff64962eb556",
"arm64": "9d89a3ea57d141c2b22d70083f2c8459ba3890f2d9e818e7e933b75614936565",
"armv6l": "d44133d4c66b1451a1e247da26db7716f76a081c0169a75e6c84e1871e394320"
}
}

View file

@ -10,12 +10,7 @@ echo " Cloning CrowdSec from $URL (commit $COMMIT)"
git_clone_commit crowdsec "$URL" "$COMMIT"
echo " Patching CrowdSec Go dependencies for CVE fixes"
go get go.opentelemetry.io/otel@v1.41.0 # CVE-2026-29181
go get github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs@v1.65.0 # GHSA-xmrv-pmrh-hhx2
go get github.com/aws/aws-sdk-go-v2/service/kinesis@v1.43.5 # GHSA-xmrv-pmrh-hhx2
go get github.com/aws/aws-sdk-go-v2/service/s3@v1.97.3 # GHSA-xmrv-pmrh-hhx2
go get github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream@v1.7.8 # GHSA-xmrv-pmrh-hhx2
go get golang.org/x/net@v0.53.0 # CVE-2026-33814
go get github.com/slack-go/slack@v0.23.0 # GHSA-gxhx-2686-5h9g
go mod tidy
echo " Building CrowdSec"

View file

@ -45,7 +45,7 @@ RUN apk add --no-cache bash unzip mariadb-connector-c mariadb-client sqlite post
adduser -h /usr/share/bunkerweb/api -g api -s /sbin/nologin -G api -D -H -u 101 --disabled-password api
# Fix CVEs
RUN apk add --no-cache "xz-libs>=5.8.3-r0" "postgresql18-client>=18.4-r0"
RUN apk add --no-cache "xz-libs>=5.8.3-r0" # CVE-2026-34743
# Copy deps and app
COPY --from=builder --chown=0:101 --chmod=550 /usr/share/bunkerweb /usr/share/bunkerweb

View file

@ -6,8 +6,8 @@ fastapi==0.136.1
gunicorn[gthread,http2]==25.1.0
pydantic==2.13.4
pydantic_settings==2.14.1
python-multipart==0.0.28
python-multipart==0.0.29
PyYAML==6.0.3
regex==2026.5.9
slowapi==0.1.9
uvicorn[standard]==0.46.0
uvicorn[standard]==0.47.0

View file

@ -274,9 +274,9 @@ cffi==2.0.0 \
--hash=sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453 \
--hash=sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf
# via cryptography
click==8.3.3 \
--hash=sha256:398329ad4837b2ff7cbe1dd166a4c0f8900c3ca3a218de04466f38f6497f18a2 \
--hash=sha256:a2bf429bb3033c89fa4936ffb35d5cb471e3719e1f3c8a7c3fff0b8314305613
click==8.4.0 \
--hash=sha256:40c50b7c6c6adac2823d411041ec84f3f103f1b280d5e9ce0d7f998995832f81 \
--hash=sha256:638f1338fe1235c8f4e008e4a8a254fb5c5fbdcbb40ece3c9142ebb78e792973
# via uvicorn
cryptography==48.0.0 \
--hash=sha256:0890f502ddf7d9c6426129c3f49f5c0a39278ed7cd6322c8755ffca6ee675a13 \
@ -410,9 +410,9 @@ hyperframe==6.1.0 \
--hash=sha256:b03380493a519fce58ea5af42e4a42317bf9bd425596f7a0835ffce80f1a42e5 \
--hash=sha256:f630908a00854a7adeabd6382b43923a4c4cd4b821fcb527e6ab9e15382a3b08
# via h2
idna==3.14 \
--hash=sha256:466d810d7a2cc1022bea9b037c39728d51ae7dad40d480fc9b7d7ecf98ba8ee3 \
--hash=sha256:e677eaf072e290f7b725f9acf0b3a2bd55f9fd6f7c70abe5f0e34823d0accf69
idna==3.15 \
--hash=sha256:048adeaf8c2d788c40fee287673ccaa74c24ffd8dcf09ffa555a2fbb59f10ac8 \
--hash=sha256:ca962446ea538f7092a95e057da437618e886f4d349216d2b1e294abfdb65fdc
# via
# anyio
# email-validator
@ -569,9 +569,9 @@ python-dotenv==1.2.2 \
# via
# pydantic-settings
# uvicorn
python-multipart==0.0.28 \
--hash=sha256:10faac07eb966c3f48dc415f9dee46c04cb10d58d30a35677db8027c825ed9b6 \
--hash=sha256:8550da197eac0f7ab748961fc9509b999fa2662ea25cef857f05249f6893c0f8
python-multipart==0.0.29 \
--hash=sha256:2ddcc971cef266225f54f552d8fa10bcfbb1f14446caec199060daac59ff2d69 \
--hash=sha256:643e93849196645e2dbdd81a0f8829a23123ad7f797a84a364c6fb3563f18904
# via -r requirements.in
pyyaml==6.0.3 \
--hash=sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c \
@ -792,9 +792,9 @@ typing-inspection==0.4.2 \
# fastapi
# pydantic
# pydantic-settings
uvicorn==0.46.0 \
--hash=sha256:bbebbcbed972d162afca128605223022bedd345b7bc7855ce66deb31487a9048 \
--hash=sha256:fb9da0926999cc6cb22dc7cd71a94a632f078e6ae47ff683c5c420750fb7413d
uvicorn==0.47.0 \
--hash=sha256:2c5715bc12d1892d84752049f400cd1c3cb018514967fdfeb97640443a6a9432 \
--hash=sha256:7c9a0ea1a9414106bbab7324609c162d8fa0cdcdcb703060987269d77c7bb533
# via -r requirements.in
uvloop==0.22.1 \
--hash=sha256:017bd46f9e7b78e81606329d07141d3da446f8798c6baeec124260e22c262772 \
@ -847,116 +847,114 @@ uvloop==0.22.1 \
--hash=sha256:ef6f0d4cc8a9fa1f6a910230cd53545d9a14479311e87e3cb225495952eb672c \
--hash=sha256:fe94b4564e865d968414598eea1a6de60adba0c040ba4ed05ac1300de402cd42
# via uvicorn
watchfiles==1.1.1 \
--hash=sha256:00485f441d183717038ed2e887a7c868154f216877653121068107b227a2f64c \
--hash=sha256:03fa0f5237118a0c5e496185cafa92878568b652a2e9a9382a5151b1a0380a43 \
--hash=sha256:04e78dd0b6352db95507fd8cb46f39d185cf8c74e4cf1e4fbad1d3df96faf510 \
--hash=sha256:059098c3a429f62fc98e8ec62b982230ef2c8df68c79e826e37b895bc359a9c0 \
--hash=sha256:08af70fd77eee58549cd69c25055dc344f918d992ff626068242259f98d598a2 \
--hash=sha256:0b495de0bb386df6a12b18335a0285dda90260f51bdb505503c02bcd1ce27a8b \
--hash=sha256:130e4876309e8686a5e37dba7d5e9bc77e6ed908266996ca26572437a5271e18 \
--hash=sha256:14e0b1fe858430fc0251737ef3824c54027bedb8c37c38114488b8e131cf8219 \
--hash=sha256:17ef139237dfced9da49fb7f2232c86ca9421f666d78c264c7ffca6601d154c3 \
--hash=sha256:1a0bb430adb19ef49389e1ad368450193a90038b5b752f4ac089ec6942c4dff4 \
--hash=sha256:1db5d7ae38ff20153d542460752ff397fcf5c96090c1230803713cf3147a6803 \
--hash=sha256:28475ddbde92df1874b6c5c8aaeb24ad5be47a11f87cde5a28ef3835932e3e94 \
--hash=sha256:2edc3553362b1c38d9f06242416a5d8e9fe235c204a4072e988ce2e5bb1f69f6 \
--hash=sha256:30f7da3fb3f2844259cba4720c3fc7138eb0f7b659c38f3bfa65084c7fc7abce \
--hash=sha256:311ff15a0bae3714ffb603e6ba6dbfba4065ab60865d15a6ec544133bdb21099 \
--hash=sha256:319b27255aacd9923b8a276bb14d21a5f7ff82564c744235fc5eae58d95422ae \
--hash=sha256:35c53bd62a0b885bf653ebf6b700d1bf05debb78ad9292cf2a942b23513dc4c4 \
--hash=sha256:36193ed342f5b9842edd3532729a2ad55c4160ffcfa3700e0d54be496b70dd43 \
--hash=sha256:39574d6370c4579d7f5d0ad940ce5b20db0e4117444e39b6d8f99db5676c52fd \
--hash=sha256:399600947b170270e80134ac854e21b3ccdefa11a9529a3decc1327088180f10 \
--hash=sha256:3a476189be23c3686bc2f4321dd501cb329c0a0469e77b7b534ee10129ae6374 \
--hash=sha256:3ad9fe1dae4ab4212d8c91e80b832425e24f421703b5a42ef2e4a1e215aff051 \
--hash=sha256:3bc570d6c01c206c46deb6e935a260be44f186a2f05179f52f7fcd2be086a94d \
--hash=sha256:3dbd8cbadd46984f802f6d479b7e3afa86c42d13e8f0f322d669d79722c8ec34 \
--hash=sha256:3e6f39af2eab0118338902798b5aa6664f46ff66bc0280de76fca67a7f262a49 \
--hash=sha256:3f53fa183d53a1d7a8852277c92b967ae99c2d4dcee2bfacff8868e6e30b15f7 \
--hash=sha256:3f6d37644155fb5beca5378feb8c1708d5783145f2a0f1c4d5a061a210254844 \
--hash=sha256:3f7eb7da0eb23aa2ba036d4f616d46906013a68caf61b7fdbe42fc8b25132e77 \
--hash=sha256:3fa0b59c92278b5a7800d3ee7733da9d096d4aabcfabb9a928918bd276ef9b9b \
--hash=sha256:421e29339983e1bebc281fab40d812742268ad057db4aee8c4d2bce0af43b741 \
--hash=sha256:4b943d3668d61cfa528eb949577479d3b077fd25fb83c641235437bc0b5bc60e \
--hash=sha256:526e86aced14a65a5b0ec50827c745597c782ff46b571dbfe46192ab9e0b3c33 \
--hash=sha256:52e06553899e11e8074503c8e716d574adeeb7e68913115c4b3653c53f9bae42 \
--hash=sha256:544364b2b51a9b0c7000a4b4b02f90e9423d97fbbf7e06689236443ebcad81ab \
--hash=sha256:5524298e3827105b61951a29c3512deb9578586abf3a7c5da4a8069df247cccc \
--hash=sha256:55c7475190662e202c08c6c0f4d9e345a29367438cf8e8037f3155e10a88d5a5 \
--hash=sha256:563b116874a9a7ce6f96f87cd0b94f7faf92d08d0021e837796f0a14318ef8da \
--hash=sha256:57ca5281a8b5e27593cb7d82c2ac927ad88a96ed406aa446f6344e4328208e9e \
--hash=sha256:5c85794a4cfa094714fb9c08d4a218375b2b95b8ed1666e8677c349906246c05 \
--hash=sha256:5f3bde70f157f84ece3765b42b4a52c6ac1a50334903c6eaf765362f6ccca88a \
--hash=sha256:5f3f58818dc0b07f7d9aa7fe9eb1037aecb9700e63e1f6acfed13e9fef648f5d \
--hash=sha256:5fac835b4ab3c6487b5dbad78c4b3724e26bcc468e886f8ba8cc4306f68f6701 \
--hash=sha256:620bae625f4cb18427b1bb1a2d9426dc0dd5a5ba74c7c2cdb9de405f7b129863 \
--hash=sha256:672b8adf25b1a0d35c96b5888b7b18699d27d4194bac8beeae75be4b7a3fc9b2 \
--hash=sha256:6aae418a8b323732fa89721d86f39ec8f092fc2af67f4217a2b07fd3e93c6101 \
--hash=sha256:6c3631058c37e4a0ec440bf583bc53cdbd13e5661bb6f465bc1d88ee9a0a4d02 \
--hash=sha256:6c9c9262f454d1c4d8aaa7050121eb4f3aea197360553699520767daebf2180b \
--hash=sha256:6e43d39a741e972bab5d8100b5cdacf69db64e34eb19b6e9af162bccf63c5cc6 \
--hash=sha256:7365b92c2e69ee952902e8f70f3ba6360d0d596d9299d55d7d386df84b6941fb \
--hash=sha256:743185e7372b7bc7c389e1badcc606931a827112fbbd37f14c537320fca08620 \
--hash=sha256:74472234c8370669850e1c312490f6026d132ca2d396abfad8830b4f1c096957 \
--hash=sha256:74d5012b7630714b66be7b7b7a78855ef7ad58e8650c73afc4c076a1f480a8d6 \
--hash=sha256:77a13aea58bc2b90173bc69f2a90de8e282648939a00a602e1dc4ee23e26b66d \
--hash=sha256:79ff6c6eadf2e3fc0d7786331362e6ef1e51125892c75f1004bd6b52155fb956 \
--hash=sha256:831a62658609f0e5c64178211c942ace999517f5770fe9436be4c2faeba0c0ef \
--hash=sha256:836398932192dae4146c8f6f737d74baeac8b70ce14831a239bdb1ca882fc261 \
--hash=sha256:842178b126593addc05acf6fce960d28bc5fae7afbaa2c6c1b3a7b9460e5be02 \
--hash=sha256:8526e8f916bb5b9a0a777c8317c23ce65de259422bba5b31325a6fa6029d33af \
--hash=sha256:859e43a1951717cc8de7f4c77674a6d389b106361585951d9e69572823f311d9 \
--hash=sha256:88863fbbc1a7312972f1c511f202eb30866370ebb8493aef2812b9ff28156a21 \
--hash=sha256:89eef07eee5e9d1fda06e38822ad167a044153457e6fd997f8a858ab7564a336 \
--hash=sha256:8c89f9f2f740a6b7dcc753140dd5e1ab9215966f7a3530d0c0705c83b401bd7d \
--hash=sha256:8c91ed27800188c2ae96d16e3149f199d62f86c7af5f5f4d2c61a3ed8cd3666c \
--hash=sha256:8ca65483439f9c791897f7db49202301deb6e15fe9f8fe2fed555bf986d10c31 \
--hash=sha256:8fbe85cb3201c7d380d3d0b90e63d520f15d6afe217165d7f98c9c649654db81 \
--hash=sha256:91d4c9a823a8c987cce8fa2690923b069966dabb196dd8d137ea2cede885fde9 \
--hash=sha256:9bb9f66367023ae783551042d31b1d7fd422e8289eedd91f26754a66f44d5cff \
--hash=sha256:a173cb5c16c4f40ab19cecf48a534c409f7ea983ab8fed0741304a1c0a31b3f2 \
--hash=sha256:a36d8efe0f290835fd0f33da35042a1bb5dc0e83cbc092dcf69bce442579e88e \
--hash=sha256:a55f3e9e493158d7bfdb60a1165035f1cf7d320914e7b7ea83fe22c6023b58fc \
--hash=sha256:a625815d4a2bdca61953dbba5a39d60164451ef34c88d751f6c368c3ea73d404 \
--hash=sha256:a916a2932da8f8ab582f242c065f5c81bed3462849ca79ee357dd9551b0e9b01 \
--hash=sha256:ac3cc5759570cd02662b15fbcd9d917f7ecd47efe0d6b40474eafd246f91ea18 \
--hash=sha256:acb08650863767cbc58bca4813b92df4d6c648459dcaa3d4155681962b2aa2d3 \
--hash=sha256:aebfd0861a83e6c3d1110b78ad54704486555246e542be3e2bb94195eabb2606 \
--hash=sha256:afaeff7696e0ad9f02cbb8f56365ff4686ab205fcf9c4c5b6fdfaaa16549dd04 \
--hash=sha256:b27cf2eb1dda37b2089e3907d8ea92922b673c0c427886d4edc6b94d8dfe5db3 \
--hash=sha256:b2cd9e04277e756a2e2d2543d65d1e2166d6fd4c9b183f8808634fda23f17b14 \
--hash=sha256:b9c4702f29ca48e023ffd9b7ff6b822acdf47cb1ff44cb490a3f1d5ec8987e9c \
--hash=sha256:bbe1ef33d45bc71cf21364df962af171f96ecaeca06bd9e3d0b583efb12aec82 \
--hash=sha256:bd404be08018c37350f0d6e34676bd1e2889990117a2b90070b3007f172d0610 \
--hash=sha256:bf0a91bfb5574a2f7fc223cf95eeea79abfefa404bf1ea5e339c0c1560ae99a0 \
--hash=sha256:bfb5862016acc9b869bb57284e6cb35fdf8e22fe59f7548858e2f971d045f150 \
--hash=sha256:bfff9740c69c0e4ed32416f013f3c45e2ae42ccedd1167ef2d805c000b6c71a5 \
--hash=sha256:c1f5210f1b8fc91ead1283c6fd89f70e76fb07283ec738056cf34d51e9c1d62c \
--hash=sha256:c2047d0b6cea13b3316bdbafbfa0c4228ae593d995030fda39089d36e64fc03a \
--hash=sha256:c22c776292a23bfc7237a98f791b9ad3144b02116ff10d820829ce62dff46d0b \
--hash=sha256:c755367e51db90e75b19454b680903631d41f9e3607fbd941d296a020c2d752d \
--hash=sha256:c882d69f6903ef6092bedfb7be973d9319940d56b8427ab9187d1ecd73438a70 \
--hash=sha256:cb467c999c2eff23a6417e58d75e5828716f42ed8289fe6b77a7e5a91036ca70 \
--hash=sha256:cdab464fee731e0884c35ae3588514a9bcf718d0e2c82169c1c4a85cc19c3c7f \
--hash=sha256:ce19e06cbda693e9e7686358af9cd6f5d61312ab8b00488bc36f5aabbaf77e24 \
--hash=sha256:ce70f96a46b894b36eba678f153f052967a0d06d5b5a19b336ab0dbbd029f73e \
--hash=sha256:cf57a27fb986c6243d2ee78392c503826056ffe0287e8794503b10fb51b881be \
--hash=sha256:d1715143123baeeaeadec0528bb7441103979a1d5f6fd0e1f915383fea7ea6d5 \
--hash=sha256:d6ff426a7cb54f310d51bfe83fe9f2bbe40d540c741dc974ebc30e6aa238f52e \
--hash=sha256:d7e7067c98040d646982daa1f37a33d3544138ea155536c2e0e63e07ff8a7e0f \
--hash=sha256:db476ab59b6765134de1d4fe96a1a9c96ddf091683599be0f26147ea1b2e4b88 \
--hash=sha256:dcc5c24523771db3a294c77d94771abcfcb82a0e0ee8efd910c37c59ec1b31bb \
--hash=sha256:de6da501c883f58ad50db3a32ad397b09ad29865b5f26f64c24d3e3281685849 \
--hash=sha256:e84087b432b6ac94778de547e08611266f1f8ffad28c0ee4c82e028b0fc5966d \
--hash=sha256:eef58232d32daf2ac67f42dea51a2c80f0d03379075d44a587051e63cc2e368c \
--hash=sha256:f096076119da54a6080e8920cbdaac3dbee667eb91dcc5e5b78840b87415bd44 \
--hash=sha256:f0ab1c1af0cb38e3f598244c17919fb1a84d1629cc08355b0074b6d7f53138ac \
--hash=sha256:f27db948078f3823a6bb3b465180db8ebecf26dd5dae6f6180bd87383b6b4428 \
--hash=sha256:f537afb3276d12814082a2e9b242bdcf416c2e8fd9f799a737990a1dbe906e5b \
--hash=sha256:f57b396167a2565a4e8b5e56a5a1c537571733992b226f4f1197d79e94cf0ae5 \
--hash=sha256:f8979280bdafff686ba5e4d8f97840f929a87ed9cdf133cbbd42f7766774d2aa \
--hash=sha256:f9a2ae5c91cecc9edd47e041a930490c31c3afb1f5e6d71de3dc671bfaca02bf
watchfiles==1.2.0 \
--hash=sha256:01859b11fd9fbca670f4d5da00fbac282cfea9bd67a2125d8b2833a3b5617ea9 \
--hash=sha256:01ea8d66f0693b9b60a6541c8d10263091ca9a9060d242f3c1f3143f9aad2c98 \
--hash=sha256:027ae72bfdfd254862065d8b3e2a815c6ab9b1853ce41e6648ece84afd34a551 \
--hash=sha256:03b14855c6f35539e2d95c442ae9530a75762f1e26567152b9ed05f96534a74d \
--hash=sha256:054dc20fd2e3132b4c3883b4a00d72fd6e1f56fdaf89fccd12e8057d74cd74d7 \
--hash=sha256:094b9b70103d4e963499bdea001ee3c2697b144cd9ae6218a62c0f89ec9e31db \
--hash=sha256:0a105bc2283f67e8fbec74253ec2d94925de92ed72c0393f1206bf326b7b7b69 \
--hash=sha256:0a37faaed405c67e28e6be45a1fa4f206ef5a2860f27c237db9fa30704c38242 \
--hash=sha256:0c4997d4e4a55f0d02b6cde327322daf3a0400e5df6c6b15948994bf72497925 \
--hash=sha256:0cb4d80e212f116474a545c21c912b445f16bb0cef9e6a73a498164223e14e2f \
--hash=sha256:0d191c054d0715c3c95c99df9b8dbf6fd096d8c1e021e8f212e1bd8bc444ccb5 \
--hash=sha256:0e831a271c035d89789cffc386b6aa1375f39f1cd25eb7ca0997e4970d152fc5 \
--hash=sha256:10d86db20695afe7997ac9e1717637d6714a8d0220458c33f3d2061f54cec427 \
--hash=sha256:11743adfa510bfffebe97659fb280182b5c9b238708f667e866f308c3430dc19 \
--hash=sha256:1bc6195825b7dcd217968bb1f801a60fd4c16e8eeab5bedc7fe917d7d5995ab4 \
--hash=sha256:204f299afcbd65918ab78dbc52626b0ae45e9d8cef403fdbf33ecf9e40eac66e \
--hash=sha256:20aa0e708b920bde876a4aa82dc7dd6ebea228a63a67cda6632c2fc87b787efa \
--hash=sha256:23282a321c8baf9b3a3c4afff673f9fe65eb7fdc2338d765ccad9d3d1916a5ba \
--hash=sha256:24b2405c0a46738dd9e1cf7135aa5dbdb9d42d024628651b3b13d5117e99f8df \
--hash=sha256:2581a94056e55d7d0a31a823ea92bf73749c489ca2285bfdc0fbe6b2bb49d50c \
--hash=sha256:2995c176de7692b86a2e4c58d9ec718f753150a979cb4a754e2b4ffa38e70906 \
--hash=sha256:2b37d10b5a63bd4d87e18472d80fa525bd670586fae62e5dd580452764879b65 \
--hash=sha256:2cb93af48550faf1cea04c303107c8b75833de7013e57ce27d3b8d21d8d0f58c \
--hash=sha256:2d95ddc1eb6914154253d239089900813f6a767e174b8e6a50e7fdacb7e4236c \
--hash=sha256:3416ff151bb6b5a8d8d11664974fbef4d9305b9b2957839ab5a270468fd8df30 \
--hash=sha256:3651aa7058595e9cfb75d35dd5ada2bf9f48a5b8a0f3562821d3e210c507e077 \
--hash=sha256:37a6721cdf3f65dbb13aa9503510ccb4451603ac837e44d265d7992a597e1374 \
--hash=sha256:41bc1199f7523b3f82843c88cbb979180c949caef0342cf90968f178e5d49b01 \
--hash=sha256:43d818978d06062d9b22c4fab2ebe44cf5213d42dc8e62bda8c2760cfa2eeb33 \
--hash=sha256:4429f3b105524a10b72c3a819b091c495d2811d419c1e1e8df773a5a5974f831 \
--hash=sha256:4543579a9bdb0c9560039b4ffddbdb39545707659fbc430ce4c10f3f68d557f9 \
--hash=sha256:4674d49eb94706dfe666c069fc0a1b646ffcf920473492e209f6d5f60d3f0cc2 \
--hash=sha256:4c887eba18b7945ac73067a8b4a66f21cd46c2539b2bc68588f7be6c7eb6d26b \
--hash=sha256:4e4ff8e37f99cf1da89e255e07c9c4b37c214038c4283707bdec308cb1b0ea1f \
--hash=sha256:4f34e26a19f91f710c08e0183429f0d1d15df734e6bc78c31e77b9ea9c433658 \
--hash=sha256:5327989a465505f05cfe06f04fa9d0c2fd5432bb243e10e6f012b1bdca3c8579 \
--hash=sha256:53b2290c92e0506d102cd448fbc610d87079553f86caa39d67440856a8b8bba5 \
--hash=sha256:56d8641cf834c2836922899105bd3ce3d0dfc69291d52edf0b4d0436829b34c0 \
--hash=sha256:57a2d9fa4fb4c2ecae57b13dfff2c7ab53e21a2ba674fe9f05506680fcdcc0d7 \
--hash=sha256:63ac26eefbf4af1741247d6fb68b11c49a25b2f7413fbd318a83a12aaa9cf666 \
--hash=sha256:6543cf55d170003296d185c0af981f3e1311564907e1f4e08671fc7693a890a5 \
--hash=sha256:704fd259e332e01f9b9c178f4bce9e49027e5587cc2600eeeaf8e76e1c846201 \
--hash=sha256:71283b39fd17e5408eb123bd37aeecfd9d54c81fc184421943208aadb879d103 \
--hash=sha256:71cd71740ed2c15211ebb237ced4e39a1cdf6f80566e5fe95428da1626f4fde6 \
--hash=sha256:7571e4464cb6e434958f867f7f730b8ab0b75e3f8e5eac0499168486ab3c33a8 \
--hash=sha256:772b80df316480d894a0e3165fdd19cf77f5d17f9a787f94029465ad0e3529d1 \
--hash=sha256:77a0feab9af4c021c581f695258c642b3d10c5fd4c676e33a0d8606425d82631 \
--hash=sha256:7a2cffd17d27d2ecbb310c2b1d8174f222a5495b1a721894afa88ec11e25b898 \
--hash=sha256:7a7ce236284f002a156f70add88efe5c70879cccbb658be0822c54b1306fc09d \
--hash=sha256:7ba0480b9a74af058f43b337e937a451e109295c420916d68ad24e3dc02f5e44 \
--hash=sha256:8520a4ab0e37f770afc34459c4f8f7019e153f9124dc101c15538365875d1ab2 \
--hash=sha256:86bc13c25a8d1fcd70b51d0ce7c9b65e90de5666fcbfd3e34957cc73ee19aeb5 \
--hash=sha256:89d8c2394a065ca86f5d2910ff263ae67c127e1376ccc4f9fc35c71db879f80a \
--hash=sha256:8c520725602756229f045b032a1ff33d7ef0f7404189d62f6c2438cb6d8ef6a1 \
--hash=sha256:8f200104103feb097de4cab8fe4f5dd18a2026934c7dea98c55a2f5fd6d5a33b \
--hash=sha256:8f70d8b291ef6e88d19b1f297a6905ddb978888d9272b0d05e6f53309856bcfc \
--hash=sha256:8fa585ede612ee9f9e91b18bebf9ba11b9ae29a4e3a0d0cf6fca3e382133f0d5 \
--hash=sha256:922c0e019fe68b3ae392965a766b02a71ba1168c932cebc3733cd52c5fe5b377 \
--hash=sha256:9342472aff9b093c5acd4f6d8f70ae0937964ab56542502bcf5579782da69ae8 \
--hash=sha256:9649193aa27bd9ff2e80ff29bfaa93085496c7a3a377592823cc58b77ee88add \
--hash=sha256:9f04b092229ad2c50126dd3c922c8822e51e605993764a33058d4a791ab42281 \
--hash=sha256:a0f27f01bee51861392bb6b7c4fdb290b27d1eb194e9e28788d68102a0e898d9 \
--hash=sha256:a16ffe19bf5cf9f5edaa1ad1dd830c5a816e8feec430c522302ab55483a4b994 \
--hash=sha256:a204794696ffb8f9b10fba6f7cb5216d42f3b2b71860ccac6b6e42f5f10973b0 \
--hash=sha256:a711b51aec4370d0dcda5b6c09463206f133a5759341d7744b953a7b62e1100e \
--hash=sha256:a88fc94e647bc4eec523f1caa540258eb71d14278b9daf72fa1e2658a98df0f0 \
--hash=sha256:ae99b14c5f21e026e0e9d96f40e07d8570ebee6cafd9d8fc318354606daa7a28 \
--hash=sha256:b0ef001f8c25ad0fa9529f914c1600647ecd0f542d11c19b7894768c67b6acb7 \
--hash=sha256:b141a4891c995a039cd89e9a49e62df1dc8a559a5d1a6e4c7106d16c12777a55 \
--hash=sha256:b4e77f6a55f858504069abd35d336a637555c09bca453dde1ee1e5ada8a6a1fb \
--hash=sha256:b62f042afde2dde21ec1d2c1a74361e804673df86f51e418a999c9acfe671b07 \
--hash=sha256:b718bf356bbc15e559bd8ef41782b573b8ae0e3f177ab244b440568d7ea02cfb \
--hash=sha256:b8c8358484d5fa12ef34f05b7f4168eaf1932f408725ff6d023c33ec17bd79d4 \
--hash=sha256:b974946a10af379d425e2eef5b62f5c6ebeaccf91d45eaad6f5b27ecd4f91aa0 \
--hash=sha256:b9909cc2b48468b575eefa944919e1fe8a36c5849d5c7c168f80a8c1db69398e \
--hash=sha256:b9f732dc58b2dbe69e464ccf8fff7a03b0dd0be439da4c0720d3558527d3d6b4 \
--hash=sha256:bb68bf4df85abebe5efddc53cf2075520f243a59868d9b3973278b23e76962a9 \
--hash=sha256:bb7e52ecf68ba46d22df23467b87cffeb2146908aa523ebfe803019618cfda06 \
--hash=sha256:bc13eb17538be00c874699dc0abe4ee2bc8d50bb1166a6b9e175ef3fd7eb8f26 \
--hash=sha256:c0db965c5f79aa49fe672d297cf1febc5ad149b658594944f49a54a2b96270a7 \
--hash=sha256:c16cb06dd17d43b9d185094268459eac92c9538356f050e55b54e82cf700e1d4 \
--hash=sha256:c525543d91961c6955b2636b308569e84a1d1c5f5f2932041ab9ef46422f43e3 \
--hash=sha256:c5c19526f4e54a00f2666a6c0e9e40d582c09e865055ea7378bf0009aab857b3 \
--hash=sha256:c995fba777f1ea992f090f9236e9284cf7a5d1a0130dd5a3d82c598cacd76838 \
--hash=sha256:ca148d73dea36c9763aaa351e4d7a51780ec1584217c45276f4fe8239c768b71 \
--hash=sha256:cee9d5efd929efdac5f7e58f72b3376f676b64050a91c5b99a7094c5b2317488 \
--hash=sha256:d158cd89df6053823533e06fb1d73c549133bff5f0396170c0e53d9559340717 \
--hash=sha256:d20029a60a71a052a24c4db7673bc4de39ab89adbaccbfb5d67987c5d73f424d \
--hash=sha256:d413349d565dab74297f2a63e84a097936be69bf8f3b3801f27f380e32040f44 \
--hash=sha256:d4a4b147f5dca2a5d325a06a832fb43f345751adfbc63204aec30e0d9ca965a2 \
--hash=sha256:d516b3283a758e087841aedb8031549fb41ced08f3db10aa6d2bf32dc042525b \
--hash=sha256:d73a585accffa5ae39c17264c36ec3166d2fad7000c780f5ef83b2722afb9dd2 \
--hash=sha256:dbd6c97045dad81227c8d040173da044c1de08de64a5ea8b555da4aee1d5fa22 \
--hash=sha256:e0618518f282c4ebff60f5e5b1247b6d91bb8b9f4476947563a1e74acc66f3c6 \
--hash=sha256:e140ed30ebde76796b686e67c182cff10ea2fbab186fafd1560f74bb5a473a6e \
--hash=sha256:e1cfd51e97e13ff3bd047c140764d277fc9b95b7cb5da59e46a47d167adab310 \
--hash=sha256:e2ca07fa7d89195ec0865d3d285666286740bfa83d83e5cee204043a31ecc165 \
--hash=sha256:e53a384f76b631c3ae5334ce6a52f0baa3a911eb94a4eac7f160079868b716d5 \
--hash=sha256:eb283ee99e21ad6443c8cdb06ac5b34b1308c329cbdf03fa02b445363714c799 \
--hash=sha256:eb72919d93e3a16fc451d3aa3d4b1698423daca1b382d3d959c9ac51297c12a8 \
--hash=sha256:ecb47f183a8025b2aa18b546725c3657e542112ae9c0613a2af79b4fa8d04ad7 \
--hash=sha256:f155b3a1b2a5fc89cdc70d47ee5d54e3b75e88efa34982028a35daef9ba00379 \
--hash=sha256:f22943b7770483f6ea0721c6b11d022947a98eb0acae14694de034f4d0d38925 \
--hash=sha256:f28b2725eb8cce327b9b3ab02415c853011dc55c95832fe90de6bc56f5315f72 \
--hash=sha256:f88af53d6ddaf72179ef613ddc905e6f4785f712b49b80b3bef9f3525e6194b4 \
--hash=sha256:faea288b6f0ab1902ef08f4ca6de005dccf856c4e0c4f21b8c5fce02d90a1b08 \
--hash=sha256:fff610d7bb2256a317bb1e96f0d7862c7aa8076733ee5df0fd41bbe76a24a4f4
# via uvicorn
websockets==16.0 \
--hash=sha256:0298d07ee155e2e9fda5be8a9042200dd2e3bb0b8a38482156576f863a9d457c \

View file

@ -44,7 +44,7 @@ RUN apk add --no-cache bash tzdata mariadb-connector-c mariadb-client sqlite pos
adduser -h /usr/share/bunkerweb/autoconf -g autoconf -s /sbin/nologin -G autoconf -D -H -u 101 --disabled-password autoconf
# Fix CVEs
RUN apk add --no-cache "xz-libs>=5.8.3-r0" "postgresql18-client>=18.4-r0"
RUN apk add --no-cache "xz-libs>=5.8.3-r0" # CVE-2026-34743
# Copy dependencies
COPY --from=builder --chown=0:101 --chmod=550 /usr/share/bunkerweb /usr/share/bunkerweb

View file

@ -3,6 +3,7 @@
from abc import abstractmethod
from os import getenv
from time import sleep
from traceback import format_exc
from Config import Config
@ -41,6 +42,7 @@ class Controller(Config):
try:
self._instances = self.get_instances()
except Exception:
self._logger.error(f"Error while fetching instances:\n{format_exc()}")
self._instances = []
if not self._instances:
self._logger.warning(f"No instance found, waiting {wait_time}s ...")

View file

@ -111,14 +111,28 @@ class DockerController(Controller):
return self._get_controller_containers(label_key="bunkerweb.SERVER_NAME")
def _to_instances(self, controller_instance) -> List[dict]:
# docker-py's .status / .health helpers tolerate a missing State or
# Health object, so prefer them over digging into raw attrs.
running = controller_instance.status == "running"
health_status = controller_instance.health # healthy | unhealthy | starting | unknown
if health_status in ("healthy", "unhealthy", "starting"):
# Tier 1: trust Docker's native HEALTHCHECK status when present.
instance_health = running and health_status == "healthy"
else:
# Tier 2: no HEALTHCHECK data (image without one, or Podman compat
# API omits State.Health) -> fall back to the container run state.
instance_health = running
instance = {
"name": controller_instance.name,
"hostname": controller_instance.name,
"type": "container",
"health": controller_instance.status == "running" and controller_instance.attrs["State"]["Health"]["Status"] == "healthy",
"health": instance_health,
"env": {},
}
for env in controller_instance.attrs["Config"]["Env"]:
for env in (controller_instance.attrs.get("Config", {}) or {}).get("Env") or []:
if "=" not in env:
continue
variable, value = env.split("=", 1)
instance["env"][variable] = value
return [instance]

View file

@ -115,7 +115,10 @@ class SwarmController(Controller):
self.__swarm_instances.append(controller_instance.id)
instances = []
instance_env = {}
for env in controller_instance.attrs["Spec"]["TaskTemplate"]["ContainerSpec"]["Env"]:
container_spec = controller_instance.attrs.get("Spec", {}).get("TaskTemplate", {}).get("ContainerSpec", {}) or {}
for env in container_spec.get("Env") or []:
if "=" not in env:
continue
variable, value = env.split("=", 1)
instance_env[variable] = value

View file

@ -256,9 +256,9 @@ hiredis==3.3.1 \
--hash=sha256:f525734382a47f9828c9d6a1501522c78d5935466d8e2be1a41ba40ca5bb922b \
--hash=sha256:f915a34fb742e23d0d61573349aa45d6f74037fde9d58a9f340435eff8d62736
# via redis
idna==3.14 \
--hash=sha256:466d810d7a2cc1022bea9b037c39728d51ae7dad40d480fc9b7d7ecf98ba8ee3 \
--hash=sha256:e677eaf072e290f7b725f9acf0b3a2bd55f9fd6f7c70abe5f0e34823d0accf69
idna==3.15 \
--hash=sha256:048adeaf8c2d788c40fee287673ccaa74c24ffd8dcf09ffa555a2fbb59f10ac8 \
--hash=sha256:ca962446ea538f7092a95e057da437618e886f4d349216d2b1e294abfdb65fdc
# via requests
kubernetes==35.0.0 \
--hash=sha256:39e2b33b46e5834ef6c3985ebfe2047ab39135d41de51ce7641a7ca5b372a13d \
@ -359,9 +359,9 @@ redis==7.4.0 \
--hash=sha256:64a6ea7bf567ad43c964d2c30d82853f8df927c5c9017766c55a1d1ed95d18ad \
--hash=sha256:a9c74a5c893a5ef8455a5adb793a31bb70feb821c86eccb62eebef5a19c429ec
# via -r requirements.in
requests==2.33.1 \
--hash=sha256:18817f8c57c6263968bc123d237e3b8b08ac046f5456bd1e307ee8f4250d3517 \
--hash=sha256:4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a
requests==2.34.2 \
--hash=sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0 \
--hash=sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed
# via
# docker
# kubernetes

View file

@ -154,7 +154,7 @@ Die folgenden Abschnitte führen diese Schritte im Detail durch.
- bw-db
crowdsec:
image: crowdsecurity/crowdsec:v1.7.7 # Verwenden Sie die neueste Version, aber pinnen Sie immer die Version für bessere Stabilität/Sicherheit
image: crowdsecurity/crowdsec:v1.7.8 # Verwenden Sie die neueste Version, aber pinnen Sie immer die Version für bessere Stabilität/Sicherheit
volumes:
- cs-data:/var/lib/crowdsec/data # Zum Persistieren der CrowdSec-Daten
- bw-logs:/var/log:ro # Die BunkerWeb-Protokolle, die von CrowdSec analysiert werden sollen

View file

@ -150,7 +150,7 @@ Las siguientes secciones desarrollan cada paso.
- bw-db
crowdsec:
image: crowdsecurity/crowdsec:v1.7.7 # Use la última versión pero siempre fije la versión para una mejor estabilidad/seguridad
image: crowdsecurity/crowdsec:v1.7.8 # Use la última versión pero siempre fije la versión para una mejor estabilidad/seguridad
volumes:
- cs-data:/var/lib/crowdsec/data # Para persistir los datos de CrowdSec
- bw-logs:/var/log:ro # Los registros de BunkerWeb para que CrowdSec los analice

View file

@ -154,7 +154,7 @@ Les sections suivantes détaillent chacune de ces étapes.
- bw-db
crowdsec:
image: crowdsecurity/crowdsec:v1.7.7 # Utilisez la dernière version mais épinglez toujours la version pour une meilleure stabilité/sécurité
image: crowdsecurity/crowdsec:v1.7.8 # Utilisez la dernière version mais épinglez toujours la version pour une meilleure stabilité/sécurité
volumes:
- cs-data:/var/lib/crowdsec/data # Pour persister les données de CrowdSec
- bw-logs:/var/log:ro # Les journaux de BunkerWeb à analyser par CrowdSec

View file

@ -156,7 +156,7 @@ Follow one of the environment-specific guides below so the CrowdSec agent ingest
- bw-db
crowdsec:
image: crowdsecurity/crowdsec:v1.7.7 # Use the latest version but always pin the version for a better stability/security
image: crowdsecurity/crowdsec:v1.7.8 # Use the latest version but always pin the version for a better stability/security
volumes:
- cs-data:/var/lib/crowdsec/data # To persist the CrowdSec data
- bw-logs:/var/log:ro # The logs of BunkerWeb for CrowdSec to parse

View file

@ -154,7 +154,7 @@ CrowdSec 是一种现代的开源安全引擎,它基于行为分析和社区
- bw-db
crowdsec:
image: crowdsecurity/crowdsec:v1.7.7 # 使用最新版本,但为了更好的稳定性和安全性,请始终固定版本
image: crowdsecurity/crowdsec:v1.7.8 # 使用最新版本,但为了更好的稳定性和安全性,请始终固定版本
volumes:
- cs-data:/var/lib/crowdsec/data # 持久化 CrowdSec 数据
- bw-logs:/var/log:ro # BunkerWeb 的日志,供 CrowdSec 解析

View file

@ -69,6 +69,7 @@ add_header X-Proxy-Cache $upstream_cache_status;
{% set request_buffering = all[k.replace("HOST", "REQUEST_BUFFERING")] if k.replace("HOST", "REQUEST_BUFFERING") in all else "yes" %}
{% set keepalive = all[k.replace("HOST", "KEEPALIVE")] if k.replace("HOST", "KEEPALIVE") in all else "yes" %}
{% set http_version = all[k.replace("HOST", "HTTP_VERSION")] if k.replace("HOST", "HTTP_VERSION") in all else "1.1" %}
{% if USE_UI == "yes" and http_version == "2" %}{% set http_version = "1.1" %}{% endif %}
{% set auth_request = all[k.replace("HOST", "AUTH_REQUEST")] if k.replace("HOST", "AUTH_REQUEST") in all else "" %}
{% set auth_request_signin_url = all[k.replace("HOST", "AUTH_REQUEST_SIGNIN_URL")] if k.replace("HOST", "AUTH_REQUEST_SIGNIN_URL") in all else "" %}
{% set auth_request_sets = all[k.replace("HOST", "AUTH_REQUEST_SET")] if k.replace("HOST", "AUTH_REQUEST_SET") in all else "" %}

View file

@ -2957,9 +2957,12 @@ class Database:
.order_by(Template_custom_configs.order)
):
config_type = template_config.type.replace("_", "-").replace(".conf", "").strip()
# Real custom_configs rows use the underscore enum form while config_type is hyphenated here;
# normalize both sides so an overriding row correctly suppresses the template-provided config.
normalized_config_type = config_type.replace("-", "_")
if not any(
custom_config["service_id"] == service_id
and custom_config["type"] == config_type
and custom_config["type"].replace("-", "_") == normalized_config_type
and custom_config["name"] == template_config.name
for custom_config in custom_configs
):

View file

@ -5,28 +5,24 @@ Revises: 48d96bc0bcc7
Create Date: 2026-05-15 15:48:34.450891
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision: str = 'e73ac60be72d'
down_revision: Union[str, None] = '48d96bc0bcc7'
revision: str = "e73ac60be72d"
down_revision: Union[str, None] = "48d96bc0bcc7"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
# Update the version in bw_metadata
op.execute("UPDATE bw_metadata SET version = '1.6.10' WHERE id = 1")
# ### end Alembic commands ###
def downgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
# Revert the version in bw_metadata
op.execute("UPDATE bw_metadata SET version = '1.6.10~rc7' WHERE id = 1")
# ### end Alembic commands ###

View file

@ -5,28 +5,24 @@ Revises: a6fd7a8c037f
Create Date: 2026-05-15 15:49:23.329406
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision: str = 'c6673c17e477'
down_revision: Union[str, None] = 'a6fd7a8c037f'
revision: str = "c6673c17e477"
down_revision: Union[str, None] = "a6fd7a8c037f"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
# Update the version in bw_metadata
op.execute("UPDATE bw_metadata SET version = '1.6.10' WHERE id = 1")
# ### end Alembic commands ###
def downgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
# Revert the version in bw_metadata
op.execute("UPDATE bw_metadata SET version = '1.6.10~rc7' WHERE id = 1")
# ### end Alembic commands ###

View file

@ -5,28 +5,24 @@ Revises: 339911a07e19
Create Date: 2026-05-15 15:50:21.151317
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision: str = 'dc32f5dabb70'
down_revision: Union[str, None] = '339911a07e19'
revision: str = "dc32f5dabb70"
down_revision: Union[str, None] = "339911a07e19"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
# Update the version in bw_metadata
op.execute("UPDATE bw_metadata SET version = '1.6.10' WHERE id = 1")
# ### end Alembic commands ###
def downgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
# Revert the version in bw_metadata
op.execute("UPDATE bw_metadata SET version = '1.6.10~rc7' WHERE id = 1")
# ### end Alembic commands ###

View file

@ -5,28 +5,24 @@ Revises: 30862abba879
Create Date: 2026-05-15 12:45:16.830973
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision: str = 'f5ad08b01f62'
down_revision: Union[str, None] = '30862abba879'
revision: str = "f5ad08b01f62"
down_revision: Union[str, None] = "30862abba879"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
# Update the version in bw_metadata
op.execute("UPDATE bw_metadata SET version = '1.6.10' WHERE id = 1")
# ### end Alembic commands ###
def downgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
# Revert the version in bw_metadata
op.execute("UPDATE bw_metadata SET version = '1.6.10~rc7' WHERE id = 1")
# ### end Alembic commands ###

View file

@ -2,5 +2,5 @@ alembic==1.18.4
cryptography==48.0.0
# oracledb==3.0.0
psycopg[binary,pool]==3.2.9
PyMySQL==1.1.3
PyMySQL==1.2.0
sqlalchemy==2.0.49

View file

@ -380,9 +380,9 @@ pycparser==3.0 \
--hash=sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29 \
--hash=sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992
# via cffi
pymysql==1.1.3 \
--hash=sha256:8164ba62c552f6105f3b11753352d0f16b90d1703ba67d81923d5a8a5d1c5289 \
--hash=sha256:e70ebf2047a4edf6138cf79c68ad418ef620af65900aa585c5e8bfc95044d43a
pymysql==1.2.0 \
--hash=sha256:62169ce6d5510f08e140c5e7990ee884a9764024e4a9a27b2cc11f1099322ae0 \
--hash=sha256:6c7b17ca686988104d7426c27895b455cdeea3e9d3ceb1270f0c3704fead8c33
# via -r requirements.386.in
sqlalchemy==2.0.49 \
--hash=sha256:01146546d84185f12721a1d2ce0c6673451a7894d1460b592d378ca4871a0c72 \

View file

@ -2,5 +2,5 @@ alembic==1.18.4
cryptography==48.0.0
# oracledb==3.0.0
psycopg[c,pool]==3.3.3
PyMySQL==1.1.3
PyMySQL==1.2.0
sqlalchemy==2.0.49

View file

@ -316,9 +316,9 @@ pycparser==3.0 \
--hash=sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29 \
--hash=sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992
# via cffi
pymysql==1.1.3 \
--hash=sha256:8164ba62c552f6105f3b11753352d0f16b90d1703ba67d81923d5a8a5d1c5289 \
--hash=sha256:e70ebf2047a4edf6138cf79c68ad418ef620af65900aa585c5e8bfc95044d43a
pymysql==1.2.0 \
--hash=sha256:62169ce6d5510f08e140c5e7990ee884a9764024e4a9a27b2cc11f1099322ae0 \
--hash=sha256:6c7b17ca686988104d7426c27895b455cdeea3e9d3ceb1270f0c3704fead8c33
# via -r requirements.arm.in
sqlalchemy==2.0.49 \
--hash=sha256:01146546d84185f12721a1d2ce0c6673451a7894d1460b592d378ca4871a0c72 \

View file

@ -2,5 +2,5 @@ alembic==1.18.4
cryptography==48.0.0
# oracledb==3.0.0
psycopg[binary,pool]==3.3.3
PyMySQL==1.1.3
PyMySQL==1.2.0
sqlalchemy==2.0.49

View file

@ -370,9 +370,9 @@ pycparser==3.0 \
--hash=sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29 \
--hash=sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992
# via cffi
pymysql==1.1.3 \
--hash=sha256:8164ba62c552f6105f3b11753352d0f16b90d1703ba67d81923d5a8a5d1c5289 \
--hash=sha256:e70ebf2047a4edf6138cf79c68ad418ef620af65900aa585c5e8bfc95044d43a
pymysql==1.2.0 \
--hash=sha256:62169ce6d5510f08e140c5e7990ee884a9764024e4a9a27b2cc11f1099322ae0 \
--hash=sha256:6c7b17ca686988104d7426c27895b455cdeea3e9d3ceb1270f0c3704fead8c33
# via -r requirements.in
sqlalchemy==2.0.49 \
--hash=sha256:01146546d84185f12721a1d2ce0c6673451a7894d1460b592d378ca4871a0c72 \

View file

@ -3,4 +3,4 @@ jinja2==3.1.6
packaging==26.2
pytz==2026.2
redis[hiredis]==7.4.0
requests==2.33.1
requests==2.34.2

View file

@ -250,9 +250,9 @@ hiredis==3.3.1 \
--hash=sha256:f525734382a47f9828c9d6a1501522c78d5935466d8e2be1a41ba40ca5bb922b \
--hash=sha256:f915a34fb742e23d0d61573349aa45d6f74037fde9d58a9f340435eff8d62736
# via redis
idna==3.14 \
--hash=sha256:466d810d7a2cc1022bea9b037c39728d51ae7dad40d480fc9b7d7ecf98ba8ee3 \
--hash=sha256:e677eaf072e290f7b725f9acf0b3a2bd55f9fd6f7c70abe5f0e34823d0accf69
idna==3.15 \
--hash=sha256:048adeaf8c2d788c40fee287673ccaa74c24ffd8dcf09ffa555a2fbb59f10ac8 \
--hash=sha256:ca962446ea538f7092a95e057da437618e886f4d349216d2b1e294abfdb65fdc
# via requests
jinja2==3.1.6 \
--hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \
@ -361,9 +361,9 @@ redis==7.4.0 \
--hash=sha256:64a6ea7bf567ad43c964d2c30d82853f8df927c5c9017766c55a1d1ed95d18ad \
--hash=sha256:a9c74a5c893a5ef8455a5adb793a31bb70feb821c86eccb62eebef5a19c429ec
# via -r requirements.in
requests==2.33.1 \
--hash=sha256:18817f8c57c6263968bc123d237e3b8b08ac046f5456bd1e307ee8f4250d3517 \
--hash=sha256:4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a
requests==2.34.2 \
--hash=sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0 \
--hash=sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed
# via -r requirements.in
urllib3==2.7.0 \
--hash=sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c \

View file

@ -143,9 +143,9 @@ charset-normalizer==3.4.7 \
--hash=sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79 \
--hash=sha256:fea24543955a6a729c45a73fe90e08c743f0b3334bbf3201e6c4bc1b0c7fa464
# via requests
click==8.3.3 \
--hash=sha256:398329ad4837b2ff7cbe1dd166a4c0f8900c3ca3a218de04466f38f6497f18a2 \
--hash=sha256:a2bf429bb3033c89fa4936ffb35d5cb471e3719e1f3c8a7c3fff0b8314305613
click==8.4.0 \
--hash=sha256:40c50b7c6c6adac2823d411041ec84f3f103f1b280d5e9ce0d7f998995832f81 \
--hash=sha256:638f1338fe1235c8f4e008e4a8a254fb5c5fbdcbb40ece3c9142ebb78e792973
# via
# pip-compile-multi
# pip-tools
@ -153,9 +153,9 @@ docopt-ng==0.9.0 \
--hash=sha256:91c6da10b5bb6f2e9e25345829fb8278c78af019f6fc40887ad49b060483b1d7 \
--hash=sha256:bfe4c8b03f9fca424c24ee0b4ffa84bf7391cb18c29ce0f6a8227a3b01b81ff9
# via pip-upgrader
idna==3.14 \
--hash=sha256:466d810d7a2cc1022bea9b037c39728d51ae7dad40d480fc9b7d7ecf98ba8ee3 \
--hash=sha256:e677eaf072e290f7b725f9acf0b3a2bd55f9fd6f7c70abe5f0e34823d0accf69
idna==3.15 \
--hash=sha256:048adeaf8c2d788c40fee287673ccaa74c24ffd8dcf09ffa555a2fbb59f10ac8 \
--hash=sha256:ca962446ea538f7092a95e057da437618e886f4d349216d2b1e294abfdb65fdc
# via requests
importlib-metadata==9.0.0 \
--hash=sha256:2d21d1cc5a017bd0559e36150c21c830ab1dc304dedd1b7ea85d20f45ef3edd7 \
@ -202,9 +202,9 @@ questionary==2.1.1 \
--hash=sha256:3d7e980292bb0107abaa79c68dd3eee3c561b83a0f89ae482860b181c8bd412d \
--hash=sha256:a51af13f345f1cdea62347589fbb6df3b290306ab8930713bfae4d475a7d4a59
# via pip-upgrader
requests==2.33.1 \
--hash=sha256:18817f8c57c6263968bc123d237e3b8b08ac046f5456bd1e307ee8f4250d3517 \
--hash=sha256:4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a
requests==2.34.2 \
--hash=sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0 \
--hash=sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed
# via
# -r requirements-deps.in
# pip-tools
@ -279,9 +279,9 @@ wheel==0.47.0 \
# via
# -r requirements-deps.in
# pip-tools
zipp==3.23.1 \
--hash=sha256:0b3596c50a5c700c9cb40ba8d86d9f2cc4807e9bedb06bcdf7fac85633e444dc \
--hash=sha256:32120e378d32cd9714ad503c1d024619063ec28aad2248dc6672ad13edfa5110
zipp==4.1.0 \
--hash=sha256:25ad4e16390cd314347dd8f1de67a2ac538ae658ed4ab9db16029c07c188e97f \
--hash=sha256:4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602
# via
# -r requirements-deps.in
# pip-tools

View file

@ -8,9 +8,9 @@ build==1.5.0 \
--hash=sha256:13f3eecb844759ab66efec90ca17639bbf14dc06cb2fdf37a9010322d9c50a6f \
--hash=sha256:302c22c3ba2a0fd5f3911918651341ebb3896176cbdec15bd421f80b1afc7647
# via pip-tools
click==8.3.3 \
--hash=sha256:398329ad4837b2ff7cbe1dd166a4c0f8900c3ca3a218de04466f38f6497f18a2 \
--hash=sha256:a2bf429bb3033c89fa4936ffb35d5cb471e3719e1f3c8a7c3fff0b8314305613
click==8.4.0 \
--hash=sha256:40c50b7c6c6adac2823d411041ec84f3f103f1b280d5e9ce0d7f998995832f81 \
--hash=sha256:638f1338fe1235c8f4e008e4a8a254fb5c5fbdcbb40ece3c9142ebb78e792973
# via pip-tools
importlib-metadata==9.0.0 \
--hash=sha256:2d21d1cc5a017bd0559e36150c21c830ab1dc304dedd1b7ea85d20f45ef3edd7 \
@ -50,9 +50,9 @@ wheel==0.47.0 \
# via
# -r requirements.in
# pip-tools
zipp==3.23.1 \
--hash=sha256:0b3596c50a5c700c9cb40ba8d86d9f2cc4807e9bedb06bcdf7fac85633e444dc \
--hash=sha256:32120e378d32cd9714ad503c1d024619063ec28aad2248dc6672ad13edfa5110
zipp==4.1.0 \
--hash=sha256:25ad4e16390cd314347dd8f1de67a2ac538ae658ed4ab9db16029c07c188e97f \
--hash=sha256:4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602
# via
# -r requirements.in
# pip-tools

View file

@ -1,4 +1,4 @@
FROM debian:bookworm-slim@sha256:f9c6a2fd2ddbc23e336b6257a5245e31f996953ef06cd13a59fa0a1df2d5c252 AS builder
FROM debian:bookworm-slim@sha256:67b30a61dc87758f0caf819646104f29ecbda97d920aaf5edc834128ac8493d3 AS builder
# Install Nginx and dependencies
RUN apt update && \
@ -126,7 +126,7 @@ RUN if [ "$SKIP_MINIFY" != "yes" ] && [ "$SKIP_MINIFY_HTML" != "yes" ]; then \
echo "Skipping HTML minification"; \
fi
FROM debian:bookworm-slim@sha256:f9c6a2fd2ddbc23e336b6257a5245e31f996953ef06cd13a59fa0a1df2d5c252
FROM debian:bookworm-slim@sha256:67b30a61dc87758f0caf819646104f29ecbda97d920aaf5edc834128ac8493d3
# Set default umask to prevent huge recursive chmod increasing the final image size
RUN umask 027

View file

@ -1,4 +1,4 @@
FROM debian:trixie-slim@sha256:cedb1ef40439206b673ee8b33a46a03a0c9fa90bf3732f54704f99cb061d2c5a AS builder
FROM debian:trixie-slim@sha256:109e2c65005bf160609e4ba6acf7783752f8502ad218e298253428690b9eaa4b AS builder
# Install Nginx and dependencies
RUN apt update && \
@ -127,7 +127,7 @@ RUN if [ "$SKIP_MINIFY" != "yes" ] && [ "$SKIP_MINIFY_HTML" != "yes" ]; then \
echo "Skipping HTML minification"; \
fi
FROM debian:trixie-slim@sha256:cedb1ef40439206b673ee8b33a46a03a0c9fa90bf3732f54704f99cb061d2c5a
FROM debian:trixie-slim@sha256:109e2c65005bf160609e4ba6acf7783752f8502ad218e298253428690b9eaa4b
# Set default umask to prevent huge recursive chmod increasing the final image size
RUN umask 027

View file

@ -1,4 +1,4 @@
FROM redhat/ubi10:10.1@sha256:9d3b5102e7ae4f82914a1791610b75acef134b93158be6005b6ae9218c163550 AS builder
FROM redhat/ubi10:10.1@sha256:936bf25d1a9b2c0c00aa67ec55f8347273763b7c64317ba7404b4b87736b2af2 AS builder
ENV OS=rhel
ENV OS_VERSION=10
@ -145,7 +145,7 @@ RUN if [ "$SKIP_MINIFY" != "yes" ] && [ "$SKIP_MINIFY_HTML" != "yes" ]; then \
echo "Skipping HTML minification"; \
fi
FROM redhat/ubi10:10.1@sha256:9d3b5102e7ae4f82914a1791610b75acef134b93158be6005b6ae9218c163550
FROM redhat/ubi10:10.1@sha256:936bf25d1a9b2c0c00aa67ec55f8347273763b7c64317ba7404b4b87736b2af2
# Set default umask to prevent huge recursive chmod increasing the final image size
RUN umask 027

View file

@ -1,4 +1,4 @@
FROM redhat/ubi8:8.10@sha256:cd1299741e13d89764de25b266c2080b355ba33294944fb54663d9bffa3a47d4 AS builder
FROM redhat/ubi8:8.10@sha256:1551c9a922dbb31c5688380fd955ef57f0f00b395bacb36856bc386eba82897b AS builder
ENV OS=rhel
ENV NGINX_VERSION=1.30.1
@ -142,7 +142,7 @@ RUN if [ "$SKIP_MINIFY" != "yes" ] && [ "$SKIP_MINIFY_HTML" != "yes" ]; then \
echo "Skipping HTML minification"; \
fi
FROM redhat/ubi8:8.10@sha256:cd1299741e13d89764de25b266c2080b355ba33294944fb54663d9bffa3a47d4
FROM redhat/ubi8:8.10@sha256:1551c9a922dbb31c5688380fd955ef57f0f00b395bacb36856bc386eba82897b
# Set default umask to prevent huge recursive chmod increasing the final image size
RUN umask 027

View file

@ -1,4 +1,4 @@
FROM redhat/ubi9:9.7@sha256:edabf9436bb372addcca3537aa76111c7a1aba970f5e3b02e2e03bc72943612d AS builder
FROM redhat/ubi9:9.7@sha256:8ca59004c1c505bdabadd5202bd3363986f5bf873fcfb36f60561d7362fe52a7 AS builder
ENV OS=rhel
ENV NGINX_VERSION=1.30.1
@ -143,7 +143,7 @@ RUN if [ "$SKIP_MINIFY" != "yes" ] && [ "$SKIP_MINIFY_HTML" != "yes" ]; then \
echo "Skipping HTML minification"; \
fi
FROM redhat/ubi9:9.7@sha256:edabf9436bb372addcca3537aa76111c7a1aba970f5e3b02e2e03bc72943612d
FROM redhat/ubi9:9.7@sha256:8ca59004c1c505bdabadd5202bd3363986f5bf873fcfb36f60561d7362fe52a7
# Set default umask to prevent huge recursive chmod increasing the final image size
RUN umask 027

View file

@ -1,4 +1,4 @@
FROM ubuntu:jammy@sha256:962f6cadeae0ea6284001009daa4cc9a8c37e75d1f5191cf0eb83fe565b63dd7 AS builder
FROM ubuntu:jammy@sha256:4f838adc7181d9039ac795a7d0aba05a9bd9ecd480d294483169c5def983b64d AS builder
# Install Nginx and dependencies
RUN apt update && \
@ -135,7 +135,7 @@ RUN if [ "$SKIP_MINIFY" != "yes" ] && [ "$SKIP_MINIFY_HTML" != "yes" ]; then \
echo "Skipping HTML minification"; \
fi
FROM ubuntu:jammy@sha256:962f6cadeae0ea6284001009daa4cc9a8c37e75d1f5191cf0eb83fe565b63dd7
FROM ubuntu:jammy@sha256:4f838adc7181d9039ac795a7d0aba05a9bd9ecd480d294483169c5def983b64d
# Set default umask to prevent huge recursive chmod increasing the final image size
RUN umask 027

View file

@ -52,15 +52,12 @@ FROM python:3.13-alpine@sha256:420cd0bf0f3998275875e02ecd5808168cf0843cbb4d3c536
RUN umask 027
# Install runtime dependencies and add scheduler user
RUN apk add --no-cache bash unzip curl libgcc libstdc++ libpq openssl libmagic mariadb-connector-c mariadb-client sqlite postgresql-client tzdata sed grep && \
RUN apk add --no-cache bash unzip curl libgcc libstdc++ libpq openssl libmagic mariadb-connector-c mariadb-client postgresql-client sqlite tzdata sed grep && \
addgroup -g 101 scheduler && \
adduser -h /usr/share/bunkerweb/scheduler -g scheduler -s /sbin/nologin -G scheduler -D -H -u 101 --disabled-password scheduler
# Fix CVEs
RUN apk add --no-cache "nghttp2-libs>=1.68.1" # CVE-2026-27135
RUN apk add --no-cache "xz-libs>=5.8.3-r0" # CVE-2026-34743
RUN apk add --no-cache "postgresql18-client>=18.4-r0"
RUN apk add --no-cache "curl>=8.19.0-r0" # CVE-2026-34744
# Copy dependencies
COPY --from=builder --chown=0:101 --chmod=550 /usr/share/bunkerweb /usr/share/bunkerweb

View file

@ -1,19 +1,19 @@
certbot==5.5.0
certbot==5.6.0
# Official certbot plugins
certbot-dns-cloudflare==5.5.0
certbot-dns-digitalocean==5.5.0
certbot-dns-dnsimple==5.5.0
certbot-dns-dnsmadeeasy==5.5.0
certbot-dns-gehirn==5.5.0
certbot-dns-google==5.5.0
certbot-dns-linode==5.5.0
certbot-dns-luadns==5.5.0
certbot-dns-nsone==5.5.0
certbot-dns-ovh==5.5.0
certbot-dns-rfc2136==5.5.0
certbot-dns-route53==5.5.0
certbot-dns-sakuracloud==5.5.0
certbot-dns-cloudflare==5.6.0
certbot-dns-digitalocean==5.6.0
certbot-dns-dnsimple==5.6.0
certbot-dns-dnsmadeeasy==5.6.0
certbot-dns-gehirn==5.6.0
certbot-dns-google==5.6.0
certbot-dns-linode==5.6.0
certbot-dns-luadns==5.6.0
certbot-dns-nsone==5.6.0
certbot-dns-ovh==5.6.0
certbot-dns-rfc2136==5.6.0
certbot-dns-route53==5.6.0
certbot-dns-sakuracloud==5.6.0
# Third-party certbot plugins
certbot-dns-bunny==3.0.0
@ -39,7 +39,7 @@ importlib-metadata==9.0.0
maxminddb==3.1.1
pydantic==2.13.4
python-magic==0.4.27
requests==2.33.1
requests==2.34.2
schedule==1.2.2
setuptools<81

View file

@ -4,9 +4,9 @@
#
# pip-compile --allow-unsafe --generate-hashes --strip-extras requirements.in
#
acme==5.5.0 \
--hash=sha256:0c237fe013a5406e9ea8b8bb04d6b753a0ed30005df1315175cb99d9c8f2248d \
--hash=sha256:4a7f653952300053765c92359575992bc644f6253f4c95ff197681b2830d971e
acme==5.6.0 \
--hash=sha256:23f706ef1c437fc743b2f90704b97f263a56d83198b3af1c25c7dd42c4b463e4 \
--hash=sha256:fbf7ee8880485f2339942a2eff9a87deb79b74a8dcac4a572c08e7e640f046cd
# via
# certbot
# certbot-dns-bunny
@ -34,27 +34,29 @@ annotated-types==0.7.0 \
--hash=sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53 \
--hash=sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89
# via pydantic
attrs==26.1.0 \
--hash=sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309 \
--hash=sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32
# via jsonlines
anyio==4.13.0 \
--hash=sha256:08b310f9e24a9594186fd75b4f73f4a4152069e3853f1ed8bfbf58369f4ad708 \
--hash=sha256:334b70e641fd2221c1505b3890c69882fe4a2df910cba14d97019b90b24439dc
# via
# cloudflare
# httpx
beautifulsoup4==4.14.3 \
--hash=sha256:0918bfe44902e6ad8d57732ba310582e98da931428d231a5ecb9e7c703a735bb \
--hash=sha256:6292b1c5186d356bba669ef9f7f051757099565ad9ada5dd630bd9de5fa7fb86
# via dns-lexicon
boto3==1.43.6 \
--hash=sha256:179601ec2992726a718053bf41e43c223ceba397d31ceab11f64d9c910d9fc3a \
--hash=sha256:e6315effaf12b890b99956e6f8e2c3000a3f64e4ee91943cec3895ce9a836afb
boto3==1.43.10 \
--hash=sha256:27342e5d5f6170fcc8d1e21cdd939af2448d58ac56b08d494250eaad998e30c7 \
--hash=sha256:83918184d95967e4c6e9ed1e9a2f58250b291e6ea2cb847ab0825d52596b39e5
# via certbot-dns-route53
botocore==1.43.6 \
--hash=sha256:b1e395b347356860398da42e61c808cf1e34b6fa7180cf2b9d87d986e1a06ba0 \
--hash=sha256:b6d1fdbc6f65a5fe0b7e947823aa37535d3f39f3ba4d21110fab1f55bbbcc04b
botocore==1.43.10 \
--hash=sha256:2f4af585b41dbccdfc9f49677d7bd72d713a12ef89a1dc9c8538a927649498bf \
--hash=sha256:8a0176d8c2f8bebe95d4f923a824a1ace04b02f360e220681c388e097f32c3b6
# via
# boto3
# s3transfer
certbot==5.5.0 \
--hash=sha256:921acc125fdaf3efa91b057cf5d6fcbb44d9bd511de8f9febd1260847cd40ae0 \
--hash=sha256:c72c813c4c8646a9658bc7a9530c757c76067503fa2f5d7eb12027e8bbf798d7
certbot==5.6.0 \
--hash=sha256:81ea876500ba60022a98a3e92fe4230088c7792b9d375357bb23c58741d2b0da \
--hash=sha256:89052854e28cd2fcac72a8857aad6dfc6b02ba992f4b8f255062fe29c8aed3ee
# via
# -r requirements.in
# certbot-dns-bunny
@ -90,9 +92,9 @@ certbot-dns-bunny==3.0.0 \
--hash=sha256:507fe45c3aa399c93c30fd68b06ba6e5646bb56e1d454a7f1ffac8c8677e5a21 \
--hash=sha256:e58e450747e79fd9dad6cdf21d3685b23e7e3d2fea65c16aca3a4dfd8cd31397
# via -r requirements.in
certbot-dns-cloudflare==5.5.0 \
--hash=sha256:71200a7761c0663f5072d6b26e6aa0f336fb9e431ad4bfa7a91cd850c8a7ca7f \
--hash=sha256:ff3b2d75055b1f31bbedd8801ed654e1da8dc408bdcb158986972eada9312afc
certbot-dns-cloudflare==5.6.0 \
--hash=sha256:6b8a586286a8c30e29471c4d737987c4fd5b3f41dd416c7954451e5572b2b5ab \
--hash=sha256:84021fa3f8acddf20f059ff0d9a2134722348401f12a0cbd29055f2c322d4d89
# via -r requirements.in
certbot-dns-cloudns==0.7.0 \
--hash=sha256:41f27d345c3e4e7d211f2b376d23e50e8f9f54e592ba3832d769a6f7a00642cc \
@ -102,17 +104,17 @@ certbot-dns-desec==1.3.2 \
--hash=sha256:3b7aed97b808383874da4f8c3668d4142002c870d8e26cda3f7feb2a319a0964 \
--hash=sha256:7dec89001609abbc9fe9bf67b9ccb893c6de9fe061c3530fa176b4cc00ac52bb
# via -r requirements.in
certbot-dns-digitalocean==5.5.0 \
--hash=sha256:a22ecfea50250934e3131cded83bcb3197ab5296a238cad37c9653ed324c88ca \
--hash=sha256:e9f97862d245ebedc2cde018020385ac25b34f351e4a54a274441d47dc47e6ab
certbot-dns-digitalocean==5.6.0 \
--hash=sha256:44733015c0879a3750ae55d337db942f70192a9f19d02cd9412d4e4b87cc7b7e \
--hash=sha256:7d1cc478e8e8851ff17c13b2697e0eb9420ca9c41929415d2b6e084aed82abca
# via -r requirements.in
certbot-dns-dnsimple==5.5.0 \
--hash=sha256:aef1c5087b3b84db7cd930bd1e3ddea2b0eb12b198c45aab149e3914b9eb602d \
--hash=sha256:d26a5663921a0c4d31b5ce069d1d6e79765e53feebc6930d66d666c45d23b58d
certbot-dns-dnsimple==5.6.0 \
--hash=sha256:ab1fe1ca3aa69e58fafd4cb942966a14230b0984d08c4502f3491dd9721cdd41 \
--hash=sha256:c764ed30179b2d43d9dfe2ff0b09a76335b8dfe3714ff52990871e5e454f913d
# via -r requirements.in
certbot-dns-dnsmadeeasy==5.5.0 \
--hash=sha256:9308674aa7047fffebaba4c021c18084767c2f3c4dd6fc9f86d00c34bd0d5a23 \
--hash=sha256:c5a61a7764aaa43fc2177f910f596aa077051b51f5267d38185f5e1a11cca613
certbot-dns-dnsmadeeasy==5.6.0 \
--hash=sha256:200df318303f4231e6324ec5057c7d30e8e4b1692c619f80f810fffb781ebf26 \
--hash=sha256:3225bbd7660788e1fdd44197443bff104e9eeec3a68d3cdec4db664b83d0b5ae
# via -r requirements.in
certbot-dns-domainoffensive==2.0.0 \
--hash=sha256:bfe7cb33eee6bc48e62437c811d0605cf974f723e211ac27fc396615ff5a2a05 \
@ -132,17 +134,17 @@ certbot-dns-dynu==0.0.6.post2502111739272536 \
certbot-dns-gandi @ https://github.com/TheophileDiot/certbot-plugin-gandi/archive/da4655bc6d39941b44de2a7c049163a7e34a5a39.zip \
--hash=sha256:b875034494ec49f305dba96212c202973def92618936636db3107e498a2abec4
# via -r requirements.in
certbot-dns-gehirn==5.5.0 \
--hash=sha256:2f93ca18ef926c19d7b86a470885130efa29b79f572af93027d7ec8dc1badff0 \
--hash=sha256:86f2c70d8e0834130d8151dbb30c24d9148c25c74f4c4ac2b81bb6ef73c99a6e
certbot-dns-gehirn==5.6.0 \
--hash=sha256:9e3827d844501a43d61eea3f9ff58e389d2ad91fb93f0a2e593bafc5bd988624 \
--hash=sha256:d438e074189b94f3148f5e1ff77a620c5317b69b591df569e1c7da9c3b52aa90
# via -r requirements.in
certbot-dns-godaddy==2.8.0 \
--hash=sha256:9ed10c9542d1c9610d0b47fa95c4e01569fcc87d6d5a277f3e7a42ce59b8c3c4 \
--hash=sha256:cc80af1781de3996aec4b11d2a42b0d7be2d38926a6c815ca4af1082cb4dafcf
# via -r requirements.in
certbot-dns-google==5.5.0 \
--hash=sha256:062db3c135bb956dd5a00705c2144ec0a35bc6a48104a3ae16ba79fabcfdfdcb \
--hash=sha256:ee6cd586e83a95ed582b3ff815fc9a7122f8de19d7e8db5628a1dcc3a5a51636
certbot-dns-google==5.6.0 \
--hash=sha256:0edb1fc6faf575f962f1f9bd2f358b66ef1578c8b7c11ca2ae0e0c7f9f9296dd \
--hash=sha256:4387cbe0038c05676f89de1b5ec402fcd18f17e35a973c2ccf4531bebfcc848f
# via -r requirements.in
certbot-dns-hetzner==4.0.0 \
--hash=sha256:1dd5d43467bb624996d36a416ceeffb4068be7b315a774a6e7fc2b562140743f \
@ -156,41 +158,41 @@ certbot-dns-ionos==2024.11.9 \
--hash=sha256:333be82806ae28a02c979baa8eb0bbc4862ad26549f60685468fadbf1fe3609e \
--hash=sha256:619aa7965272aef93d080094e0b7b79da0598d89567511cb683d44db6fa8c803
# via -r requirements.in
certbot-dns-linode==5.5.0 \
--hash=sha256:13cddc99f2f43ed8a2a20012b58a26802d9cdd2bad4342d86f599e16c52e8b1e \
--hash=sha256:71ccbd802a34602dcd937525a412cc2b7deb86dc2450dbb64c9e2b0e2702cee3
certbot-dns-linode==5.6.0 \
--hash=sha256:7361ce766647944cbd06475e7bfeb37e246cbff80d62a99d5d0ab60c0f082100 \
--hash=sha256:84ae0d0489b45b26ee559df4ce36c7dc7d30f0d4ecd06e237186350fec7756ab
# via -r requirements.in
certbot-dns-luadns==5.5.0 \
--hash=sha256:4fa1bfb179ee2077836da5d2c165ad970074383df359ce77535bdeea14a7adf3 \
--hash=sha256:90975f33c6a9a224d2d60497866c17a18e41aa68dc443f47144c79203f6d9ba6
certbot-dns-luadns==5.6.0 \
--hash=sha256:04420a936ce40f1315e198e8433c23dbae4e13653b71f7ced3d0d353d6bcffd4 \
--hash=sha256:626c985228d3001fa2aed813a279d13c147bcb19c0f465fb75be8f457df29294
# via -r requirements.in
certbot-dns-njalla==2.0.2 \
--hash=sha256:668f91f3027edd4c4cbca99095fd5ec66d4ccefcb4b9366367873e25e624e1bd \
--hash=sha256:b771c6e55b6ecdaadd7a5dd88d3798aa39290414a8d2f916c89b8cb52b29eea8
# via -r requirements.in
certbot-dns-nsone==5.5.0 \
--hash=sha256:eefc1c6893ffbd0a3f15b3f830abd89d25de1c1ae0928d435a684dd955ae75e3 \
--hash=sha256:ef8eb054a28a572898fd67a4105ff1c2996ff1057aa9fff0528dc6a51341ce01
certbot-dns-nsone==5.6.0 \
--hash=sha256:1b94c706a98252fd80add6a7a5766915abb1aec87f7f7fba2026ae4c56cbad1d \
--hash=sha256:7362fa1ca2c9fb9d02771d5306f524b678861153a9cfb403da403329d4b93631
# via -r requirements.in
certbot-dns-ovh==5.5.0 \
--hash=sha256:eec4e31d18c0fcb0134973bf3cdc3f294c634a48264efd6e96162e1ddcf86ecf \
--hash=sha256:f0b5e2ff3070dd9057e72305e991b13185ac6258a52480beba26eb307dbfa847
certbot-dns-ovh==5.6.0 \
--hash=sha256:47993513bbd27eab20336565d5437e0a248e07d5107cf010f8e39767e3ec798c \
--hash=sha256:a42636fa00fcf7f18fbab2bec063b004ee5100d4d813c9c421a419a2d3f8b1a2
# via -r requirements.in
certbot-dns-pdns==0.1.1 \
--hash=sha256:8e0bf82245323d33ca1c889c9facc24349c5f3ffc951136fe8bf88e1c82060fe \
--hash=sha256:d059d1c1cc21eab259a24ee69c1d9d8fb077fd90f58cf8de904b0f5bd576986f
# via -r requirements.in
certbot-dns-rfc2136==5.5.0 \
--hash=sha256:7fe27154013e135b6186e2f1dedd48a0d466b0fa3ac62803560a3edfab6b61b5 \
--hash=sha256:ef26302b9fb0496bbb60ec820b7d1f87e887507842c7ee3632af9af4ad6d22df
certbot-dns-rfc2136==5.6.0 \
--hash=sha256:9e98048439a1db0f0e7f891d44f546f1bdd3bd0159dc8ba1452e4d1e3d70ae9b \
--hash=sha256:a879536de89e88fc3ea63b4d8cc8a6b5faa08d39e77e0da0c8936efb9bf43990
# via -r requirements.in
certbot-dns-route53==5.5.0 \
--hash=sha256:26bd1c82e3317351ccb0faa13f56eba55e851dcc69f25689d92bad54266de773 \
--hash=sha256:8ab904fc2fb950e03372533ab8384625ac6d2aab7e6958f795811f7029d50caa
certbot-dns-route53==5.6.0 \
--hash=sha256:54aeeff8fa26878264f1a898332db32b422d694648fa2a25d2b50ecd61038071 \
--hash=sha256:d1cbf22eda3928986316f9cf72f5940c18c37459e34600bddf0f2cf11848b80f
# via -r requirements.in
certbot-dns-sakuracloud==5.5.0 \
--hash=sha256:3179a1ad13928667527dc65251d37fac4b48bc1e21cf9b9d61c8c8082f70d423 \
--hash=sha256:62385beb78e3c3d9c3f4cfbc5ac753803fe0a1422c02a01b09b708c133c74a47
certbot-dns-sakuracloud==5.6.0 \
--hash=sha256:410321a91b3e73c859dab4f0d9307488c19a578019d297367a3f4bcc70651f34 \
--hash=sha256:bad77a1606aeba79165a6b3bcbb8b470e032a559ab9e6441bdece411f659657f
# via -r requirements.in
certbot-dns-scaleway==0.0.7 \
--hash=sha256:999dda5b8689277facb77e1757b8a6b207baeecc0ded0c27aea2c51331affc92 \
@ -204,6 +206,8 @@ certifi==2026.4.22 \
--hash=sha256:8d455352a37b71bf76a79caa83a3d6c25afee4a385d632127b6afb3963f1c580
# via
# domeneshop
# httpcore
# httpx
# requests
cffi==2.0.0 \
--hash=sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb \
@ -424,8 +428,9 @@ charset-normalizer==3.4.7 \
--hash=sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79 \
--hash=sha256:fea24543955a6a729c45a73fe90e08c743f0b3334bbf3201e6c4bc1b0c7fa464
# via requests
cloudflare==2.19.4 \
--hash=sha256:3b6000a01a237c23bccfdf6d20256ea5111ec74a826ae9e74f9f0e5bb5b2383f
cloudflare==5.1.0 \
--hash=sha256:c9ad846ef889aa5476ce15cd509eacc294ffac3ac834cdf924d4582d5638c759 \
--hash=sha256:ed06f7544e3bb2dac43e2029f91170d2e7c427ac33bb3eb3e464965f46a852a6
# via certbot-dns-cloudflare
cloudns-api==0.9.3 \
--hash=sha256:0be157365c997d8a4162065867f07702398882cd3481bc7936637d8a807eb58f \
@ -501,7 +506,9 @@ cryptography==48.0.0 \
distro==1.9.0 \
--hash=sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed \
--hash=sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2
# via certbot
# via
# certbot
# cloudflare
dns-lexicon==3.25.2 \
--hash=sha256:0592a30d8d721226668b34b736d7af1332d5c5fccf138626964d644c2b17b9be \
--hash=sha256:a377bf2b4017ee46de8d5515cf2c204bfda74b49032dc5420bd3100993f28deb
@ -544,9 +551,9 @@ google-api-python-client==2.196.0 \
--hash=sha256:2591e9b47dcb17e4e62a09370aaee3bcf323af8f28ccecdabcd0a42a23ca4db5 \
--hash=sha256:9f335d38f6caaa2747bcf64335ed1a9a19047d53e86538eda6a1b17d37f1743d
# via certbot-dns-google
google-auth==2.52.0 \
--hash=sha256:01f30e1a9e3638698d89464f5e603ce29d18e1c0e63ec31ac570aba4e164aaf5 \
--hash=sha256:aee92803ba0ff93a70a3b8a35c7b4797837751cd6380b63ff38372b98f3ed627
google-auth==2.53.0 \
--hash=sha256:6e7449917c599b35126a99ec268ec6880301f2fea41dce198fe8fd83ff642b68 \
--hash=sha256:e7e6aa16f6bee7b2b264830fd04f08087a1d5a836df516251a5d15327b246c9c
# via
# certbot-dns-google
# google-api-core
@ -560,21 +567,35 @@ googleapis-common-protos==1.75.0 \
--hash=sha256:53a062ff3c32552fbd62c11fe23768b78e4ddf0494d5e5fd97d3f4689c75fbbd \
--hash=sha256:961ed60399c457ceb0ee8f285a84c870aabc9c6a832b9d37bb281b5bebde43ed
# via google-api-core
h11==0.16.0 \
--hash=sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1 \
--hash=sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86
# via httpcore
hcloud==2.20.0 \
--hash=sha256:27052effab1a25bb3cbfc8e2d2472e0e8503b20aecab5bbad5c4b0e8697696d5 \
--hash=sha256:7373c807c3dbbe5e35e25945e7c1a54d66b6b126d700cc2b8accf0c160f035a6
# via certbot-dns-hetzner
httpcore==1.0.9 \
--hash=sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55 \
--hash=sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8
# via httpx
httplib2==0.31.2 \
--hash=sha256:385e0869d7397484f4eab426197a4c020b606edd43372492337c0b4010ae5d24 \
--hash=sha256:dbf0c2fa3862acf3c55c078ea9c0bc4481d7dc5117cae71be9514912cf9f8349
# via
# google-api-python-client
# google-auth-httplib2
idna==3.14 \
--hash=sha256:466d810d7a2cc1022bea9b037c39728d51ae7dad40d480fc9b7d7ecf98ba8ee3 \
--hash=sha256:e677eaf072e290f7b725f9acf0b3a2bd55f9fd6f7c70abe5f0e34823d0accf69
httpx==0.28.1 \
--hash=sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc \
--hash=sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad
# via cloudflare
idna==3.15 \
--hash=sha256:048adeaf8c2d788c40fee287673ccaa74c24ffd8dcf09ffa555a2fbb59f10ac8 \
--hash=sha256:ca962446ea538f7092a95e057da437618e886f4d349216d2b1e294abfdb65fdc
# via
# anyio
# certbot-dns-infomaniak
# httpx
# requests
# tldextract
importlib-metadata==9.0.0 \
@ -593,10 +614,6 @@ josepy==2.2.0 \
# via
# acme
# certbot
jsonlines==4.0.0 \
--hash=sha256:0c6d2c09117550c089995247f605ae4cf77dd1533041d366351f6f298822ea74 \
--hash=sha256:185b334ff2ca5a91362993f42e83588a360cf95ce4b71a73548502bda52a7c55
# via cloudflare
jsonpickle==4.1.1 \
--hash=sha256:bb141da6057898aa2438ff268362b126826c812a1721e31cf08a6e142910dc91 \
--hash=sha256:f86e18f13e2b96c1c1eede0b7b90095bbb61d99fedc14813c44dc2f361dbbae1
@ -724,7 +741,9 @@ pycparser==3.0 \
pydantic==2.13.4 \
--hash=sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba \
--hash=sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6
# via -r requirements.in
# via
# -r requirements.in
# cloudflare
pydantic-core==2.46.4 \
--hash=sha256:00c603d540afdd6b80eb39f078f33ebd46211f02f33e34a32d9f053bba711de0 \
--hash=sha256:0186750b482eefa11d7f435892b09c5c606193ef3375bcf94aa00ae6bfb66262 \
@ -957,12 +976,10 @@ pyyaml==6.0.3 \
--hash=sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6 \
--hash=sha256:fa160448684b4e94d80416c0fa4aac48967a969efe22931448d853ada8baf926 \
--hash=sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0
# via
# cloudflare
# dns-lexicon
requests==2.33.1 \
--hash=sha256:18817f8c57c6263968bc123d237e3b8b08ac046f5456bd1e307ee8f4250d3517 \
--hash=sha256:4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a
# via dns-lexicon
requests==2.34.2 \
--hash=sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0 \
--hash=sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed
# via
# -r requirements.in
# acme
@ -976,7 +993,6 @@ requests==2.33.1 \
# certbot-dns-infomaniak
# certbot-dns-ionos
# certbot-dns-scaleway
# cloudflare
# cloudns-api
# dns-lexicon
# google-api-core
@ -1023,6 +1039,10 @@ six==1.17.0 \
--hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \
--hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81
# via python-dateutil
sniffio==1.3.1 \
--hash=sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 \
--hash=sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc
# via cloudflare
soupsieve==2.8.3 \
--hash=sha256:3267f1eeea4251fb42728b6dfb746edc9acaffc4a45b27e19450b676586e8349 \
--hash=sha256:ed64f2ba4eebeab06cc4962affce381647455978ffc1e36bb79a545b91f45a95
@ -1037,7 +1057,9 @@ typing-extensions==4.15.0 \
--hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \
--hash=sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548
# via
# anyio
# beautifulsoup4
# cloudflare
# pydantic
# pydantic-core
# pyopenssl
@ -1057,9 +1079,9 @@ urllib3==2.7.0 \
# botocore
# domeneshop
# requests
zipp==3.23.1 \
--hash=sha256:0b3596c50a5c700c9cb40ba8d86d9f2cc4807e9bedb06bcdf7fac85633e444dc \
--hash=sha256:32120e378d32cd9714ad503c1d024619063ec28aad2248dc6672ad13edfa5110
zipp==4.1.0 \
--hash=sha256:25ad4e16390cd314347dd8f1de67a2ac538ae658ed4ab9db16029c07c188e97f \
--hash=sha256:4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602
# via importlib-metadata
zope-interface==8.4 \
--hash=sha256:049ba3c7b38cc400ae08e011617635706e0f442e1d075db1b015246fcbf6091e \

View file

@ -83,7 +83,7 @@ RUN apk add --no-cache bash unzip mariadb-connector-c mariadb-client sqlite post
adduser -h /usr/share/bunkerweb/ui -g ui -s /sbin/nologin -G ui -D -H -u 101 --disabled-password ui
# Fix CVEs
RUN apk add --no-cache "xz-libs>=5.8.3-r0" "postgresql18-client>=18.4-r0"
RUN apk add --no-cache "xz-libs>=5.8.3-r0" # CVE-2026-34743
# Copy dependencies
COPY --from=builder --chown=0:101 --chmod=550 /usr/share/bunkerweb /usr/share/bunkerweb

View file

@ -725,10 +725,9 @@ def configs_export():
selection_set = set(selection) if selection else None
for db_config in db_configs:
if db_config.get("template"):
continue
service_id = db_config.get("service_id") or None
config_type = db_config["type"]
# Normalize: template-provided configs carry hyphenated types (see get_custom_configs), real rows use the underscore enum form.
config_type = db_config["type"].strip().replace("-", "_").lower()
config_name = db_config["name"]
if selection_set is not None and (service_id, config_type, config_name) not in selection_set:
continue

View file

@ -51,13 +51,7 @@ def parse_services_export(content: str) -> Tuple[Dict[str, Dict[str, str]], List
@services.route("/services", methods=["GET"])
@login_required
def services_page():
services_with_configs = sorted(
{
config["service_id"]
for config in DB.get_custom_configs(with_drafts=True, with_data=False)
if config.get("service_id") and not config.get("template") and is_editable_method(config.get("method"))
}
)
services_with_configs = sorted({config["service_id"] for config in DB.get_custom_configs(with_drafts=True, with_data=False) if config.get("service_id")})
return render_template(
"services.html",
services=DB.get_services(with_drafts=True),
@ -665,8 +659,6 @@ def services_service_export():
db_configs = DB.get_custom_configs(with_drafts=True, with_data=True)
configs_payload: List[Dict] = []
for db_config_row in db_configs:
if db_config_row.get("template"):
continue
service_id = db_config_row.get("service_id") or None
if service_id not in selected_services:
continue
@ -681,7 +673,7 @@ def services_service_export():
configs_payload.append(
{
"service_id": service_id,
"type": db_config_row["type"],
"type": db_config_row["type"].strip().replace("-", "_").lower(),
"name": db_config_row["name"],
"data": data_str,
"is_draft": bool(db_config_row.get("is_draft", False)),

View file

@ -1,6 +1,6 @@
bcrypt<5.0.0
biscuit-python==0.4.0
certbot==5.5.0
certbot==5.6.0
defusedcsv==3.0.0
Flask==3.1.3
Flask-Login==0.6.3

View file

@ -4,9 +4,9 @@
#
# pip-compile --allow-unsafe --generate-hashes --strip-extras requirements.in
#
acme==5.5.0 \
--hash=sha256:0c237fe013a5406e9ea8b8bb04d6b753a0ed30005df1315175cb99d9c8f2248d \
--hash=sha256:4a7f653952300053765c92359575992bc644f6253f4c95ff197681b2830d971e
acme==5.6.0 \
--hash=sha256:23f706ef1c437fc743b2f90704b97f263a56d83198b3af1c25c7dd42c4b463e4 \
--hash=sha256:fbf7ee8880485f2339942a2eff9a87deb79b74a8dcac4a572c08e7e640f046cd
# via certbot
bcrypt==4.3.0 \
--hash=sha256:0042b2e342e9ae3d2ed22727c1262f76cc4f345683b5c1715f0250cf4277294f \
@ -186,9 +186,9 @@ cachelib==0.14.0 \
--hash=sha256:4671000b032baa8fac47ad19850f4f522785cee764b4e04c5cfe8955a18d67de \
--hash=sha256:73fedcadd0ba818fb2bb9f3c7cd5fcc2a71e86286f1842f55f28d500faee17f1
# via flask-session
certbot==5.5.0 \
--hash=sha256:921acc125fdaf3efa91b057cf5d6fcbb44d9bd511de8f9febd1260847cd40ae0 \
--hash=sha256:c72c813c4c8646a9658bc7a9530c757c76067503fa2f5d7eb12027e8bbf798d7
certbot==5.6.0 \
--hash=sha256:81ea876500ba60022a98a3e92fe4230088c7792b9d375357bb23c58741d2b0da \
--hash=sha256:89052854e28cd2fcac72a8857aad6dfc6b02ba992f4b8f255062fe29c8aed3ee
# via -r requirements.in
certifi==2026.4.22 \
--hash=sha256:3cb2210c8f88ba2318d29b0388d1023c8492ff72ecdde4ebdaddbb13a31b1c4a \
@ -411,9 +411,9 @@ charset-normalizer==3.4.7 \
--hash=sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79 \
--hash=sha256:fea24543955a6a729c45a73fe90e08c743f0b3334bbf3201e6c4bc1b0c7fa464
# via requests
click==8.3.3 \
--hash=sha256:398329ad4837b2ff7cbe1dd166a4c0f8900c3ca3a218de04466f38f6497f18a2 \
--hash=sha256:a2bf429bb3033c89fa4936ffb35d5cb471e3719e1f3c8a7c3fff0b8314305613
click==8.4.0 \
--hash=sha256:40c50b7c6c6adac2823d411041ec84f3f103f1b280d5e9ce0d7f998995832f81 \
--hash=sha256:638f1338fe1235c8f4e008e4a8a254fb5c5fbdcbb40ece3c9142ebb78e792973
# via flask
configargparse==1.7.5 \
--hash=sha256:1e63fdffedf94da9cd435fc13a1cd24777e76879dd2343912c1f871d4ac8c592 \
@ -528,9 +528,9 @@ hyperframe==6.1.0 \
--hash=sha256:b03380493a519fce58ea5af42e4a42317bf9bd425596f7a0835ffce80f1a42e5 \
--hash=sha256:f630908a00854a7adeabd6382b43923a4c4cd4b821fcb527e6ab9e15382a3b08
# via h2
idna==3.14 \
--hash=sha256:466d810d7a2cc1022bea9b037c39728d51ae7dad40d480fc9b7d7ecf98ba8ee3 \
--hash=sha256:e677eaf072e290f7b725f9acf0b3a2bd55f9fd6f7c70abe5f0e34823d0accf69
idna==3.15 \
--hash=sha256:048adeaf8c2d788c40fee287673ccaa74c24ffd8dcf09ffa555a2fbb59f10ac8 \
--hash=sha256:ca962446ea538f7092a95e057da437618e886f4d349216d2b1e294abfdb65fdc
# via requests
itsdangerous==2.2.0 \
--hash=sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef \
@ -964,9 +964,9 @@ regex==2026.5.9 \
--hash=sha256:fd190e88a895a8901325fad284a3f74ea52b1da8525b76cc811fa9b1edf0ce2b \
--hash=sha256:ff8d372ac2acdc048d1c19916f27ee61bc5722728458ba6ca5052f2c72d51763
# via -r requirements.in
requests==2.33.1 \
--hash=sha256:18817f8c57c6263968bc123d237e3b8b08ac046f5456bd1e307ee8f4250d3517 \
--hash=sha256:4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a
requests==2.34.2 \
--hash=sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0 \
--hash=sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed
# via acme
six==1.17.0 \
--hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \