diff --git a/Dockerfile b/Dockerfile index 6f00cebacb..f27a028a28 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,15 +1,15 @@ # syntax=docker/dockerfile:1.27.0@sha256:bde3983e9c939224420ddaf6b784cc30e09b035a4dea01f581230c50809f372e -FROM alpine:3.24.1@sha256:28bd5fe8b56d1bd048e5babf5b10710ebe0bae67db86916198a6eec434943f8b AS nginx +FROM alpine:3.24.2@sha256:294b683cb724975bec92580e1e685676bd4b50bda910ddb8c51d4cabeaec77e6 AS nginx SHELL ["/bin/ash", "-eo", "pipefail", "-c"] ARG LUAJIT_INC=/usr/include/luajit-2.1 ARG LUAJIT_LIB=/usr/lib -ARG AWSLC_VER=a3d1e685552f05a9ad04a2946962c03e97bdecac # v5.8.0 +ARG AWSLC_VER=39b142ec346e514af5e49cbd6036e2ed3b893466 # v5.9.0 -ARG NGINX_VER=c82a590adc3a317dfb9b738d76cb2dd45e3cfcbe # release-1.31.5 +ARG NGINX_VER=45a318d05a0fd23f57ffe9579f7f0969c0fe402a # release-1.31.6 ARG DTR_VER=1.29.2 -ARG RCP_VER=1.31.4 +ARG RCP_VER=1.31.6 ARG ZNP_VER=1.30.0 ARG NB_VER=35ec7c13cf2baf758845f727dae220acf9fb3445 # master @@ -19,7 +19,7 @@ ARG NHUZFM_VER=658990e20a5f1cefbf760eb427741ce95b6eebc9 # main ARG NF_VER=047589e4dc0041517b8a47739fa960c430c4045e # v0.6.0 ARG HMNM_VER=0bf283ff92017acd616814b0e5153e0ccf93e2c9 # v0.40 ARG NDK_VER=bd44d16302273052d6005d7bdb55f74e23813de3 # v0.3.4 -ARG LNM_VER=84cc201565bc2ef12dcab6eb25e7ccaf44d56d42 # v0.10.32rc4 +ARG LNM_VER=58ece96055227399bbffa5e06cb5b54ebeeacef9 # v0.10.32rc5 ARG NJS_VER=1b648f8805596c95368f8fa428a5c38c5d279857 # 1.0.1 ARG NAL_VER=241200eac8e4acae74d353291bd27f79e5ca3dc4 # master @@ -73,7 +73,7 @@ RUN git-clone-commit.sh https://github.com/nginx/nginx "$NGINX_VER" /src/nginx & echo "0aa9c73e7515dbbd48ecc798f7894412c1a50e96e98aee25847e823059faf821 /src/nginx/4.patch" | sha256sum -c - && \ git apply /src/nginx/4.patch && \ wget -q https://raw.githubusercontent.com/openresty/openresty/master/patches/nginx/"$RCP_VER"/nginx-"$RCP_VER"-resolver_conf_parsing.patch -O /src/nginx/5.patch && \ - echo "bda9db7d2766b20c9490f1ccd6d2da72fee402ade219efb32fe341851dbdd7c8 /src/nginx/5.patch" | sha256sum -c - && \ + echo "354bb2c05a41357efe3ea9d28a2fc8ff2a5fe6482e0fdda61a237d6bb5a96d51 /src/nginx/5.patch" | sha256sum -c - && \ git apply /src/nginx/5.patch && \ wget -q https://raw.githubusercontent.com/zlib-ng/patches/master/nginx/"$ZNP_VER"-zlib-ng.patch -O /src/nginx/6.patch && \ echo "bcd0f2fb9723fc1f251f94cead8d5160e767f7d4a04365331396a72a9ba54c6b /src/nginx/6.patch" | sha256sum -c - && \ @@ -170,7 +170,7 @@ RUN find /usr/local/nginx/modules -name "*.so" -exec llvm-strip -s {} \; && \ /usr/local/nginx/sbin/nginx -V -FROM --platform="$BUILDPLATFORM" alpine:3.24.1@sha256:28bd5fe8b56d1bd048e5babf5b10710ebe0bae67db86916198a6eec434943f8b AS frontend +FROM --platform="$BUILDPLATFORM" alpine:3.24.2@sha256:294b683cb724975bec92580e1e685676bd4b50bda910ddb8c51d4cabeaec77e6 AS frontend SHELL ["/bin/ash", "-eo", "pipefail", "-c"] ARG NODE_ENV=production WORKDIR /app @@ -185,7 +185,7 @@ COPY frontend /app RUN pnpm vite build && \ find /app/dist -type f ! -name "*.jpg" ! -name "*.png" -print0 | xargs -r0 -P "$(nproc)" -n 1 brotli -q 11 -sf -FROM --platform=$BUILDPLATFORM alpine:3.24.1@sha256:28bd5fe8b56d1bd048e5babf5b10710ebe0bae67db86916198a6eec434943f8b AS backend +FROM --platform=$BUILDPLATFORM alpine:3.24.2@sha256:294b683cb724975bec92580e1e685676bd4b50bda910ddb8c51d4cabeaec77e6 AS backend SHELL ["/bin/ash", "-eo", "pipefail", "-c"] ARG NODE_ENV=production ARG TARGETARCH @@ -207,7 +207,7 @@ RUN apk upgrade --no-cache -a && \ COPY backend /app -FROM alpine:3.24.1@sha256:28bd5fe8b56d1bd048e5babf5b10710ebe0bae67db86916198a6eec434943f8b +FROM alpine:3.24.2@sha256:294b683cb724975bec92580e1e685676bd4b50bda910ddb8c51d4cabeaec77e6 SHELL ["/bin/ash", "-eo", "pipefail", "-c"] ENV NODE_ENV=production ARG LRC_VER=be42297c57dc2393cdbb09d4597d9d4840a7c769 # v0.1.35rc1 diff --git a/backend/internal/dead-host.js b/backend/internal/dead-host.js index a75be9118b..671a67a47a 100644 --- a/backend/internal/dead-host.js +++ b/backend/internal/dead-host.js @@ -22,6 +22,8 @@ const internalDeadHost = { if (createCertificate) { delete thisData.certificate_id; + } else if (Number(thisData.certificate_id) > 0) { + await internalCertificate.get(access, { id: thisData.certificate_id }); } access.can("dead_hosts:manage"); @@ -83,6 +85,8 @@ const internalDeadHost = { if (createCertificate) { delete thisData.certificate_id; + } else if (Number(thisData.certificate_id) > 0) { + await internalCertificate.get(access, { id: thisData.certificate_id }); } access.can("dead_hosts:manage"); diff --git a/backend/internal/nginx.js b/backend/internal/nginx.js index 3636c8acb4..0eb80e40c7 100644 --- a/backend/internal/nginx.js +++ b/backend/internal/nginx.js @@ -339,17 +339,8 @@ const internalNginx = { const originalLocations = [...host.locations]; host.locations = await internalNginx.renderLocations(host); - const providerEnvMap = { - anubis: "AUTH_REQUEST_ANUBIS_UPSTREAM", - tinyauth: "AUTH_REQUEST_TINYAUTH_UPSTREAM", - oauth2proxy: "AUTH_REQUEST_OAUTH2PROXY_UPSTREAM", - voidauth: "AUTH_REQUEST_VOIDAUTH_UPSTREAM", - authelia: "AUTH_REQUEST_AUTHELIA_UPSTREAM", - authentik: "AUTH_REQUEST_AUTHENTIK_UPSTREAM", - }; - - for (const [provider, envKey] of Object.entries(providerEnvMap)) { - let effectiveUpstream = process.env[envKey] || ""; + for (const provider of ["anubis", "tinyauth", "oauth2proxy", "voidauth", "authelia", "authentik"]) { + let effectiveUpstream = ""; if ( (host.npmplus_auth_request === provider || diff --git a/backend/internal/proxy-host-access-list.js b/backend/internal/proxy-host-access-list.js index 954c817a26..94d58b61c9 100644 --- a/backend/internal/proxy-host-access-list.js +++ b/backend/internal/proxy-host-access-list.js @@ -366,10 +366,11 @@ const internalProxyHostAccessList = { /** * Ensures the provided acls are valid (if custom, at least 1 acl must be specified) + * @param {Access} access * @param {*} proxyHost * @returns */ - validateAccessLists: async (proxyHost) => { + validateAccessLists: async (access, proxyHost) => { if (!proxyHost) { return; } @@ -399,12 +400,18 @@ const internalProxyHostAccessList = { } // make sure no ACLs that are being uploaded have been soft deleted if (aclIds.size > 0) { - const rows = await accessListModel + const query = accessListModel .query() .whereIn("id", [...aclIds]) .andWhere("is_deleted", 0) .select("id"); + if (access.visibility !== "all") { + query.andWhere("owner_user_id", access.token.getUserId(1)); + } + + const rows = await query; + const validIds = new Set(rows.map((row) => row.id)); const invalidIds = [...aclIds].filter((id) => !validIds.has(id)); diff --git a/backend/internal/proxy-host.js b/backend/internal/proxy-host.js index fd4ef0147b..c5ded6e082 100644 --- a/backend/internal/proxy-host.js +++ b/backend/internal/proxy-host.js @@ -23,6 +23,8 @@ const internalProxyHost = { if (createCertificate) { delete thisData.certificate_id; + } else if (Number(thisData.certificate_id) > 0) { + await internalCertificate.get(access, { id: thisData.certificate_id }); } access.can("proxy_hosts:manage"); @@ -40,7 +42,7 @@ const internalProxyHost = { thisData.owner_user_id = access.token.getUserId(1); thisData = internalHost.cleanSslHstsData(createCertificate, thisData); thisData = internalProxyHostAccessList.cleanAccessListTypes(thisData); - await internalProxyHostAccessList.validateAccessLists(thisData); + await internalProxyHostAccessList.validateAccessLists(access, thisData); const createdRow = utils.omitRow(omissions())( await proxyHostModel.transaction(async (trx) => { @@ -101,6 +103,8 @@ const internalProxyHost = { if (createCertificate) { delete thisData.certificate_id; + } else if (Number(thisData.certificate_id) > 0) { + await internalCertificate.get(access, { id: thisData.certificate_id }); } access.can("proxy_hosts:manage"); @@ -141,7 +145,7 @@ const internalProxyHost = { thisData = { domain_names: existingRow.domain_names, ...thisData }; thisData = internalHost.cleanSslHstsData(createCertificate, thisData, existingRow); thisData = internalProxyHostAccessList.cleanAccessListTypes(thisData); - await internalProxyHostAccessList.validateAccessLists(thisData); + await internalProxyHostAccessList.validateAccessLists(access, thisData); await proxyHostModel.transaction(async (trx) => { const patchResult = await proxyHostModel.query(trx).where({ id: thisData.id }).patch(thisData); diff --git a/backend/internal/redirection-host.js b/backend/internal/redirection-host.js index f9768ceac5..e80f46bfc3 100644 --- a/backend/internal/redirection-host.js +++ b/backend/internal/redirection-host.js @@ -22,6 +22,8 @@ const internalRedirectionHost = { if (createCertificate) { delete thisData.certificate_id; + } else if (Number(thisData.certificate_id) > 0) { + await internalCertificate.get(access, { id: thisData.certificate_id }); } access.can("redirection_hosts:manage"); @@ -83,6 +85,8 @@ const internalRedirectionHost = { if (createCertificate) { delete thisData.certificate_id; + } else if (Number(thisData.certificate_id) > 0) { + await internalCertificate.get(access, { id: thisData.certificate_id }); } access.can("redirection_hosts:manage"); diff --git a/backend/internal/stream.js b/backend/internal/stream.js index 26676664fc..566446c9b7 100644 --- a/backend/internal/stream.js +++ b/backend/internal/stream.js @@ -22,6 +22,8 @@ const internalStream = { if (createCertificate) { delete thisData.certificate_id; + } else if (Number(thisData.certificate_id) > 0) { + await internalCertificate.get(access, { id: thisData.certificate_id }); } access.can("streams:manage"); @@ -72,6 +74,8 @@ const internalStream = { if (createCertificate) { delete thisData.certificate_id; + } else if (Number(thisData.certificate_id) > 0) { + await internalCertificate.get(access, { id: thisData.certificate_id }); } access.can("streams:manage"); diff --git a/backend/internal/user.js b/backend/internal/user.js index ce4226ca58..64bbd27b54 100644 --- a/backend/internal/user.js +++ b/backend/internal/user.js @@ -77,12 +77,12 @@ const internalUser = { await userPermissionModel.query().insert({ user_id: user.id, visibility: isAdmin ? "all" : "user", - proxy_hosts: "manage", - redirection_hosts: "manage", - dead_hosts: "manage", - streams: "manage", - access_lists: "manage", - certificates: "manage", + proxy_hosts: "hidden", + redirection_hosts: "hidden", + dead_hosts: "hidden", + streams: "hidden", + access_lists: "hidden", + certificates: "hidden", }); await userModel @@ -446,6 +446,17 @@ const internalUser = { const { id, ...permissionData } = data; const existing_auth = await userPermissionModel.query().where("user_id", user.id).first(); + const merged = { ...existing_auth, ...permissionData }; + if (merged.proxy_hosts !== "hidden" && merged.access_lists === "hidden") { + throw new errs.ValidationError("Access lists can not be hidden while proxy hosts are visible"); + } + if ( + merged.certificates === "hidden" && + ["proxy_hosts", "redirection_hosts", "dead_hosts", "streams"].some((type) => merged[type] !== "hidden") + ) { + throw new errs.ValidationError("Certificates can not be hidden while hosts are visible"); + } + if (existing_auth) { permissions = await userPermissionModel .query() diff --git a/backend/package.json b/backend/package.json index b0f0e51564..e33aa688f1 100644 --- a/backend/package.json +++ b/backend/package.json @@ -31,6 +31,6 @@ }, "devDependencies": { "@apidevtools/swagger-parser": "13.0.0", - "@biomejs/biome": "2.5.13" + "@biomejs/biome": "2.5.14" } } diff --git a/backend/pnpm-lock.yaml b/backend/pnpm-lock.yaml index 7ff869c1e3..148de8d6ef 100644 --- a/backend/pnpm-lock.yaml +++ b/backend/pnpm-lock.yaml @@ -76,8 +76,8 @@ importers: specifier: 13.0.0 version: 13.0.0(openapi-types@12.1.3) '@biomejs/biome': - specifier: 2.5.13 - version: 2.5.13 + specifier: 2.5.14 + version: 2.5.14 packages: @@ -106,59 +106,59 @@ packages: peerDependencies: openapi-types: '>=7' - '@biomejs/biome@2.5.13': - resolution: {integrity: sha512-+SEC/mFk1a+5mvUANZgbZTaiZXs1nj4iMhL/PHiqDT5TPUEPFIlliEtkKKZB4N862yylHC3UI+/Sj2I0HJEqhA==} + '@biomejs/biome@2.5.14': + resolution: {integrity: sha512-0FabLIjd4M/dm8VFI86RMaLLdgepzbdfiAL2R8cr7V81OYYrP1w7Z73KfAwPK5h9SrEBXTzNG2y+mBwPo9xRnw==} engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/cli-darwin-arm64@2.5.13': - resolution: {integrity: sha512-nYSuDJ6zgVqZUkAkJkvhXxsF2PYIrUk/g638K4voCXz7foI9f7b6C2/7+oAihsHQlivZNMUrm/y8ywlcHQtZOw==} + '@biomejs/cli-darwin-arm64@2.5.14': + resolution: {integrity: sha512-UnzaXO65L4tsZimFITFP2M121GyhDcWFrT3pL5ZJ5U4XcS/0L5VHYytVohdCf/gnDUFHgl2I9xnt5bV/J1kxHQ==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-x64@2.5.13': - resolution: {integrity: sha512-KVy1ceEDuJ3AzFxjT9kkxbVy+UANw1pjEMUS6lvKfxjJ+fmkRvc7sQn1Xo6ETgseEI7wUQoV03KSga3XfE8YRQ==} + '@biomejs/cli-darwin-x64@2.5.14': + resolution: {integrity: sha512-kiy8qA16K93J7uvFfWi4LgjqDpnRKyePAna6A0Y4jxyUga35SYpIZ2cNWlhy0lsfgqRenCpfymnJWEZ6mgpRgA==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-linux-arm64-musl@2.5.13': - resolution: {integrity: sha512-CH32xpep3dNS5EVJpAHlYchkBYznxyVZQrx0b6YYYlPL9u9ZeD2NtqiK/6s64+HFS2a7hGnryLlqqZAOh8ax5g==} + '@biomejs/cli-linux-arm64-musl@2.5.14': + resolution: {integrity: sha512-SJ9PrZkBnnH9dHJDnxk34vKs0GB2dbsioaft6/hPhWJ7AHpwYH83Isnhj0FSRpFkGgpVfJ1lds23ApB2czUDLQ==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] libc: [musl] - '@biomejs/cli-linux-arm64@2.5.13': - resolution: {integrity: sha512-VlNMtoxOqs0dUR6drxxHr18SNUvI7xxAuHZlH4s/dstYSf3g6RaqVgo8JRnhcOhKz9afWrvtJTboNG1JuYlIDQ==} + '@biomejs/cli-linux-arm64@2.5.14': + resolution: {integrity: sha512-vO/9BaU1n30CiFNLx49gMTMtbCAAqlo/EqFoG0BU3deQInTbJrmXSmTQ9e3FoDZIKQnvSLDVNL4lx1ci7y1T1Q==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] libc: [glibc] - '@biomejs/cli-linux-x64-musl@2.5.13': - resolution: {integrity: sha512-F3pmwl+VHoUuVJN/tbNLKeLt0SVK3EIyN1jXlMcNyQGYRQQTVqXF+GgkP0/CjGXFN87e/mv0sBfUnWqWza5PKQ==} + '@biomejs/cli-linux-x64-musl@2.5.14': + resolution: {integrity: sha512-2kI5PrMgW5dcEZYrstLPmUmCwkUwZY39rP4BN93Vxbwcs2O57LDQOktUZZYPvvspN5i0mhGr3TJtF5sU26NUWg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] libc: [musl] - '@biomejs/cli-linux-x64@2.5.13': - resolution: {integrity: sha512-Fi6gIxbUaJ3ZCIXeG3ggIBPF76O2DjDN67WrPX/ODRv54GeXPm2gbEPC96Yb0yrJoiH0Eax1JLx1Pi0XbsNFZQ==} + '@biomejs/cli-linux-x64@2.5.14': + resolution: {integrity: sha512-VHZRa7CCQBUWKxNwUvHJeuW03WFRgN5NWO//SDGOitc9QIeNyfA42V9zlKm+x82xFSG9Bzi5fi+hbhm9anO8yA==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] libc: [glibc] - '@biomejs/cli-win32-arm64@2.5.13': - resolution: {integrity: sha512-+WD13qshXrr0Icv4BfsAdzm8Fs3TL+nZ59zEQxsYNd8lcgZJ0A5+OrlwsL1PipVCmWeRpxgIPD6DAcEd7smkCQ==} + '@biomejs/cli-win32-arm64@2.5.14': + resolution: {integrity: sha512-pHgAFffmZtaYoxavEsWEYNvcA7NwOIjLyqw2HXyLbt16xYryX0L4fMV2u0G9ag6LNYPIoqWaWqzUcnc6rLGGXg==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-x64@2.5.13': - resolution: {integrity: sha512-VOofU/nW761XWzUeUNE8zzYNyPrxuMuNFMizL0qz7J75yeV8N7WFheUlk1/K6dOkaFpH9wJ+lDKlwjAbw0346w==} + '@biomejs/cli-win32-x64@2.5.14': + resolution: {integrity: sha512-oJWmBhoHsnhUKIke+0gXDX0mltJrWHA1UyHsrTlXwX0TL64ilVZAo+TYZm97baecV0esBdpzy3k96q+09JaZUQ==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] @@ -1053,39 +1053,39 @@ snapshots: call-me-maybe: 1.0.2 openapi-types: 12.1.3 - '@biomejs/biome@2.5.13': + '@biomejs/biome@2.5.14': optionalDependencies: - '@biomejs/cli-darwin-arm64': 2.5.13 - '@biomejs/cli-darwin-x64': 2.5.13 - '@biomejs/cli-linux-arm64': 2.5.13 - '@biomejs/cli-linux-arm64-musl': 2.5.13 - '@biomejs/cli-linux-x64': 2.5.13 - '@biomejs/cli-linux-x64-musl': 2.5.13 - '@biomejs/cli-win32-arm64': 2.5.13 - '@biomejs/cli-win32-x64': 2.5.13 - - '@biomejs/cli-darwin-arm64@2.5.13': + '@biomejs/cli-darwin-arm64': 2.5.14 + '@biomejs/cli-darwin-x64': 2.5.14 + '@biomejs/cli-linux-arm64': 2.5.14 + '@biomejs/cli-linux-arm64-musl': 2.5.14 + '@biomejs/cli-linux-x64': 2.5.14 + '@biomejs/cli-linux-x64-musl': 2.5.14 + '@biomejs/cli-win32-arm64': 2.5.14 + '@biomejs/cli-win32-x64': 2.5.14 + + '@biomejs/cli-darwin-arm64@2.5.14': optional: true - '@biomejs/cli-darwin-x64@2.5.13': + '@biomejs/cli-darwin-x64@2.5.14': optional: true - '@biomejs/cli-linux-arm64-musl@2.5.13': + '@biomejs/cli-linux-arm64-musl@2.5.14': optional: true - '@biomejs/cli-linux-arm64@2.5.13': + '@biomejs/cli-linux-arm64@2.5.14': optional: true - '@biomejs/cli-linux-x64-musl@2.5.13': + '@biomejs/cli-linux-x64-musl@2.5.14': optional: true - '@biomejs/cli-linux-x64@2.5.13': + '@biomejs/cli-linux-x64@2.5.14': optional: true - '@biomejs/cli-win32-arm64@2.5.13': + '@biomejs/cli-win32-arm64@2.5.14': optional: true - '@biomejs/cli-win32-x64@2.5.13': + '@biomejs/cli-win32-x64@2.5.14': optional: true '@noble/hashes@2.4.0': {} diff --git a/backend/templates/proxy_host.conf b/backend/templates/proxy_host.conf index 355cd6a312..8e6129fb2b 100644 --- a/backend/templates/proxy_host.conf +++ b/backend/templates/proxy_host.conf @@ -9,6 +9,7 @@ {% if enabled %} {{ upstreams }} + {% assign auth_request_anubis_upstream_resolved = auth_request_anubis_upstream_resolved | default: env.AUTH_REQUEST_ANUBIS_UPSTREAM %} {% assign auth_request_anubis_upstream_host = auth_request_anubis_upstream_resolved | replace: "https://", "" | replace: "http://", "" %} {% if auth_request_anubis_upstream_resolved contains "https://" %}{% assign auth_request_anubis_upstream_scheme = "https://" %}{% else %}{% assign auth_request_anubis_upstream_scheme = "http://" %}{% endif %} {% if auth_request_anubis_upstream_host contains "]:" %} @@ -31,6 +32,7 @@ } {% endif %} + {% assign auth_request_tinyauth_upstream_resolved = auth_request_tinyauth_upstream_resolved | default: env.AUTH_REQUEST_TINYAUTH_UPSTREAM %} {% assign auth_request_tinyauth_upstream_host = auth_request_tinyauth_upstream_resolved | replace: "https://", "" | replace: "http://", "" %} {% if auth_request_tinyauth_upstream_resolved contains "https://" %}{% assign auth_request_tinyauth_upstream_scheme = "https://" %}{% else %}{% assign auth_request_tinyauth_upstream_scheme = "http://" %}{% endif %} {% if auth_request_tinyauth_upstream_host contains "]:" %} @@ -53,6 +55,7 @@ } {% endif %} + {% assign auth_request_oauth2proxy_upstream_resolved = auth_request_oauth2proxy_upstream_resolved | default: env.AUTH_REQUEST_OAUTH2PROXY_UPSTREAM %} {% assign auth_request_oauth2proxy_upstream_host = auth_request_oauth2proxy_upstream_resolved | replace: "https://", "" | replace: "http://", "" %} {% if auth_request_oauth2proxy_upstream_resolved contains "https://" %}{% assign auth_request_oauth2proxy_upstream_scheme = "https://" %}{% else %}{% assign auth_request_oauth2proxy_upstream_scheme = "http://" %}{% endif %} {% if auth_request_oauth2proxy_upstream_host contains "]:" %} @@ -75,6 +78,7 @@ } {% endif %} + {% assign auth_request_voidauth_upstream_resolved = auth_request_voidauth_upstream_resolved | default: env.AUTH_REQUEST_VOIDAUTH_UPSTREAM %} {% assign auth_request_voidauth_upstream_host = auth_request_voidauth_upstream_resolved | replace: "https://", "" | replace: "http://", "" %} {% if auth_request_voidauth_upstream_resolved contains "https://" %}{% assign auth_request_voidauth_upstream_scheme = "https://" %}{% else %}{% assign auth_request_voidauth_upstream_scheme = "http://" %}{% endif %} {% if auth_request_voidauth_upstream_host contains "]:" %} @@ -97,6 +101,7 @@ } {% endif %} + {% assign auth_request_authelia_upstream_resolved = auth_request_authelia_upstream_resolved | default: env.AUTH_REQUEST_AUTHELIA_UPSTREAM %} {% assign auth_request_authelia_upstream_host = auth_request_authelia_upstream_resolved | replace: "https://", "" | replace: "http://", "" %} {% if auth_request_authelia_upstream_resolved contains "https://" %}{% assign auth_request_authelia_upstream_scheme = "https://" %}{% else %}{% assign auth_request_authelia_upstream_scheme = "http://" %}{% endif %} {% if auth_request_authelia_upstream_host contains "]:" %} @@ -119,6 +124,7 @@ } {% endif %} + {% assign auth_request_authentik_upstream_resolved = auth_request_authentik_upstream_resolved | default: env.AUTH_REQUEST_AUTHENTIK_UPSTREAM %} {% assign auth_request_authentik_upstream_host = auth_request_authentik_upstream_resolved | replace: "https://", "" | replace: "http://", "" %} {% if auth_request_authentik_upstream_resolved contains "https://" %}{% assign auth_request_authentik_upstream_scheme = "https://" %}{% else %}{% assign auth_request_authentik_upstream_scheme = "http://" %}{% endif %} {% if auth_request_authentik_upstream_host contains "]:" %} diff --git a/frontend/package.json b/frontend/package.json index 55ae829285..7ee47719fe 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -8,27 +8,27 @@ "dependencies": { "@ebay/nice-modal-react": "1.2.13", "@tabler/core": "1.5.1", - "@tabler/icons-react": "3.46.0", - "@tanstack/react-query": "5.102.8", + "@tabler/icons-react": "3.47.0", + "@tanstack/react-query": "5.103.1", "@tanstack/react-table": "9.2.4", "clsx": "2.1.1", "country-flag-icons": "1.6.20", "date-fns": "4.4.0", "formik": "2.4.9", - "markdown-to-jsx": "9.10.2", + "markdown-to-jsx": "9.10.3", "qrcode.react": "4.2.0", "query-string": "9.5.1", "react": "19.3.0", "react-bootstrap": "2.10.10", "react-dom": "19.3.0", - "react-intl": "10.2.2", - "react-router": "8.3.1", + "react-intl": "12.1.1", + "react-router": "8.4.0", "react-select": "5.10.2", "react-toastify": "11.1.0", "rooks": "9.9.0" }, "devDependencies": { - "@biomejs/biome": "2.5.13", + "@biomejs/biome": "2.5.14", "@vitejs/plugin-react": "6.1.1", "vite": "8.3.0" } diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index 795270717e..e55b84f20c 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -15,11 +15,11 @@ importers: specifier: 1.5.1 version: 1.5.1 '@tabler/icons-react': - specifier: 3.46.0 - version: 3.46.0(react@19.3.0) + specifier: 3.47.0 + version: 3.47.0(react@19.3.0) '@tanstack/react-query': - specifier: 5.102.8 - version: 5.102.8(react@19.3.0) + specifier: 5.103.1 + version: 5.103.1(react@19.3.0) '@tanstack/react-table': specifier: 9.2.4 version: 9.2.4(react-dom@19.3.0(react@19.3.0))(react@19.3.0) @@ -36,8 +36,8 @@ importers: specifier: 2.4.9 version: 2.4.9(@types/react@19.3.0)(react@19.3.0) markdown-to-jsx: - specifier: 9.10.2 - version: 9.10.2(react@19.3.0) + specifier: 9.10.3 + version: 9.10.3(react@19.3.0) qrcode.react: specifier: 4.2.0 version: 4.2.0(react@19.3.0) @@ -54,11 +54,11 @@ importers: specifier: 19.3.0 version: 19.3.0(react@19.3.0) react-intl: - specifier: 10.2.2 - version: 10.2.2(@types/react@19.3.0)(react@19.3.0) + specifier: 12.1.1 + version: 12.1.1(@types/react@19.3.0)(react@19.3.0) react-router: - specifier: 8.3.1 - version: 8.3.1(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + specifier: 8.4.0 + version: 8.4.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0) react-select: specifier: 5.10.2 version: 5.10.2(@types/react@19.3.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0) @@ -70,8 +70,8 @@ importers: version: 9.9.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0) devDependencies: '@biomejs/biome': - specifier: 2.5.13 - version: 2.5.13 + specifier: 2.5.14 + version: 2.5.14 '@vitejs/plugin-react': specifier: 6.1.1 version: 6.1.1(vite@8.3.0) @@ -126,59 +126,59 @@ packages: resolution: {integrity: sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==} engines: {node: '>=6.9.0'} - '@biomejs/biome@2.5.13': - resolution: {integrity: sha512-+SEC/mFk1a+5mvUANZgbZTaiZXs1nj4iMhL/PHiqDT5TPUEPFIlliEtkKKZB4N862yylHC3UI+/Sj2I0HJEqhA==} + '@biomejs/biome@2.5.14': + resolution: {integrity: sha512-0FabLIjd4M/dm8VFI86RMaLLdgepzbdfiAL2R8cr7V81OYYrP1w7Z73KfAwPK5h9SrEBXTzNG2y+mBwPo9xRnw==} engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/cli-darwin-arm64@2.5.13': - resolution: {integrity: sha512-nYSuDJ6zgVqZUkAkJkvhXxsF2PYIrUk/g638K4voCXz7foI9f7b6C2/7+oAihsHQlivZNMUrm/y8ywlcHQtZOw==} + '@biomejs/cli-darwin-arm64@2.5.14': + resolution: {integrity: sha512-UnzaXO65L4tsZimFITFP2M121GyhDcWFrT3pL5ZJ5U4XcS/0L5VHYytVohdCf/gnDUFHgl2I9xnt5bV/J1kxHQ==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-x64@2.5.13': - resolution: {integrity: sha512-KVy1ceEDuJ3AzFxjT9kkxbVy+UANw1pjEMUS6lvKfxjJ+fmkRvc7sQn1Xo6ETgseEI7wUQoV03KSga3XfE8YRQ==} + '@biomejs/cli-darwin-x64@2.5.14': + resolution: {integrity: sha512-kiy8qA16K93J7uvFfWi4LgjqDpnRKyePAna6A0Y4jxyUga35SYpIZ2cNWlhy0lsfgqRenCpfymnJWEZ6mgpRgA==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-linux-arm64-musl@2.5.13': - resolution: {integrity: sha512-CH32xpep3dNS5EVJpAHlYchkBYznxyVZQrx0b6YYYlPL9u9ZeD2NtqiK/6s64+HFS2a7hGnryLlqqZAOh8ax5g==} + '@biomejs/cli-linux-arm64-musl@2.5.14': + resolution: {integrity: sha512-SJ9PrZkBnnH9dHJDnxk34vKs0GB2dbsioaft6/hPhWJ7AHpwYH83Isnhj0FSRpFkGgpVfJ1lds23ApB2czUDLQ==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] libc: [musl] - '@biomejs/cli-linux-arm64@2.5.13': - resolution: {integrity: sha512-VlNMtoxOqs0dUR6drxxHr18SNUvI7xxAuHZlH4s/dstYSf3g6RaqVgo8JRnhcOhKz9afWrvtJTboNG1JuYlIDQ==} + '@biomejs/cli-linux-arm64@2.5.14': + resolution: {integrity: sha512-vO/9BaU1n30CiFNLx49gMTMtbCAAqlo/EqFoG0BU3deQInTbJrmXSmTQ9e3FoDZIKQnvSLDVNL4lx1ci7y1T1Q==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] libc: [glibc] - '@biomejs/cli-linux-x64-musl@2.5.13': - resolution: {integrity: sha512-F3pmwl+VHoUuVJN/tbNLKeLt0SVK3EIyN1jXlMcNyQGYRQQTVqXF+GgkP0/CjGXFN87e/mv0sBfUnWqWza5PKQ==} + '@biomejs/cli-linux-x64-musl@2.5.14': + resolution: {integrity: sha512-2kI5PrMgW5dcEZYrstLPmUmCwkUwZY39rP4BN93Vxbwcs2O57LDQOktUZZYPvvspN5i0mhGr3TJtF5sU26NUWg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] libc: [musl] - '@biomejs/cli-linux-x64@2.5.13': - resolution: {integrity: sha512-Fi6gIxbUaJ3ZCIXeG3ggIBPF76O2DjDN67WrPX/ODRv54GeXPm2gbEPC96Yb0yrJoiH0Eax1JLx1Pi0XbsNFZQ==} + '@biomejs/cli-linux-x64@2.5.14': + resolution: {integrity: sha512-VHZRa7CCQBUWKxNwUvHJeuW03WFRgN5NWO//SDGOitc9QIeNyfA42V9zlKm+x82xFSG9Bzi5fi+hbhm9anO8yA==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] libc: [glibc] - '@biomejs/cli-win32-arm64@2.5.13': - resolution: {integrity: sha512-+WD13qshXrr0Icv4BfsAdzm8Fs3TL+nZ59zEQxsYNd8lcgZJ0A5+OrlwsL1PipVCmWeRpxgIPD6DAcEd7smkCQ==} + '@biomejs/cli-win32-arm64@2.5.14': + resolution: {integrity: sha512-pHgAFffmZtaYoxavEsWEYNvcA7NwOIjLyqw2HXyLbt16xYryX0L4fMV2u0G9ag6LNYPIoqWaWqzUcnc6rLGGXg==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-x64@2.5.13': - resolution: {integrity: sha512-VOofU/nW761XWzUeUNE8zzYNyPrxuMuNFMizL0qz7J75yeV8N7WFheUlk1/K6dOkaFpH9wJ+lDKlwjAbw0346w==} + '@biomejs/cli-win32-x64@2.5.14': + resolution: {integrity: sha512-oJWmBhoHsnhUKIke+0gXDX0mltJrWHA1UyHsrTlXwX0TL64ilVZAo+TYZm97baecV0esBdpzy3k96q+09JaZUQ==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] @@ -242,14 +242,14 @@ packages: '@formatjs/fast-memoize@3.1.7': resolution: {integrity: sha512-zXfhLpvA6T7+efdt9JLbBwZ00tT7NsBMDVnDu8rpHeNNv8KfRZAMo2gkG0k9lK/Nzc//3kJ9pImsfuJxk3KhUA==} - '@formatjs/icu-messageformat-parser@3.5.18': - resolution: {integrity: sha512-wX1efcL8d7K5QapOTRsP/OLTA/kpwe4LwqWyNxDNg5iRs8i9jJbCyxB5P8jc4KOW5oiLzz2DJr+BRY5xMV9+bA==} + '@formatjs/icu-messageformat-parser@3.5.19': + resolution: {integrity: sha512-a5PAqgd3QPUge635SxrjPLIlTErcGwm3AMyTdmZXl0IqWXTdCx9AnuioEmvEZAV2HpeFdynLPXMvHv7dXGEWWw==} - '@formatjs/icu-skeleton-parser@2.1.11': - resolution: {integrity: sha512-j8cUmOJzVgkHuS0QiQ6ga76UIoLOFSAMWhs7aZJztH3aAdCOAE6vpC8KVvFB4cU10ON0y2/5oOVmPJ43s2lTwA==} + '@formatjs/icu-skeleton-parser@2.1.12': + resolution: {integrity: sha512-ca7tZMLpfHX3sUD7hP6gE/qr6Iq89EDd3ZLeRhbsB7r0UD55DGJq+tmFLzrGrnx5StahUevQmQQVtbDRHsfDHA==} - '@formatjs/intl@4.2.1': - resolution: {integrity: sha512-GiL0cReencWQkhfJedNLMe0Aorb/wyTRJdi+hLgG9gsDPy4yw2N+EkMcijf5+oGKd5jde75tr5nujsPg78bUTw==} + '@formatjs/intl@6.1.1': + resolution: {integrity: sha512-kKxt7HZrmlSChntA4OAD5DlaDcKeUJOOvWKA/7ORiM1dQ+GYuiIz6FuDOkMeo/aVzSJ6hA25etFAtCnHEalqJw==} '@internationalized/date@3.12.4': resolution: {integrity: sha512-M1dEn4c1U1HsSlaVR8upZtSqvXrTkHDfv18H01uCSJyjVLDxnBR38v/fMxecmlwXKR4i9HeZcmgQAPE6A+aGJQ==} @@ -295,6 +295,9 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + '@remix-run/route-pattern@0.22.1': + resolution: {integrity: sha512-czdGJWh09Lapvcqt7Vb09KlrU2PhRJ8xQaI+AItTuD9aDJ5MAgxnS38lnys6Ll+6RJEqPiaUqTwIQhVLwFvv+w==} + '@restart/hooks@0.4.16': resolution: {integrity: sha512-f7aCv7c+nU/3mF7NWLtVVr0Ra80RqsO89hO72r+Y/nvQr5+q0UFGkocElTH6MJApvReVh6JHUFYn2cw1WdHF3w==} peerDependencies: @@ -417,19 +420,19 @@ packages: resolution: {integrity: sha512-PI9rJq4H4lBh53YP/J+m5Uz6lqVQbsGPmWCMN34IP4KQQ/wy28YMO6a3Eiz1cQHdFFr+3MlU3yYhXdzvFGJfqw==} engines: {node: '>=20'} - '@tabler/icons-react@3.46.0': - resolution: {integrity: sha512-CCm7xJWhDT2PH4ZIFkP6AgYKtVhq0gpYkjUN+GVh1AzmIQaa77OW0bQPBPQiTE0PsXMR9oSxFqA3qBglzPyrVQ==} + '@tabler/icons-react@3.47.0': + resolution: {integrity: sha512-lQkDkYwqTzRNt+MYNinu+fkcIZLKjYBcI37RWkcY72doOgE/vMVFvrFrGZ2cVo2ueB3zH1dWMIhnGgi8Y5mFJA==} peerDependencies: react: '>= 16' - '@tabler/icons@3.46.0': - resolution: {integrity: sha512-f2RYFl3fzPwj5WO82x6en0dmkjefxEfOm16D1ByM6cj/McNiwOkL4VaPUoP9VVIrXAD9WnTSVFr70px703b//A==} + '@tabler/icons@3.47.0': + resolution: {integrity: sha512-aCbSemVrGvSA3w0sJi8mka6QrnQCN8wCD1jKNXXIR/h6Q4ffov/yFPyzjTULDM8ETtK4DABUZhWdYlygqy3npA==} - '@tanstack/query-core@5.102.8': - resolution: {integrity: sha512-ZNjkJ33CqvPNec/6lZBnHqLc3EVGPZ9ySLhYahU9TcuRFdmwXewuj0c4hwSWcGHqEUwcSrKeZ+oGcvPBqXcQcg==} + '@tanstack/query-core@5.103.1': + resolution: {integrity: sha512-rms8HqTGp6zA00dM+cUQ2eBcgzNJefuu5CAMB37i/6MiGT1zulPOytCFu2a0qjLqVR2n1jENPj9woqFQNuCzWA==} - '@tanstack/react-query@5.102.8': - resolution: {integrity: sha512-TYBea4OuXWD7MhaSHq069TWbFe7rcwWN6kzT7JF0OKi1K6c1gTv2IzD6A6ExJsCMozdkqBWeuIUZmu4KQg0O5A==} + '@tanstack/react-query@5.103.1': + resolution: {integrity: sha512-rmAPPApNEK17VXRJhtE1rja53n23VV5w30C0saCgJhhX+EpdUnVqMGV/s5nnzV43X75KTHKzuoiuxSzGTBIkag==} peerDependencies: react: ^18 || ^19 @@ -610,8 +613,8 @@ packages: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} - intl-messageformat@11.2.15: - resolution: {integrity: sha512-W4VNytsXyWgW5lvVchmsb9xgA5rSKqoflu3/IQ9UCtB0z4R+Bx9MoEkwFT/+30RCl/KzUoH0QGGe9lppF5SuvQ==} + intl-messageformat@12.1.1: + resolution: {integrity: sha512-ZNwni2Ihmge8FZ0O+n7JQXHNAZfFGN/ovLrIxyfFK/bEsnHV2bG3W75Z24GdKmMepiq21SiMfANNPze+xjSCHA==} invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} @@ -727,8 +730,8 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - markdown-to-jsx@9.10.2: - resolution: {integrity: sha512-iR9GadlIox0q1uXnpqdxpF02Vb1WDmZ/QIXWjBR5htzjUEEhyIWbM65LuVKavdwJaVo4q95C/F2OOyNjWe91ig==} + markdown-to-jsx@9.10.3: + resolution: {integrity: sha512-J5/NCmNYQ0ExsnThzvF3F1fSzNYLgROcW2diUqRqoIoiyhoy8DSI06jLuMYk0c86SQd/FiVYJrV6tIgci9S2tQ==} engines: {node: '>= 18'} peerDependencies: react: '>= 16.0.0' @@ -833,8 +836,8 @@ packages: react-fast-compare@2.0.4: resolution: {integrity: sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==} - react-intl@10.2.2: - resolution: {integrity: sha512-LUzjoxGMbk9PWS4Kdr2QAYX8sqIuB3EKiFs6fi4kCgGAgWNlrYlq9ZLKxBg9Yeg9xeaFfeZ139FZ4Ub2w5L6SQ==} + react-intl@12.1.1: + resolution: {integrity: sha512-W+i+eifLA3ZTVmAtdfjU7+2dBPAapJeaFwHGKeEyVv1xYUft6tBEU5z1dmgvJlkgs6mn8phFHP5wQQIfU1SjCQ==} peerDependencies: '@types/react': '>=18.0.0' react: '>=18.0.0' @@ -845,8 +848,8 @@ packages: react-lifecycles-compat@3.0.4: resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==} - react-router@8.3.1: - resolution: {integrity: sha512-TEOpiO2g0TJHEOJeRVv4amUFun9v1npCKszvcquNvzETUtJ8udV86ah5eFoHT7g26bsBvT6EiIhqulR8eDF++A==} + react-router@8.4.0: + resolution: {integrity: sha512-JtydAkBvU9UTEe5qNC+POhu+ZBNM7rlKY2IegwXc7Idj7xfRG16x5RZrw3mju+XlqBxfvb2ky9P3jUp9WyWC1g==} engines: {node: '>=22.22.0'} peerDependencies: react: '>=19.2.7' @@ -1067,39 +1070,39 @@ snapshots: '@babel/helper-string-parser': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 - '@biomejs/biome@2.5.13': + '@biomejs/biome@2.5.14': optionalDependencies: - '@biomejs/cli-darwin-arm64': 2.5.13 - '@biomejs/cli-darwin-x64': 2.5.13 - '@biomejs/cli-linux-arm64': 2.5.13 - '@biomejs/cli-linux-arm64-musl': 2.5.13 - '@biomejs/cli-linux-x64': 2.5.13 - '@biomejs/cli-linux-x64-musl': 2.5.13 - '@biomejs/cli-win32-arm64': 2.5.13 - '@biomejs/cli-win32-x64': 2.5.13 - - '@biomejs/cli-darwin-arm64@2.5.13': + '@biomejs/cli-darwin-arm64': 2.5.14 + '@biomejs/cli-darwin-x64': 2.5.14 + '@biomejs/cli-linux-arm64': 2.5.14 + '@biomejs/cli-linux-arm64-musl': 2.5.14 + '@biomejs/cli-linux-x64': 2.5.14 + '@biomejs/cli-linux-x64-musl': 2.5.14 + '@biomejs/cli-win32-arm64': 2.5.14 + '@biomejs/cli-win32-x64': 2.5.14 + + '@biomejs/cli-darwin-arm64@2.5.14': optional: true - '@biomejs/cli-darwin-x64@2.5.13': + '@biomejs/cli-darwin-x64@2.5.14': optional: true - '@biomejs/cli-linux-arm64-musl@2.5.13': + '@biomejs/cli-linux-arm64-musl@2.5.14': optional: true - '@biomejs/cli-linux-arm64@2.5.13': + '@biomejs/cli-linux-arm64@2.5.14': optional: true - '@biomejs/cli-linux-x64-musl@2.5.13': + '@biomejs/cli-linux-x64-musl@2.5.14': optional: true - '@biomejs/cli-linux-x64@2.5.13': + '@biomejs/cli-linux-x64@2.5.14': optional: true - '@biomejs/cli-win32-arm64@2.5.13': + '@biomejs/cli-win32-arm64@2.5.14': optional: true - '@biomejs/cli-win32-x64@2.5.13': + '@biomejs/cli-win32-x64@2.5.14': optional: true '@ebay/nice-modal-react@1.2.13(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': @@ -1184,17 +1187,17 @@ snapshots: '@formatjs/fast-memoize@3.1.7': {} - '@formatjs/icu-messageformat-parser@3.5.18': + '@formatjs/icu-messageformat-parser@3.5.19': dependencies: - '@formatjs/icu-skeleton-parser': 2.1.11 + '@formatjs/icu-skeleton-parser': 2.1.12 - '@formatjs/icu-skeleton-parser@2.1.11': {} + '@formatjs/icu-skeleton-parser@2.1.12': {} - '@formatjs/intl@4.2.1': + '@formatjs/intl@6.1.1': dependencies: '@formatjs/fast-memoize': 3.1.7 - '@formatjs/icu-messageformat-parser': 3.5.18 - intl-messageformat: 11.2.15 + '@formatjs/icu-messageformat-parser': 3.5.19 + intl-messageformat: 12.1.1 '@internationalized/date@3.12.4': dependencies: @@ -1242,6 +1245,8 @@ snapshots: dependencies: react: 19.3.0 + '@remix-run/route-pattern@0.22.1': {} + '@restart/hooks@0.4.16(react@19.3.0)': dependencies: dequal: 2.0.3 @@ -1321,18 +1326,18 @@ snapshots: dependencies: '@popperjs/core': 2.11.8 - '@tabler/icons-react@3.46.0(react@19.3.0)': + '@tabler/icons-react@3.47.0(react@19.3.0)': dependencies: - '@tabler/icons': 3.46.0 + '@tabler/icons': 3.47.0 react: 19.3.0 - '@tabler/icons@3.46.0': {} + '@tabler/icons@3.47.0': {} - '@tanstack/query-core@5.102.8': {} + '@tanstack/query-core@5.103.1': {} - '@tanstack/react-query@5.102.8(react@19.3.0)': + '@tanstack/react-query@5.103.1(react@19.3.0)': dependencies: - '@tanstack/query-core': 5.102.8 + '@tanstack/query-core': 5.103.1 react: 19.3.0 '@tanstack/react-store@0.11.1(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': @@ -1481,10 +1486,10 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 - intl-messageformat@11.2.15: + intl-messageformat@12.1.1: dependencies: '@formatjs/fast-memoize': 3.1.7 - '@formatjs/icu-messageformat-parser': 3.5.18 + '@formatjs/icu-messageformat-parser': 3.5.19 invariant@2.2.4: dependencies: @@ -1566,7 +1571,7 @@ snapshots: dependencies: js-tokens: 4.0.0 - markdown-to-jsx@9.10.2(react@19.3.0): + markdown-to-jsx@9.10.3(react@19.3.0): optionalDependencies: react: 19.3.0 @@ -1672,20 +1677,21 @@ snapshots: react-fast-compare@2.0.4: {} - react-intl@10.2.2(@types/react@19.3.0)(react@19.3.0): + react-intl@12.1.1(@types/react@19.3.0)(react@19.3.0): dependencies: - '@formatjs/icu-messageformat-parser': 3.5.18 - '@formatjs/intl': 4.2.1 + '@formatjs/icu-messageformat-parser': 3.5.19 + '@formatjs/intl': 6.1.1 '@types/react': 19.3.0 - intl-messageformat: 11.2.15 + intl-messageformat: 12.1.1 react: 19.3.0 react-is@16.13.1: {} react-lifecycles-compat@3.0.4: {} - react-router@8.3.1(react-dom@19.3.0(react@19.3.0))(react@19.3.0): + react-router@8.4.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0): dependencies: + '@remix-run/route-pattern': 0.22.1 cookie-es: 3.1.1 react: 19.3.0 optionalDependencies: diff --git a/rootfs/etc/crowdsec.conf.example b/rootfs/etc/crowdsec.conf.example index d4d8ff97cb..98f6cd6661 100644 --- a/rootfs/etc/crowdsec.conf.example +++ b/rootfs/etc/crowdsec.conf.example @@ -40,7 +40,7 @@ CAPTCHA_TEMPLATE_PATH=/data/crowdsec/captcha.html CAPTCHA_EXPIRATION=3600 APPSEC_URL=http://127.0.0.1:7422 -APPSEC_FAILURE_ACTION=passthrough +APPSEC_FAILURE_ACTION=deny APPSEC_CONNECT_TIMEOUT= APPSEC_SEND_TIMEOUT= APPSEC_PROCESS_TIMEOUT=