diff --git a/.version b/.version index 0e83a9a9..a1a4224d 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -2.13.2 +2.13.3 diff --git a/README.md b/README.md index 683c9681..6b3d1a8b 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@



- + diff --git a/backend/certbot/dns-plugins.json b/backend/certbot/dns-plugins.json index 6238f466..daf2d0a8 100644 --- a/backend/certbot/dns-plugins.json +++ b/backend/certbot/dns-plugins.json @@ -370,7 +370,7 @@ "leaseweb": { "name": "LeaseWeb", "package_name": "certbot-dns-leaseweb", - "version": "~=1.0.1", + "version": "~=1.0.3", "dependencies": "", "credentials": "dns_leaseweb_api_token = 01234556789", "full_plugin_name": "dns-leaseweb" @@ -399,6 +399,14 @@ "credentials": "dns_luadns_email = user@example.com\ndns_luadns_token = 0123456789abcdef0123456789abcdef", "full_plugin_name": "dns-luadns" }, + "mchost24": { + "name": "MC-HOST24", + "package_name": "certbot-dns-mchost24", + "version": "", + "dependencies": "", + "credentials": "# Obtain API token using https://github.com/JoeJoeTV/mchost24-api-python\ndns_mchost24_api_token=", + "full_plugin_name": "dns-mchost24" + }, "mijnhost": { "name": "mijn.host", "package_name": "certbot-dns-mijn-host", diff --git a/backend/internal/nginx.js b/backend/internal/nginx.js index 83d2c3f0..fe84607f 100644 --- a/backend/internal/nginx.js +++ b/backend/internal/nginx.js @@ -216,6 +216,11 @@ const internalNginx = { } } + // For redirection hosts, if the scheme is not http or https, set it to $scheme + if (nice_host_type === "redirection_host" && ['http', 'https'].indexOf(host.forward_scheme.toLowerCase()) === -1) { + host.forward_scheme = "$scheme"; + } + if (host.locations) { //logger.info ('host.locations = ' + JSON.stringify(host.locations, null, 2)); origLocations = [].concat(host.locations); diff --git a/backend/migrations/20251111090000_redirect_auto_scheme.js b/backend/migrations/20251111090000_redirect_auto_scheme.js new file mode 100644 index 00000000..9f5f9d06 --- /dev/null +++ b/backend/migrations/20251111090000_redirect_auto_scheme.js @@ -0,0 +1,50 @@ +import { migrate as logger } from "../logger.js"; + +const migrateName = "redirect_auto_scheme"; + +/** + * Migrate + * + * @see http://knexjs.org/#Schema + * + * @param {Object} knex + * @returns {Promise} + */ +const up = (knex) => { + logger.info(`[${migrateName}] Migrating Up...`); + + return knex.schema + .table("redirection_host", async (table) => { + // change the column default from $scheme to auto + await table.string("forward_scheme").notNull().defaultTo("auto").alter(); + await knex('redirection_host') + .where('forward_scheme', '$scheme') + .update({ forward_scheme: 'auto' }); + }) + .then(() => { + logger.info(`[${migrateName}] redirection_host Table altered`); + }); +}; + +/** + * Undo Migrate + * + * @param {Object} knex + * @returns {Promise} + */ +const down = (knex) => { + logger.info(`[${migrateName}] Migrating Down...`); + + return knex.schema + .table("redirection_host", async (table) => { + await table.string("forward_scheme").notNull().defaultTo("$scheme").alter(); + await knex('redirection_host') + .where('forward_scheme', 'auto') + .update({ forward_scheme: '$scheme' }); + }) + .then(() => { + logger.info(`[${migrateName}] redirection_host Table altered`); + }); +}; + +export { up, down }; diff --git a/backend/setup.js b/backend/setup.js index b2c0dcb7..84f42793 100644 --- a/backend/setup.js +++ b/backend/setup.js @@ -37,7 +37,7 @@ const setupDefaultUser = async () => { const data = { is_deleted: 0, - email: email, + email: initialAdminEmail, name: "Administrator", nickname: "Admin", avatar: "", @@ -53,7 +53,7 @@ const setupDefaultUser = async () => { .insert({ user_id: user.id, type: "password", - secret: password, + secret: initialAdminPassword, meta: {}, }); diff --git a/backend/templates/_access.conf b/backend/templates/_access.conf index f5926377..4f388545 100644 --- a/backend/templates/_access.conf +++ b/backend/templates/_access.conf @@ -4,7 +4,7 @@ auth_basic "Authorization required"; auth_basic_user_file /data/access/{{ access_list_id }}; - {% if access_list.pass_auth == 0 or access_list.pass_auth == true %} + {% if access_list.pass_auth == 0 or access_list.pass_auth == false %} proxy_set_header Authorization ""; {% endif %} diff --git a/docker/ci.env b/docker/ci.env index 7128295d..11e2b2f8 100644 --- a/docker/ci.env +++ b/docker/ci.env @@ -1,6 +1,6 @@ AUTHENTIK_SECRET_KEY=gl8woZe8L6IIX8SC0c5Ocsj0xPkX5uJo5DVZCFl+L/QGbzuplfutYuua2ODNLEiDD3aFd9H2ylJmrke0 AUTHENTIK_REDIS__HOST=authentik-redis -AUTHENTIK_POSTGRESQL__HOST=db-postgres +AUTHENTIK_POSTGRESQL__HOST=pgdb.internal AUTHENTIK_POSTGRESQL__USER=authentik AUTHENTIK_POSTGRESQL__NAME=authentik AUTHENTIK_POSTGRESQL__PASSWORD=07EKS5NLI6Tpv68tbdvrxfvj diff --git a/docker/docker-compose.ci.postgres.yml b/docker/docker-compose.ci.postgres.yml index e9eb4bc2..b8c42446 100644 --- a/docker/docker-compose.ci.postgres.yml +++ b/docker/docker-compose.ci.postgres.yml @@ -6,7 +6,7 @@ services: fullstack: environment: - DB_POSTGRES_HOST: "db-postgres" + DB_POSTGRES_HOST: "pgdb.internal" DB_POSTGRES_PORT: "5432" DB_POSTGRES_USER: "npm" DB_POSTGRES_PASSWORD: "npmpass" @@ -27,7 +27,9 @@ services: - psql_vol:/var/lib/postgresql/data - ./ci/postgres:/docker-entrypoint-initdb.d networks: - - fulltest + fulltest: + aliases: + - pgdb.internal authentik-redis: image: "redis:alpine" @@ -41,6 +43,8 @@ services: timeout: 3s volumes: - redis_vol:/data + networks: + - fulltest authentik: image: ghcr.io/goauthentik/server:2024.10.1 @@ -51,6 +55,8 @@ services: depends_on: - authentik-redis - db-postgres + networks: + - fulltest authentik-worker: image: ghcr.io/goauthentik/server:2024.10.1 @@ -61,6 +67,8 @@ services: depends_on: - authentik-redis - db-postgres + networks: + - fulltest authentik-ldap: image: ghcr.io/goauthentik/ldap:2024.10.1 @@ -71,6 +79,8 @@ services: restart: unless-stopped depends_on: - authentik + networks: + - fulltest volumes: psql_vol: diff --git a/docker/docker-compose.ci.yml b/docker/docker-compose.ci.yml index 8070aa42..ce8913fe 100644 --- a/docker/docker-compose.ci.yml +++ b/docker/docker-compose.ci.yml @@ -3,31 +3,30 @@ # This is a base compose file, it should be extended with a # docker-compose.ci.*.yml file services: - fullstack: image: "${IMAGE}:${BRANCH_LOWER}-ci-${BUILD_NUMBER}" environment: TZ: "${TZ:-Australia/Brisbane}" - DEBUG: 'true' - CI: 'true' + DEBUG: "true" + CI: "true" FORCE_COLOR: 1 # Required for DNS Certificate provisioning in CI - LE_SERVER: 'https://ca.internal/acme/acme/directory' - REQUESTS_CA_BUNDLE: '/etc/ssl/certs/NginxProxyManager.crt' + LE_SERVER: "https://ca.internal/acme/acme/directory" + REQUESTS_CA_BUNDLE: "/etc/ssl/certs/NginxProxyManager.crt" volumes: - - 'npm_data_ci:/data' - - 'npm_le_ci:/etc/letsencrypt' - - './dev/letsencrypt.ini:/etc/letsencrypt.ini:ro' - - './dev/resolv.conf:/etc/resolv.conf:ro' - - '/etc/localtime:/etc/localtime:ro' + - "npm_data_ci:/data" + - "npm_le_ci:/etc/letsencrypt" + - "./dev/letsencrypt.ini:/etc/letsencrypt.ini:ro" + - "./dev/resolv.conf:/etc/resolv.conf:ro" + - "/etc/localtime:/etc/localtime:ro" healthcheck: test: ["CMD", "/usr/bin/check-health"] interval: 10s timeout: 3s expose: - - '80-81/tcp' - - '443/tcp' - - '1500-1503/tcp' + - "80-81/tcp" + - "443/tcp" + - "1500-1503/tcp" networks: fulltest: aliases: @@ -38,8 +37,8 @@ services: stepca: image: jc21/testca volumes: - - './dev/resolv.conf:/etc/resolv.conf:ro' - - '/etc/localtime:/etc/localtime:ro' + - "./dev/resolv.conf:/etc/resolv.conf:ro" + - "/etc/localtime:/etc/localtime:ro" networks: fulltest: aliases: @@ -48,18 +47,18 @@ services: pdns: image: pschiffe/pdns-mysql:4.8 volumes: - - '/etc/localtime:/etc/localtime:ro' + - "/etc/localtime:/etc/localtime:ro" environment: - PDNS_master: 'yes' - PDNS_api: 'yes' - PDNS_api_key: 'npm' - PDNS_webserver: 'yes' - PDNS_webserver_address: '0.0.0.0' - PDNS_webserver_password: 'npm' - PDNS_webserver-allow-from: '127.0.0.0/8,192.0.0.0/8,10.0.0.0/8,172.0.0.0/8' - PDNS_version_string: 'anonymous' + PDNS_master: "yes" + PDNS_api: "yes" + PDNS_api_key: "npm" + PDNS_webserver: "yes" + PDNS_webserver_address: "0.0.0.0" + PDNS_webserver_password: "npm" + PDNS_webserver-allow-from: "127.0.0.0/8,192.0.0.0/8,10.0.0.0/8,172.0.0.0/8" + PDNS_version_string: "anonymous" PDNS_default_ttl: 1500 - PDNS_allow_axfr_ips: '127.0.0.0/8,192.0.0.0/8,10.0.0.0/8,172.0.0.0/8' + PDNS_allow_axfr_ips: "127.0.0.0/8,192.0.0.0/8,10.0.0.0/8,172.0.0.0/8" PDNS_gmysql_host: pdns-db PDNS_gmysql_port: 3306 PDNS_gmysql_user: pdns @@ -76,14 +75,14 @@ services: pdns-db: image: mariadb environment: - MYSQL_ROOT_PASSWORD: 'pdns' - MYSQL_DATABASE: 'pdns' - MYSQL_USER: 'pdns' - MYSQL_PASSWORD: 'pdns' + MYSQL_ROOT_PASSWORD: "pdns" + MYSQL_DATABASE: "pdns" + MYSQL_USER: "pdns" + MYSQL_PASSWORD: "pdns" volumes: - - 'pdns_mysql_vol:/var/lib/mysql' - - '/etc/localtime:/etc/localtime:ro' - - './dev/pdns-db.sql:/docker-entrypoint-initdb.d/01_init.sql:ro' + - "pdns_mysql_vol:/var/lib/mysql" + - "/etc/localtime:/etc/localtime:ro" + - "./dev/pdns-db.sql:/docker-entrypoint-initdb.d/01_init.sql:ro" networks: - fulltest @@ -100,12 +99,12 @@ services: context: ../ dockerfile: test/cypress/Dockerfile environment: - HTTP_PROXY: 'squid:3128' - HTTPS_PROXY: 'squid:3128' + HTTP_PROXY: "squid:3128" + HTTPS_PROXY: "squid:3128" volumes: - - 'cypress_logs:/test/results' - - './dev/resolv.conf:/etc/resolv.conf:ro' - - '/etc/localtime:/etc/localtime:ro' + - "cypress_logs:/test/results" + - "./dev/resolv.conf:/etc/resolv.conf:ro" + - "/etc/localtime:/etc/localtime:ro" command: cypress run --browser chrome --config-file=cypress/config/ci.js networks: - fulltest @@ -113,9 +112,9 @@ services: squid: image: ubuntu/squid volumes: - - './dev/squid.conf:/etc/squid/squid.conf:ro' - - './dev/resolv.conf:/etc/resolv.conf:ro' - - '/etc/localtime:/etc/localtime:ro' + - "./dev/squid.conf:/etc/squid/squid.conf:ro" + - "./dev/resolv.conf:/etc/resolv.conf:ro" + - "/etc/localtime:/etc/localtime:ro" networks: - fulltest diff --git a/docker/docker-compose.dev.yml b/docker/docker-compose.dev.yml index 57c30e07..01577716 100644 --- a/docker/docker-compose.dev.yml +++ b/docker/docker-compose.dev.yml @@ -32,7 +32,7 @@ services: # DB_MYSQL_PASSWORD: 'npm' # DB_MYSQL_NAME: 'npm' # db-postgres: - DB_POSTGRES_HOST: "db-postgres" + DB_POSTGRES_HOST: "pgdb.internal" DB_POSTGRES_PORT: "5432" DB_POSTGRES_USER: "npm" DB_POSTGRES_PASSWORD: "npmpass" @@ -81,8 +81,6 @@ services: db-postgres: image: postgres:17 container_name: npm2dev.db-postgres - networks: - - nginx_proxy_manager environment: POSTGRES_USER: "npm" POSTGRES_PASSWORD: "npmpass" @@ -90,6 +88,10 @@ services: volumes: - psql_data:/var/lib/postgresql/data - ./ci/postgres:/docker-entrypoint-initdb.d + networks: + nginx_proxy_manager: + aliases: + - pgdb.internal stepca: image: jc21/testca diff --git a/frontend/src/components/SiteMenu.tsx b/frontend/src/components/SiteMenu.tsx index 3a0b0065..34012147 100644 --- a/frontend/src/components/SiteMenu.tsx +++ b/frontend/src/components/SiteMenu.tsx @@ -190,7 +190,7 @@ export function SiteMenu() { return (

-
+