From 0397a67ae8b87869eba0eebe83284915de649149 Mon Sep 17 00:00:00 2001 From: xtcnet Date: Sat, 7 Mar 2026 20:49:44 +0700 Subject: [PATCH] Initial commit for D3V-NPMWG --- .cursorrules | 12 + .github/ISSUE_TEMPLATE/bug_report.md | 55 + .../ISSUE_TEMPLATE/dns_challenge_request.md | 18 + .github/ISSUE_TEMPLATE/feature_request.md | 32 + .github/dependabot.yml | 104 + .github/workflows/stale.yml | 21 + .gitignore | 10 + .version | 1 + AI_CONTEXT.md | 64 + LICENSE | 21 + README.md | 172 + backend/.gitignore | 8 + backend/app.js | 92 + backend/biome.json | 91 + backend/certbot/README.md | 21 + backend/certbot/dns-plugins.json | 658 ++ backend/config/README.md | 2 + backend/config/default.json | 10 + backend/config/sqlite-test-db.json | 26 + backend/db.js | 42 + backend/index.js | 83 + backend/internal/2fa.js | 305 + backend/internal/access-list.js | 488 ++ backend/internal/audit-log.js | 102 + backend/internal/certificate.js | 1263 ++++ backend/internal/dead-host.js | 394 ++ backend/internal/host.js | 234 + backend/internal/ip_ranges.js | 158 + backend/internal/nginx.js | 437 ++ backend/internal/proxy-host.js | 474 ++ backend/internal/redirection-host.js | 477 ++ backend/internal/remote-version.js | 84 + backend/internal/report.js | 37 + backend/internal/setting.js | 125 + backend/internal/stream.js | 426 ++ backend/internal/token.js | 237 + backend/internal/user.js | 494 ++ backend/internal/wireguard.js | 366 + backend/knexfile.js | 19 + backend/lib/access.js | 278 + backend/lib/access/access_lists-create.json | 23 + backend/lib/access/access_lists-delete.json | 23 + backend/lib/access/access_lists-get.json | 23 + backend/lib/access/access_lists-list.json | 23 + backend/lib/access/access_lists-update.json | 23 + backend/lib/access/auditlog-list.json | 7 + backend/lib/access/certificates-create.json | 23 + backend/lib/access/certificates-delete.json | 23 + backend/lib/access/certificates-get.json | 23 + backend/lib/access/certificates-list.json | 23 + backend/lib/access/certificates-update.json | 23 + backend/lib/access/dead_hosts-create.json | 23 + backend/lib/access/dead_hosts-delete.json | 23 + backend/lib/access/dead_hosts-get.json | 23 + backend/lib/access/dead_hosts-list.json | 23 + backend/lib/access/dead_hosts-update.json | 23 + backend/lib/access/permissions.json | 13 + backend/lib/access/proxy_hosts-create.json | 23 + backend/lib/access/proxy_hosts-delete.json | 23 + backend/lib/access/proxy_hosts-get.json | 23 + backend/lib/access/proxy_hosts-list.json | 23 + backend/lib/access/proxy_hosts-update.json | 23 + .../lib/access/redirection_hosts-create.json | 23 + .../lib/access/redirection_hosts-delete.json | 23 + backend/lib/access/redirection_hosts-get.json | 23 + .../lib/access/redirection_hosts-list.json | 23 + .../lib/access/redirection_hosts-update.json | 23 + backend/lib/access/reports-hosts.json | 7 + backend/lib/access/roles.json | 38 + backend/lib/access/settings-get.json | 7 + backend/lib/access/settings-list.json | 7 + backend/lib/access/settings-update.json | 7 + backend/lib/access/streams-create.json | 23 + backend/lib/access/streams-delete.json | 23 + backend/lib/access/streams-get.json | 23 + backend/lib/access/streams-list.json | 23 + backend/lib/access/streams-update.json | 23 + backend/lib/access/users-create.json | 7 + backend/lib/access/users-delete.json | 7 + backend/lib/access/users-get.json | 23 + backend/lib/access/users-list.json | 7 + backend/lib/access/users-loginas.json | 7 + backend/lib/access/users-password.json | 23 + backend/lib/access/users-permissions.json | 7 + backend/lib/access/users-update.json | 23 + backend/lib/certbot.js | 86 + backend/lib/config.js | 262 + backend/lib/error.js | 103 + backend/lib/express/cors.js | 17 + backend/lib/express/jwt-decode.js | 15 + backend/lib/express/jwt.js | 13 + backend/lib/express/pagination.js | 55 + backend/lib/express/user-id-from-me.js | 8 + backend/lib/helpers.js | 58 + backend/lib/migrate_template.js | 59 + backend/lib/utils.js | 110 + backend/lib/validator/api.js | 45 + backend/lib/validator/index.js | 45 + backend/lib/wg-helpers.js | 183 + backend/logger.js | 26 + backend/migrate.js | 13 + backend/migrations/20180618015850_initial.js | 206 + .../migrations/20180929054513_websockets.js | 36 + .../migrations/20181019052346_forward_host.js | 36 + .../20181113041458_http2_support.js | 50 + .../20181213013211_forward_scheme.js | 36 + backend/migrations/20190104035154_disabled.js | 57 + .../20190215115310_customlocations.js | 37 + backend/migrations/20190218060101_hsts.js | 53 + backend/migrations/20190227065017_settings.js | 39 + .../20200410143839_access_list_client.js | 52 + .../20200410143840_access_list_client_fix.js | 36 + .../migrations/20201014143841_pass_auth.js | 43 + .../20210210154702_redirection_scheme.js | 43 + .../20210210154703_redirection_status_code.js | 43 + .../20210423103500_stream_domain.js | 43 + .../20211108145214_regenerate_default_host.js | 52 + .../migrations/20240427161436_stream_ssl.js | 43 + .../20251111090000_redirect_auto_scheme.js | 50 + .../20260131163528_trust_forwarded_proto.js | 43 + .../migrations/20260307000000_wireguard.js | 41 + backend/models/access_list.js | 98 + backend/models/access_list_auth.js | 55 + backend/models/access_list_client.js | 55 + backend/models/audit-log.js | 52 + backend/models/auth.js | 92 + backend/models/certificate.js | 133 + backend/models/dead_host.js | 104 + backend/models/now_helper.js | 12 + backend/models/proxy_host.js | 127 + backend/models/redirection_host.js | 113 + backend/models/setting.js | 30 + backend/models/stream.js | 89 + backend/models/token.js | 140 + backend/models/user.js | 65 + backend/models/user_permission.js | 29 + backend/models/wg_client.js | 43 + backend/models/wg_interface.js | 20 + backend/nodemon.json | 7 + backend/package.json | 53 + backend/routes/audit-log.js | 107 + backend/routes/main.js | 70 + backend/routes/nginx/access_lists.js | 155 + backend/routes/nginx/certificates.js | 355 + backend/routes/nginx/dead_hosts.js | 207 + backend/routes/nginx/proxy_hosts.js | 209 + backend/routes/nginx/redirection_hosts.js | 212 + backend/routes/nginx/streams.js | 209 + backend/routes/reports.js | 32 + backend/routes/schema.js | 44 + backend/routes/settings.js | 101 + backend/routes/tokens.js | 78 + backend/routes/users.js | 455 ++ backend/routes/version.js | 40 + backend/routes/wireguard.js | 162 + backend/schema/common.json | 241 + .../schema/components/access-list-object.json | 41 + backend/schema/components/audit-log-list.json | 7 + .../schema/components/audit-log-object.json | 47 + .../schema/components/certificate-list.json | 7 + .../schema/components/certificate-object.json | 86 + .../components/check-version-object.json | 23 + backend/schema/components/dead-host-list.json | 7 + .../schema/components/dead-host-object.json | 64 + .../schema/components/dns-providers-list.json | 23 + backend/schema/components/error-object.json | 16 + backend/schema/components/error.json | 9 + backend/schema/components/health-object.json | 46 + .../schema/components/permission-object.json | 48 + .../schema/components/proxy-host-list.json | 7 + .../schema/components/proxy-host-object.json | 178 + .../components/redirection-host-list.json | 7 + .../components/redirection-host-object.json | 116 + .../schema/components/security-schemes.json | 8 + backend/schema/components/setting-list.json | 7 + backend/schema/components/setting-object.json | 56 + backend/schema/components/stream-list.json | 7 + backend/schema/components/stream-object.json | 95 + .../schema/components/token-challenge.json | 18 + backend/schema/components/token-object.json | 18 + backend/schema/components/user-list.json | 7 + backend/schema/components/user-object.json | 116 + backend/schema/index.js | 46 + backend/schema/paths/audit-log/get.json | 53 + backend/schema/paths/audit-log/id/get.json | 72 + backend/schema/paths/get.json | 30 + .../schema/paths/nginx/access-lists/get.json | 51 + .../nginx/access-lists/listID/delete.json | 40 + .../paths/nginx/access-lists/listID/get.json | 54 + .../paths/nginx/access-lists/listID/put.json | 142 + .../schema/paths/nginx/access-lists/post.json | 135 + .../nginx/certificates/certID/delete.json | 40 + .../certificates/certID/download/get.json | 36 + .../paths/nginx/certificates/certID/get.json | 52 + .../nginx/certificates/certID/renew/post.json | 52 + .../certificates/certID/upload/post.json | 65 + .../nginx/certificates/dns-providers/get.json | 48 + .../schema/paths/nginx/certificates/get.json | 52 + .../schema/paths/nginx/certificates/post.json | 101 + .../nginx/certificates/test-http/post.json | 46 + .../nginx/certificates/validate/post.json | 100 + .../schema/paths/nginx/dead-hosts/get.json | 57 + .../paths/nginx/dead-hosts/hostID/delete.json | 40 + .../nginx/dead-hosts/hostID/disable/post.json | 60 + .../nginx/dead-hosts/hostID/enable/post.json | 60 + .../paths/nginx/dead-hosts/hostID/get.json | 57 + .../paths/nginx/dead-hosts/hostID/put.json | 108 + .../schema/paths/nginx/dead-hosts/post.json | 112 + .../schema/paths/nginx/proxy-hosts/get.json | 74 + .../nginx/proxy-hosts/hostID/delete.json | 40 + .../proxy-hosts/hostID/disable/post.json | 60 + .../nginx/proxy-hosts/hostID/enable/post.json | 60 + .../paths/nginx/proxy-hosts/hostID/get.json | 83 + .../paths/nginx/proxy-hosts/hostID/put.json | 154 + .../schema/paths/nginx/proxy-hosts/post.json | 151 + .../paths/nginx/redirection-hosts/get.json | 62 + .../redirection-hosts/hostID/delete.json | 40 + .../hostID/disable/post.json | 60 + .../redirection-hosts/hostID/enable/post.json | 60 + .../nginx/redirection-hosts/hostID/get.json | 62 + .../nginx/redirection-hosts/hostID/put.json | 128 + .../paths/nginx/redirection-hosts/post.json | 140 + backend/schema/paths/nginx/streams/get.json | 56 + backend/schema/paths/nginx/streams/post.json | 110 + .../paths/nginx/streams/streamID/delete.json | 40 + .../nginx/streams/streamID/disable/post.json | 60 + .../nginx/streams/streamID/enable/post.json | 60 + .../paths/nginx/streams/streamID/get.json | 56 + .../paths/nginx/streams/streamID/put.json | 103 + backend/schema/paths/reports/hosts/get.json | 54 + backend/schema/paths/schema/get.json | 10 + backend/schema/paths/settings/get.json | 35 + .../schema/paths/settings/settingID/get.json | 46 + .../schema/paths/settings/settingID/put.json | 87 + backend/schema/paths/tokens/2fa/post.json | 55 + backend/schema/paths/tokens/get.json | 30 + backend/schema/paths/tokens/post.json | 67 + backend/schema/paths/users/get.json | 74 + backend/schema/paths/users/post.json | 88 + .../users/userID/2fa/backup-codes/post.json | 92 + .../schema/paths/users/userID/2fa/delete.json | 48 + .../paths/users/userID/2fa/enable/post.json | 92 + .../schema/paths/users/userID/2fa/get.json | 57 + .../schema/paths/users/userID/2fa/post.json | 52 + .../schema/paths/users/userID/auth/put.json | 79 + backend/schema/paths/users/userID/delete.json | 40 + backend/schema/paths/users/userID/get.json | 58 + .../schema/paths/users/userID/login/post.json | 72 + .../paths/users/userID/permissions/put.json | 60 + backend/schema/paths/users/userID/put.json | 88 + backend/schema/paths/version/check/get.json | 26 + backend/schema/swagger.json | 362 + backend/scripts/install-certbot-plugins | 54 + backend/scripts/regenerate-config | 76 + backend/setup.js | 166 + backend/templates/_access.conf | 25 + backend/templates/_assets.conf | 4 + backend/templates/_certificates.conf | 15 + backend/templates/_certificates_stream.conf | 13 + backend/templates/_exploits.conf | 4 + backend/templates/_forced_ssl.conf | 11 + backend/templates/_header_comment.conf | 3 + backend/templates/_hsts.conf | 8 + backend/templates/_hsts_map.conf | 3 + backend/templates/_listen.conf | 20 + backend/templates/_location.conf | 24 + backend/templates/dead_host.conf | 28 + backend/templates/default.conf | 46 + backend/templates/ip_ranges.conf | 3 + backend/templates/letsencrypt-request.conf | 19 + backend/templates/proxy_host.conf | 53 + backend/templates/redirection_host.conf | 35 + backend/templates/stream.conf | 39 + backend/validate-schema.js | 19 + backend/yarn.lock | 3072 ++++++++ docker/.dive-ci | 14 + docker/Dockerfile | 73 + docker/ci.env | 8 + docker/ci/postgres/authentik.sql.gz | Bin 0 -> 1036690 bytes docker/dev/Dockerfile | 38 + docker/dev/dnsrouter-config.json | 28 + docker/dev/letsencrypt.ini | 7 + docker/dev/pdns-db.sql | 255 + docker/dev/squid.conf | 92 + docker/docker-compose.ci.mysql.yml | 28 + docker/docker-compose.ci.postgres.yml | 87 + docker/docker-compose.ci.sqlite.yml | 9 + docker/docker-compose.ci.yml | 133 + docker/docker-compose.dev.yml | 272 + docker/rootfs/etc/letsencrypt.ini | 6 + .../etc/logrotate.d/nginx-proxy-manager | 27 + docker/rootfs/etc/nginx/conf.d/default.conf | 39 + docker/rootfs/etc/nginx/conf.d/dev.conf | 37 + .../etc/nginx/conf.d/include/.gitignore | 1 + .../etc/nginx/conf.d/include/assets.conf | 31 + .../nginx/conf.d/include/block-exploits.conf | 136 + .../etc/nginx/conf.d/include/force-ssl.conf | 32 + .../etc/nginx/conf.d/include/ip_ranges.conf | 2 + .../include/letsencrypt-acme-challenge.conf | 30 + .../etc/nginx/conf.d/include/log-proxy.conf | 4 + .../etc/nginx/conf.d/include/log-stream.conf | 3 + .../etc/nginx/conf.d/include/proxy.conf | 8 + .../conf.d/include/ssl-cache-stream.conf | 2 + .../etc/nginx/conf.d/include/ssl-cache.conf | 2 + .../etc/nginx/conf.d/include/ssl-ciphers.conf | 4 + .../rootfs/etc/nginx/conf.d/production.conf | 33 + docker/rootfs/etc/nginx/mime.types | 96 + docker/rootfs/etc/nginx/nginx.conf | 111 + .../s6-rc.d/backend/dependencies.d/prepare | 0 .../rootfs/etc/s6-overlay/s6-rc.d/backend/run | 21 + .../etc/s6-overlay/s6-rc.d/backend/type | 1 + .../s6-rc.d/frontend/dependencies.d/prepare | 0 .../etc/s6-overlay/s6-rc.d/frontend/run | 21 + .../etc/s6-overlay/s6-rc.d/frontend/type | 1 + .../s6-rc.d/nginx/dependencies.d/prepare | 0 .../rootfs/etc/s6-overlay/s6-rc.d/nginx/run | 9 + .../rootfs/etc/s6-overlay/s6-rc.d/nginx/type | 1 + .../etc/s6-overlay/s6-rc.d/prepare/00-all.sh | 22 + .../s6-rc.d/prepare/10-usergroup.sh | 40 + .../s6-overlay/s6-rc.d/prepare/20-paths.sh | 41 + .../s6-rc.d/prepare/30-ownership.sh | 60 + .../s6-overlay/s6-rc.d/prepare/40-dynamic.sh | 16 + .../etc/s6-overlay/s6-rc.d/prepare/50-ipv6.sh | 42 + .../s6-overlay/s6-rc.d/prepare/60-secrets.sh | 30 + .../s6-overlay/s6-rc.d/prepare/90-banner.sh | 18 + .../s6-rc.d/prepare/dependencies.d/base | 0 .../etc/s6-overlay/s6-rc.d/prepare/type | 1 + .../rootfs/etc/s6-overlay/s6-rc.d/prepare/up | 2 + .../s6-rc.d/user/contents.d/backend | 0 .../s6-rc.d/user/contents.d/frontend | 0 .../s6-overlay/s6-rc.d/user/contents.d/nginx | 0 .../s6-rc.d/user/contents.d/prepare | 0 docker/rootfs/root/.bashrc | 22 + docker/rootfs/usr/bin/check-health | 11 + docker/rootfs/usr/bin/common.sh | 68 + docker/rootfs/var/www/html/index.html | 24 + docker/scripts/install-s6 | 35 + docs/.gitignore | 14 + docs/.vitepress/config.mts | 61 + docs/.vitepress/theme/custom.css | 28 + docs/.vitepress/theme/index.ts | 4 + docs/package.json | 12 + docs/scripts/set-version.sh | 17 + docs/src/advanced-config/index.md | 250 + docs/src/faq/index.md | 32 + docs/src/guide/index.md | 117 + docs/src/index.md | 32 + docs/src/public/github.png | Bin 0 -> 13552 bytes docs/src/public/icon.png | Bin 0 -> 18021 bytes docs/src/public/logo.svg | 1 + docs/src/public/robots.txt | 2 + .../public/screenshots/dark/01_first-user.png | Bin 0 -> 34413 bytes docs/src/public/screenshots/dark/02_login.png | Bin 0 -> 30038 bytes .../public/screenshots/dark/03_dashboard.png | Bin 0 -> 41014 bytes .../screenshots/dark/04_proxy-hosts.png | Bin 0 -> 65543 bytes .../screenshots/dark/05_redirection_hosts.png | Bin 0 -> 65943 bytes .../public/screenshots/dark/06_streams.png | Bin 0 -> 51261 bytes .../public/screenshots/dark/07_404_hosts.png | Bin 0 -> 47706 bytes .../screenshots/dark/08_access-lists.png | Bin 0 -> 49392 bytes .../screenshots/dark/09_certificates.png | Bin 0 -> 54680 bytes docs/src/public/screenshots/dark/10_users.png | Bin 0 -> 60073 bytes .../public/screenshots/dark/11_audit-logs.png | Bin 0 -> 115408 bytes .../public/screenshots/dark/12_settings.png | Bin 0 -> 56492 bytes .../screenshots/dark/13_add-proxy_host.png | Bin 0 -> 87959 bytes .../dark/14_add_proxy_host_dns.png | Bin 0 -> 101244 bytes .../screenshots/light/01_first-user.png | Bin 0 -> 32833 bytes .../src/public/screenshots/light/02_login.png | Bin 0 -> 30428 bytes .../public/screenshots/light/03_dashboard.png | Bin 0 -> 43233 bytes .../screenshots/light/04_proxy-hosts.png | Bin 0 -> 67728 bytes .../light/05_redirection_hosts.png | Bin 0 -> 68536 bytes .../public/screenshots/light/06_streams.png | Bin 0 -> 53240 bytes .../public/screenshots/light/07_404_hosts.png | Bin 0 -> 49768 bytes .../screenshots/light/08_access-lists.png | Bin 0 -> 52885 bytes .../screenshots/light/09_certificates.png | Bin 0 -> 56739 bytes .../src/public/screenshots/light/10_users.png | Bin 0 -> 60544 bytes .../screenshots/light/11_audit-logs.png | Bin 0 -> 118792 bytes .../public/screenshots/light/12_settings.png | Bin 0 -> 58507 bytes .../screenshots/light/13_add-proxy_host.png | Bin 0 -> 80401 bytes .../light/14_add_proxy_host_dns.png | Bin 0 -> 94621 bytes docs/src/screenshots/index.md | 47 + docs/src/setup/index.md | 191 + docs/src/third-party/index.md | 20 + docs/src/upgrading/index.md | 16 + docs/yarn.lock | 1232 ++++ frontend/.gitignore | 24 + frontend/biome.json | 92 + frontend/check-locales.cjs | 166 + frontend/index.html | 45 + frontend/package-lock.json | 6240 +++++++++++++++++ frontend/package.json | 66 + frontend/public/images/default-avatar.jpg | Bin 0 -> 2506 bytes .../images/favicon/android-chrome-192x192.png | Bin 0 -> 18021 bytes .../images/favicon/android-chrome-512x512.png | Bin 0 -> 56854 bytes .../images/favicon/apple-touch-icon.png | Bin 0 -> 16709 bytes .../public/images/favicon/browserconfig.xml | 9 + .../public/images/favicon/favicon-16x16.png | Bin 0 -> 1512 bytes .../public/images/favicon/favicon-32x32.png | Bin 0 -> 2696 bytes frontend/public/images/favicon/favicon.ico | Bin 0 -> 15086 bytes .../public/images/favicon/mstile-150x150.png | Bin 0 -> 12397 bytes .../images/favicon/safari-pinned-tab.svg | 85 + .../public/images/favicon/site.webmanifest | 19 + frontend/public/images/logo-256.png | Bin 0 -> 31064 bytes .../images/logo-bold-horizontal-grey.svg | 1 + frontend/public/images/logo-no-text.svg | 93 + .../images/logo-text-horizontal-grey.png | Bin 0 -> 22203 bytes .../public/images/logo-text-vertical-grey.png | Bin 0 -> 14281 bytes frontend/public/images/unhealthy.svg | 63 + frontend/src/App.css | 118 + frontend/src/App.tsx | 41 + frontend/src/Router.tsx | 85 + frontend/src/api/backend/base.ts | 163 + frontend/src/api/backend/checkVersion.ts | 8 + frontend/src/api/backend/createAccessList.ts | 9 + frontend/src/api/backend/createCertificate.ts | 9 + frontend/src/api/backend/createDeadHost.ts | 9 + frontend/src/api/backend/createProxyHost.ts | 9 + .../src/api/backend/createRedirectionHost.ts | 9 + frontend/src/api/backend/createStream.ts | 9 + frontend/src/api/backend/createUser.ts | 24 + frontend/src/api/backend/deleteAccessList.ts | 7 + frontend/src/api/backend/deleteCertificate.ts | 7 + frontend/src/api/backend/deleteDeadHost.ts | 7 + frontend/src/api/backend/deleteProxyHost.ts | 7 + .../src/api/backend/deleteRedirectionHost.ts | 7 + frontend/src/api/backend/deleteStream.ts | 7 + frontend/src/api/backend/deleteUser.ts | 7 + .../src/api/backend/downloadCertificate.ts | 10 + frontend/src/api/backend/expansions.ts | 6 + frontend/src/api/backend/getAccessList.ts | 13 + frontend/src/api/backend/getAccessLists.ts | 13 + frontend/src/api/backend/getAuditLog.ts | 13 + frontend/src/api/backend/getAuditLogs.ts | 13 + frontend/src/api/backend/getCertificate.ts | 13 + .../api/backend/getCertificateDNSProviders.ts | 9 + frontend/src/api/backend/getCertificates.ts | 13 + frontend/src/api/backend/getDeadHost.ts | 13 + frontend/src/api/backend/getDeadHosts.ts | 13 + frontend/src/api/backend/getHealth.ts | 8 + frontend/src/api/backend/getHostsReport.ts | 7 + frontend/src/api/backend/getProxyHost.ts | 13 + frontend/src/api/backend/getProxyHosts.ts | 13 + .../src/api/backend/getRedirectionHost.ts | 13 + .../src/api/backend/getRedirectionHosts.ts | 13 + frontend/src/api/backend/getSetting.ts | 12 + frontend/src/api/backend/getSettings.ts | 12 + frontend/src/api/backend/getStream.ts | 13 + frontend/src/api/backend/getStreams.ts | 13 + frontend/src/api/backend/getToken.ts | 22 + frontend/src/api/backend/getUser.ts | 14 + frontend/src/api/backend/getUsers.ts | 13 + frontend/src/api/backend/helpers.ts | 54 + frontend/src/api/backend/index.ts | 64 + frontend/src/api/backend/loginAsUser.ts | 8 + frontend/src/api/backend/models.ts | 210 + frontend/src/api/backend/refreshToken.ts | 8 + frontend/src/api/backend/renewCertificate.ts | 8 + frontend/src/api/backend/responseTypes.ts | 46 + frontend/src/api/backend/setPermissions.ts | 10 + .../src/api/backend/testHttpCertificate.ts | 10 + frontend/src/api/backend/toggleDeadHost.ts | 7 + frontend/src/api/backend/toggleProxyHost.ts | 7 + .../src/api/backend/toggleRedirectionHost.ts | 7 + frontend/src/api/backend/toggleStream.ts | 7 + frontend/src/api/backend/toggleUser.ts | 10 + frontend/src/api/backend/twoFactor.ts | 37 + frontend/src/api/backend/updateAccessList.ts | 12 + frontend/src/api/backend/updateAuth.ts | 18 + frontend/src/api/backend/updateDeadHost.ts | 12 + frontend/src/api/backend/updateProxyHost.ts | 12 + .../src/api/backend/updateRedirectionHost.ts | 12 + frontend/src/api/backend/updateSetting.ts | 12 + frontend/src/api/backend/updateStream.ts | 12 + frontend/src/api/backend/updateUser.ts | 12 + frontend/src/api/backend/uploadCertificate.ts | 9 + .../src/api/backend/validateCertificate.ts | 9 + frontend/src/api/backend/wireguard.ts | 61 + frontend/src/components/Button.tsx | 64 + frontend/src/components/EmptyData.tsx | 63 + frontend/src/components/ErrorNotFound.tsx | 25 + frontend/src/components/Flag.tsx | 24 + .../components/Form/AccessClientFields.tsx | 131 + frontend/src/components/Form/AccessField.tsx | 101 + .../src/components/Form/BasicAuthFields.tsx | 105 + .../Form/DNSProviderFields.module.css | 8 + .../src/components/Form/DNSProviderFields.tsx | 132 + .../src/components/Form/DomainNamesField.tsx | 85 + .../Form/LocationsFields.module.css | 3 + .../src/components/Form/LocationsFields.tsx | 185 + .../src/components/Form/NginxConfigField.tsx | 41 + .../components/Form/SSLCertificateField.tsx | 140 + .../src/components/Form/SSLOptionsFields.tsx | 175 + frontend/src/components/Form/index.ts | 9 + frontend/src/components/HasPermission.tsx | 52 + frontend/src/components/Loading.module.css | 3 + frontend/src/components/Loading.tsx | 23 + frontend/src/components/LoadingPage.tsx | 15 + .../src/components/LocalePicker.module.css | 8 + frontend/src/components/LocalePicker.tsx | 53 + frontend/src/components/NavLink.tsx | 29 + frontend/src/components/Page.module.css | 5 + frontend/src/components/Page.tsx | 10 + frontend/src/components/SiteContainer.tsx | 6 + frontend/src/components/SiteFooter.tsx | 78 + frontend/src/components/SiteHeader.module.css | 8 + frontend/src/components/SiteHeader.tsx | 141 + frontend/src/components/SiteMenu.tsx | 213 + frontend/src/components/Table/EmptyRow.tsx | 16 + .../Table/Formatter/AccessListformatter.tsx | 24 + .../Table/Formatter/CertificateFormatter.tsx | 18 + .../Formatter/CertificateInUseFormatter.tsx | 82 + .../Table/Formatter/DateFormatter.tsx | 21 + .../Table/Formatter/DomainsFormatter.tsx | 73 + .../Table/Formatter/EmailFormatter.tsx | 10 + .../Table/Formatter/EventFormatter.tsx | 81 + .../Table/Formatter/GravatarFormatter.tsx | 19 + .../Table/Formatter/RolesFormatter.tsx | 20 + .../Table/Formatter/TrueFalseFormatter.tsx | 24 + .../Formatter/ValueWithDateFormatter.tsx | 23 + .../src/components/Table/Formatter/index.ts | 11 + frontend/src/components/Table/TableBody.tsx | 37 + frontend/src/components/Table/TableHeader.tsx | 26 + frontend/src/components/Table/TableHelpers.ts | 64 + frontend/src/components/Table/TableLayout.tsx | 24 + frontend/src/components/Table/index.ts | 4 + .../src/components/ThemeSwitcher.module.css | 15 + frontend/src/components/ThemeSwitcher.tsx | 41 + frontend/src/components/Unhealthy.tsx | 17 + frontend/src/components/index.ts | 18 + frontend/src/context/AuthContext.tsx | 127 + frontend/src/context/LocaleContext.tsx | 38 + frontend/src/context/ThemeContext.tsx | 70 + frontend/src/context/index.ts | 3 + frontend/src/declarations.d.ts | 1 + frontend/src/hooks/index.ts | 22 + frontend/src/hooks/useAccessList.ts | 60 + frontend/src/hooks/useAccessLists.ts | 17 + frontend/src/hooks/useAuditLog.ts | 17 + frontend/src/hooks/useAuditLogs.ts | 17 + frontend/src/hooks/useCertificate.ts | 17 + frontend/src/hooks/useCertificates.ts | 17 + frontend/src/hooks/useCheckVersion.ts | 18 + frontend/src/hooks/useDeadHost.ts | 60 + frontend/src/hooks/useDeadHosts.ts | 17 + frontend/src/hooks/useDnsProviders.ts | 17 + frontend/src/hooks/useHealth.ts | 18 + frontend/src/hooks/useHostReport.ts | 18 + frontend/src/hooks/useProxyHost.ts | 68 + frontend/src/hooks/useProxyHosts.ts | 17 + frontend/src/hooks/useRedirectionHost.ts | 71 + frontend/src/hooks/useRedirectionHosts.ts | 17 + frontend/src/hooks/useSetting.ts | 40 + frontend/src/hooks/useStream.ts | 56 + frontend/src/hooks/useStreams.ts | 17 + frontend/src/hooks/useTheme.ts | 8 + frontend/src/hooks/useUser.ts | 54 + frontend/src/hooks/useUsers.ts | 17 + frontend/src/hooks/useWireGuard.ts | 61 + frontend/src/locale/IntlProvider.tsx | 143 + frontend/src/locale/README.md | 50 + frontend/src/locale/Utils.test.tsx | 74 + frontend/src/locale/Utils.ts | 46 + frontend/src/locale/index.ts | 2 + frontend/src/locale/scripts/locale-sort.cjs | 69 + frontend/src/locale/scripts/locale-sort.sh | 36 + .../src/locale/src/HelpDoc/bg/AccessLists.md | 7 + .../src/locale/src/HelpDoc/bg/Certificates.md | 21 + .../src/locale/src/HelpDoc/bg/DeadHosts.md | 10 + .../src/locale/src/HelpDoc/bg/ProxyHosts.md | 7 + .../locale/src/HelpDoc/bg/RedirectionHosts.md | 7 + frontend/src/locale/src/HelpDoc/bg/Streams.md | 6 + frontend/src/locale/src/HelpDoc/bg/index.ts | 6 + .../src/locale/src/HelpDoc/cs/AccessLists.md | 7 + .../src/locale/src/HelpDoc/cs/Certificates.md | 32 + .../src/locale/src/HelpDoc/cs/DeadHosts.md | 10 + .../src/locale/src/HelpDoc/cs/ProxyHosts.md | 7 + .../locale/src/HelpDoc/cs/RedirectionHosts.md | 7 + frontend/src/locale/src/HelpDoc/cs/Streams.md | 6 + frontend/src/locale/src/HelpDoc/cs/index.ts | 6 + .../src/locale/src/HelpDoc/de/AccessLists.md | 7 + .../src/locale/src/HelpDoc/de/Certificates.md | 32 + .../src/locale/src/HelpDoc/de/DeadHosts.md | 10 + .../src/locale/src/HelpDoc/de/ProxyHosts.md | 7 + .../locale/src/HelpDoc/de/RedirectionHosts.md | 7 + frontend/src/locale/src/HelpDoc/de/Streams.md | 6 + frontend/src/locale/src/HelpDoc/de/index.ts | 6 + .../src/locale/src/HelpDoc/en/AccessLists.md | 7 + .../src/locale/src/HelpDoc/en/Certificates.md | 32 + .../src/locale/src/HelpDoc/en/DeadHosts.md | 10 + .../src/locale/src/HelpDoc/en/ProxyHosts.md | 7 + .../locale/src/HelpDoc/en/RedirectionHosts.md | 7 + frontend/src/locale/src/HelpDoc/en/Streams.md | 6 + frontend/src/locale/src/HelpDoc/en/index.ts | 6 + .../src/locale/src/HelpDoc/es/AccessLists.md | 7 + .../src/locale/src/HelpDoc/es/Certificates.md | 32 + .../src/locale/src/HelpDoc/es/DeadHosts.md | 10 + .../src/locale/src/HelpDoc/es/ProxyHosts.md | 7 + .../locale/src/HelpDoc/es/RedirectionHosts.md | 7 + frontend/src/locale/src/HelpDoc/es/Streams.md | 6 + frontend/src/locale/src/HelpDoc/es/index.ts | 6 + .../src/locale/src/HelpDoc/et/AccessLists.md | 7 + .../src/locale/src/HelpDoc/et/Certificates.md | 26 + .../src/locale/src/HelpDoc/et/DeadHosts.md | 9 + .../src/locale/src/HelpDoc/et/ProxyHosts.md | 7 + .../locale/src/HelpDoc/et/RedirectionHosts.md | 5 + frontend/src/locale/src/HelpDoc/et/Streams.md | 5 + frontend/src/locale/src/HelpDoc/et/index.ts | 6 + .../src/locale/src/HelpDoc/fr/AccessLists.md | 7 + .../src/locale/src/HelpDoc/fr/Certificates.md | 23 + .../src/locale/src/HelpDoc/fr/DeadHosts.md | 7 + .../src/locale/src/HelpDoc/fr/ProxyHosts.md | 7 + .../locale/src/HelpDoc/fr/RedirectionHosts.md | 5 + frontend/src/locale/src/HelpDoc/fr/Streams.md | 5 + frontend/src/locale/src/HelpDoc/fr/index.ts | 6 + .../src/locale/src/HelpDoc/ga/AccessLists.md | 7 + .../src/locale/src/HelpDoc/ga/Certificates.md | 21 + .../src/locale/src/HelpDoc/ga/DeadHosts.md | 7 + .../src/locale/src/HelpDoc/ga/ProxyHosts.md | 7 + .../locale/src/HelpDoc/ga/RedirectionHosts.md | 5 + frontend/src/locale/src/HelpDoc/ga/Streams.md | 5 + frontend/src/locale/src/HelpDoc/ga/index.ts | 6 + .../src/locale/src/HelpDoc/hu/AccessLists.md | 7 + .../src/locale/src/HelpDoc/hu/Certificates.md | 21 + .../src/locale/src/HelpDoc/hu/DeadHosts.md | 7 + .../src/locale/src/HelpDoc/hu/ProxyHosts.md | 7 + .../locale/src/HelpDoc/hu/RedirectionHosts.md | 5 + frontend/src/locale/src/HelpDoc/hu/Streams.md | 5 + frontend/src/locale/src/HelpDoc/hu/index.ts | 6 + .../src/locale/src/HelpDoc/id/AccessLists.md | 7 + .../src/locale/src/HelpDoc/id/Certificates.md | 32 + .../src/locale/src/HelpDoc/id/DeadHosts.md | 10 + .../src/locale/src/HelpDoc/id/ProxyHosts.md | 7 + .../locale/src/HelpDoc/id/RedirectionHosts.md | 5 + frontend/src/locale/src/HelpDoc/id/Streams.md | 6 + frontend/src/locale/src/HelpDoc/id/index.ts | 6 + frontend/src/locale/src/HelpDoc/index.ts | 39 + .../src/locale/src/HelpDoc/it/AccessLists.md | 7 + .../src/locale/src/HelpDoc/it/Certificates.md | 24 + .../src/locale/src/HelpDoc/it/DeadHosts.md | 9 + .../src/locale/src/HelpDoc/it/ProxyHosts.md | 7 + .../locale/src/HelpDoc/it/RedirectionHosts.md | 7 + frontend/src/locale/src/HelpDoc/it/Streams.md | 6 + frontend/src/locale/src/HelpDoc/it/index.ts | 6 + .../src/locale/src/HelpDoc/ja/AccessLists.md | 8 + .../src/locale/src/HelpDoc/ja/Certificates.md | 21 + .../src/locale/src/HelpDoc/ja/DeadHosts.md | 7 + .../src/locale/src/HelpDoc/ja/ProxyHosts.md | 7 + .../locale/src/HelpDoc/ja/RedirectionHosts.md | 5 + frontend/src/locale/src/HelpDoc/ja/Streams.md | 5 + frontend/src/locale/src/HelpDoc/ja/index.ts | 6 + .../src/locale/src/HelpDoc/ko/AccessLists.md | 11 + .../src/locale/src/HelpDoc/ko/Certificates.md | 28 + .../src/locale/src/HelpDoc/ko/DeadHosts.md | 10 + .../src/locale/src/HelpDoc/ko/ProxyHosts.md | 8 + .../locale/src/HelpDoc/ko/RedirectionHosts.md | 7 + frontend/src/locale/src/HelpDoc/ko/Streams.md | 7 + frontend/src/locale/src/HelpDoc/ko/index.ts | 7 + .../src/locale/src/HelpDoc/nl/AccessLists.md | 7 + .../src/locale/src/HelpDoc/nl/Certificates.md | 31 + .../src/locale/src/HelpDoc/nl/DeadHosts.md | 10 + .../src/locale/src/HelpDoc/nl/ProxyHosts.md | 7 + .../locale/src/HelpDoc/nl/RedirectionHosts.md | 7 + frontend/src/locale/src/HelpDoc/nl/Streams.md | 6 + frontend/src/locale/src/HelpDoc/nl/index.ts | 6 + .../src/locale/src/HelpDoc/no/AccessLists.md | 7 + .../src/locale/src/HelpDoc/no/Certificates.md | 29 + .../src/locale/src/HelpDoc/no/DeadHosts.md | 10 + .../src/locale/src/HelpDoc/no/ProxyHosts.md | 7 + .../locale/src/HelpDoc/no/RedirectionHosts.md | 7 + frontend/src/locale/src/HelpDoc/no/Streams.md | 6 + frontend/src/locale/src/HelpDoc/no/index.ts | 6 + .../src/locale/src/HelpDoc/pl/AccessLists.md | 7 + .../src/locale/src/HelpDoc/pl/Certificates.md | 22 + .../src/locale/src/HelpDoc/pl/DeadHosts.md | 7 + .../src/locale/src/HelpDoc/pl/ProxyHosts.md | 7 + .../locale/src/HelpDoc/pl/RedirectionHosts.md | 5 + frontend/src/locale/src/HelpDoc/pl/Streams.md | 5 + frontend/src/locale/src/HelpDoc/pl/index.ts | 6 + .../src/locale/src/HelpDoc/pt/AccessLists.md | 11 + .../src/locale/src/HelpDoc/pt/Certificates.md | 31 + .../src/locale/src/HelpDoc/pt/DeadHosts.md | 9 + .../src/locale/src/HelpDoc/pt/ProxyHosts.md | 7 + .../locale/src/HelpDoc/pt/RedirectionHosts.md | 7 + frontend/src/locale/src/HelpDoc/pt/Streams.md | 6 + frontend/src/locale/src/HelpDoc/pt/index.ts | 6 + .../src/locale/src/HelpDoc/ru/AccessLists.md | 7 + .../src/locale/src/HelpDoc/ru/Certificates.md | 21 + .../src/locale/src/HelpDoc/ru/DeadHosts.md | 7 + .../src/locale/src/HelpDoc/ru/ProxyHosts.md | 7 + .../locale/src/HelpDoc/ru/RedirectionHosts.md | 5 + frontend/src/locale/src/HelpDoc/ru/Streams.md | 5 + frontend/src/locale/src/HelpDoc/ru/index.ts | 6 + .../src/locale/src/HelpDoc/sk/AccessLists.md | 7 + .../src/locale/src/HelpDoc/sk/Certificates.md | 32 + .../src/locale/src/HelpDoc/sk/DeadHosts.md | 10 + .../src/locale/src/HelpDoc/sk/ProxyHosts.md | 7 + .../locale/src/HelpDoc/sk/RedirectionHosts.md | 7 + frontend/src/locale/src/HelpDoc/sk/Streams.md | 6 + frontend/src/locale/src/HelpDoc/sk/index.ts | 6 + .../src/locale/src/HelpDoc/tr/AccessLists.md | 8 + .../src/locale/src/HelpDoc/tr/Certificates.md | 29 + .../src/locale/src/HelpDoc/tr/DeadHosts.md | 10 + .../src/locale/src/HelpDoc/tr/ProxyHosts.md | 8 + .../locale/src/HelpDoc/tr/RedirectionHosts.md | 8 + frontend/src/locale/src/HelpDoc/tr/Streams.md | 7 + frontend/src/locale/src/HelpDoc/tr/index.ts | 7 + .../src/locale/src/HelpDoc/vi/AccessLists.md | 11 + .../src/locale/src/HelpDoc/vi/Certificates.md | 25 + .../src/locale/src/HelpDoc/vi/DeadHosts.md | 8 + .../src/locale/src/HelpDoc/vi/ProxyHosts.md | 7 + .../locale/src/HelpDoc/vi/RedirectionHosts.md | 5 + frontend/src/locale/src/HelpDoc/vi/Streams.md | 6 + frontend/src/locale/src/HelpDoc/vi/index.ts | 6 + .../src/locale/src/HelpDoc/zh/AccessLists.md | 7 + .../src/locale/src/HelpDoc/zh/Certificates.md | 21 + .../src/locale/src/HelpDoc/zh/DeadHosts.md | 7 + .../src/locale/src/HelpDoc/zh/ProxyHosts.md | 7 + .../locale/src/HelpDoc/zh/RedirectionHosts.md | 5 + frontend/src/locale/src/HelpDoc/zh/Streams.md | 5 + frontend/src/locale/src/HelpDoc/zh/index.ts | 6 + frontend/src/locale/src/bg.json | 695 ++ frontend/src/locale/src/cs.json | 770 ++ frontend/src/locale/src/de.json | 656 ++ frontend/src/locale/src/en.json | 776 ++ frontend/src/locale/src/es.json | 692 ++ frontend/src/locale/src/et.json | 776 ++ frontend/src/locale/src/fr.json | 647 ++ frontend/src/locale/src/ga.json | 683 ++ frontend/src/locale/src/hu.json | 770 ++ frontend/src/locale/src/id.json | 683 ++ frontend/src/locale/src/it.json | 659 ++ frontend/src/locale/src/ja.json | 653 ++ frontend/src/locale/src/ko.json | 695 ++ frontend/src/locale/src/lang-list.json | 68 + frontend/src/locale/src/nl.json | 659 ++ frontend/src/locale/src/no.json | 776 ++ frontend/src/locale/src/pl.json | 662 ++ frontend/src/locale/src/pt.json | 683 ++ frontend/src/locale/src/ru.json | 656 ++ frontend/src/locale/src/sk.json | 770 ++ frontend/src/locale/src/tr.json | 683 ++ frontend/src/locale/src/vi.json | 659 ++ frontend/src/locale/src/zh.json | 662 ++ frontend/src/main.tsx | 13 + frontend/src/modals/AccessListModal.tsx | 292 + frontend/src/modals/ChangePasswordModal.tsx | 170 + .../src/modals/CustomCertificateModal.tsx | 232 + frontend/src/modals/DNSCertificateModal.tsx | 117 + frontend/src/modals/DeadHostModal.tsx | 174 + frontend/src/modals/DeleteConfirmModal.tsx | 98 + frontend/src/modals/EventDetailsModal.tsx | 72 + frontend/src/modals/HTTPCertificateModal.tsx | 218 + frontend/src/modals/HelpModal.tsx | 54 + .../src/modals/PermissionsModal.module.css | 4 + frontend/src/modals/PermissionsModal.tsx | 287 + frontend/src/modals/ProxyHostModal.tsx | 377 + frontend/src/modals/RedirectionHostModal.tsx | 337 + frontend/src/modals/RenewCertificateModal.tsx | 74 + frontend/src/modals/SetPasswordModal.tsx | 138 + frontend/src/modals/StreamModal.tsx | 325 + frontend/src/modals/TwoFactorModal.tsx | 368 + frontend/src/modals/UserModal.tsx | 246 + frontend/src/modals/WireGuardClientModal.tsx | 65 + frontend/src/modals/WireGuardQRModal.tsx | 83 + frontend/src/modals/index.ts | 17 + frontend/src/modules/AuthStore.ts | 95 + frontend/src/modules/Permissions.ts | 49 + frontend/src/modules/Validations.tsx | 103 + frontend/src/notifications/Msg.module.css | 14 + frontend/src/notifications/Msg.tsx | 36 + frontend/src/notifications/helpers.tsx | 38 + frontend/src/notifications/index.ts | 1 + frontend/src/pages/Access/Table.tsx | 144 + frontend/src/pages/Access/TableWrapper.tsx | 104 + frontend/src/pages/Access/index.tsx | 13 + frontend/src/pages/AuditLog/Table.tsx | 70 + frontend/src/pages/AuditLog/TableWrapper.tsx | 36 + frontend/src/pages/AuditLog/index.tsx | 13 + frontend/src/pages/Certificates/Table.tsx | 235 + .../src/pages/Certificates/TableWrapper.tsx | 161 + frontend/src/pages/Certificates/index.tsx | 13 + frontend/src/pages/Dashboard/index.tsx | 132 + frontend/src/pages/Login/index.module.css | 3 + frontend/src/pages/Login/index.tsx | 204 + frontend/src/pages/Nginx/DeadHosts/Table.tsx | 158 + .../pages/Nginx/DeadHosts/TableWrapper.tsx | 110 + frontend/src/pages/Nginx/DeadHosts/index.tsx | 13 + frontend/src/pages/Nginx/ProxyHosts/Table.tsx | 174 + .../pages/Nginx/ProxyHosts/TableWrapper.tsx | 116 + frontend/src/pages/Nginx/ProxyHosts/index.tsx | 13 + .../pages/Nginx/RedirectionHosts/Table.tsx | 179 + .../Nginx/RedirectionHosts/TableWrapper.tsx | 116 + .../pages/Nginx/RedirectionHosts/index.tsx | 13 + frontend/src/pages/Nginx/Streams/Table.tsx | 187 + .../src/pages/Nginx/Streams/TableWrapper.tsx | 114 + frontend/src/pages/Nginx/Streams/index.tsx | 13 + frontend/src/pages/Settings/DefaultSite.tsx | 269 + frontend/src/pages/Settings/Layout.tsx | 40 + frontend/src/pages/Settings/index.tsx | 13 + frontend/src/pages/Setup/index.module.css | 10 + frontend/src/pages/Setup/index.tsx | 196 + frontend/src/pages/Users/Table.tsx | 245 + frontend/src/pages/Users/TableWrapper.tsx | 123 + frontend/src/pages/Users/index.tsx | 13 + frontend/src/pages/WireGuard/index.tsx | 292 + frontend/src/vite-env.d.ts | 1 + frontend/tsconfig.json | 43 + frontend/tsconfig.node.json | 10 + frontend/vite.config.ts | 61 + frontend/vitest-setup.js | 1 + frontend/yarn.lock | 2759 ++++++++ install.sh | 191 + scripts/.common.sh | 27 + scripts/build-project.sh | 31 + scripts/buildx | 35 + scripts/ci/frontend-build | 24 + scripts/ci/fulltest-cypress | 91 + scripts/ci/test-and-build | 30 + scripts/cypress-dev | 13 + scripts/destroy-dev | 13 + scripts/docs-build | 14 + scripts/docs-upload | 52 + scripts/start-dev | 62 + scripts/stop-dev | 13 + scripts/wait-healthy | 33 + test/.eslintrc.json | 76 + test/.gitignore | 2 + test/.prettierrc | 11 + test/README.md | 46 + test/cypress/Dockerfile | 23 + test/cypress/config/ci.mjs | 23 + test/cypress/config/dev.mjs | 23 + test/cypress/e2e/api/Certificates.cy.js | 98 + test/cypress/e2e/api/Dashboard.cy.js | 26 + test/cypress/e2e/api/FullCertProvision.cy.js | 59 + test/cypress/e2e/api/Health.cy.js | 28 + test/cypress/e2e/api/Ldap.cy.js | 65 + test/cypress/e2e/api/OAuth.cy.js | 97 + test/cypress/e2e/api/ProxyHosts.cy.js | 48 + test/cypress/e2e/api/Settings.cy.js | 125 + test/cypress/e2e/api/Streams.cy.js | 211 + test/cypress/e2e/api/SwaggerSchema.cy.js | 7 + test/cypress/e2e/api/Users.cy.js | 49 + .../cypress/fixtures/test.example.com-key.pem | 28 + test/cypress/fixtures/test.example.com.pem | 26 + test/cypress/plugins/backendApi/client.mjs | 148 + test/cypress/plugins/backendApi/logger.mjs | 7 + test/cypress/plugins/backendApi/task.mjs | 100 + test/cypress/plugins/index.mjs | 27 + test/cypress/support/commands.mjs | 153 + test/cypress/support/e2e.js | 7 + test/jsconfig.json | 13 + test/multi-reporter.json | 9 + test/package.json | 31 + test/vacuum-rules.yaml | 971 +++ test/vacuum.conf.yaml | 1 + test/yarn.lock | 2306 ++++++ 856 files changed, 74374 insertions(+) create mode 100644 .cursorrules create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/dns_challenge_request.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/stale.yml create mode 100644 .gitignore create mode 100644 .version create mode 100644 AI_CONTEXT.md create mode 100644 LICENSE create mode 100644 README.md create mode 100644 backend/.gitignore create mode 100644 backend/app.js create mode 100644 backend/biome.json create mode 100644 backend/certbot/README.md create mode 100644 backend/certbot/dns-plugins.json create mode 100644 backend/config/README.md create mode 100644 backend/config/default.json create mode 100644 backend/config/sqlite-test-db.json create mode 100644 backend/db.js create mode 100644 backend/index.js create mode 100644 backend/internal/2fa.js create mode 100644 backend/internal/access-list.js create mode 100644 backend/internal/audit-log.js create mode 100644 backend/internal/certificate.js create mode 100644 backend/internal/dead-host.js create mode 100644 backend/internal/host.js create mode 100644 backend/internal/ip_ranges.js create mode 100644 backend/internal/nginx.js create mode 100644 backend/internal/proxy-host.js create mode 100644 backend/internal/redirection-host.js create mode 100644 backend/internal/remote-version.js create mode 100644 backend/internal/report.js create mode 100644 backend/internal/setting.js create mode 100644 backend/internal/stream.js create mode 100644 backend/internal/token.js create mode 100644 backend/internal/user.js create mode 100644 backend/internal/wireguard.js create mode 100644 backend/knexfile.js create mode 100644 backend/lib/access.js create mode 100644 backend/lib/access/access_lists-create.json create mode 100644 backend/lib/access/access_lists-delete.json create mode 100644 backend/lib/access/access_lists-get.json create mode 100644 backend/lib/access/access_lists-list.json create mode 100644 backend/lib/access/access_lists-update.json create mode 100644 backend/lib/access/auditlog-list.json create mode 100644 backend/lib/access/certificates-create.json create mode 100644 backend/lib/access/certificates-delete.json create mode 100644 backend/lib/access/certificates-get.json create mode 100644 backend/lib/access/certificates-list.json create mode 100644 backend/lib/access/certificates-update.json create mode 100644 backend/lib/access/dead_hosts-create.json create mode 100644 backend/lib/access/dead_hosts-delete.json create mode 100644 backend/lib/access/dead_hosts-get.json create mode 100644 backend/lib/access/dead_hosts-list.json create mode 100644 backend/lib/access/dead_hosts-update.json create mode 100644 backend/lib/access/permissions.json create mode 100644 backend/lib/access/proxy_hosts-create.json create mode 100644 backend/lib/access/proxy_hosts-delete.json create mode 100644 backend/lib/access/proxy_hosts-get.json create mode 100644 backend/lib/access/proxy_hosts-list.json create mode 100644 backend/lib/access/proxy_hosts-update.json create mode 100644 backend/lib/access/redirection_hosts-create.json create mode 100644 backend/lib/access/redirection_hosts-delete.json create mode 100644 backend/lib/access/redirection_hosts-get.json create mode 100644 backend/lib/access/redirection_hosts-list.json create mode 100644 backend/lib/access/redirection_hosts-update.json create mode 100644 backend/lib/access/reports-hosts.json create mode 100644 backend/lib/access/roles.json create mode 100644 backend/lib/access/settings-get.json create mode 100644 backend/lib/access/settings-list.json create mode 100644 backend/lib/access/settings-update.json create mode 100644 backend/lib/access/streams-create.json create mode 100644 backend/lib/access/streams-delete.json create mode 100644 backend/lib/access/streams-get.json create mode 100644 backend/lib/access/streams-list.json create mode 100644 backend/lib/access/streams-update.json create mode 100644 backend/lib/access/users-create.json create mode 100644 backend/lib/access/users-delete.json create mode 100644 backend/lib/access/users-get.json create mode 100644 backend/lib/access/users-list.json create mode 100644 backend/lib/access/users-loginas.json create mode 100644 backend/lib/access/users-password.json create mode 100644 backend/lib/access/users-permissions.json create mode 100644 backend/lib/access/users-update.json create mode 100644 backend/lib/certbot.js create mode 100644 backend/lib/config.js create mode 100644 backend/lib/error.js create mode 100644 backend/lib/express/cors.js create mode 100644 backend/lib/express/jwt-decode.js create mode 100644 backend/lib/express/jwt.js create mode 100644 backend/lib/express/pagination.js create mode 100644 backend/lib/express/user-id-from-me.js create mode 100644 backend/lib/helpers.js create mode 100644 backend/lib/migrate_template.js create mode 100644 backend/lib/utils.js create mode 100644 backend/lib/validator/api.js create mode 100644 backend/lib/validator/index.js create mode 100644 backend/lib/wg-helpers.js create mode 100644 backend/logger.js create mode 100644 backend/migrate.js create mode 100644 backend/migrations/20180618015850_initial.js create mode 100644 backend/migrations/20180929054513_websockets.js create mode 100644 backend/migrations/20181019052346_forward_host.js create mode 100644 backend/migrations/20181113041458_http2_support.js create mode 100644 backend/migrations/20181213013211_forward_scheme.js create mode 100644 backend/migrations/20190104035154_disabled.js create mode 100644 backend/migrations/20190215115310_customlocations.js create mode 100644 backend/migrations/20190218060101_hsts.js create mode 100644 backend/migrations/20190227065017_settings.js create mode 100644 backend/migrations/20200410143839_access_list_client.js create mode 100644 backend/migrations/20200410143840_access_list_client_fix.js create mode 100644 backend/migrations/20201014143841_pass_auth.js create mode 100644 backend/migrations/20210210154702_redirection_scheme.js create mode 100644 backend/migrations/20210210154703_redirection_status_code.js create mode 100644 backend/migrations/20210423103500_stream_domain.js create mode 100644 backend/migrations/20211108145214_regenerate_default_host.js create mode 100644 backend/migrations/20240427161436_stream_ssl.js create mode 100644 backend/migrations/20251111090000_redirect_auto_scheme.js create mode 100644 backend/migrations/20260131163528_trust_forwarded_proto.js create mode 100644 backend/migrations/20260307000000_wireguard.js create mode 100644 backend/models/access_list.js create mode 100644 backend/models/access_list_auth.js create mode 100644 backend/models/access_list_client.js create mode 100644 backend/models/audit-log.js create mode 100644 backend/models/auth.js create mode 100644 backend/models/certificate.js create mode 100644 backend/models/dead_host.js create mode 100644 backend/models/now_helper.js create mode 100644 backend/models/proxy_host.js create mode 100644 backend/models/redirection_host.js create mode 100644 backend/models/setting.js create mode 100644 backend/models/stream.js create mode 100644 backend/models/token.js create mode 100644 backend/models/user.js create mode 100644 backend/models/user_permission.js create mode 100644 backend/models/wg_client.js create mode 100644 backend/models/wg_interface.js create mode 100644 backend/nodemon.json create mode 100644 backend/package.json create mode 100644 backend/routes/audit-log.js create mode 100644 backend/routes/main.js create mode 100644 backend/routes/nginx/access_lists.js create mode 100644 backend/routes/nginx/certificates.js create mode 100644 backend/routes/nginx/dead_hosts.js create mode 100644 backend/routes/nginx/proxy_hosts.js create mode 100644 backend/routes/nginx/redirection_hosts.js create mode 100644 backend/routes/nginx/streams.js create mode 100644 backend/routes/reports.js create mode 100644 backend/routes/schema.js create mode 100644 backend/routes/settings.js create mode 100644 backend/routes/tokens.js create mode 100644 backend/routes/users.js create mode 100644 backend/routes/version.js create mode 100644 backend/routes/wireguard.js create mode 100644 backend/schema/common.json create mode 100644 backend/schema/components/access-list-object.json create mode 100644 backend/schema/components/audit-log-list.json create mode 100644 backend/schema/components/audit-log-object.json create mode 100644 backend/schema/components/certificate-list.json create mode 100644 backend/schema/components/certificate-object.json create mode 100644 backend/schema/components/check-version-object.json create mode 100644 backend/schema/components/dead-host-list.json create mode 100644 backend/schema/components/dead-host-object.json create mode 100644 backend/schema/components/dns-providers-list.json create mode 100644 backend/schema/components/error-object.json create mode 100644 backend/schema/components/error.json create mode 100644 backend/schema/components/health-object.json create mode 100644 backend/schema/components/permission-object.json create mode 100644 backend/schema/components/proxy-host-list.json create mode 100644 backend/schema/components/proxy-host-object.json create mode 100644 backend/schema/components/redirection-host-list.json create mode 100644 backend/schema/components/redirection-host-object.json create mode 100644 backend/schema/components/security-schemes.json create mode 100644 backend/schema/components/setting-list.json create mode 100644 backend/schema/components/setting-object.json create mode 100644 backend/schema/components/stream-list.json create mode 100644 backend/schema/components/stream-object.json create mode 100644 backend/schema/components/token-challenge.json create mode 100644 backend/schema/components/token-object.json create mode 100644 backend/schema/components/user-list.json create mode 100644 backend/schema/components/user-object.json create mode 100644 backend/schema/index.js create mode 100644 backend/schema/paths/audit-log/get.json create mode 100644 backend/schema/paths/audit-log/id/get.json create mode 100644 backend/schema/paths/get.json create mode 100644 backend/schema/paths/nginx/access-lists/get.json create mode 100644 backend/schema/paths/nginx/access-lists/listID/delete.json create mode 100644 backend/schema/paths/nginx/access-lists/listID/get.json create mode 100644 backend/schema/paths/nginx/access-lists/listID/put.json create mode 100644 backend/schema/paths/nginx/access-lists/post.json create mode 100644 backend/schema/paths/nginx/certificates/certID/delete.json create mode 100644 backend/schema/paths/nginx/certificates/certID/download/get.json create mode 100644 backend/schema/paths/nginx/certificates/certID/get.json create mode 100644 backend/schema/paths/nginx/certificates/certID/renew/post.json create mode 100644 backend/schema/paths/nginx/certificates/certID/upload/post.json create mode 100644 backend/schema/paths/nginx/certificates/dns-providers/get.json create mode 100644 backend/schema/paths/nginx/certificates/get.json create mode 100644 backend/schema/paths/nginx/certificates/post.json create mode 100644 backend/schema/paths/nginx/certificates/test-http/post.json create mode 100644 backend/schema/paths/nginx/certificates/validate/post.json create mode 100644 backend/schema/paths/nginx/dead-hosts/get.json create mode 100644 backend/schema/paths/nginx/dead-hosts/hostID/delete.json create mode 100644 backend/schema/paths/nginx/dead-hosts/hostID/disable/post.json create mode 100644 backend/schema/paths/nginx/dead-hosts/hostID/enable/post.json create mode 100644 backend/schema/paths/nginx/dead-hosts/hostID/get.json create mode 100644 backend/schema/paths/nginx/dead-hosts/hostID/put.json create mode 100644 backend/schema/paths/nginx/dead-hosts/post.json create mode 100644 backend/schema/paths/nginx/proxy-hosts/get.json create mode 100644 backend/schema/paths/nginx/proxy-hosts/hostID/delete.json create mode 100644 backend/schema/paths/nginx/proxy-hosts/hostID/disable/post.json create mode 100644 backend/schema/paths/nginx/proxy-hosts/hostID/enable/post.json create mode 100644 backend/schema/paths/nginx/proxy-hosts/hostID/get.json create mode 100644 backend/schema/paths/nginx/proxy-hosts/hostID/put.json create mode 100644 backend/schema/paths/nginx/proxy-hosts/post.json create mode 100644 backend/schema/paths/nginx/redirection-hosts/get.json create mode 100644 backend/schema/paths/nginx/redirection-hosts/hostID/delete.json create mode 100644 backend/schema/paths/nginx/redirection-hosts/hostID/disable/post.json create mode 100644 backend/schema/paths/nginx/redirection-hosts/hostID/enable/post.json create mode 100644 backend/schema/paths/nginx/redirection-hosts/hostID/get.json create mode 100644 backend/schema/paths/nginx/redirection-hosts/hostID/put.json create mode 100644 backend/schema/paths/nginx/redirection-hosts/post.json create mode 100644 backend/schema/paths/nginx/streams/get.json create mode 100644 backend/schema/paths/nginx/streams/post.json create mode 100644 backend/schema/paths/nginx/streams/streamID/delete.json create mode 100644 backend/schema/paths/nginx/streams/streamID/disable/post.json create mode 100644 backend/schema/paths/nginx/streams/streamID/enable/post.json create mode 100644 backend/schema/paths/nginx/streams/streamID/get.json create mode 100644 backend/schema/paths/nginx/streams/streamID/put.json create mode 100644 backend/schema/paths/reports/hosts/get.json create mode 100644 backend/schema/paths/schema/get.json create mode 100644 backend/schema/paths/settings/get.json create mode 100644 backend/schema/paths/settings/settingID/get.json create mode 100644 backend/schema/paths/settings/settingID/put.json create mode 100644 backend/schema/paths/tokens/2fa/post.json create mode 100644 backend/schema/paths/tokens/get.json create mode 100644 backend/schema/paths/tokens/post.json create mode 100644 backend/schema/paths/users/get.json create mode 100644 backend/schema/paths/users/post.json create mode 100644 backend/schema/paths/users/userID/2fa/backup-codes/post.json create mode 100644 backend/schema/paths/users/userID/2fa/delete.json create mode 100644 backend/schema/paths/users/userID/2fa/enable/post.json create mode 100644 backend/schema/paths/users/userID/2fa/get.json create mode 100644 backend/schema/paths/users/userID/2fa/post.json create mode 100644 backend/schema/paths/users/userID/auth/put.json create mode 100644 backend/schema/paths/users/userID/delete.json create mode 100644 backend/schema/paths/users/userID/get.json create mode 100644 backend/schema/paths/users/userID/login/post.json create mode 100644 backend/schema/paths/users/userID/permissions/put.json create mode 100644 backend/schema/paths/users/userID/put.json create mode 100644 backend/schema/paths/version/check/get.json create mode 100644 backend/schema/swagger.json create mode 100644 backend/scripts/install-certbot-plugins create mode 100644 backend/scripts/regenerate-config create mode 100644 backend/setup.js create mode 100644 backend/templates/_access.conf create mode 100644 backend/templates/_assets.conf create mode 100644 backend/templates/_certificates.conf create mode 100644 backend/templates/_certificates_stream.conf create mode 100644 backend/templates/_exploits.conf create mode 100644 backend/templates/_forced_ssl.conf create mode 100644 backend/templates/_header_comment.conf create mode 100644 backend/templates/_hsts.conf create mode 100644 backend/templates/_hsts_map.conf create mode 100644 backend/templates/_listen.conf create mode 100644 backend/templates/_location.conf create mode 100644 backend/templates/dead_host.conf create mode 100644 backend/templates/default.conf create mode 100644 backend/templates/ip_ranges.conf create mode 100644 backend/templates/letsencrypt-request.conf create mode 100644 backend/templates/proxy_host.conf create mode 100644 backend/templates/redirection_host.conf create mode 100644 backend/templates/stream.conf create mode 100644 backend/validate-schema.js create mode 100644 backend/yarn.lock create mode 100644 docker/.dive-ci create mode 100644 docker/Dockerfile create mode 100644 docker/ci.env create mode 100644 docker/ci/postgres/authentik.sql.gz create mode 100644 docker/dev/Dockerfile create mode 100644 docker/dev/dnsrouter-config.json create mode 100644 docker/dev/letsencrypt.ini create mode 100644 docker/dev/pdns-db.sql create mode 100644 docker/dev/squid.conf create mode 100644 docker/docker-compose.ci.mysql.yml create mode 100644 docker/docker-compose.ci.postgres.yml create mode 100644 docker/docker-compose.ci.sqlite.yml create mode 100644 docker/docker-compose.ci.yml create mode 100644 docker/docker-compose.dev.yml create mode 100644 docker/rootfs/etc/letsencrypt.ini create mode 100644 docker/rootfs/etc/logrotate.d/nginx-proxy-manager create mode 100644 docker/rootfs/etc/nginx/conf.d/default.conf create mode 100644 docker/rootfs/etc/nginx/conf.d/dev.conf create mode 100644 docker/rootfs/etc/nginx/conf.d/include/.gitignore create mode 100644 docker/rootfs/etc/nginx/conf.d/include/assets.conf create mode 100644 docker/rootfs/etc/nginx/conf.d/include/block-exploits.conf create mode 100644 docker/rootfs/etc/nginx/conf.d/include/force-ssl.conf create mode 100644 docker/rootfs/etc/nginx/conf.d/include/ip_ranges.conf create mode 100644 docker/rootfs/etc/nginx/conf.d/include/letsencrypt-acme-challenge.conf create mode 100644 docker/rootfs/etc/nginx/conf.d/include/log-proxy.conf create mode 100644 docker/rootfs/etc/nginx/conf.d/include/log-stream.conf create mode 100644 docker/rootfs/etc/nginx/conf.d/include/proxy.conf create mode 100644 docker/rootfs/etc/nginx/conf.d/include/ssl-cache-stream.conf create mode 100644 docker/rootfs/etc/nginx/conf.d/include/ssl-cache.conf create mode 100644 docker/rootfs/etc/nginx/conf.d/include/ssl-ciphers.conf create mode 100644 docker/rootfs/etc/nginx/conf.d/production.conf create mode 100644 docker/rootfs/etc/nginx/mime.types create mode 100644 docker/rootfs/etc/nginx/nginx.conf create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/backend/dependencies.d/prepare create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/backend/run create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/backend/type create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/frontend/dependencies.d/prepare create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/frontend/run create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/frontend/type create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/dependencies.d/prepare create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/run create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/type create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/00-all.sh create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/10-usergroup.sh create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/20-paths.sh create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/30-ownership.sh create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/40-dynamic.sh create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/50-ipv6.sh create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/60-secrets.sh create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/90-banner.sh create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/dependencies.d/base create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/type create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/up create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/backend create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/frontend create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/nginx create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/prepare create mode 100644 docker/rootfs/root/.bashrc create mode 100644 docker/rootfs/usr/bin/check-health create mode 100644 docker/rootfs/usr/bin/common.sh create mode 100644 docker/rootfs/var/www/html/index.html create mode 100644 docker/scripts/install-s6 create mode 100644 docs/.gitignore create mode 100644 docs/.vitepress/config.mts create mode 100644 docs/.vitepress/theme/custom.css create mode 100644 docs/.vitepress/theme/index.ts create mode 100644 docs/package.json create mode 100644 docs/scripts/set-version.sh create mode 100644 docs/src/advanced-config/index.md create mode 100644 docs/src/faq/index.md create mode 100644 docs/src/guide/index.md create mode 100644 docs/src/index.md create mode 100644 docs/src/public/github.png create mode 100644 docs/src/public/icon.png create mode 100644 docs/src/public/logo.svg create mode 100644 docs/src/public/robots.txt create mode 100644 docs/src/public/screenshots/dark/01_first-user.png create mode 100644 docs/src/public/screenshots/dark/02_login.png create mode 100644 docs/src/public/screenshots/dark/03_dashboard.png create mode 100644 docs/src/public/screenshots/dark/04_proxy-hosts.png create mode 100644 docs/src/public/screenshots/dark/05_redirection_hosts.png create mode 100644 docs/src/public/screenshots/dark/06_streams.png create mode 100644 docs/src/public/screenshots/dark/07_404_hosts.png create mode 100644 docs/src/public/screenshots/dark/08_access-lists.png create mode 100644 docs/src/public/screenshots/dark/09_certificates.png create mode 100644 docs/src/public/screenshots/dark/10_users.png create mode 100644 docs/src/public/screenshots/dark/11_audit-logs.png create mode 100644 docs/src/public/screenshots/dark/12_settings.png create mode 100644 docs/src/public/screenshots/dark/13_add-proxy_host.png create mode 100644 docs/src/public/screenshots/dark/14_add_proxy_host_dns.png create mode 100644 docs/src/public/screenshots/light/01_first-user.png create mode 100644 docs/src/public/screenshots/light/02_login.png create mode 100644 docs/src/public/screenshots/light/03_dashboard.png create mode 100644 docs/src/public/screenshots/light/04_proxy-hosts.png create mode 100644 docs/src/public/screenshots/light/05_redirection_hosts.png create mode 100644 docs/src/public/screenshots/light/06_streams.png create mode 100644 docs/src/public/screenshots/light/07_404_hosts.png create mode 100644 docs/src/public/screenshots/light/08_access-lists.png create mode 100644 docs/src/public/screenshots/light/09_certificates.png create mode 100644 docs/src/public/screenshots/light/10_users.png create mode 100644 docs/src/public/screenshots/light/11_audit-logs.png create mode 100644 docs/src/public/screenshots/light/12_settings.png create mode 100644 docs/src/public/screenshots/light/13_add-proxy_host.png create mode 100644 docs/src/public/screenshots/light/14_add_proxy_host_dns.png create mode 100644 docs/src/screenshots/index.md create mode 100644 docs/src/setup/index.md create mode 100644 docs/src/third-party/index.md create mode 100644 docs/src/upgrading/index.md create mode 100644 docs/yarn.lock create mode 100644 frontend/.gitignore create mode 100644 frontend/biome.json create mode 100644 frontend/check-locales.cjs create mode 100644 frontend/index.html create mode 100644 frontend/package-lock.json create mode 100644 frontend/package.json create mode 100644 frontend/public/images/default-avatar.jpg create mode 100644 frontend/public/images/favicon/android-chrome-192x192.png create mode 100644 frontend/public/images/favicon/android-chrome-512x512.png create mode 100644 frontend/public/images/favicon/apple-touch-icon.png create mode 100644 frontend/public/images/favicon/browserconfig.xml create mode 100644 frontend/public/images/favicon/favicon-16x16.png create mode 100644 frontend/public/images/favicon/favicon-32x32.png create mode 100644 frontend/public/images/favicon/favicon.ico create mode 100644 frontend/public/images/favicon/mstile-150x150.png create mode 100644 frontend/public/images/favicon/safari-pinned-tab.svg create mode 100644 frontend/public/images/favicon/site.webmanifest create mode 100644 frontend/public/images/logo-256.png create mode 100644 frontend/public/images/logo-bold-horizontal-grey.svg create mode 100644 frontend/public/images/logo-no-text.svg create mode 100644 frontend/public/images/logo-text-horizontal-grey.png create mode 100644 frontend/public/images/logo-text-vertical-grey.png create mode 100644 frontend/public/images/unhealthy.svg create mode 100644 frontend/src/App.css create mode 100644 frontend/src/App.tsx create mode 100644 frontend/src/Router.tsx create mode 100644 frontend/src/api/backend/base.ts create mode 100644 frontend/src/api/backend/checkVersion.ts create mode 100644 frontend/src/api/backend/createAccessList.ts create mode 100644 frontend/src/api/backend/createCertificate.ts create mode 100644 frontend/src/api/backend/createDeadHost.ts create mode 100644 frontend/src/api/backend/createProxyHost.ts create mode 100644 frontend/src/api/backend/createRedirectionHost.ts create mode 100644 frontend/src/api/backend/createStream.ts create mode 100644 frontend/src/api/backend/createUser.ts create mode 100644 frontend/src/api/backend/deleteAccessList.ts create mode 100644 frontend/src/api/backend/deleteCertificate.ts create mode 100644 frontend/src/api/backend/deleteDeadHost.ts create mode 100644 frontend/src/api/backend/deleteProxyHost.ts create mode 100644 frontend/src/api/backend/deleteRedirectionHost.ts create mode 100644 frontend/src/api/backend/deleteStream.ts create mode 100644 frontend/src/api/backend/deleteUser.ts create mode 100644 frontend/src/api/backend/downloadCertificate.ts create mode 100644 frontend/src/api/backend/expansions.ts create mode 100644 frontend/src/api/backend/getAccessList.ts create mode 100644 frontend/src/api/backend/getAccessLists.ts create mode 100644 frontend/src/api/backend/getAuditLog.ts create mode 100644 frontend/src/api/backend/getAuditLogs.ts create mode 100644 frontend/src/api/backend/getCertificate.ts create mode 100644 frontend/src/api/backend/getCertificateDNSProviders.ts create mode 100644 frontend/src/api/backend/getCertificates.ts create mode 100644 frontend/src/api/backend/getDeadHost.ts create mode 100644 frontend/src/api/backend/getDeadHosts.ts create mode 100644 frontend/src/api/backend/getHealth.ts create mode 100644 frontend/src/api/backend/getHostsReport.ts create mode 100644 frontend/src/api/backend/getProxyHost.ts create mode 100644 frontend/src/api/backend/getProxyHosts.ts create mode 100644 frontend/src/api/backend/getRedirectionHost.ts create mode 100644 frontend/src/api/backend/getRedirectionHosts.ts create mode 100644 frontend/src/api/backend/getSetting.ts create mode 100644 frontend/src/api/backend/getSettings.ts create mode 100644 frontend/src/api/backend/getStream.ts create mode 100644 frontend/src/api/backend/getStreams.ts create mode 100644 frontend/src/api/backend/getToken.ts create mode 100644 frontend/src/api/backend/getUser.ts create mode 100644 frontend/src/api/backend/getUsers.ts create mode 100644 frontend/src/api/backend/helpers.ts create mode 100644 frontend/src/api/backend/index.ts create mode 100644 frontend/src/api/backend/loginAsUser.ts create mode 100644 frontend/src/api/backend/models.ts create mode 100644 frontend/src/api/backend/refreshToken.ts create mode 100644 frontend/src/api/backend/renewCertificate.ts create mode 100644 frontend/src/api/backend/responseTypes.ts create mode 100644 frontend/src/api/backend/setPermissions.ts create mode 100644 frontend/src/api/backend/testHttpCertificate.ts create mode 100644 frontend/src/api/backend/toggleDeadHost.ts create mode 100644 frontend/src/api/backend/toggleProxyHost.ts create mode 100644 frontend/src/api/backend/toggleRedirectionHost.ts create mode 100644 frontend/src/api/backend/toggleStream.ts create mode 100644 frontend/src/api/backend/toggleUser.ts create mode 100644 frontend/src/api/backend/twoFactor.ts create mode 100644 frontend/src/api/backend/updateAccessList.ts create mode 100644 frontend/src/api/backend/updateAuth.ts create mode 100644 frontend/src/api/backend/updateDeadHost.ts create mode 100644 frontend/src/api/backend/updateProxyHost.ts create mode 100644 frontend/src/api/backend/updateRedirectionHost.ts create mode 100644 frontend/src/api/backend/updateSetting.ts create mode 100644 frontend/src/api/backend/updateStream.ts create mode 100644 frontend/src/api/backend/updateUser.ts create mode 100644 frontend/src/api/backend/uploadCertificate.ts create mode 100644 frontend/src/api/backend/validateCertificate.ts create mode 100644 frontend/src/api/backend/wireguard.ts create mode 100644 frontend/src/components/Button.tsx create mode 100644 frontend/src/components/EmptyData.tsx create mode 100644 frontend/src/components/ErrorNotFound.tsx create mode 100644 frontend/src/components/Flag.tsx create mode 100644 frontend/src/components/Form/AccessClientFields.tsx create mode 100644 frontend/src/components/Form/AccessField.tsx create mode 100644 frontend/src/components/Form/BasicAuthFields.tsx create mode 100644 frontend/src/components/Form/DNSProviderFields.module.css create mode 100644 frontend/src/components/Form/DNSProviderFields.tsx create mode 100644 frontend/src/components/Form/DomainNamesField.tsx create mode 100644 frontend/src/components/Form/LocationsFields.module.css create mode 100644 frontend/src/components/Form/LocationsFields.tsx create mode 100644 frontend/src/components/Form/NginxConfigField.tsx create mode 100644 frontend/src/components/Form/SSLCertificateField.tsx create mode 100644 frontend/src/components/Form/SSLOptionsFields.tsx create mode 100644 frontend/src/components/Form/index.ts create mode 100644 frontend/src/components/HasPermission.tsx create mode 100644 frontend/src/components/Loading.module.css create mode 100644 frontend/src/components/Loading.tsx create mode 100644 frontend/src/components/LoadingPage.tsx create mode 100644 frontend/src/components/LocalePicker.module.css create mode 100644 frontend/src/components/LocalePicker.tsx create mode 100644 frontend/src/components/NavLink.tsx create mode 100644 frontend/src/components/Page.module.css create mode 100644 frontend/src/components/Page.tsx create mode 100644 frontend/src/components/SiteContainer.tsx create mode 100644 frontend/src/components/SiteFooter.tsx create mode 100644 frontend/src/components/SiteHeader.module.css create mode 100644 frontend/src/components/SiteHeader.tsx create mode 100644 frontend/src/components/SiteMenu.tsx create mode 100644 frontend/src/components/Table/EmptyRow.tsx create mode 100644 frontend/src/components/Table/Formatter/AccessListformatter.tsx create mode 100644 frontend/src/components/Table/Formatter/CertificateFormatter.tsx create mode 100644 frontend/src/components/Table/Formatter/CertificateInUseFormatter.tsx create mode 100644 frontend/src/components/Table/Formatter/DateFormatter.tsx create mode 100644 frontend/src/components/Table/Formatter/DomainsFormatter.tsx create mode 100644 frontend/src/components/Table/Formatter/EmailFormatter.tsx create mode 100644 frontend/src/components/Table/Formatter/EventFormatter.tsx create mode 100644 frontend/src/components/Table/Formatter/GravatarFormatter.tsx create mode 100644 frontend/src/components/Table/Formatter/RolesFormatter.tsx create mode 100644 frontend/src/components/Table/Formatter/TrueFalseFormatter.tsx create mode 100644 frontend/src/components/Table/Formatter/ValueWithDateFormatter.tsx create mode 100644 frontend/src/components/Table/Formatter/index.ts create mode 100644 frontend/src/components/Table/TableBody.tsx create mode 100644 frontend/src/components/Table/TableHeader.tsx create mode 100644 frontend/src/components/Table/TableHelpers.ts create mode 100644 frontend/src/components/Table/TableLayout.tsx create mode 100644 frontend/src/components/Table/index.ts create mode 100644 frontend/src/components/ThemeSwitcher.module.css create mode 100644 frontend/src/components/ThemeSwitcher.tsx create mode 100644 frontend/src/components/Unhealthy.tsx create mode 100644 frontend/src/components/index.ts create mode 100644 frontend/src/context/AuthContext.tsx create mode 100644 frontend/src/context/LocaleContext.tsx create mode 100644 frontend/src/context/ThemeContext.tsx create mode 100644 frontend/src/context/index.ts create mode 100644 frontend/src/declarations.d.ts create mode 100644 frontend/src/hooks/index.ts create mode 100644 frontend/src/hooks/useAccessList.ts create mode 100644 frontend/src/hooks/useAccessLists.ts create mode 100644 frontend/src/hooks/useAuditLog.ts create mode 100644 frontend/src/hooks/useAuditLogs.ts create mode 100644 frontend/src/hooks/useCertificate.ts create mode 100644 frontend/src/hooks/useCertificates.ts create mode 100644 frontend/src/hooks/useCheckVersion.ts create mode 100644 frontend/src/hooks/useDeadHost.ts create mode 100644 frontend/src/hooks/useDeadHosts.ts create mode 100644 frontend/src/hooks/useDnsProviders.ts create mode 100644 frontend/src/hooks/useHealth.ts create mode 100644 frontend/src/hooks/useHostReport.ts create mode 100644 frontend/src/hooks/useProxyHost.ts create mode 100644 frontend/src/hooks/useProxyHosts.ts create mode 100644 frontend/src/hooks/useRedirectionHost.ts create mode 100644 frontend/src/hooks/useRedirectionHosts.ts create mode 100644 frontend/src/hooks/useSetting.ts create mode 100644 frontend/src/hooks/useStream.ts create mode 100644 frontend/src/hooks/useStreams.ts create mode 100644 frontend/src/hooks/useTheme.ts create mode 100644 frontend/src/hooks/useUser.ts create mode 100644 frontend/src/hooks/useUsers.ts create mode 100644 frontend/src/hooks/useWireGuard.ts create mode 100644 frontend/src/locale/IntlProvider.tsx create mode 100644 frontend/src/locale/README.md create mode 100644 frontend/src/locale/Utils.test.tsx create mode 100644 frontend/src/locale/Utils.ts create mode 100644 frontend/src/locale/index.ts create mode 100644 frontend/src/locale/scripts/locale-sort.cjs create mode 100644 frontend/src/locale/scripts/locale-sort.sh create mode 100644 frontend/src/locale/src/HelpDoc/bg/AccessLists.md create mode 100644 frontend/src/locale/src/HelpDoc/bg/Certificates.md create mode 100644 frontend/src/locale/src/HelpDoc/bg/DeadHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/bg/ProxyHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/bg/RedirectionHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/bg/Streams.md create mode 100644 frontend/src/locale/src/HelpDoc/bg/index.ts create mode 100644 frontend/src/locale/src/HelpDoc/cs/AccessLists.md create mode 100644 frontend/src/locale/src/HelpDoc/cs/Certificates.md create mode 100644 frontend/src/locale/src/HelpDoc/cs/DeadHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/cs/ProxyHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/cs/RedirectionHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/cs/Streams.md create mode 100644 frontend/src/locale/src/HelpDoc/cs/index.ts create mode 100644 frontend/src/locale/src/HelpDoc/de/AccessLists.md create mode 100644 frontend/src/locale/src/HelpDoc/de/Certificates.md create mode 100644 frontend/src/locale/src/HelpDoc/de/DeadHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/de/ProxyHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/de/RedirectionHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/de/Streams.md create mode 100644 frontend/src/locale/src/HelpDoc/de/index.ts create mode 100644 frontend/src/locale/src/HelpDoc/en/AccessLists.md create mode 100644 frontend/src/locale/src/HelpDoc/en/Certificates.md create mode 100644 frontend/src/locale/src/HelpDoc/en/DeadHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/en/ProxyHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/en/RedirectionHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/en/Streams.md create mode 100644 frontend/src/locale/src/HelpDoc/en/index.ts create mode 100644 frontend/src/locale/src/HelpDoc/es/AccessLists.md create mode 100644 frontend/src/locale/src/HelpDoc/es/Certificates.md create mode 100644 frontend/src/locale/src/HelpDoc/es/DeadHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/es/ProxyHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/es/RedirectionHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/es/Streams.md create mode 100644 frontend/src/locale/src/HelpDoc/es/index.ts create mode 100644 frontend/src/locale/src/HelpDoc/et/AccessLists.md create mode 100644 frontend/src/locale/src/HelpDoc/et/Certificates.md create mode 100644 frontend/src/locale/src/HelpDoc/et/DeadHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/et/ProxyHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/et/RedirectionHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/et/Streams.md create mode 100644 frontend/src/locale/src/HelpDoc/et/index.ts create mode 100644 frontend/src/locale/src/HelpDoc/fr/AccessLists.md create mode 100644 frontend/src/locale/src/HelpDoc/fr/Certificates.md create mode 100644 frontend/src/locale/src/HelpDoc/fr/DeadHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/fr/ProxyHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/fr/RedirectionHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/fr/Streams.md create mode 100644 frontend/src/locale/src/HelpDoc/fr/index.ts create mode 100644 frontend/src/locale/src/HelpDoc/ga/AccessLists.md create mode 100644 frontend/src/locale/src/HelpDoc/ga/Certificates.md create mode 100644 frontend/src/locale/src/HelpDoc/ga/DeadHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/ga/ProxyHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/ga/RedirectionHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/ga/Streams.md create mode 100644 frontend/src/locale/src/HelpDoc/ga/index.ts create mode 100644 frontend/src/locale/src/HelpDoc/hu/AccessLists.md create mode 100644 frontend/src/locale/src/HelpDoc/hu/Certificates.md create mode 100644 frontend/src/locale/src/HelpDoc/hu/DeadHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/hu/ProxyHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/hu/RedirectionHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/hu/Streams.md create mode 100644 frontend/src/locale/src/HelpDoc/hu/index.ts create mode 100644 frontend/src/locale/src/HelpDoc/id/AccessLists.md create mode 100644 frontend/src/locale/src/HelpDoc/id/Certificates.md create mode 100644 frontend/src/locale/src/HelpDoc/id/DeadHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/id/ProxyHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/id/RedirectionHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/id/Streams.md create mode 100644 frontend/src/locale/src/HelpDoc/id/index.ts create mode 100644 frontend/src/locale/src/HelpDoc/index.ts create mode 100644 frontend/src/locale/src/HelpDoc/it/AccessLists.md create mode 100644 frontend/src/locale/src/HelpDoc/it/Certificates.md create mode 100644 frontend/src/locale/src/HelpDoc/it/DeadHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/it/ProxyHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/it/RedirectionHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/it/Streams.md create mode 100644 frontend/src/locale/src/HelpDoc/it/index.ts create mode 100644 frontend/src/locale/src/HelpDoc/ja/AccessLists.md create mode 100644 frontend/src/locale/src/HelpDoc/ja/Certificates.md create mode 100644 frontend/src/locale/src/HelpDoc/ja/DeadHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/ja/ProxyHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/ja/RedirectionHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/ja/Streams.md create mode 100644 frontend/src/locale/src/HelpDoc/ja/index.ts create mode 100644 frontend/src/locale/src/HelpDoc/ko/AccessLists.md create mode 100644 frontend/src/locale/src/HelpDoc/ko/Certificates.md create mode 100644 frontend/src/locale/src/HelpDoc/ko/DeadHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/ko/ProxyHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/ko/RedirectionHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/ko/Streams.md create mode 100644 frontend/src/locale/src/HelpDoc/ko/index.ts create mode 100644 frontend/src/locale/src/HelpDoc/nl/AccessLists.md create mode 100644 frontend/src/locale/src/HelpDoc/nl/Certificates.md create mode 100644 frontend/src/locale/src/HelpDoc/nl/DeadHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/nl/ProxyHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/nl/RedirectionHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/nl/Streams.md create mode 100644 frontend/src/locale/src/HelpDoc/nl/index.ts create mode 100644 frontend/src/locale/src/HelpDoc/no/AccessLists.md create mode 100644 frontend/src/locale/src/HelpDoc/no/Certificates.md create mode 100644 frontend/src/locale/src/HelpDoc/no/DeadHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/no/ProxyHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/no/RedirectionHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/no/Streams.md create mode 100644 frontend/src/locale/src/HelpDoc/no/index.ts create mode 100644 frontend/src/locale/src/HelpDoc/pl/AccessLists.md create mode 100644 frontend/src/locale/src/HelpDoc/pl/Certificates.md create mode 100644 frontend/src/locale/src/HelpDoc/pl/DeadHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/pl/ProxyHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/pl/RedirectionHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/pl/Streams.md create mode 100644 frontend/src/locale/src/HelpDoc/pl/index.ts create mode 100644 frontend/src/locale/src/HelpDoc/pt/AccessLists.md create mode 100644 frontend/src/locale/src/HelpDoc/pt/Certificates.md create mode 100644 frontend/src/locale/src/HelpDoc/pt/DeadHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/pt/ProxyHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/pt/RedirectionHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/pt/Streams.md create mode 100644 frontend/src/locale/src/HelpDoc/pt/index.ts create mode 100644 frontend/src/locale/src/HelpDoc/ru/AccessLists.md create mode 100644 frontend/src/locale/src/HelpDoc/ru/Certificates.md create mode 100644 frontend/src/locale/src/HelpDoc/ru/DeadHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/ru/ProxyHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/ru/RedirectionHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/ru/Streams.md create mode 100644 frontend/src/locale/src/HelpDoc/ru/index.ts create mode 100644 frontend/src/locale/src/HelpDoc/sk/AccessLists.md create mode 100644 frontend/src/locale/src/HelpDoc/sk/Certificates.md create mode 100644 frontend/src/locale/src/HelpDoc/sk/DeadHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/sk/ProxyHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/sk/RedirectionHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/sk/Streams.md create mode 100644 frontend/src/locale/src/HelpDoc/sk/index.ts create mode 100644 frontend/src/locale/src/HelpDoc/tr/AccessLists.md create mode 100644 frontend/src/locale/src/HelpDoc/tr/Certificates.md create mode 100644 frontend/src/locale/src/HelpDoc/tr/DeadHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/tr/ProxyHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/tr/RedirectionHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/tr/Streams.md create mode 100644 frontend/src/locale/src/HelpDoc/tr/index.ts create mode 100644 frontend/src/locale/src/HelpDoc/vi/AccessLists.md create mode 100644 frontend/src/locale/src/HelpDoc/vi/Certificates.md create mode 100644 frontend/src/locale/src/HelpDoc/vi/DeadHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/vi/ProxyHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/vi/RedirectionHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/vi/Streams.md create mode 100644 frontend/src/locale/src/HelpDoc/vi/index.ts create mode 100644 frontend/src/locale/src/HelpDoc/zh/AccessLists.md create mode 100644 frontend/src/locale/src/HelpDoc/zh/Certificates.md create mode 100644 frontend/src/locale/src/HelpDoc/zh/DeadHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/zh/ProxyHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/zh/RedirectionHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/zh/Streams.md create mode 100644 frontend/src/locale/src/HelpDoc/zh/index.ts create mode 100644 frontend/src/locale/src/bg.json create mode 100644 frontend/src/locale/src/cs.json create mode 100644 frontend/src/locale/src/de.json create mode 100644 frontend/src/locale/src/en.json create mode 100644 frontend/src/locale/src/es.json create mode 100644 frontend/src/locale/src/et.json create mode 100644 frontend/src/locale/src/fr.json create mode 100644 frontend/src/locale/src/ga.json create mode 100644 frontend/src/locale/src/hu.json create mode 100644 frontend/src/locale/src/id.json create mode 100644 frontend/src/locale/src/it.json create mode 100644 frontend/src/locale/src/ja.json create mode 100644 frontend/src/locale/src/ko.json create mode 100644 frontend/src/locale/src/lang-list.json create mode 100644 frontend/src/locale/src/nl.json create mode 100644 frontend/src/locale/src/no.json create mode 100644 frontend/src/locale/src/pl.json create mode 100644 frontend/src/locale/src/pt.json create mode 100644 frontend/src/locale/src/ru.json create mode 100644 frontend/src/locale/src/sk.json create mode 100644 frontend/src/locale/src/tr.json create mode 100644 frontend/src/locale/src/vi.json create mode 100644 frontend/src/locale/src/zh.json create mode 100644 frontend/src/main.tsx create mode 100644 frontend/src/modals/AccessListModal.tsx create mode 100644 frontend/src/modals/ChangePasswordModal.tsx create mode 100644 frontend/src/modals/CustomCertificateModal.tsx create mode 100644 frontend/src/modals/DNSCertificateModal.tsx create mode 100644 frontend/src/modals/DeadHostModal.tsx create mode 100644 frontend/src/modals/DeleteConfirmModal.tsx create mode 100644 frontend/src/modals/EventDetailsModal.tsx create mode 100644 frontend/src/modals/HTTPCertificateModal.tsx create mode 100644 frontend/src/modals/HelpModal.tsx create mode 100644 frontend/src/modals/PermissionsModal.module.css create mode 100644 frontend/src/modals/PermissionsModal.tsx create mode 100644 frontend/src/modals/ProxyHostModal.tsx create mode 100644 frontend/src/modals/RedirectionHostModal.tsx create mode 100644 frontend/src/modals/RenewCertificateModal.tsx create mode 100644 frontend/src/modals/SetPasswordModal.tsx create mode 100644 frontend/src/modals/StreamModal.tsx create mode 100644 frontend/src/modals/TwoFactorModal.tsx create mode 100644 frontend/src/modals/UserModal.tsx create mode 100644 frontend/src/modals/WireGuardClientModal.tsx create mode 100644 frontend/src/modals/WireGuardQRModal.tsx create mode 100644 frontend/src/modals/index.ts create mode 100644 frontend/src/modules/AuthStore.ts create mode 100644 frontend/src/modules/Permissions.ts create mode 100644 frontend/src/modules/Validations.tsx create mode 100644 frontend/src/notifications/Msg.module.css create mode 100644 frontend/src/notifications/Msg.tsx create mode 100644 frontend/src/notifications/helpers.tsx create mode 100644 frontend/src/notifications/index.ts create mode 100644 frontend/src/pages/Access/Table.tsx create mode 100644 frontend/src/pages/Access/TableWrapper.tsx create mode 100644 frontend/src/pages/Access/index.tsx create mode 100644 frontend/src/pages/AuditLog/Table.tsx create mode 100644 frontend/src/pages/AuditLog/TableWrapper.tsx create mode 100644 frontend/src/pages/AuditLog/index.tsx create mode 100644 frontend/src/pages/Certificates/Table.tsx create mode 100644 frontend/src/pages/Certificates/TableWrapper.tsx create mode 100644 frontend/src/pages/Certificates/index.tsx create mode 100644 frontend/src/pages/Dashboard/index.tsx create mode 100644 frontend/src/pages/Login/index.module.css create mode 100644 frontend/src/pages/Login/index.tsx create mode 100644 frontend/src/pages/Nginx/DeadHosts/Table.tsx create mode 100644 frontend/src/pages/Nginx/DeadHosts/TableWrapper.tsx create mode 100644 frontend/src/pages/Nginx/DeadHosts/index.tsx create mode 100644 frontend/src/pages/Nginx/ProxyHosts/Table.tsx create mode 100644 frontend/src/pages/Nginx/ProxyHosts/TableWrapper.tsx create mode 100644 frontend/src/pages/Nginx/ProxyHosts/index.tsx create mode 100644 frontend/src/pages/Nginx/RedirectionHosts/Table.tsx create mode 100644 frontend/src/pages/Nginx/RedirectionHosts/TableWrapper.tsx create mode 100644 frontend/src/pages/Nginx/RedirectionHosts/index.tsx create mode 100644 frontend/src/pages/Nginx/Streams/Table.tsx create mode 100644 frontend/src/pages/Nginx/Streams/TableWrapper.tsx create mode 100644 frontend/src/pages/Nginx/Streams/index.tsx create mode 100644 frontend/src/pages/Settings/DefaultSite.tsx create mode 100644 frontend/src/pages/Settings/Layout.tsx create mode 100644 frontend/src/pages/Settings/index.tsx create mode 100644 frontend/src/pages/Setup/index.module.css create mode 100644 frontend/src/pages/Setup/index.tsx create mode 100644 frontend/src/pages/Users/Table.tsx create mode 100644 frontend/src/pages/Users/TableWrapper.tsx create mode 100644 frontend/src/pages/Users/index.tsx create mode 100644 frontend/src/pages/WireGuard/index.tsx create mode 100644 frontend/src/vite-env.d.ts create mode 100644 frontend/tsconfig.json create mode 100644 frontend/tsconfig.node.json create mode 100644 frontend/vite.config.ts create mode 100644 frontend/vitest-setup.js create mode 100644 frontend/yarn.lock create mode 100644 install.sh create mode 100644 scripts/.common.sh create mode 100644 scripts/build-project.sh create mode 100644 scripts/buildx create mode 100644 scripts/ci/frontend-build create mode 100644 scripts/ci/fulltest-cypress create mode 100644 scripts/ci/test-and-build create mode 100644 scripts/cypress-dev create mode 100644 scripts/destroy-dev create mode 100644 scripts/docs-build create mode 100644 scripts/docs-upload create mode 100644 scripts/start-dev create mode 100644 scripts/stop-dev create mode 100644 scripts/wait-healthy create mode 100644 test/.eslintrc.json create mode 100644 test/.gitignore create mode 100644 test/.prettierrc create mode 100644 test/README.md create mode 100644 test/cypress/Dockerfile create mode 100644 test/cypress/config/ci.mjs create mode 100644 test/cypress/config/dev.mjs create mode 100644 test/cypress/e2e/api/Certificates.cy.js create mode 100644 test/cypress/e2e/api/Dashboard.cy.js create mode 100644 test/cypress/e2e/api/FullCertProvision.cy.js create mode 100644 test/cypress/e2e/api/Health.cy.js create mode 100644 test/cypress/e2e/api/Ldap.cy.js create mode 100644 test/cypress/e2e/api/OAuth.cy.js create mode 100644 test/cypress/e2e/api/ProxyHosts.cy.js create mode 100644 test/cypress/e2e/api/Settings.cy.js create mode 100644 test/cypress/e2e/api/Streams.cy.js create mode 100644 test/cypress/e2e/api/SwaggerSchema.cy.js create mode 100644 test/cypress/e2e/api/Users.cy.js create mode 100644 test/cypress/fixtures/test.example.com-key.pem create mode 100644 test/cypress/fixtures/test.example.com.pem create mode 100644 test/cypress/plugins/backendApi/client.mjs create mode 100644 test/cypress/plugins/backendApi/logger.mjs create mode 100644 test/cypress/plugins/backendApi/task.mjs create mode 100644 test/cypress/plugins/index.mjs create mode 100644 test/cypress/support/commands.mjs create mode 100644 test/cypress/support/e2e.js create mode 100644 test/jsconfig.json create mode 100644 test/multi-reporter.json create mode 100644 test/package.json create mode 100644 test/vacuum-rules.yaml create mode 100644 test/vacuum.conf.yaml create mode 100644 test/yarn.lock diff --git a/.cursorrules b/.cursorrules new file mode 100644 index 0000000..86d8a8e --- /dev/null +++ b/.cursorrules @@ -0,0 +1,12 @@ +# AI Assistant Instructions + +You are working on **NPM-WG** (Nginx Proxy Manager + WireGuard). +Whenever you start a task in this workspace or are asked to fix a bug, please **FIRST READ the file `AI_CONTEXT.md`** at the root of the project. + +It contains: +- The backend API map for WireGuard integration. +- Details about Knex DB schema limitations (ES Modules). +- Fixes for line-endings (`CRLF` -> `LF`) requirements for Alpine Linux Docker build. +- Important commands required for the `.tsx` Vite environment before Docker container builds. + +Do not start writing or refactoring WireGuard integration code without reading `AI_CONTEXT.md` first. diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..6ec6a7c --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,55 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: bug +assignees: '' + +--- + + +**Checklist** +- Have you pulled and found the error with `jc21/nginx-proxy-manager:latest` docker image? + - Yes / No +- Are you sure you're not using someone else's docker image? + - Yes / No +- Have you searched for similar issues (both open and closed)? + - Yes / No + +**Describe the bug** + + + +**Nginx Proxy Manager Version** + + + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + + +**Expected behavior** + + + +**Screenshots** + + + +**Operating System** + + + +**Additional context** + diff --git a/.github/ISSUE_TEMPLATE/dns_challenge_request.md b/.github/ISSUE_TEMPLATE/dns_challenge_request.md new file mode 100644 index 0000000..0a00f00 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/dns_challenge_request.md @@ -0,0 +1,18 @@ +--- +name: DNS challenge provider request +about: Suggest a new provider to be available for a certificate DNS challenge +title: '' +labels: dns provider request +assignees: '' + +--- + +**What provider would you like to see added to NPM?** + + + +**Have you checked if a certbot plugin exists?** + diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..cf5b0f7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,32 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: enhancement +assignees: '' + +--- + + + +**Is your feature request related to a problem? Please describe.** + + + +**Describe the solution you'd like** + + + +**Describe alternatives you've considered** + + + +**Additional context** + diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..f1b4ffb --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,104 @@ +version: 2 +updates: + - package-ecosystem: "npm" + directory: "/backend" + schedule: + interval: "weekly" + groups: + dev-patch-updates: + dependency-type: "development" + update-types: + - "patch" + dev-minor-updates: + dependency-type: "development" + update-types: + - "minor" + prod-patch-updates: + dependency-type: "production" + update-types: + - "patch" + prod-minor-updates: + dependency-type: "production" + update-types: + - "minor" + + - package-ecosystem: "npm" + directory: "/frontend" + schedule: + interval: "weekly" + groups: + dev-patch-updates: + dependency-type: "development" + update-types: + - "patch" + dev-minor-updates: + dependency-type: "development" + update-types: + - "minor" + prod-patch-updates: + dependency-type: "production" + update-types: + - "patch" + prod-minor-updates: + dependency-type: "production" + update-types: + - "minor" + + - package-ecosystem: "npm" + directory: "/docs" + schedule: + interval: "weekly" + groups: + dev-patch-updates: + dependency-type: "development" + update-types: + - "patch" + dev-minor-updates: + dependency-type: "development" + update-types: + - "minor" + prod-patch-updates: + dependency-type: "production" + update-types: + - "patch" + prod-minor-updates: + dependency-type: "production" + update-types: + - "minor" + + - package-ecosystem: "npm" + directory: "/test" + schedule: + interval: "weekly" + groups: + dev-patch-updates: + dependency-type: "development" + update-types: + - "patch" + dev-minor-updates: + dependency-type: "development" + update-types: + - "minor" + prod-patch-updates: + dependency-type: "production" + update-types: + - "patch" + prod-minor-updates: + dependency-type: "production" + update-types: + - "minor" + + - package-ecosystem: "docker" + directory: "/docker" + schedule: + interval: "weekly" + groups: + updates: + update-types: + - "patch" + - "minor" + + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml new file mode 100644 index 0000000..3a2ae9e --- /dev/null +++ b/.github/workflows/stale.yml @@ -0,0 +1,21 @@ +name: 'Close stale issues and PRs' +on: + schedule: + - cron: '30 1 * * *' + workflow_dispatch: + +jobs: + stale: + runs-on: ubuntu-latest + steps: + - uses: actions/stale@v10 + with: + stale-issue-label: 'stale' + stale-pr-label: 'stale' + stale-issue-message: 'Issue is now considered stale. If you want to keep it open, please comment :+1:' + stale-pr-message: 'PR is now considered stale. If you want to keep it open, please comment :+1:' + close-issue-message: 'Issue was closed due to inactivity.' + close-pr-message: 'PR was closed due to inactivity.' + days-before-stale: 182 + days-before-close: 365 + operations-per-run: 50 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5bf37c0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +.DS_Store +.idea +.qodo +._* +.vscode +certbot-help.txt +test/node_modules +*/node_modules +docker/dev/dnsrouter-config.json.tmp +docker/dev/resolv.conf diff --git a/.version b/.version new file mode 100644 index 0000000..edcfe40 --- /dev/null +++ b/.version @@ -0,0 +1 @@ +2.14.0 diff --git a/AI_CONTEXT.md b/AI_CONTEXT.md new file mode 100644 index 0000000..83120ff --- /dev/null +++ b/AI_CONTEXT.md @@ -0,0 +1,64 @@ +# AI Context for NPM-WG Project + +## 1. Project Overview +**NPM-WG** is a custom fork of [Nginx Proxy Manager](https://github.com/NginxProxyManager/nginx-proxy-manager) integrated with **WireGuard VPN** management capabilities, inspired by `wg-easy`. + +The project structure remains mostly identical to Nginx Proxy Manager, but specific backend and frontend modules have been added to manage WireGuard securely inside the Docker container without needing external dependencies. + +--- + +## 2. Technology Stack +- **Backend**: Node.js, Express.js, Knex (Query Builder), SQLite/MySQL/PostgreSQL. Uses ES Modules (`"type": "module"`). +- **Frontend**: React 18, TypeScript, Vite, React Router, React Bootstrap (`ez-modal-react`), Formik, React Query (`@tanstack/react-query`). +- **Container**: Alpine Linux with `s6-overlay` for service process management. + +--- + +## 3. WireGuard Integration Architecture + +### Core Idea +WireGuard functionality is disabled by default and enabled via the `WG_ENABLED` environment variable. The system uses a Node.js cron wrapper to manipulate the WireGuard `wg` and `wg-quick` CLI tools directly. It leverages Docker volume mapping (`/etc/wireguard`) to maintain state. + +### Backend Map (Node.js) +If you need to edit WireGuard logic, check these files: +- **`backend/lib/wg-helpers.js`**: Shell wrappers for `wg` CLI (create keys, parse CIDR, parse `wg show` dumps, gen configurations). +- **`backend/internal/wireguard.js`**: Core business logic. Manages interface start/stop, adding/removing clients, IP allocation, and token expiration checking via cron. +- **`backend/routes/wireguard.js`**: REST APIs exposing CRUD operations to the frontend. Note: Handlers use ES module export functions syntax. +- **`backend/routes/main.js`**: Mounts the `/api/wireguard` routes. +- **`backend/index.js`**: Contains the startup hook `internalWireguard.startup(knex)` and graceful SIGTERM shutdown hooks. +- **`backend/migrations/20260307000000_wireguard.js`**: Knex schema initialization for tables `wg_interface` and `wg_client`. *Note: Must use ES Module `export function up()` instead of `exports.up`!* + +### Frontend Map (React) +If you need to edit the UI/UX, check these files: +- **`frontend/src/api/backend/wireguard.ts`**: API fetch helper definitions. +- **`frontend/src/hooks/useWireGuard.ts`**: `@tanstack/react-query` data fetchers and mutators. +- **`frontend/src/pages/WireGuard/index.tsx`**: Main UI Page rendering the interface stats and clients table. +- **`frontend/src/modals/WireGuardClientModal.tsx`**: Form to create a new client. *Note: Modal built explicitly over `react-bootstrap/Modal` to prevent backdrop freezing issues.* +- **`frontend/src/modals/WireGuardQRModal.tsx`**: Generates and parses QR codes. +- **`frontend/src/Router.tsx` & `SiteMenu.tsx`**: Routing and UI Navigation injection points for WireGuard UI. + +--- + +## 4. Build & Deployment Gotchas + +### Line Endings (CRLF vs LF) +- **CRITICAL**: All files in `docker/rootfs` and `docker/scripts` are used by `s6-overlay` inside Alpine Linux. **They MUST be formatted using UNIX Line Endings (LF)**. If you download this repository on Windows, ensure the git config does not automatically convert text files to `CRLF`, otherwise container booting will crash with `s6-rc-compile: fatal: invalid type: must be oneshot, longrun, or bundle`. + +### Compilation Steps +- The React Frontend **MUST** be pre-built before Docker can build. +- You must run `yarn install`, `yarn locale-compile`, and `yarn build` inside the `frontend/` directory before `docker build`. +- Use the script `./scripts/build-project.sh` to execute the full pipeline if you have a bash environment. + +### Docker Config Requirements +- **Required capabilities**: `--cap-add=NET_ADMIN` and `--cap-add=SYS_MODULE` are required for WireGuard to manipulate interfaces. +- **Sysctls**: `--sysctl net.ipv4.ip_forward=1` must be applied to the container. +- **Volumes**: Volume `/etc/letsencrypt` is severely required by original NPM core. + +--- + +## 5. Agent Instructions +If you are an AI reading this file: +1. Treat existing NPM-specific code as sacred. Do not modify global `.ts` hooks or Knex config unless instructed. +2. If fixing a bug in the Frontend, use `useWgClients()` / `useInterfaceStatus()` standard hooks. Use React-Bootstrap `Modal` instead of raw div class names. +3. If changing the DB, create a new `backend/migrations/*.js` file in ES Module format. +4. When testing out scripts, remember that the docker container requires port mapping to 51820/udp. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8864d4a --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..288dfb1 --- /dev/null +++ b/README.md @@ -0,0 +1,172 @@ +# D3V-NPMWG — Nginx Proxy Manager + WireGuard VPN + +A powerful, all-in-one Docker container that combines **Nginx Proxy Manager** (reverse proxy with SSL) and **WireGuard VPN** management in a single, beautiful web interface. + +## ✨ Features + +### Nginx Proxy Manager +- 🌐 Reverse proxy management with a beautiful UI +- 🔒 Free SSL certificates via Let's Encrypt +- 🔀 Proxy hosts, redirection hosts, streams, and 404 hosts +- 🛡️ Access control lists +- 📊 Audit logging + +### WireGuard VPN Manager +- 🔑 Create, enable, disable, and delete VPN clients +- 📱 QR code generation for mobile clients +- 📥 Download `.conf` configuration files +- 📡 Real-time client status (connected, idle, data transfer) +- ⏰ Client expiration support +- 🔄 Auto-sync WireGuard configs + +## 🚀 Quick Start (Auto Install) + +The easiest way to install, update, and manage your D3V-NPMWG instance on Linux is by using our interactive manager script. + +```bash +# Download and run the install script +curl -sSL https://raw.githubusercontent.com/npm-wg/npm-wg/main/install.sh -o install.sh +chmod +x install.sh +sudo ./install.sh +``` + +**Features included in the script:** +- `Install D3V-NPMWG`: Automatically setup docker-compose and directories in `/opt/d3v-npmwg`. +- `Uninstall D3V-NPMWG`: Remove containers and wipe data. +- `Reset Password`: Resets the admin login to `admin@example.com` / `changeme`. +- `Update`: Pulls the latest image and updates the docker-compose stack. + +You can also run specific commands directly: `sudo ./install.sh {install|uninstall|reset|update}` + +--- + +## 🐋 Manual Docker Run```bash +docker run -d \ + --name npm-wg \ + --cap-add=NET_ADMIN \ + --cap-add=SYS_MODULE \ + --sysctl net.ipv4.ip_forward=1 \ + --sysctl net.ipv4.conf.all.src_valid_mark=1 \ + -p 80:80 \ + -p 81:81 \ + -p 443:443 \ + -p 51820:51820/udp \ + -v npm-wg-data:/data \ + -v npm-wg-letsencrypt:/etc/letsencrypt \ + -v npm-wg-wireguard:/etc/wireguard \ + -e WG_HOST=your.server.ip \ + npm-wg:latest +``` + +## 📋 Docker Compose + +```yaml +version: "3.8" +services: + npm-wg: + image: npm-wg:latest + container_name: npm-wg + restart: unless-stopped + cap_add: + - NET_ADMIN + - SYS_MODULE + sysctls: + - net.ipv4.ip_forward=1 + - net.ipv4.conf.all.src_valid_mark=1 + ports: + - "80:80" # HTTP + - "81:81" # Admin UI + - "443:443" # HTTPS + - "51820:51820/udp" # WireGuard + volumes: + - data:/data + - letsencrypt:/etc/letsencrypt + - wireguard:/etc/wireguard + environment: + WG_HOST: "your.server.ip" # REQUIRED: Your server's public IP or domain + # WG_PORT: 51820 # WireGuard listen port + # WG_DEFAULT_ADDRESS: 10.8.0.0/24 # VPN subnet + # WG_DNS: 1.1.1.1,8.8.8.8 # DNS for VPN clients + # WG_MTU: 1420 # MTU for VPN + # WG_ALLOWED_IPS: 0.0.0.0/0,::/0 # Allowed IPs for clients + # WG_PERSISTENT_KEEPALIVE: 25 + # WG_ENABLED: true # Set to false to disable WireGuard + +volumes: + data: + letsencrypt: + wireguard: +``` + +## 🔧 Environment Variables + +### WireGuard Settings + +| Variable | Default | Description | +|----------|---------|-------------| +| `WG_ENABLED` | `true` | Enable/disable WireGuard VPN | +| `WG_HOST` | *(required)* | Public IP or domain of your server | +| `WG_PORT` | `51820` | WireGuard UDP listen port | +| `WG_DEFAULT_ADDRESS` | `10.8.0.0/24` | VPN subnet CIDR | +| `WG_DNS` | `1.1.1.1, 8.8.8.8` | DNS servers for VPN clients | +| `WG_MTU` | `1420` | MTU value | +| `WG_ALLOWED_IPS` | `0.0.0.0/0, ::/0` | Default allowed IPs for clients | +| `WG_PERSISTENT_KEEPALIVE` | `25` | Keepalive interval in seconds | + +## 🌍 Ports + +| Port | Protocol | Description | +|------|----------|-------------| +| `80` | TCP | HTTP | +| `81` | TCP | Admin Web UI | +| `443` | TCP | HTTPS | +| `51820` | UDP | WireGuard VPN | + +## 📖 Usage + +1. **Access the Admin UI** at `http://your-server:81` +2. **Set up NPM** with your admin email and password +3. **Navigate to WireGuard** from the sidebar menu +4. **Create VPN clients** by clicking "New Client" +5. **Scan QR code** or **download .conf** file to configure WireGuard on your devices + +## 🏗️ Building from Source + +To build D3V-NPMWG from source, you must build the React frontend before building the Docker image: + +```bash +# Clone the repository +git clone https://github.com/npm-wg/npm-wg.git +cd npm-wg + +# 1. Build the Frontend +cd frontend +yarn install +yarn build +cd .. + +# 2. Build the Docker Image +# IMPORTANT: Do not forget the trailing dot '.' at the end of the command! +docker build -t npm-wg -f docker/Dockerfile . +``` + +Alternatively, you can run the helper script: +```bash +./scripts/build-project.sh +``` + +## ⚠️ Requirements + +- **Docker** with Linux containers +- **Host kernel** must support WireGuard (Linux 5.6+ or WireGuard kernel module) +- Container requires `NET_ADMIN` and `SYS_MODULE` capabilities +- IP forwarding must be enabled (`net.ipv4.ip_forward=1`) + +## 📜 Credits + +- [Nginx Proxy Manager](https://github.com/NginxProxyManager/nginx-proxy-manager) — Original proxy manager +- [wg-easy](https://github.com/wg-easy/wg-easy) — WireGuard management inspiration + +## 📄 License + +MIT License diff --git a/backend/.gitignore b/backend/.gitignore new file mode 100644 index 0000000..149080b --- /dev/null +++ b/backend/.gitignore @@ -0,0 +1,8 @@ +config/development.json +data/* +yarn-error.log +tmp +certbot.log +node_modules +core.* + diff --git a/backend/app.js b/backend/app.js new file mode 100644 index 0000000..3039bbb --- /dev/null +++ b/backend/app.js @@ -0,0 +1,92 @@ +import bodyParser from "body-parser"; +import compression from "compression"; +import express from "express"; +import fileUpload from "express-fileupload"; +import { isDebugMode } from "./lib/config.js"; +import cors from "./lib/express/cors.js"; +import jwt from "./lib/express/jwt.js"; +import { debug, express as logger } from "./logger.js"; +import mainRoutes from "./routes/main.js"; + +/** + * App + */ +const app = express(); +app.use(fileUpload()); +app.use(bodyParser.json()); +app.use(bodyParser.urlencoded({ extended: true })); + +// Gzip +app.use(compression()); + +/** + * General Logging, BEFORE routes + */ + +app.disable("x-powered-by"); +app.enable("trust proxy", ["loopback", "linklocal", "uniquelocal"]); +app.enable("strict routing"); + +// pretty print JSON when not live +if (isDebugMode()) { + app.set("json spaces", 2); +} + +// CORS for everything +app.use(cors); + +// General security/cache related headers + server header +app.use((_, res, next) => { + let x_frame_options = "DENY"; + + if (typeof process.env.X_FRAME_OPTIONS !== "undefined" && process.env.X_FRAME_OPTIONS) { + x_frame_options = process.env.X_FRAME_OPTIONS; + } + + res.set({ + "X-XSS-Protection": "1; mode=block", + "X-Content-Type-Options": "nosniff", + "X-Frame-Options": x_frame_options, + "Cache-Control": "no-cache, no-store, max-age=0, must-revalidate", + Pragma: "no-cache", + Expires: 0, + }); + next(); +}); + +app.use(jwt()); +app.use("/", mainRoutes); + +// production error handler +// no stacktraces leaked to user +app.use((err, req, res, _) => { + const payload = { + error: { + code: err.status, + message: err.public ? err.message : "Internal Error", + }, + }; + + if (typeof err.message_i18n !== "undefined") { + payload.error.message_i18n = err.message_i18n; + } + + if (isDebugMode() || (req.baseUrl + req.path).includes("nginx/certificates")) { + payload.debug = { + stack: typeof err.stack !== "undefined" && err.stack ? err.stack.split("\n") : null, + previous: err.previous, + }; + } + + // Not every error is worth logging - but this is good for now until it gets annoying. + if (typeof err.stack !== "undefined" && err.stack) { + debug(logger, err.stack); + if (typeof err.public === "undefined" || !err.public) { + logger.warn(err.message); + } + } + + res.status(err.status || 500).send(payload); +}); + +export default app; diff --git a/backend/biome.json b/backend/biome.json new file mode 100644 index 0000000..ab68104 --- /dev/null +++ b/backend/biome.json @@ -0,0 +1,91 @@ +{ + "$schema": "https://biomejs.dev/schemas/2.4.5/schema.json", + "vcs": { + "enabled": true, + "clientKind": "git", + "useIgnoreFile": true + }, + "files": { + "ignoreUnknown": false, + "includes": [ + "**/*.ts", + "**/*.tsx", + "**/*.js", + "**/*.jsx", + "!**/dist/**/*" + ] + }, + "formatter": { + "enabled": true, + "indentStyle": "tab", + "indentWidth": 4, + "lineWidth": 120, + "formatWithErrors": true + }, + "assist": { + "actions": { + "source": { + "organizeImports": { + "level": "on", + "options": { + "groups": [ + ":BUN:", + ":NODE:", + [ + "npm:*", + "npm:*/**" + ], + ":PACKAGE_WITH_PROTOCOL:", + ":URL:", + ":PACKAGE:", + [ + "/src/*", + "/src/**" + ], + [ + "/**" + ], + [ + "#*", + "#*/**" + ], + ":PATH:" + ] + } + } + } + } + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true, + "correctness": { + "useUniqueElementIds": "off" + }, + "suspicious": { + "noExplicitAny": "off" + }, + "performance": { + "noDelete": "off" + }, + "nursery": "off", + "a11y": { + "useSemanticElements": "off", + "useValidAnchor": "off" + }, + "style": { + "noParameterAssign": "error", + "useAsConstAssertion": "error", + "useDefaultParameterLast": "error", + "useEnumInitializers": "error", + "useSelfClosingElements": "error", + "useSingleVarDeclarator": "error", + "noUnusedTemplateLiteral": "error", + "useNumberNamespace": "error", + "noInferrableTypes": "error", + "noUselessElse": "error" + } + } + } +} diff --git a/backend/certbot/README.md b/backend/certbot/README.md new file mode 100644 index 0000000..3c45646 --- /dev/null +++ b/backend/certbot/README.md @@ -0,0 +1,21 @@ +# Certbot dns-plugins + +This file contains info about available Certbot DNS plugins. +This only works for plugins which use the standard argument structure, so: +--authenticator ---credentials ---propagation-seconds + +File Structure: + +```json +{ + "cloudflare": { + "display_name": "Name displayed to the user", + "package_name": "Package name in PyPi repo", + "version_requirement": "Optional package version requirements (e.g. ==1.3 or >=1.2,<2.0, see https://www.python.org/dev/peps/pep-0440/#version-specifiers)", + "dependencies": "Additional dependencies, space separated (as you would pass it to pip install)", + "credentials": "Template of the credentials file", + "full_plugin_name": "The full plugin name as used in the commandline with certbot, e.g. 'dns-njalla'" + }, + ... +} +``` diff --git a/backend/certbot/dns-plugins.json b/backend/certbot/dns-plugins.json new file mode 100644 index 0000000..8f592f6 --- /dev/null +++ b/backend/certbot/dns-plugins.json @@ -0,0 +1,658 @@ +{ + "acmedns": { + "name": "ACME-DNS", + "package_name": "certbot-dns-acmedns", + "version": "~=0.1.0", + "dependencies": "", + "credentials": "dns_acmedns_api_url = http://acmedns-server/\ndns_acmedns_registration_file = /data/acme-registration.json", + "full_plugin_name": "dns-acmedns" + }, + "active24": { + "name": "Active24", + "package_name": "certbot-dns-active24", + "version": "~=2.0.0", + "dependencies": "", + "credentials": "dns_active24_api_key = \ndns_active24_secret = ", + "full_plugin_name": "dns-active24" + }, + "aliyun": { + "name": "Aliyun", + "package_name": "certbot-dns-aliyun", + "version": "~=2.0.0", + "dependencies": "", + "credentials": "dns_aliyun_access_key = 12345678\ndns_aliyun_access_key_secret = 1234567890abcdef1234567890abcdef", + "full_plugin_name": "dns-aliyun" + }, + "arvan": { + "name": "ArvanCloud", + "package_name": "certbot-dns-arvan", + "version": ">=0.1.0", + "dependencies": "", + "credentials": "dns_arvan_key = Apikey xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "full_plugin_name": "dns-arvan" + }, + "azure": { + "name": "Azure", + "package_name": "certbot-dns-azure", + "version": "~=2.6.1", + "dependencies": "azure-mgmt-dns==8.2.0", + "credentials": "# This plugin supported API authentication using either Service Principals or utilizing a Managed Identity assigned to the virtual machine.\n# Regardless which authentication method used, the identity will need the “DNS Zone Contributor” role assigned to it.\n# As multiple Azure DNS Zones in multiple resource groups can exist, the config file needs a mapping of zone to resource group ID. Multiple zones -> ID mappings can be listed by using the key dns_azure_zoneX where X is a unique number. At least 1 zone mapping is required.\n\n# Using a service principal (option 1)\ndns_azure_sp_client_id = 912ce44a-0156-4669-ae22-c16a17d34ca5\ndns_azure_sp_client_secret = E-xqXU83Y-jzTI6xe9fs2YC~mck3ZzUih9\ndns_azure_tenant_id = ed1090f3-ab18-4b12-816c-599af8a88cf7\n\n# Using used assigned MSI (option 2)\n# dns_azure_msi_client_id = 912ce44a-0156-4669-ae22-c16a17d34ca5\n\n# Using system assigned MSI (option 3)\n# dns_azure_msi_system_assigned = true\n\n# Zones (at least one always required)\ndns_azure_zone1 = example.com:/subscriptions/c135abce-d87d-48df-936c-15596c6968a5/resourceGroups/dns1\ndns_azure_zone2 = example.org:/subscriptions/99800903-fb14-4992-9aff-12eaf2744622/resourceGroups/dns2", + "full_plugin_name": "dns-azure" + }, + "baidu": { + "name": "baidu", + "package_name": "certbot-dns-baidu", + "version": "~=0.1.1", + "dependencies": "", + "credentials": "dns_baidu_access_key = 12345678\ndns_baidu_secret_key = 1234567890abcdef1234567890abcdef", + "full_plugin_name": "dns-baidu" + }, + "beget": { + "name":"Beget", + "package_name": "certbot-beget-plugin", + "version": "~=1.0.0.dev9", + "dependencies": "", + "credentials": "# Beget API credentials used by Certbot\nbeget_plugin_username = username\nbeget_plugin_password = password", + "full_plugin_name": "beget-plugin" + }, + "bunny": { + "name": "bunny.net", + "package_name": "certbot-dns-bunny", + "version": "~=0.0.9", + "dependencies": "", + "credentials": "# Bunny API token used by Certbot (see https://dash.bunny.net/account/settings)\ndns_bunny_api_key = xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx", + "full_plugin_name": "dns-bunny" + }, + "cdmon": { + "name": "cdmon", + "package_name": "certbot-dns-cdmon", + "version": "~=0.4.1", + "dependencies": "", + "credentials": "dns_cdmon_api_key=your-cdmon-api-token\ndns_cdmon_domain=your_domain_is_optional", + "full_plugin_name": "dns-cdmon" + }, + "cloudflare": { + "name": "Cloudflare", + "package_name": "certbot-dns-cloudflare", + "version": "=={{certbot-version}}", + "dependencies": "acme=={{certbot-version}}", + "credentials": "# Cloudflare API token\ndns_cloudflare_api_token=0123456789abcdef0123456789abcdef01234567", + "full_plugin_name": "dns-cloudflare" + }, + "cloudns": { + "name": "ClouDNS", + "package_name": "certbot-dns-cloudns", + "version": "~=0.7.0", + "dependencies": "", + "credentials": "# Target user ID (see https://www.cloudns.net/api-settings/)\n\tdns_cloudns_auth_id=1234\n\t# Alternatively, one of the following two options can be set:\n\t# dns_cloudns_sub_auth_id=1234\n\t# dns_cloudns_sub_auth_user=foobar\n\n\t# API password\n\tdns_cloudns_auth_password=password1", + "full_plugin_name": "dns-cloudns" + }, + "cloudxns": { + "name": "CloudXNS", + "package_name": "certbot-dns-cloudxns", + "version": "~=1.32.0", + "dependencies": "", + "credentials": "dns_cloudxns_api_key = 1234567890abcdef1234567890abcdef\ndns_cloudxns_secret_key = 1122334455667788", + "full_plugin_name": "dns-cloudxns" + }, + "constellix": { + "name": "Constellix", + "package_name": "certbot-dns-constellix", + "version": "~=0.2.1", + "dependencies": "", + "credentials": "dns_constellix_apikey = 5fb4e76f-ac91-43e5-f982458bc595\ndns_constellix_secretkey = 47d99fd0-32e7-4e07-85b46d08e70b\ndns_constellix_endpoint = https://api.dns.constellix.com/v1", + "full_plugin_name": "dns-constellix" + }, + "corenetworks": { + "name": "Core Networks", + "package_name": "certbot-dns-corenetworks", + "version": "~=0.1.4", + "dependencies": "", + "credentials": "dns_corenetworks_username = asaHB12r\ndns_corenetworks_password = secure_password", + "full_plugin_name": "dns-corenetworks" + }, + "cpanel": { + "name": "cPanel", + "package_name": "certbot-dns-cpanel", + "version": "~=0.4.0", + "dependencies": "", + "credentials": "cpanel_url = https://cpanel.example.com:2083\ncpanel_username = your_username\ncpanel_password = your_password\ncpanel_token = your_api_token", + "full_plugin_name": "cpanel" + }, + "ddnss": { + "name": "DDNSS", + "package_name": "certbot-dns-ddnss", + "version": "~=1.1.0", + "dependencies": "", + "credentials": "dns_ddnss_token = YOUR_DDNSS_API_TOKEN", + "full_plugin_name": "dns-ddnss" + }, + "desec": { + "name": "deSEC", + "package_name": "certbot-dns-desec", + "version": "~=1.2.1", + "dependencies": "", + "credentials": "dns_desec_token = YOUR_DESEC_API_TOKEN\ndns_desec_endpoint = https://desec.io/api/v1/", + "full_plugin_name": "dns-desec" + }, + "duckdns": { + "name": "DuckDNS", + "package_name": "certbot-dns-duckdns", + "version": "~=1.0", + "dependencies": "", + "credentials": "dns_duckdns_token=your-duckdns-token", + "full_plugin_name": "dns-duckdns" + }, + "digitalocean": { + "name": "DigitalOcean", + "package_name": "certbot-dns-digitalocean", + "version": "=={{certbot-version}}", + "dependencies": "acme=={{certbot-version}}", + "credentials": "dns_digitalocean_token = 0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff", + "full_plugin_name": "dns-digitalocean" + }, + "directadmin": { + "name": "DirectAdmin", + "package_name": "certbot-dns-directadmin", + "version": "~=0.0.23", + "dependencies": "", + "credentials": "directadmin_url = https://my.directadminserver.com:2222\ndirectadmin_username = username\ndirectadmin_password = aSuperStrongPassword", + "full_plugin_name": "directadmin" + }, + "dnsimple": { + "name": "DNSimple", + "package_name": "certbot-dns-dnsimple", + "version": "=={{certbot-version}}", + "dependencies": "acme=={{certbot-version}}", + "credentials": "dns_dnsimple_token = MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw", + "full_plugin_name": "dns-dnsimple" + }, + "dnsmadeeasy": { + "name": "DNS Made Easy", + "package_name": "certbot-dns-dnsmadeeasy", + "version": "=={{certbot-version}}", + "dependencies": "acme=={{certbot-version}}", + "credentials": "dns_dnsmadeeasy_api_key = 1c1a3c91-4770-4ce7-96f4-54c0eb0e457a\ndns_dnsmadeeasy_secret_key = c9b5625f-9834-4ff8-baba-4ed5f32cae55", + "full_plugin_name": "dns-dnsmadeeasy" + }, + "dnsmulti": { + "name": "DnsMulti", + "package_name": "certbot-dns-multi", + "version": "~=4.9", + "dependencies": "", + "credentials": "# See https://go-acme.github.io/lego/dns/#dns-providers for list of providers and their settings\n# Example provider configuration for DreamHost\n# dns_multi_provider = dreamhost\n# DREAMHOST_API_KEY = ABCDEFG1234", + "full_plugin_name": "dns-multi" + }, + "dnspod": { + "name": "DNSPod", + "package_name": "certbot-dns-dnspod", + "version": "~=0.1.0", + "dependencies": "", + "credentials": "dns_dnspod_email = \"email@example.com\"\ndns_dnspod_api_token = \"id,key\"", + "full_plugin_name": "dns-dnspod" + }, + "domainoffensive": { + "name": "DomainOffensive (do.de)", + "package_name": "certbot-dns-domainoffensive", + "version": "~=2.0.0", + "dependencies": "", + "credentials": "dns_domainoffensive_api_token = YOUR_DO_DE_AUTH_TOKEN", + "full_plugin_name": "dns-domainoffensive" + }, + "domeneshop": { + "name": "Domeneshop", + "package_name": "certbot-dns-domeneshop", + "version": "~=0.2.8", + "dependencies": "", + "credentials": "dns_domeneshop_client_token=YOUR_DOMENESHOP_CLIENT_TOKEN\ndns_domeneshop_client_secret=YOUR_DOMENESHOP_CLIENT_SECRET", + "full_plugin_name": "dns-domeneshop" + }, + "dynu": { + "name": "Dynu", + "package_name": "certbot-dns-dynu", + "version": "~=0.0.1", + "dependencies": "", + "credentials": "dns_dynu_auth_token = YOUR_DYNU_AUTH_TOKEN", + "full_plugin_name": "dns-dynu" + }, + "easydns": { + "name": "easyDNS", + "package_name": "certbot-dns-easydns", + "version": "~=0.1.2", + "dependencies": "", + "credentials": "dns_easydns_usertoken = YOUR_EASYDNS_USERTOKEN\ndns_easydns_userkey = YOUR_EASYDNS_USERKEY\ndns_easydns_endpoint = https://rest.easydns.net", + "full_plugin_name": "dns-easydns" + }, + "eurodns": { + "name": "EuroDNS", + "package_name": "certbot-dns-eurodns", + "version": "~=0.0.4", + "dependencies": "", + "credentials": "dns_eurodns_applicationId = myuser\ndns_eurodns_apiKey = mysecretpassword\ndns_eurodns_endpoint = https://rest-api.eurodns.com/user-api-gateway/proxy", + "full_plugin_name": "dns-eurodns" + }, + "firstdomains": { + "name": "First Domains", + "package_name": "certbot-dns-firstdomains", + "version": ">=1.0", + "dependencies": "", + "credentials": "dns_firstdomains_username = myremoteuser\ndns_firstdomains_password = verysecureremoteuserpassword", + "full_plugin_name": "dns-firstdomains" + }, + "freedns": { + "name": "FreeDNS", + "package_name": "certbot-dns-freedns", + "version": "~=0.1.0", + "dependencies": "", + "credentials": "dns_freedns_username = myremoteuser\ndns_freedns_password = verysecureremoteuserpassword", + "full_plugin_name": "dns-freedns" + }, + "gandi": { + "name": "Gandi Live DNS", + "package_name": "certbot-dns-gandi", + "version": "~=1.6.1", + "dependencies": "", + "credentials": "# Gandi personal access token\ndns_gandi_token=PERSONAL_ACCESS_TOKEN", + "full_plugin_name": "dns-gandi" + }, + "gcore": { + "name": "Gcore DNS", + "package_name": "certbot-dns-gcore", + "version": "~=0.1.8", + "dependencies": "", + "credentials": "dns_gcore_apitoken = 0123456789abcdef0123456789abcdef01234567", + "full_plugin_name": "dns-gcore" + }, + "glesys": { + "name": "Glesys", + "package_name": "certbot-dns-glesys", + "version": "~=2.1.0", + "dependencies": "", + "credentials": "dns_glesys_user = CL00000\ndns_glesys_password = apikeyvalue", + "full_plugin_name": "dns-glesys" + }, + "godaddy": { + "name": "GoDaddy", + "package_name": "certbot-dns-godaddy", + "version": "==2.8.0", + "dependencies": "", + "credentials": "dns_godaddy_secret = 0123456789abcdef0123456789abcdef01234567\ndns_godaddy_key = abcdef0123456789abcdef01234567abcdef0123", + "full_plugin_name": "dns-godaddy" + }, + "google": { + "name": "Google", + "package_name": "certbot-dns-google", + "version": "=={{certbot-version}}", + "dependencies": "", + "credentials": "{\n\"type\": \"service_account\",\n...\n}", + "full_plugin_name": "dns-google" + }, + "googledomains": { + "name": "GoogleDomainsDNS", + "package_name": "certbot-dns-google-domains", + "version": "~=0.1.5", + "dependencies": "", + "credentials": "dns_google_domains_access_token = 0123456789abcdef0123456789abcdef01234567\ndns_google_domains_zone = \"example.com\"", + "full_plugin_name": "dns-google-domains" + }, + "he": { + "name": "Hurricane Electric", + "package_name": "certbot-dns-he", + "version": "~=1.0.0", + "dependencies": "", + "credentials": "dns_he_user = Me\ndns_he_pass = my HE password", + "full_plugin_name": "dns-he" + }, + "he-ddns": { + "name": "Hurricane Electric - DDNS", + "package_name": "certbot-dns-he-ddns", + "version": "~=0.1.0", + "dependencies": "", + "credentials": "dns_he_ddns_password = verysecurepassword", + "full_plugin_name": "dns-he-ddns" + }, + "hetzner": { + "name": "Hetzner", + "package_name": "certbot-dns-hetzner", + "version": "~=1.0.4", + "dependencies": "", + "credentials": "dns_hetzner_api_token = 0123456789abcdef0123456789abcdef", + "full_plugin_name": "dns-hetzner" + }, + "hetzner-cloud": { + "name": "Hetzner Cloud", + "package_name": "certbot-dns-hetzner-cloud", + "version": "~=1.0.4", + "dependencies": "", + "credentials": "dns_hetzner_cloud_api_token = your_api_token_here", + "full_plugin_name": "dns-hetzner-cloud" + }, + "hostingnl": { + "name": "Hosting.nl", + "package_name": "certbot-dns-hostingnl", + "version": "~=0.1.5", + "dependencies": "", + "credentials": "dns_hostingnl_api_key = 0123456789abcdef0123456789abcdef", + "full_plugin_name": "dns-hostingnl" + }, + "hover": { + "name": "Hover", + "package_name": "certbot-dns-hover", + "version": "~=1.2.1", + "dependencies": "", + "credentials": "dns_hover_hoverurl = https://www.hover.com\ndns_hover_username = hover-admin-username\ndns_hover_password = hover-admin-password\ndns_hover_totpsecret = 2fa-totp-secret", + "full_plugin_name": "dns-hover" + }, + "infomaniak": { + "name": "Infomaniak", + "package_name": "certbot-dns-infomaniak", + "version": "~=0.2.2", + "dependencies": "", + "credentials": "dns_infomaniak_token = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", + "full_plugin_name": "dns-infomaniak" + }, + "inwx": { + "name": "INWX", + "package_name": "certbot-dns-inwx", + "version": "~=2.1.2", + "dependencies": "", + "credentials": "dns_inwx_url = https://api.domrobot.com/xmlrpc/\ndns_inwx_username = your_username\ndns_inwx_password = your_password\ndns_inwx_shared_secret = your_shared_secret optional", + "full_plugin_name": "dns-inwx" + }, + "ionos": { + "name": "IONOS", + "package_name": "certbot-dns-ionos", + "version": "==2022.11.24", + "dependencies": "", + "credentials": "dns_ionos_prefix = myapikeyprefix\ndns_ionos_secret = verysecureapikeysecret\ndns_ionos_endpoint = https://api.hosting.ionos.com", + "full_plugin_name": "dns-ionos" + }, + "ispconfig": { + "name": "ISPConfig", + "package_name": "certbot-dns-ispconfig", + "version": "~=0.2.0", + "dependencies": "", + "credentials": "dns_ispconfig_username = myremoteuser\ndns_ispconfig_password = verysecureremoteuserpassword\ndns_ispconfig_endpoint = https://localhost:8080", + "full_plugin_name": "dns-ispconfig" + }, + "isset": { + "name": "Isset", + "package_name": "certbot-dns-isset", + "version": "~=0.0.3", + "dependencies": "", + "credentials": "dns_isset_endpoint=\"https://customer.isset.net/api\"\ndns_isset_token=\"\"", + "full_plugin_name": "dns-isset" + }, + "joker": { + "name": "Joker", + "package_name": "certbot-dns-joker", + "version": "~=1.1.0", + "dependencies": "", + "credentials": "dns_joker_username = \ndns_joker_password = \ndns_joker_domain = ", + "full_plugin_name": "dns-joker" + }, + "kas": { + "name": "All-Inkl", + "package_name": "certbot-dns-kas", + "version": "~=0.1.1", + "dependencies": "kasserver", + "credentials": "dns_kas_user = your_kas_user\ndns_kas_password = your_kas_password", + "full_plugin_name": "dns-kas" + }, + "leaseweb": { + "name": "LeaseWeb", + "package_name": "certbot-dns-leaseweb", + "version": "~=1.0.3", + "dependencies": "", + "credentials": "dns_leaseweb_api_token = 01234556789", + "full_plugin_name": "dns-leaseweb" + }, + "linode": { + "name": "Linode", + "package_name": "certbot-dns-linode", + "version": "=={{certbot-version}}", + "dependencies": "acme=={{certbot-version}}", + "credentials": "dns_linode_key = 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ64\ndns_linode_version = [|3|4]", + "full_plugin_name": "dns-linode" + }, + "loopia": { + "name": "Loopia", + "package_name": "certbot-dns-loopia", + "version": "~=1.0.0", + "dependencies": "", + "credentials": "dns_loopia_user = user@loopiaapi\ndns_loopia_password = abcdef0123456789abcdef01234567abcdef0123", + "full_plugin_name": "dns-loopia" + }, + "luadns": { + "name": "LuaDNS", + "package_name": "certbot-dns-luadns", + "version": "=={{certbot-version}}", + "dependencies": "acme=={{certbot-version}}", + "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", + "version": "~=0.0.4", + "dependencies": "", + "credentials": "dns_mijn_host_api_key=0123456789abcdef0123456789abcdef", + "full_plugin_name": "dns-mijn-host" + }, + "namecheap": { + "name": "Namecheap", + "package_name": "certbot-dns-namecheap", + "version": "~=1.0.0", + "dependencies": "", + "credentials": "dns_namecheap_username = 123456\ndns_namecheap_api_key = 0123456789abcdef0123456789abcdef01234567", + "full_plugin_name": "dns-namecheap" + }, + "netcup": { + "name": "netcup", + "package_name": "certbot-dns-netcup", + "version": "~=1.0.0", + "dependencies": "", + "credentials": "dns_netcup_customer_id = 123456\ndns_netcup_api_key = 0123456789abcdef0123456789abcdef01234567\ndns_netcup_api_password = abcdef0123456789abcdef01234567abcdef0123", + "full_plugin_name": "dns-netcup" + }, + "nicru": { + "name": "nic.ru", + "package_name": "certbot-dns-nicru", + "version": "~=1.0.3", + "dependencies": "", + "credentials": "dns_nicru_client_id = application-id\ndns_nicru_client_secret = application-token\ndns_nicru_username = 0001110/NIC-D\ndns_nicru_password = password\ndns_nicru_scope = .+:.+/zones/example.com(/.+)?\ndns_nicru_service = DNS_SERVICE_NAME\ndns_nicru_zone = example.com", + "full_plugin_name": "dns-nicru" + }, + "njalla": { + "name": "Njalla", + "package_name": "certbot-dns-njalla", + "version": "~=1.0.0", + "dependencies": "", + "credentials": "dns_njalla_token = 0123456789abcdef0123456789abcdef01234567", + "full_plugin_name": "dns-njalla" + }, + "nsone": { + "name": "NS1", + "package_name": "certbot-dns-nsone", + "version": "=={{certbot-version}}", + "dependencies": "acme=={{certbot-version}}", + "credentials": "dns_nsone_api_key = MDAwMDAwMDAwMDAwMDAw", + "full_plugin_name": "dns-nsone" + }, + "oci": { + "name": "Oracle Cloud Infrastructure DNS", + "package_name": "certbot-dns-oci", + "version": "~=0.3.6", + "dependencies": "oci", + "credentials": "[DEFAULT]\nuser = ocid1.user.oc1...\nfingerprint = xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx\ntenancy = ocid1.tenancy.oc1...\nregion = us-ashburn-1\nkey_file = ~/.oci/oci_api_key.pem", + "full_plugin_name": "dns-oci" + }, + "ovh": { + "name": "OVH", + "package_name": "certbot-dns-ovh", + "version": "=={{certbot-version}}", + "dependencies": "acme=={{certbot-version}}", + "credentials": "dns_ovh_endpoint = ovh-eu\ndns_ovh_application_key = MDAwMDAwMDAwMDAw\ndns_ovh_application_secret = MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw\ndns_ovh_consumer_key = MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw", + "full_plugin_name": "dns-ovh" + }, + "plesk": { + "name": "Plesk", + "package_name": "certbot-dns-plesk", + "version": "~=0.3.0", + "dependencies": "", + "credentials": "dns_plesk_username = your-username\ndns_plesk_password = secret\ndns_plesk_api_url = https://plesk-api-host:8443", + "full_plugin_name": "dns-plesk" + }, + "porkbun": { + "name": "Porkbun", + "package_name": "certbot-dns-porkbun", + "version": "~=0.11.0", + "dependencies": "", + "credentials": "dns_porkbun_key=your-porkbun-api-key\ndns_porkbun_secret=your-porkbun-api-secret", + "full_plugin_name": "dns-porkbun" + }, + "powerdns": { + "name": "PowerDNS", + "package_name": "certbot-dns-powerdns", + "version": "~=0.2.1", + "dependencies": "PyYAML==5.3.1", + "credentials": "dns_powerdns_api_url = https://api.mypowerdns.example.org\ndns_powerdns_api_key = AbCbASsd!@34", + "full_plugin_name": "dns-powerdns" + }, + "regru": { + "name": "reg.ru", + "package_name": "certbot-regru", + "version": "~=1.0.2", + "dependencies": "", + "credentials": "dns_username=username\ndns_password=password", + "full_plugin_name": "dns" + }, + "rfc2136": { + "name": "RFC 2136", + "package_name": "certbot-dns-rfc2136", + "version": "=={{certbot-version}}", + "dependencies": "acme=={{certbot-version}}", + "credentials": "# Target DNS server\ndns_rfc2136_server = 192.0.2.1\n# Target DNS port\ndns_rfc2136_port = 53\n# TSIG key name\ndns_rfc2136_name = keyname.\n# TSIG key secret\ndns_rfc2136_secret = 4q4wM/2I180UXoMyN4INVhJNi8V9BCV+jMw2mXgZw/CSuxUT8C7NKKFs AmKd7ak51vWKgSl12ib86oQRPkpDjg==\n# TSIG key algorithm\ndns_rfc2136_algorithm = HMAC-SHA512", + "full_plugin_name": "dns-rfc2136" + }, + "rockenstein": { + "name": "rockenstein AG", + "package_name": "certbot-dns-rockenstein", + "version": "~=1.0.0", + "dependencies": "", + "credentials": "dns_rockenstein_token=", + "full_plugin_name": "dns-rockenstein" + }, + "route53": { + "name": "Route 53 (Amazon)", + "package_name": "certbot-dns-route53", + "version": "=={{certbot-version}}", + "dependencies": "acme=={{certbot-version}}", + "credentials": "[default]\naws_access_key_id=AKIAIOSFODNN7EXAMPLE\naws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "full_plugin_name": "dns-route53" + }, + "simply": { + "name": "Simply", + "package_name": "certbot-dns-simply", + "version": "~=0.1.2", + "dependencies": "", + "credentials": "dns_simply_account_name = UExxxxxx\ndns_simply_api_key = DsHJdsjh2812872sahj", + "full_plugin_name": "dns-simply" + }, + "spaceship": { + "name": "Spaceship", + "package_name": "certbot-dns-spaceship", + "version": "~=1.0.4", + "dependencies": "", + "credentials": "[spaceship]\napi_key=your_api_key\napi_secret=your_api_secret", + "full_plugin_name": "dns-spaceship" + }, + "strato": { + "name": "Strato", + "package_name": "certbot-dns-strato", + "version": "~=0.2.2", + "dependencies": "", + "credentials": "dns_strato_username = user\ndns_strato_password = pass\n# uncomment if youre using two factor authentication:\n# dns_strato_totp_devicename = 2fa_device\n# dns_strato_totp_secret = 2fa_secret\n#\n# uncomment if domain name contains special characters\n# insert domain display name as seen on your account page here\n# dns_strato_domain_display_name = my-punicode-url.de\n#\n# if youre not using strato.de or another special endpoint you can customise it below\n# you will probably only need to adjust the host, but you can also change the complete endpoint url\n# dns_strato_custom_api_scheme = https\n# dns_strato_custom_api_host = www.strato.de\n# dns_strato_custom_api_port = 443\n# dns_strato_custom_api_path = \"/apps/CustomerService\"", + "full_plugin_name": "dns-strato" + }, + "selectelv2": { + "name": "Selectel api v2", + "package_name": "certbot-dns-selectel-api-v2", + "version": "~=0.3.0", + "dependencies": "", + "credentials": "dns_selectel_api_v2_account_id = your_account_id\ndns_selectel_api_v2_project_name = your_project\ndns_selectel_api_v2_username = your_username\ndns_selectel_api_v2_password = your_password", + "full_plugin_name": "dns-selectel-api-v2" + }, + "timeweb": { + "name": "Timeweb Cloud", + "package_name": "certbot-dns-timeweb", + "version": "~=1.0.1", + "dependencies": "", + "credentials": "dns_timeweb_api_key = XXXXXXXXXXXXXXXXXXX", + "full_plugin_name": "dns-timeweb" + }, + "transip": { + "name": "TransIP", + "package_name": "certbot-dns-transip", + "version": "~=0.5.2", + "dependencies": "", + "credentials": "dns_transip_username = my_username\ndns_transip_key_file = /etc/letsencrypt/transip-rsa.key", + "full_plugin_name": "dns-transip" + }, + "tencentcloud": { + "name": "Tencent Cloud", + "package_name": "certbot-dns-tencentcloud", + "version": "~=2.0.2", + "dependencies": "", + "credentials": "dns_tencentcloud_secret_id = TENCENT_CLOUD_SECRET_ID\ndns_tencentcloud_secret_key = TENCENT_CLOUD_SECRET_KEY", + "full_plugin_name": "dns-tencentcloud" + }, + "vultr": { + "name": "Vultr", + "package_name": "certbot-dns-vultr", + "version": "~=1.1.0", + "dependencies": "", + "credentials": "dns_vultr_key = YOUR_VULTR_API_KEY", + "full_plugin_name": "dns-vultr" + }, + "websupport": { + "name": "Websupport.sk", + "package_name": "certbot-dns-websupport", + "version": "~=2.0.1", + "dependencies": "", + "credentials": "dns_websupport_identifier = \ndns_websupport_secret_key = ", + "full_plugin_name": "dns-websupport" + }, + "wedos": { + "name": "Wedos", + "package_name": "certbot-dns-wedos", + "version": "~=2.2", + "dependencies": "", + "credentials": "dns_wedos_user = \ndns_wedos_auth = ", + "full_plugin_name": "dns-wedos" + }, + "edgedns": { + "name": "Akamai Edge DNS", + "package_name": "certbot-plugin-edgedns", + "version": "~=0.1.0", + "dependencies": "", + "credentials": "edgedns_client_secret = as3d1asd5d1a32sdfsdfs2d1asd5=\nedgedns_host = sdflskjdf-dfsdfsdf-sdfsdfsdf.luna.akamaiapis.net\nedgedns_access_token = kjdsi3-34rfsdfsdf-234234fsdfsdf\nedgedns_client_token = dkfjdf-342fsdfsd-23fsdfsdfsdf", + "full_plugin_name": "edgedns" + }, + "zoneedit": { + "name": "ZoneEdit", + "package_name": "certbot-dns-zoneedit", + "version": "~=0.3.2", + "dependencies": "--no-deps dnspython", + "credentials": "dns_zoneedit_user = \ndns_zoneedit_token = ", + "full_plugin_name": "dns-zoneedit" + } +} diff --git a/backend/config/README.md b/backend/config/README.md new file mode 100644 index 0000000..26268a1 --- /dev/null +++ b/backend/config/README.md @@ -0,0 +1,2 @@ +These files are use in development and are not deployed as part of the final product. + \ No newline at end of file diff --git a/backend/config/default.json b/backend/config/default.json new file mode 100644 index 0000000..154e66e --- /dev/null +++ b/backend/config/default.json @@ -0,0 +1,10 @@ +{ + "database": { + "engine": "mysql2", + "host": "db", + "name": "npm", + "user": "npm", + "password": "npm", + "port": 3306 + } +} diff --git a/backend/config/sqlite-test-db.json b/backend/config/sqlite-test-db.json new file mode 100644 index 0000000..b0e8707 --- /dev/null +++ b/backend/config/sqlite-test-db.json @@ -0,0 +1,26 @@ +{ + "database": { + "engine": "knex-native", + "knex": { + "client": "better-sqlite3", + "connection": { + "filename": "/app/config/mydb.sqlite" + }, + "pool": { + "min": 0, + "max": 1, + "createTimeoutMillis": 3000, + "acquireTimeoutMillis": 30000, + "idleTimeoutMillis": 30000, + "reapIntervalMillis": 1000, + "createRetryIntervalMillis": 100, + "propagateCreateError": false + }, + "migrations": { + "tableName": "migrations", + "stub": "src/backend/lib/migrate_template.js", + "directory": "src/backend/migrations" + } + } + } +} diff --git a/backend/db.js b/backend/db.js new file mode 100644 index 0000000..bf540f8 --- /dev/null +++ b/backend/db.js @@ -0,0 +1,42 @@ +import knex from "knex"; +import {configGet, configHas} from "./lib/config.js"; + +let instance = null; + +const generateDbConfig = () => { + if (!configHas("database")) { + throw new Error( + "Database config does not exist! Please read the instructions: https://nginxproxymanager.com/setup/", + ); + } + + const cfg = configGet("database"); + + if (cfg.engine === "knex-native") { + return cfg.knex; + } + + return { + client: cfg.engine, + connection: { + host: cfg.host, + user: cfg.user, + password: cfg.password, + database: cfg.name, + port: cfg.port, + ...(cfg.ssl ? { ssl: cfg.ssl } : {}) + }, + migrations: { + tableName: "migrations", + }, + }; +}; + +const getInstance = () => { + if (!instance) { + instance = knex(generateDbConfig()); + } + return instance; +} + +export default getInstance; diff --git a/backend/index.js b/backend/index.js new file mode 100644 index 0000000..b8b1de5 --- /dev/null +++ b/backend/index.js @@ -0,0 +1,83 @@ +#!/usr/bin/env node + +import app from "./app.js"; +import db from "./db.js"; +import internalCertificate from "./internal/certificate.js"; +import internalIpRanges from "./internal/ip_ranges.js"; +import internalWireguard from "./internal/wireguard.js"; +import { global as logger } from "./logger.js"; +import { migrateUp } from "./migrate.js"; +import { getCompiledSchema } from "./schema/index.js"; +import setup from "./setup.js"; + +const IP_RANGES_FETCH_ENABLED = process.env.IP_RANGES_FETCH_ENABLED !== "false"; +const WG_ENABLED = process.env.WG_ENABLED !== "false"; + +async function appStart() { + return migrateUp() + .then(setup) + .then(getCompiledSchema) + .then(() => { + if (!IP_RANGES_FETCH_ENABLED) { + logger.info("IP Ranges fetch is disabled by environment variable"); + return; + } + logger.info("IP Ranges fetch is enabled"); + return internalIpRanges.fetch().catch((err) => { + logger.error("IP Ranges fetch failed, continuing anyway:", err.message); + }); + }) + .then(async () => { + internalCertificate.initTimer(); + internalIpRanges.initTimer(); + + // Start WireGuard + if (WG_ENABLED) { + logger.info("WireGuard is enabled, starting..."); + try { + const knex = db(); + await internalWireguard.startup(knex); + logger.info("WireGuard started successfully"); + } catch (err) { + logger.error("WireGuard startup failed:", err.message); + logger.warn("NPM will continue without WireGuard functionality"); + } + } else { + logger.info("WireGuard is disabled by environment variable"); + } + + const server = app.listen(3000, () => { + logger.info(`Backend PID ${process.pid} listening on port 3000 ...`); + + process.on("SIGTERM", async () => { + logger.info(`PID ${process.pid} received SIGTERM`); + + // Shutdown WireGuard gracefully + if (WG_ENABLED) { + try { + const knex = db(); + await internalWireguard.shutdown(knex); + } catch (err) { + logger.warn("WireGuard shutdown warning:", err.message); + } + } + + server.close(() => { + logger.info("Stopping."); + process.exit(0); + }); + }); + }); + }) + .catch((err) => { + logger.error(`Startup Error: ${err.message}`, err); + setTimeout(appStart, 1000); + }); +} + +try { + appStart(); +} catch (err) { + logger.fatal(err); + process.exit(1); +} diff --git a/backend/internal/2fa.js b/backend/internal/2fa.js new file mode 100644 index 0000000..43307e0 --- /dev/null +++ b/backend/internal/2fa.js @@ -0,0 +1,305 @@ +import crypto from "node:crypto"; +import bcrypt from "bcrypt"; +import { createGuardrails, generateSecret, generateURI, verify } from "otplib"; +import errs from "../lib/error.js"; +import authModel from "../models/auth.js"; +import internalUser from "./user.js"; + +const APP_NAME = "Nginx Proxy Manager"; +const BACKUP_CODE_COUNT = 8; + +/** + * Generate backup codes + * @returns {Promise<{plain: string[], hashed: string[]}>} + */ +const generateBackupCodes = async () => { + const plain = []; + const hashed = []; + + for (let i = 0; i < BACKUP_CODE_COUNT; i++) { + const code = crypto.randomBytes(4).toString("hex").toUpperCase(); + plain.push(code); + const hash = await bcrypt.hash(code, 10); + hashed.push(hash); + } + + return { plain, hashed }; +}; + +const internal2fa = { + /** + * Check if user has 2FA enabled + * @param {number} userId + * @returns {Promise} + */ + isEnabled: async (userId) => { + const auth = await internal2fa.getUserPasswordAuth(userId); + return auth?.meta?.totp_enabled === true; + }, + + /** + * Get 2FA status for user + * @param {Access} access + * @param {number} userId + * @returns {Promise<{enabled: boolean, backup_codes_remaining: number}>} + */ + getStatus: async (access, userId) => { + await access.can("users:password", userId); + await internalUser.get(access, { id: userId }); + const auth = await internal2fa.getUserPasswordAuth(userId); + const enabled = auth?.meta?.totp_enabled === true; + let backup_codes_remaining = 0; + + if (enabled) { + const backupCodes = auth.meta.backup_codes || []; + backup_codes_remaining = backupCodes.length; + } + + return { + enabled, + backup_codes_remaining, + }; + }, + + /** + * Start 2FA setup - store pending secret + * + * @param {Access} access + * @param {number} userId + * @returns {Promise<{secret: string, otpauth_url: string}>} + */ + startSetup: async (access, userId) => { + await access.can("users:password", userId); + const user = await internalUser.get(access, { id: userId }); + const secret = generateSecret(); + const otpauth_url = generateURI({ + issuer: APP_NAME, + label: user.email, + secret: secret, + }); + const auth = await internal2fa.getUserPasswordAuth(userId); + + // ensure user isn't already setup for 2fa + const enabled = auth?.meta?.totp_enabled === true; + if (enabled) { + throw new errs.ValidationError("2FA is already enabled"); + } + + const meta = auth.meta || {}; + meta.totp_pending_secret = secret; + + await authModel + .query() + .where("id", auth.id) + .andWhere("user_id", userId) + .andWhere("type", "password") + .patch({ meta }); + + return { secret, otpauth_url }; + }, + + /** + * Enable 2FA after verifying code + * + * @param {Access} access + * @param {number} userId + * @param {string} code + * @returns {Promise<{backup_codes: string[]}>} + */ + enable: async (access, userId, code) => { + await access.can("users:password", userId); + await internalUser.get(access, { id: userId }); + const auth = await internal2fa.getUserPasswordAuth(userId); + const secret = auth?.meta?.totp_pending_secret || false; + + if (!secret) { + throw new errs.ValidationError("No pending 2FA setup found"); + } + + const result = await verify({ token: code, secret }); + if (!result.valid) { + throw new errs.ValidationError("Invalid verification code"); + } + + const { plain, hashed } = await generateBackupCodes(); + + const meta = { + ...auth.meta, + totp_secret: secret, + totp_enabled: true, + totp_enabled_at: new Date().toISOString(), + backup_codes: hashed, + }; + delete meta.totp_pending_secret; + + await authModel + .query() + .where("id", auth.id) + .andWhere("user_id", userId) + .andWhere("type", "password") + .patch({ meta }); + + return { backup_codes: plain }; + }, + + /** + * Disable 2FA + * + * @param {Access} access + * @param {number} userId + * @param {string} code + * @returns {Promise} + */ + disable: async (access, userId, code) => { + await access.can("users:password", userId); + await internalUser.get(access, { id: userId }); + const auth = await internal2fa.getUserPasswordAuth(userId); + + const enabled = auth?.meta?.totp_enabled === true; + if (!enabled) { + throw new errs.ValidationError("2FA is not enabled"); + } + + const result = await verify({ + token: code, + secret: auth.meta.totp_secret, + guardrails: createGuardrails({ + MIN_SECRET_BYTES: 10, + }), + }); + + if (!result.valid) { + throw new errs.AuthError("Invalid verification code"); + } + + const meta = { ...auth.meta }; + delete meta.totp_secret; + delete meta.totp_enabled; + delete meta.totp_enabled_at; + delete meta.backup_codes; + + await authModel + .query() + .where("id", auth.id) + .andWhere("user_id", userId) + .andWhere("type", "password") + .patch({ meta }); + }, + + /** + * Verify 2FA code for login + * + * @param {number} userId + * @param {string} token + * @returns {Promise} + */ + verifyForLogin: async (userId, token) => { + const auth = await internal2fa.getUserPasswordAuth(userId); + const secret = auth?.meta?.totp_secret || false; + + if (!secret) { + return false; + } + + // Try TOTP code first, if it's 6 chars. it will throw errors if it's not 6 chars + // and the backup codes are 8 chars. + if (token.length === 6) { + const result = await verify({ + token, + secret, + // These guardrails lower the minimum length requirement for secrets. + // In v12 of otplib the default minimum length is 10 and in v13 it is 16. + // Since there are 2fa secrets in the wild generated with v12 we need to allow shorter secrets + // so people won't be locked out when upgrading. + guardrails: createGuardrails({ + MIN_SECRET_BYTES: 10, + }), + }); + + if (result.valid) { + return true; + } + } + + // Try backup codes + const backupCodes = auth?.meta?.backup_codes || []; + for (let i = 0; i < backupCodes.length; i++) { + const match = await bcrypt.compare(token.toUpperCase(), backupCodes[i]); + if (match) { + // Remove used backup code + const updatedCodes = [...backupCodes]; + updatedCodes.splice(i, 1); + const meta = { ...auth.meta, backup_codes: updatedCodes }; + await authModel + .query() + .where("id", auth.id) + .andWhere("user_id", userId) + .andWhere("type", "password") + .patch({ meta }); + return true; + } + } + + return false; + }, + + /** + * Regenerate backup codes + * + * @param {Access} access + * @param {number} userId + * @param {string} token + * @returns {Promise<{backup_codes: string[]}>} + */ + regenerateBackupCodes: async (access, userId, token) => { + await access.can("users:password", userId); + await internalUser.get(access, { id: userId }); + const auth = await internal2fa.getUserPasswordAuth(userId); + const enabled = auth?.meta?.totp_enabled === true; + const secret = auth?.meta?.totp_secret || false; + + if (!enabled) { + throw new errs.ValidationError("2FA is not enabled"); + } + if (!secret) { + throw new errs.ValidationError("No 2FA secret found"); + } + + const result = await verify({ + token, + secret, + }); + + if (!result.valid) { + throw new errs.ValidationError("Invalid verification code"); + } + + const { plain, hashed } = await generateBackupCodes(); + + const meta = { ...auth.meta, backup_codes: hashed }; + await authModel + .query() + .where("id", auth.id) + .andWhere("user_id", userId) + .andWhere("type", "password") + .patch({ meta }); + + return { backup_codes: plain }; + }, + + getUserPasswordAuth: async (userId) => { + const auth = await authModel + .query() + .where("user_id", userId) + .andWhere("type", "password") + .first(); + + if (!auth) { + throw new errs.ItemNotFoundError("Auth not found"); + } + + return auth; + }, +}; + +export default internal2fa; diff --git a/backend/internal/access-list.js b/backend/internal/access-list.js new file mode 100644 index 0000000..60a7105 --- /dev/null +++ b/backend/internal/access-list.js @@ -0,0 +1,488 @@ +import fs from "node:fs"; +import batchflow from "batchflow"; +import _ from "lodash"; +import errs from "../lib/error.js"; +import utils from "../lib/utils.js"; +import { access as logger } from "../logger.js"; +import accessListModel from "../models/access_list.js"; +import accessListAuthModel from "../models/access_list_auth.js"; +import accessListClientModel from "../models/access_list_client.js"; +import proxyHostModel from "../models/proxy_host.js"; +import internalAuditLog from "./audit-log.js"; +import internalNginx from "./nginx.js"; + +const omissions = () => { + return ["is_deleted"]; +}; + +const internalAccessList = { + /** + * @param {Access} access + * @param {Object} data + * @returns {Promise} + */ + create: async (access, data) => { + await access.can("access_lists:create", data); + const row = await accessListModel + .query() + .insertAndFetch({ + name: data.name, + satisfy_any: data.satisfy_any, + pass_auth: data.pass_auth, + owner_user_id: access.token.getUserId(1), + }) + .then(utils.omitRow(omissions())); + + data.id = row.id; + + const promises = []; + // Items + data.items.map((item) => { + promises.push( + accessListAuthModel.query().insert({ + access_list_id: row.id, + username: item.username, + password: item.password, + }), + ); + return true; + }); + + // Clients + data.clients?.map((client) => { + promises.push( + accessListClientModel.query().insert({ + access_list_id: row.id, + address: client.address, + directive: client.directive, + }), + ); + return true; + }); + + await Promise.all(promises); + + // re-fetch with expansions + const freshRow = await internalAccessList.get( + access, + { + id: data.id, + expand: ["owner", "items", "clients", "proxy_hosts.access_list.[clients,items]"], + }, + true // skip masking + ); + + // Audit log + data.meta = _.assign({}, data.meta || {}, freshRow.meta); + await internalAccessList.build(freshRow); + + if (Number.parseInt(freshRow.proxy_host_count, 10)) { + await internalNginx.bulkGenerateConfigs("proxy_host", freshRow.proxy_hosts); + } + + // Add to audit log + await internalAuditLog.add(access, { + action: "created", + object_type: "access-list", + object_id: freshRow.id, + meta: internalAccessList.maskItems(data), + }); + + return internalAccessList.maskItems(freshRow); + }, + + /** + * @param {Access} access + * @param {Object} data + * @param {Integer} data.id + * @param {String} [data.name] + * @param {String} [data.items] + * @return {Promise} + */ + update: async (access, data) => { + await access.can("access_lists:update", data.id); + const row = await internalAccessList.get(access, { id: data.id }); + if (row.id !== data.id) { + // Sanity check that something crazy hasn't happened + throw new errs.InternalValidationError( + `Access List could not be updated, IDs do not match: ${row.id} !== ${data.id}`, + ); + } + + // patch name if specified + if (typeof data.name !== "undefined" && data.name) { + await accessListModel.query().where({ id: data.id }).patch({ + name: data.name, + satisfy_any: data.satisfy_any, + pass_auth: data.pass_auth, + }); + } + + // Check for items and add/update/remove them + if (typeof data.items !== "undefined" && data.items) { + const promises = []; + const itemsToKeep = []; + + data.items.map((item) => { + if (item.password) { + promises.push( + accessListAuthModel.query().insert({ + access_list_id: data.id, + username: item.username, + password: item.password, + }), + ); + } else { + // This was supplied with an empty password, which means keep it but don't change the password + itemsToKeep.push(item.username); + } + return true; + }); + + const query = accessListAuthModel.query().delete().where("access_list_id", data.id); + + if (itemsToKeep.length) { + query.andWhere("username", "NOT IN", itemsToKeep); + } + + await query; + // Add new items + if (promises.length) { + await Promise.all(promises); + } + } + + // Check for clients and add/update/remove them + if (typeof data.clients !== "undefined" && data.clients) { + const clientPromises = []; + data.clients.map((client) => { + if (client.address) { + clientPromises.push( + accessListClientModel.query().insert({ + access_list_id: data.id, + address: client.address, + directive: client.directive, + }), + ); + } + return true; + }); + + const query = accessListClientModel.query().delete().where("access_list_id", data.id); + await query; + // Add new clitens + if (clientPromises.length) { + await Promise.all(clientPromises); + } + } + + // Add to audit log + await internalAuditLog.add(access, { + action: "updated", + object_type: "access-list", + object_id: data.id, + meta: internalAccessList.maskItems(data), + }); + + // re-fetch with expansions + const freshRow = await internalAccessList.get( + access, + { + id: data.id, + expand: ["owner", "items", "clients", "proxy_hosts.[certificate,access_list.[clients,items]]"], + }, + true // skip masking + ); + + await internalAccessList.build(freshRow) + if (Number.parseInt(freshRow.proxy_host_count, 10)) { + await internalNginx.bulkGenerateConfigs("proxy_host", freshRow.proxy_hosts); + } + await internalNginx.reload(); + return internalAccessList.maskItems(freshRow); + }, + + /** + * @param {Access} access + * @param {Object} data + * @param {Integer} data.id + * @param {Array} [data.expand] + * @param {Array} [data.omit] + * @param {Boolean} [skipMasking] + * @return {Promise} + */ + get: async (access, data, skipMasking) => { + const thisData = data || {}; + const accessData = await access.can("access_lists:get", thisData.id) + + const query = accessListModel + .query() + .select("access_list.*", accessListModel.raw("COUNT(proxy_host.id) as proxy_host_count")) + .leftJoin("proxy_host", function () { + this.on("proxy_host.access_list_id", "=", "access_list.id").andOn( + "proxy_host.is_deleted", + "=", + 0, + ); + }) + .where("access_list.is_deleted", 0) + .andWhere("access_list.id", thisData.id) + .groupBy("access_list.id") + .allowGraph("[owner,items,clients,proxy_hosts.[certificate,access_list.[clients,items]]]") + .first(); + + if (accessData.permission_visibility !== "all") { + query.andWhere("access_list.owner_user_id", access.token.getUserId(1)); + } + + if (typeof thisData.expand !== "undefined" && thisData.expand !== null) { + query.withGraphFetched(`[${thisData.expand.join(", ")}]`); + } + + let row = await query.then(utils.omitRow(omissions())); + + if (!row || !row.id) { + throw new errs.ItemNotFoundError(thisData.id); + } + if (!skipMasking && typeof row.items !== "undefined" && row.items) { + row = internalAccessList.maskItems(row); + } + // Custom omissions + if (typeof data.omit !== "undefined" && data.omit !== null) { + row = _.omit(row, data.omit); + } + return row; + }, + + /** + * @param {Access} access + * @param {Object} data + * @param {Integer} data.id + * @param {String} [data.reason] + * @returns {Promise} + */ + delete: async (access, data) => { + await access.can("access_lists:delete", data.id); + const row = await internalAccessList.get(access, { + id: data.id, + expand: ["proxy_hosts", "items", "clients"], + }); + + if (!row || !row.id) { + throw new errs.ItemNotFoundError(data.id); + } + + // 1. update row to be deleted + // 2. update any proxy hosts that were using it (ignoring permissions) + // 3. reconfigure those hosts + // 4. audit log + + // 1. update row to be deleted + await accessListModel + .query() + .where("id", row.id) + .patch({ + is_deleted: 1, + }); + + // 2. update any proxy hosts that were using it (ignoring permissions) + if (row.proxy_hosts) { + await proxyHostModel + .query() + .where("access_list_id", "=", row.id) + .patch({ access_list_id: 0 }); + + // 3. reconfigure those hosts, then reload nginx + // set the access_list_id to zero for these items + row.proxy_hosts.map((_val, idx) => { + row.proxy_hosts[idx].access_list_id = 0; + return true; + }); + + await internalNginx.bulkGenerateConfigs("proxy_host", row.proxy_hosts); + } + + await internalNginx.reload(); + + // delete the htpasswd file + try { + fs.unlinkSync(internalAccessList.getFilename(row)); + } catch (_err) { + // do nothing + } + + // 4. audit log + await internalAuditLog.add(access, { + action: "deleted", + object_type: "access-list", + object_id: row.id, + meta: _.omit(internalAccessList.maskItems(row), ["is_deleted", "proxy_hosts"]), + }); + return true; + }, + + /** + * All Lists + * + * @param {Access} access + * @param {Array} [expand] + * @param {String} [searchQuery] + * @returns {Promise} + */ + getAll: async (access, expand, searchQuery) => { + const accessData = await access.can("access_lists:list"); + + const query = accessListModel + .query() + .select("access_list.*", accessListModel.raw("COUNT(proxy_host.id) as proxy_host_count")) + .leftJoin("proxy_host", function () { + this.on("proxy_host.access_list_id", "=", "access_list.id").andOn( + "proxy_host.is_deleted", + "=", + 0, + ); + }) + .where("access_list.is_deleted", 0) + .groupBy("access_list.id") + .allowGraph("[owner,items,clients]") + .orderBy("access_list.name", "ASC"); + + if (accessData.permission_visibility !== "all") { + query.andWhere("access_list.owner_user_id", access.token.getUserId(1)); + } + + // Query is used for searching + if (typeof searchQuery === "string") { + query.where(function () { + this.where("name", "like", `%${searchQuery}%`); + }); + } + + if (typeof expand !== "undefined" && expand !== null) { + query.withGraphFetched(`[${expand.join(", ")}]`); + } + + const rows = await query.then(utils.omitRows(omissions())); + if (rows) { + rows.map((row, idx) => { + if (typeof row.items !== "undefined" && row.items) { + rows[idx] = internalAccessList.maskItems(row); + } + return true; + }); + } + return rows; + }, + + /** + * Count is used in reports + * + * @param {Integer} userId + * @param {String} visibility + * @returns {Promise} + */ + getCount: async (userId, visibility) => { + const query = accessListModel + .query() + .count("id as count") + .where("is_deleted", 0); + + if (visibility !== "all") { + query.andWhere("owner_user_id", userId); + } + + const row = await query.first(); + return Number.parseInt(row.count, 10); + }, + + /** + * @param {Object} list + * @returns {Object} + */ + maskItems: (list) => { + if (list && typeof list.items !== "undefined") { + list.items.map((val, idx) => { + let repeatFor = 8; + let firstChar = "*"; + + if (typeof val.password !== "undefined" && val.password) { + repeatFor = val.password.length - 1; + firstChar = val.password.charAt(0); + } + + list.items[idx].hint = firstChar + "*".repeat(repeatFor); + list.items[idx].password = ""; + return true; + }); + } + return list; + }, + + /** + * @param {Object} list + * @param {Integer} list.id + * @returns {String} + */ + getFilename: (list) => { + return `/data/access/${list.id}`; + }, + + /** + * @param {Object} list + * @param {Integer} list.id + * @param {String} list.name + * @param {Array} list.items + * @returns {Promise} + */ + build: async (list) => { + logger.info(`Building Access file #${list.id} for: ${list.name}`); + + const htpasswdFile = internalAccessList.getFilename(list); + + // 1. remove any existing access file + try { + fs.unlinkSync(htpasswdFile); + } catch (_err) { + // do nothing + } + + // 2. create empty access file + fs.writeFileSync(htpasswdFile, '', {encoding: 'utf8'}); + + // 3. generate password for each user + if (list.items.length) { + await new Promise((resolve, reject) => { + batchflow(list.items).sequential() + .each((_i, item, next) => { + if (item.password?.length) { + logger.info(`Adding: ${item.username}`); + + utils.execFile('openssl', ['passwd', '-apr1', item.password]) + .then((res) => { + try { + fs.appendFileSync(htpasswdFile, `${item.username}:${res}\n`, {encoding: 'utf8'}); + } catch (err) { + reject(err); + } + next(); + }) + .catch((err) => { + logger.error(err); + next(err); + }); + } + }) + .error((err) => { + logger.error(err); + reject(err); + }) + .end((results) => { + logger.success(`Built Access file #${list.id} for: ${list.name}`); + resolve(results); + }); + }); + } + } +} + +export default internalAccessList; diff --git a/backend/internal/audit-log.js b/backend/internal/audit-log.js new file mode 100644 index 0000000..02700dc --- /dev/null +++ b/backend/internal/audit-log.js @@ -0,0 +1,102 @@ +import errs from "../lib/error.js"; +import { castJsonIfNeed } from "../lib/helpers.js"; +import auditLogModel from "../models/audit-log.js"; + +const internalAuditLog = { + + /** + * All logs + * + * @param {Access} access + * @param {Array} [expand] + * @param {String} [searchQuery] + * @returns {Promise} + */ + getAll: async (access, expand, searchQuery) => { + await access.can("auditlog:list"); + + const query = auditLogModel + .query() + .orderBy("created_on", "DESC") + .orderBy("id", "DESC") + .limit(100) + .allowGraph("[user]"); + + // Query is used for searching + if (typeof searchQuery === "string" && searchQuery.length > 0) { + query.where(function () { + this.where(castJsonIfNeed("meta"), "like", `%${searchQuery}`); + }); + } + + if (typeof expand !== "undefined" && expand !== null) { + query.withGraphFetched(`[${expand.join(", ")}]`); + } + + return await query; + }, + + /** + * @param {Access} access + * @param {Object} [data] + * @param {Integer} [data.id] Defaults to the token user + * @param {Array} [data.expand] + * @return {Promise} + */ + get: async (access, data) => { + await access.can("auditlog:list"); + + const query = auditLogModel + .query() + .andWhere("id", data.id) + .allowGraph("[user]") + .first(); + + if (typeof data.expand !== "undefined" && data.expand !== null) { + query.withGraphFetched(`[${data.expand.join(", ")}]`); + } + + const row = await query; + + if (!row?.id) { + throw new errs.ItemNotFoundError(data.id); + } + + return row; + }, + + /** + * This method should not be publicly used, it doesn't check certain things. It will be assumed + * that permission to add to audit log is already considered, however the access token is used for + * default user id determination. + * + * @param {Access} access + * @param {Object} data + * @param {String} data.action + * @param {Number} [data.user_id] + * @param {Number} [data.object_id] + * @param {Number} [data.object_type] + * @param {Object} [data.meta] + * @returns {Promise} + */ + add: async (access, data) => { + if (typeof data.user_id === "undefined" || !data.user_id) { + data.user_id = access.token.getUserId(1); + } + + if (typeof data.action === "undefined" || !data.action) { + throw new errs.InternalValidationError("Audit log entry must contain an Action"); + } + + // Make sure at least 1 of the IDs are set and action + return await auditLogModel.query().insert({ + user_id: data.user_id, + action: data.action, + object_type: data.object_type || "", + object_id: data.object_id || 0, + meta: data.meta || {}, + }); + }, +}; + +export default internalAuditLog; diff --git a/backend/internal/certificate.js b/backend/internal/certificate.js new file mode 100644 index 0000000..d54e941 --- /dev/null +++ b/backend/internal/certificate.js @@ -0,0 +1,1263 @@ +import fs from "node:fs"; +import https from "node:https"; +import path from "path"; +import archiver from "archiver"; +import _ from "lodash"; +import moment from "moment"; +import { ProxyAgent } from "proxy-agent"; +import tempWrite from "temp-write"; +import dnsPlugins from "../certbot/dns-plugins.json" with { type: "json" }; +import { installPlugin } from "../lib/certbot.js"; +import { useLetsencryptServer, useLetsencryptStaging } from "../lib/config.js"; +import error from "../lib/error.js"; +import utils from "../lib/utils.js"; +import { debug, ssl as logger } from "../logger.js"; +import certificateModel from "../models/certificate.js"; +import tokenModel from "../models/token.js"; +import userModel from "../models/user.js"; +import internalAuditLog from "./audit-log.js"; +import internalHost from "./host.js"; +import internalNginx from "./nginx.js"; + +const letsencryptConfig = "/etc/letsencrypt.ini"; +const certbotCommand = "certbot"; +const certbotLogsDir = "/data/logs"; +const certbotWorkDir = "/tmp/letsencrypt-lib"; + +const omissions = () => { + return ["is_deleted", "owner.is_deleted", "meta.dns_provider_credentials"]; +}; + +const internalCertificate = { + allowedSslFiles: ["certificate", "certificate_key", "intermediate_certificate"], + intervalTimeout: 1000 * 60 * 60, // 1 hour + interval: null, + intervalProcessing: false, + renewBeforeExpirationBy: [30, "days"], + + initTimer: () => { + logger.info("Let's Encrypt Renewal Timer initialized"); + internalCertificate.interval = setInterval( + internalCertificate.processExpiringHosts, + internalCertificate.intervalTimeout, + ); + // And do this now as well + internalCertificate.processExpiringHosts(); + }, + + /** + * Triggered by a timer, this will check for expiring hosts and renew their ssl certs if required + */ + processExpiringHosts: () => { + if (!internalCertificate.intervalProcessing) { + internalCertificate.intervalProcessing = true; + logger.info( + `Renewing SSL certs expiring within ${internalCertificate.renewBeforeExpirationBy[0]} ${internalCertificate.renewBeforeExpirationBy[1]} ...`, + ); + + const expirationThreshold = moment() + .add(internalCertificate.renewBeforeExpirationBy[0], internalCertificate.renewBeforeExpirationBy[1]) + .format("YYYY-MM-DD HH:mm:ss"); + + // Fetch all the letsencrypt certs from the db that will expire within the configured threshold + certificateModel + .query() + .where("is_deleted", 0) + .andWhere("provider", "letsencrypt") + .andWhere("expires_on", "<", expirationThreshold) + .then((certificates) => { + if (!certificates || !certificates.length) { + return null; + } + + /** + * Renews must be run sequentially or we'll get an error 'Another + * instance of Certbot is already running.' + */ + let sequence = Promise.resolve(); + + certificates.forEach((certificate) => { + sequence = sequence.then(() => + internalCertificate + .renew( + { + can: () => + Promise.resolve({ + permission_visibility: "all", + }), + token: tokenModel(), + }, + { id: certificate.id }, + ) + .catch((err) => { + // Don't want to stop the train here, just log the error + logger.error(err.message); + }), + ); + }); + + return sequence; + }) + .then(() => { + logger.info("Completed SSL cert renew process"); + internalCertificate.intervalProcessing = false; + }) + .catch((err) => { + logger.error(err); + internalCertificate.intervalProcessing = false; + }); + } + }, + + /** + * @param {Access} access + * @param {Object} data + * @returns {Promise} + */ + create: async (access, data) => { + await access.can("certificates:create", data); + data.owner_user_id = access.token.getUserId(1); + + if (data.provider === "letsencrypt") { + data.nice_name = data.domain_names.join(", "); + } + + // this command really should clean up and delete the cert if it can't fully succeed + const certificate = await certificateModel.query().insertAndFetch(data); + + try { + if (certificate.provider === "letsencrypt") { + // Request a new Cert from LE. Let the fun begin. + + // 1. Find out any hosts that are using any of the hostnames in this cert + // 2. Disable them in nginx temporarily + // 3. Generate the LE config + // 4. Request cert + // 5. Remove LE config + // 6. Re-instate previously disabled hosts + + // 1. Find out any hosts that are using any of the hostnames in this cert + const inUseResult = await internalHost.getHostsWithDomains(certificate.domain_names); + + // 2. Disable them in nginx temporarily + await internalCertificate.disableInUseHosts(inUseResult); + + const user = await userModel.query().where("is_deleted", 0).andWhere("id", data.owner_user_id).first(); + if (!user || !user.email) { + throw new error.ValidationError( + "A valid email address must be set on your user account to use Let's Encrypt", + ); + } + + // With DNS challenge no config is needed, so skip 3 and 5. + if (certificate.meta?.dns_challenge) { + try { + await internalNginx.reload(); + // 4. Request cert + await internalCertificate.requestLetsEncryptSslWithDnsChallenge(certificate, user.email); + await internalNginx.reload(); + // 6. Re-instate previously disabled hosts + await internalCertificate.enableInUseHosts(inUseResult); + } catch (err) { + // In the event of failure, revert things and throw err back + await internalCertificate.enableInUseHosts(inUseResult); + await internalNginx.reload(); + throw err; + } + } else { + // 3. Generate the LE config + try { + await internalNginx.generateLetsEncryptRequestConfig(certificate); + await internalNginx.reload(); + setTimeout(() => {}, 5000); + // 4. Request cert + await internalCertificate.requestLetsEncryptSsl(certificate, user.email); + // 5. Remove LE config + await internalNginx.deleteLetsEncryptRequestConfig(certificate); + await internalNginx.reload(); + // 6. Re-instate previously disabled hosts + await internalCertificate.enableInUseHosts(inUseResult); + } catch (err) { + // In the event of failure, revert things and throw err back + await internalNginx.deleteLetsEncryptRequestConfig(certificate); + await internalCertificate.enableInUseHosts(inUseResult); + await internalNginx.reload(); + throw err; + } + } + + // At this point, the letsencrypt cert should exist on disk. + // Lets get the expiry date from the file and update the row silently + try { + const certInfo = await internalCertificate.getCertificateInfoFromFile( + `${internalCertificate.getLiveCertPath(certificate.id)}/fullchain.pem`, + ); + const savedRow = await certificateModel + .query() + .patchAndFetchById(certificate.id, { + expires_on: moment(certInfo.dates.to, "X").format("YYYY-MM-DD HH:mm:ss"), + }) + .then(utils.omitRow(omissions())); + + // Add cert data for audit log + savedRow.meta = _.assign({}, savedRow.meta, { + letsencrypt_certificate: certInfo, + }); + + await internalCertificate.addCreatedAuditLog(access, certificate.id, savedRow); + + return savedRow; + } catch (err) { + // Delete the certificate from the database if it was not created successfully + await certificateModel.query().deleteById(certificate.id); + throw err; + } + } + } catch (err) { + // Delete the certificate here. This is a hard delete, since it never existed properly + await certificateModel.query().deleteById(certificate.id); + throw err; + } + + data.meta = _.assign({}, data.meta || {}, certificate.meta); + + // Add to audit log + await internalCertificate.addCreatedAuditLog(access, certificate.id, utils.omitRow(omissions())(data)); + + return utils.omitRow(omissions())(certificate); + }, + + addCreatedAuditLog: async (access, certificate_id, meta) => { + await internalAuditLog.add(access, { + action: "created", + object_type: "certificate", + object_id: certificate_id, + meta: meta, + }); + }, + + /** + * @param {Access} access + * @param {Object} data + * @param {Number} data.id + * @param {String} [data.email] + * @param {String} [data.name] + * @return {Promise} + */ + update: async (access, data) => { + await access.can("certificates:update", data.id); + const row = await internalCertificate.get(access, { id: data.id }); + + if (row.id !== data.id) { + // Sanity check that something crazy hasn't happened + throw new error.InternalValidationError( + `Certificate could not be updated, IDs do not match: ${row.id} !== ${data.id}`, + ); + } + + const savedRow = await certificateModel + .query() + .patchAndFetchById(row.id, data) + .then(utils.omitRow(omissions())); + + savedRow.meta = internalCertificate.cleanMeta(savedRow.meta); + data.meta = internalCertificate.cleanMeta(data.meta); + + // Add row.nice_name for custom certs + if (savedRow.provider === "other") { + data.nice_name = savedRow.nice_name; + } + + // Add to audit log + await internalAuditLog.add(access, { + action: "updated", + object_type: "certificate", + object_id: row.id, + meta: _.omit(data, ["expires_on"]), // this prevents json circular reference because expires_on might be raw + }); + + return savedRow; + }, + + /** + * @param {Access} access + * @param {Object} data + * @param {Number} data.id + * @param {Array} [data.expand] + * @param {Array} [data.omit] + * @return {Promise} + */ + get: async (access, data) => { + const accessData = await access.can("certificates:get", data.id); + const query = certificateModel + .query() + .where("is_deleted", 0) + .andWhere("id", data.id) + .allowGraph("[owner,proxy_hosts,redirection_hosts,dead_hosts,streams]") + .first(); + + if (accessData.permission_visibility !== "all") { + query.andWhere("owner_user_id", access.token.getUserId(1)); + } + + if (typeof data.expand !== "undefined" && data.expand !== null) { + query.withGraphFetched(`[${data.expand.join(", ")}]`); + } + + const row = await query.then(utils.omitRow(omissions())); + if (!row || !row.id) { + throw new error.ItemNotFoundError(data.id); + } + // Custom omissions + if (typeof data.omit !== "undefined" && data.omit !== null) { + return _.omit(row, [...data.omit]); + } + + return internalCertificate.cleanExpansions(row); + }, + + cleanExpansions: (row) => { + if (typeof row.proxy_hosts !== "undefined") { + row.proxy_hosts = utils.omitRows(["is_deleted"])(row.proxy_hosts); + } + if (typeof row.redirection_hosts !== "undefined") { + row.redirection_hosts = utils.omitRows(["is_deleted"])(row.redirection_hosts); + } + if (typeof row.dead_hosts !== "undefined") { + row.dead_hosts = utils.omitRows(["is_deleted"])(row.dead_hosts); + } + if (typeof row.streams !== "undefined") { + row.streams = utils.omitRows(["is_deleted"])(row.streams); + } + return row; + }, + + /** + * @param {Access} access + * @param {Object} data + * @param {Number} data.id + * @returns {Promise} + */ + download: async (access, data) => { + await access.can("certificates:get", data); + const certificate = await internalCertificate.get(access, data); + if (certificate.provider === "letsencrypt") { + const zipDirectory = internalCertificate.getLiveCertPath(data.id); + if (!fs.existsSync(zipDirectory)) { + throw new error.ItemNotFoundError(`Certificate ${certificate.nice_name} does not exists`); + } + + const certFiles = fs + .readdirSync(zipDirectory) + .filter((fn) => fn.endsWith(".pem")) + .map((fn) => fs.realpathSync(path.join(zipDirectory, fn))); + + const downloadName = `npm-${data.id}-${Date.now()}.zip`; + const opName = `/tmp/${downloadName}`; + + await internalCertificate.zipFiles(certFiles, opName); + debug(logger, "zip completed : ", opName); + return { + fileName: opName, + }; + } + throw new error.ValidationError("Only Let'sEncrypt certificates can be downloaded"); + }, + + /** + * @param {String} source + * @param {String} out + * @returns {Promise} + */ + zipFiles: async (source, out) => { + const archive = archiver("zip", { zlib: { level: 9 } }); + const stream = fs.createWriteStream(out); + + return new Promise((resolve, reject) => { + source.map((fl) => { + const fileName = path.basename(fl); + debug(logger, fl, "added to certificate zip"); + archive.file(fl, { name: fileName }); + return true; + }); + archive.on("error", (err) => reject(err)).pipe(stream); + stream.on("close", () => resolve()); + archive.finalize(); + }); + }, + + /** + * @param {Access} access + * @param {Object} data + * @param {Number} data.id + * @param {String} [data.reason] + * @returns {Promise} + */ + delete: async (access, data) => { + await access.can("certificates:delete", data.id); + const row = await internalCertificate.get(access, { id: data.id }); + + if (!row || !row.id) { + throw new error.ItemNotFoundError(data.id); + } + + await certificateModel.query().where("id", row.id).patch({ + is_deleted: 1, + }); + + // Add to audit log + row.meta = internalCertificate.cleanMeta(row.meta); + + await internalAuditLog.add(access, { + action: "deleted", + object_type: "certificate", + object_id: row.id, + meta: _.omit(row, omissions()), + }); + + if (row.provider === "letsencrypt") { + // Revoke the cert + await internalCertificate.revokeLetsEncryptSsl(row); + } + return true; + }, + + /** + * All Certs + * + * @param {Access} access + * @param {Array} [expand] + * @param {String} [searchQuery] + * @returns {Promise} + */ + getAll: async (access, expand, searchQuery) => { + const accessData = await access.can("certificates:list"); + + const query = certificateModel + .query() + .where("is_deleted", 0) + .groupBy("id") + .allowGraph("[owner,proxy_hosts,redirection_hosts,dead_hosts,streams]") + .orderBy("nice_name", "ASC"); + + if (accessData.permission_visibility !== "all") { + query.andWhere("owner_user_id", access.token.getUserId(1)); + } + + // Query is used for searching + if (typeof searchQuery === "string") { + query.where(function () { + this.where("nice_name", "like", `%${searchQuery}%`); + }); + } + + if (typeof expand !== "undefined" && expand !== null) { + query.withGraphFetched(`[${expand.join(", ")}]`); + } + + const r = await query.then(utils.omitRows(omissions())); + for (let i = 0; i < r.length; i++) { + r[i] = internalCertificate.cleanExpansions(r[i]); + } + return r; + }, + + /** + * Report use + * + * @param {Number} userId + * @param {String} visibility + * @returns {Promise} + */ + getCount: async (userId, visibility) => { + const query = certificateModel.query().count("id as count").where("is_deleted", 0); + + if (visibility !== "all") { + query.andWhere("owner_user_id", userId); + } + + const row = await query.first(); + return Number.parseInt(row.count, 10); + }, + + /** + * @param {Object} certificate + * @returns {Promise} + */ + writeCustomCert: async (certificate) => { + logger.info("Writing Custom Certificate:", certificate); + + const dir = `/data/custom_ssl/npm-${certificate.id}`; + + return new Promise((resolve, reject) => { + if (certificate.provider === "letsencrypt") { + reject(new Error("Refusing to write letsencrypt certs here")); + return; + } + + let certData = certificate.meta.certificate; + if (typeof certificate.meta.intermediate_certificate !== "undefined") { + certData = `${certData}\n${certificate.meta.intermediate_certificate}`; + } + + try { + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir); + } + } catch (err) { + reject(err); + return; + } + + fs.writeFile(`${dir}/fullchain.pem`, certData, (err) => { + if (err) { + reject(err); + } else { + resolve(); + } + }); + }).then(() => { + return new Promise((resolve, reject) => { + fs.writeFile(`${dir}/privkey.pem`, certificate.meta.certificate_key, (err) => { + if (err) { + reject(err); + } else { + resolve(); + } + }); + }); + }); + }, + + /** + * @param {Access} access + * @param {Object} data + * @param {Array} data.domain_names + * @returns {Promise} + */ + createQuickCertificate: async (access, data) => { + return await internalCertificate.create(access, { + provider: "letsencrypt", + domain_names: data.domain_names, + meta: data.meta, + }); + }, + + /** + * Validates that the certs provided are good. + * No access required here, nothing is changed or stored. + * + * @param {Object} data + * @param {Object} data.files + * @returns {Promise} + */ + validate: (data) => { + // Put file contents into an object + const files = {}; + _.map(data.files, (file, name) => { + if (internalCertificate.allowedSslFiles.indexOf(name) !== -1) { + files[name] = file.data.toString(); + } + }); + + // For each file, create a temp file and write the contents to it + // Then test it depending on the file type + const promises = []; + _.map(files, (content, type) => { + promises.push( + new Promise((resolve) => { + if (type === "certificate_key") { + resolve(internalCertificate.checkPrivateKey(content)); + } else { + // this should handle `certificate` and intermediate certificate + resolve(internalCertificate.getCertificateInfo(content, true)); + } + }).then((res) => { + return { [type]: res }; + }), + ); + }); + + return Promise.all(promises).then((files) => { + let data = {}; + _.each(files, (file) => { + data = _.assign({}, data, file); + }); + return data; + }); + }, + + /** + * @param {Access} access + * @param {Object} data + * @param {Number} data.id + * @param {Object} data.files + * @returns {Promise} + */ + upload: async (access, data) => { + const row = await internalCertificate.get(access, { id: data.id }); + if (row.provider !== "other") { + throw new error.ValidationError("Cannot upload certificates for this type of provider"); + } + + const validations = await internalCertificate.validate(data); + if (typeof validations.certificate === "undefined") { + throw new error.ValidationError("Certificate file was not provided"); + } + + _.map(data.files, (file, name) => { + if (internalCertificate.allowedSslFiles.indexOf(name) !== -1) { + row.meta[name] = file.data.toString(); + } + }); + + const certificate = await internalCertificate.update(access, { + id: data.id, + expires_on: moment(validations.certificate.dates.to, "X").format("YYYY-MM-DD HH:mm:ss"), + domain_names: [validations.certificate.cn], + meta: _.clone(row.meta), // Prevent the update method from changing this value that we'll use later + }); + + certificate.meta = row.meta; + await internalCertificate.writeCustomCert(certificate); + return _.pick(row.meta, internalCertificate.allowedSslFiles); + }, + + /** + * Uses the openssl command to validate the private key. + * It will save the file to disk first, then run commands on it, then delete the file. + * + * @param {String} privateKey This is the entire key contents as a string + */ + checkPrivateKey: async (privateKey) => { + const filepath = await tempWrite(privateKey); + const failTimeout = setTimeout(() => { + throw new error.ValidationError( + "Result Validation Error: Validation timed out. This could be due to the key being passphrase-protected.", + ); + }, 10000); + + try { + const result = await utils.exec(`openssl pkey -in ${filepath} -check -noout 2>&1 `); + clearTimeout(failTimeout); + if (!result.toLowerCase().includes("key is valid")) { + throw new error.ValidationError(`Result Validation Error: ${result}`); + } + fs.unlinkSync(filepath); + return true; + } catch (err) { + clearTimeout(failTimeout); + fs.unlinkSync(filepath); + throw new error.ValidationError(`Certificate Key is not valid (${err.message})`, err); + } + }, + + /** + * Uses the openssl command to both validate and get info out of the certificate. + * It will save the file to disk first, then run commands on it, then delete the file. + * + * @param {String} certificate This is the entire cert contents as a string + * @param {Boolean} [throwExpired] Throw when the certificate is out of date + */ + getCertificateInfo: async (certificate, throwExpired) => { + const filepath = await tempWrite(certificate); + try { + const certData = await internalCertificate.getCertificateInfoFromFile(filepath, throwExpired); + fs.unlinkSync(filepath); + return certData; + } catch (err) { + fs.unlinkSync(filepath); + throw err; + } + }, + + /** + * Uses the openssl command to both validate and get info out of the certificate. + * It will save the file to disk first, then run commands on it, then delete the file. + * + * @param {String} certificateFile The file location on disk + * @param {Boolean} [throw_expired] Throw when the certificate is out of date + */ + getCertificateInfoFromFile: async (certificateFile, throw_expired) => { + const certData = {}; + + try { + const result = await utils.execFile("openssl", ["x509", "-in", certificateFile, "-subject", "-noout"]); + // Examples: + // subject=CN = *.jc21.com + // subject=CN = something.example.com + const regex = /(?:subject=)?[^=]+=\s+(\S+)/gim; + const match = regex.exec(result); + if (match && typeof match[1] !== "undefined") { + certData.cn = match[1]; + } + + const result2 = await utils.execFile("openssl", ["x509", "-in", certificateFile, "-issuer", "-noout"]); + // Examples: + // issuer=C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3 + // issuer=C = US, O = Let's Encrypt, CN = E5 + // issuer=O = NginxProxyManager, CN = NginxProxyManager Intermediate CA","O = NginxProxyManager, CN = NginxProxyManager Intermediate CA + const regex2 = /^(?:issuer=)?(.*)$/gim; + const match2 = regex2.exec(result2); + if (match2 && typeof match2[1] !== "undefined") { + certData.issuer = match2[1]; + } + + const result3 = await utils.execFile("openssl", ["x509", "-in", certificateFile, "-dates", "-noout"]); + // notBefore=Jul 14 04:04:29 2018 GMT + // notAfter=Oct 12 04:04:29 2018 GMT + let validFrom = null; + let validTo = null; + + const lines = result3.split("\n"); + lines.map((str) => { + const regex = /^(\S+)=(.*)$/gim; + const match = regex.exec(str.trim()); + + if (match && typeof match[2] !== "undefined") { + const date = Number.parseInt(moment(match[2], "MMM DD HH:mm:ss YYYY z").format("X"), 10); + + if (match[1].toLowerCase() === "notbefore") { + validFrom = date; + } else if (match[1].toLowerCase() === "notafter") { + validTo = date; + } + } + return true; + }); + + if (!validFrom || !validTo) { + throw new error.ValidationError(`Could not determine dates from certificate: ${result}`); + } + + if (throw_expired && validTo < Number.parseInt(moment().format("X"), 10)) { + throw new error.ValidationError("Certificate has expired"); + } + + certData.dates = { + from: validFrom, + to: validTo, + }; + + return certData; + } catch (err) { + throw new error.ValidationError(`Certificate is not valid (${err.message})`, err); + } + }, + + /** + * Cleans the ssl keys from the meta object and sets them to "true" + * + * @param {Object} meta + * @param {Boolean} [remove] + * @returns {Object} + */ + cleanMeta: (meta, remove) => { + internalCertificate.allowedSslFiles.map((key) => { + if (typeof meta[key] !== "undefined" && meta[key]) { + if (remove) { + delete meta[key]; + } else { + meta[key] = true; + } + } + return true; + }); + return meta; + }, + + /** + * Request a certificate using the http challenge + * @param {Object} certificate the certificate row + * @param {String} email the email address to use for registration + * @returns {Promise} + */ + requestLetsEncryptSsl: async (certificate, email) => { + logger.info( + `Requesting LetsEncrypt certificates for Cert #${certificate.id}: ${certificate.domain_names.join(", ")}`, + ); + + const args = [ + "certonly", + "--config", + letsencryptConfig, + "--work-dir", + certbotWorkDir, + "--logs-dir", + certbotLogsDir, + "--cert-name", + `npm-${certificate.id}`, + "--agree-tos", + "--authenticator", + "webroot", + "-m", + email, + "--preferred-challenges", + "http", + "--domains", + certificate.domain_names.join(","), + ]; + + // Add key-type parameter if specified + if (certificate.meta?.key_type) { + args.push("--key-type", certificate.meta.key_type); + } + + const adds = internalCertificate.getAdditionalCertbotArgs(certificate.id); + args.push(...adds.args); + + logger.info(`Command: ${certbotCommand} ${args ? args.join(" ") : ""}`); + + const result = await utils.execFile(certbotCommand, args, adds.opts); + logger.success(result); + return result; + }, + + /** + * @param {Object} certificate the certificate row + * @param {String} email the email address to use for registration + * @returns {Promise} + */ + requestLetsEncryptSslWithDnsChallenge: async (certificate, email) => { + await installPlugin(certificate.meta.dns_provider); + const dnsPlugin = dnsPlugins[certificate.meta.dns_provider]; + logger.info( + `Requesting LetsEncrypt certificates via ${dnsPlugin.name} for Cert #${certificate.id}: ${certificate.domain_names.join(", ")}`, + ); + + const credentialsLocation = `/etc/letsencrypt/credentials/credentials-${certificate.id}`; + fs.mkdirSync("/etc/letsencrypt/credentials", { recursive: true }); + fs.writeFileSync(credentialsLocation, certificate.meta.dns_provider_credentials, { mode: 0o600 }); + + // Whether the plugin has a ---credentials argument + const hasConfigArg = certificate.meta.dns_provider !== "route53"; + + const args = [ + "certonly", + "--config", + letsencryptConfig, + "--work-dir", + certbotWorkDir, + "--logs-dir", + certbotLogsDir, + "--cert-name", + `npm-${certificate.id}`, + "--agree-tos", + "-m", + email, + "--preferred-challenges", + "dns", + "--domains", + certificate.domain_names.join(","), + "--authenticator", + dnsPlugin.full_plugin_name, + ]; + + if (hasConfigArg) { + args.push(`--${dnsPlugin.full_plugin_name}-credentials`, credentialsLocation); + } + if (certificate.meta.propagation_seconds !== undefined) { + args.push( + `--${dnsPlugin.full_plugin_name}-propagation-seconds`, + certificate.meta.propagation_seconds.toString(), + ); + } + + // Add key-type parameter if specified + if (certificate.meta?.key_type) { + args.push("--key-type", certificate.meta.key_type); + } + + const adds = internalCertificate.getAdditionalCertbotArgs(certificate.id, certificate.meta.dns_provider); + args.push(...adds.args); + + logger.info(`Command: ${certbotCommand} ${args ? args.join(" ") : ""}`); + + try { + const result = await utils.execFile(certbotCommand, args, adds.opts); + logger.info(result); + return result; + } catch (err) { + // Don't fail if file does not exist, so no need for action in the callback + fs.unlink(credentialsLocation, () => {}); + throw err; + } + }, + + /** + * @param {Access} access + * @param {Object} data + * @param {Number} data.id + * @returns {Promise} + */ + renew: async (access, data) => { + await access.can("certificates:update", data); + const certificate = await internalCertificate.get(access, data); + + if (certificate.provider === "letsencrypt") { + const renewMethod = certificate.meta.dns_challenge + ? internalCertificate.renewLetsEncryptSslWithDnsChallenge + : internalCertificate.renewLetsEncryptSsl; + + await renewMethod(certificate); + const certInfo = await internalCertificate.getCertificateInfoFromFile( + `${internalCertificate.getLiveCertPath(certificate.id)}/fullchain.pem`, + ); + + const updatedCertificate = await certificateModel.query().patchAndFetchById(certificate.id, { + expires_on: moment(certInfo.dates.to, "X").format("YYYY-MM-DD HH:mm:ss"), + }); + + // Add to audit log + await internalAuditLog.add(access, { + action: "renewed", + object_type: "certificate", + object_id: updatedCertificate.id, + meta: updatedCertificate, + }); + + return updatedCertificate; + } + + throw new error.ValidationError("Only Let'sEncrypt certificates can be renewed"); + }, + + /** + * @param {Object} certificate the certificate row + * @returns {Promise} + */ + renewLetsEncryptSsl: async (certificate) => { + logger.info( + `Renewing LetsEncrypt certificates for Cert #${certificate.id}: ${certificate.domain_names.join(", ")}`, + ); + + const args = [ + "renew", + "--force-renewal", + "--config", + letsencryptConfig, + "--work-dir", + certbotWorkDir, + "--logs-dir", + certbotLogsDir, + "--cert-name", + `npm-${certificate.id}`, + "--preferred-challenges", + "http", + "--no-random-sleep-on-renew", + "--disable-hook-validation", + ]; + + // Add key-type parameter if specified + if (certificate.meta?.key_type) { + args.push("--key-type", certificate.meta.key_type); + } + + const adds = internalCertificate.getAdditionalCertbotArgs(certificate.id, certificate.meta.dns_provider); + args.push(...adds.args); + + logger.info(`Command: ${certbotCommand} ${args ? args.join(" ") : ""}`); + + const result = await utils.execFile(certbotCommand, args, adds.opts); + logger.info(result); + return result; + }, + + /** + * @param {Object} certificate the certificate row + * @returns {Promise} + */ + renewLetsEncryptSslWithDnsChallenge: async (certificate) => { + const dnsPlugin = dnsPlugins[certificate.meta.dns_provider]; + if (!dnsPlugin) { + throw Error(`Unknown DNS provider '${certificate.meta.dns_provider}'`); + } + + logger.info( + `Renewing LetsEncrypt certificates via ${dnsPlugin.name} for Cert #${certificate.id}: ${certificate.domain_names.join(", ")}`, + ); + + const args = [ + "renew", + "--force-renewal", + "--config", + letsencryptConfig, + "--work-dir", + certbotWorkDir, + "--logs-dir", + certbotLogsDir, + "--cert-name", + `npm-${certificate.id}`, + "--preferred-challenges", + "dns", + "--disable-hook-validation", + "--no-random-sleep-on-renew", + ]; + + // Add key-type parameter if specified + if (certificate.meta?.key_type) { + args.push("--key-type", certificate.meta.key_type); + } + + const adds = internalCertificate.getAdditionalCertbotArgs(certificate.id, certificate.meta.dns_provider); + args.push(...adds.args); + + logger.info(`Command: ${certbotCommand} ${args ? args.join(" ") : ""}`); + + const result = await utils.execFile(certbotCommand, args, adds.opts); + logger.info(result); + return result; + }, + + /** + * @param {Object} certificate the certificate row + * @param {Boolean} [throwErrors] + * @returns {Promise} + */ + revokeLetsEncryptSsl: async (certificate, throwErrors) => { + logger.info( + `Revoking LetsEncrypt certificates for Cert #${certificate.id}: ${certificate.domain_names.join(", ")}`, + ); + + const args = [ + "revoke", + "--config", + letsencryptConfig, + "--work-dir", + certbotWorkDir, + "--logs-dir", + certbotLogsDir, + "--cert-path", + `${internalCertificate.getLiveCertPath(certificate.id)}/fullchain.pem`, + "--delete-after-revoke", + ]; + + const adds = internalCertificate.getAdditionalCertbotArgs(certificate.id); + args.push(...adds.args); + + logger.info(`Command: ${certbotCommand} ${args ? args.join(" ") : ""}`); + + try { + const result = await utils.execFile(certbotCommand, args, adds.opts); + await utils.exec(`rm -f '/etc/letsencrypt/credentials/credentials-${certificate.id}' || true`); + logger.info(result); + return result; + } catch (err) { + logger.error(err.message); + if (throwErrors) { + throw err; + } + } + }, + + /** + * @param {Object} certificate + * @returns {Boolean} + */ + hasLetsEncryptSslCerts: (certificate) => { + const letsencryptPath = internalCertificate.getLiveCertPath(certificate.id); + return fs.existsSync(`${letsencryptPath}/fullchain.pem`) && fs.existsSync(`${letsencryptPath}/privkey.pem`); + }, + + /** + * @param {Object} inUseResult + * @param {Number} inUseResult.total_count + * @param {Array} inUseResult.proxy_hosts + * @param {Array} inUseResult.redirection_hosts + * @param {Array} inUseResult.dead_hosts + * @returns {Promise} + */ + disableInUseHosts: async (inUseResult) => { + if (inUseResult?.total_count) { + if (inUseResult?.proxy_hosts.length) { + await internalNginx.bulkDeleteConfigs("proxy_host", inUseResult.proxy_hosts); + } + + if (inUseResult?.redirection_hosts.length) { + await internalNginx.bulkDeleteConfigs("redirection_host", inUseResult.redirection_hosts); + } + + if (inUseResult?.dead_hosts.length) { + await internalNginx.bulkDeleteConfigs("dead_host", inUseResult.dead_hosts); + } + } + }, + + /** + * @param {Object} inUseResult + * @param {Number} inUseResult.total_count + * @param {Array} inUseResult.proxy_hosts + * @param {Array} inUseResult.redirection_hosts + * @param {Array} inUseResult.dead_hosts + * @returns {Promise} + */ + enableInUseHosts: async (inUseResult) => { + if (inUseResult.total_count) { + if (inUseResult.proxy_hosts.length) { + await internalNginx.bulkGenerateConfigs("proxy_host", inUseResult.proxy_hosts); + } + + if (inUseResult.redirection_hosts.length) { + await internalNginx.bulkGenerateConfigs("redirection_host", inUseResult.redirection_hosts); + } + + if (inUseResult.dead_hosts.length) { + await internalNginx.bulkGenerateConfigs("dead_host", inUseResult.dead_hosts); + } + } + }, + + /** + * + * @param {Object} payload + * @param {string[]} payload.domains + * @returns + */ + testHttpsChallenge: async (access, payload) => { + await access.can("certificates:list"); + + // Create a test challenge file + const testChallengeDir = "/data/letsencrypt-acme-challenge/.well-known/acme-challenge"; + const testChallengeFile = `${testChallengeDir}/test-challenge`; + fs.mkdirSync(testChallengeDir, { recursive: true }); + fs.writeFileSync(testChallengeFile, "Success", { encoding: "utf8" }); + + const results = {}; + for (const domain of payload.domains) { + results[domain] = await internalCertificate.performTestForDomain(domain); + } + + // Remove the test challenge file + fs.unlinkSync(testChallengeFile); + + return results; + }, + + performTestForDomain: async (domain) => { + logger.info(`Testing http challenge for ${domain}`); + const agent = new ProxyAgent(); + const url = `http://${domain}/.well-known/acme-challenge/test-challenge`; + const formBody = `method=G&url=${encodeURI(url)}&bodytype=T&requestbody=&headername=User-Agent&headervalue=None&locationid=1&ch=false&cc=false`; + const options = { + method: "POST", + headers: { + "User-Agent": "Mozilla/5.0", + "Content-Type": "application/x-www-form-urlencoded", + "Content-Length": Buffer.byteLength(formBody), + }, + agent, + }; + + const result = await new Promise((resolve) => { + const req = https.request("https://www.site24x7.com/tools/restapi-tester", options, (res) => { + let responseBody = ""; + + res.on("data", (chunk) => { + responseBody = responseBody + chunk; + }); + + res.on("end", () => { + try { + const parsedBody = JSON.parse(`${responseBody}`); + if (res.statusCode !== 200) { + logger.warn( + `Failed to test HTTP challenge for domain ${domain} because HTTP status code ${res.statusCode} was returned: ${parsedBody.message}`, + ); + resolve(undefined); + } else { + resolve(parsedBody); + } + } catch (err) { + if (res.statusCode !== 200) { + logger.warn( + `Failed to test HTTP challenge for domain ${domain} because HTTP status code ${res.statusCode} was returned`, + ); + } else { + logger.warn( + `Failed to test HTTP challenge for domain ${domain} because response failed to be parsed: ${err.message}`, + ); + } + resolve(undefined); + } + }); + }); + + // Make sure to write the request body. + req.write(formBody); + req.end(); + req.on("error", (e) => { + logger.warn(`Failed to test HTTP challenge for domain ${domain}`, e); + resolve(undefined); + }); + }); + + if (!result) { + // Some error occurred while trying to get the data + return "failed"; + } + if (result.error) { + logger.info( + `HTTP challenge test failed for domain ${domain} because error was returned: ${result.error.msg}`, + ); + return `other:${result.error.msg}`; + } + if (`${result.responsecode}` === "200" && result.htmlresponse === "Success") { + // Server exists and has responded with the correct data + return "ok"; + } + if (`${result.responsecode}` === "200") { + // Server exists but has responded with wrong data + logger.info( + `HTTP challenge test failed for domain ${domain} because of invalid returned data:`, + result.htmlresponse, + ); + return "wrong-data"; + } + if (`${result.responsecode}` === "404") { + // Server exists but responded with a 404 + logger.info(`HTTP challenge test failed for domain ${domain} because code 404 was returned`); + return "404"; + } + if ( + `${result.responsecode}` === "0" || + (typeof result.reason === "string" && result.reason.toLowerCase() === "host unavailable") + ) { + // Server does not exist at domain + logger.info(`HTTP challenge test failed for domain ${domain} the host was not found`); + return "no-host"; + } + // Other errors + logger.info(`HTTP challenge test failed for domain ${domain} because code ${result.responsecode} was returned`); + return `other:${result.responsecode}`; + }, + + getAdditionalCertbotArgs: (certificate_id, dns_provider) => { + const args = []; + if (useLetsencryptServer() !== null) { + args.push("--server", useLetsencryptServer()); + } + if (useLetsencryptStaging() && useLetsencryptServer() === null) { + args.push("--staging"); + } + + // For route53, add the credentials file as an environment variable, + // inheriting the process env + const opts = {}; + if (certificate_id && dns_provider === "route53") { + opts.env = process.env; + opts.env.AWS_CONFIG_FILE = `/etc/letsencrypt/credentials/credentials-${certificate_id}`; + } + + if (dns_provider === "duckdns") { + args.push("--dns-duckdns-no-txt-restore"); + } + + return { args: args, opts: opts }; + }, + + getLiveCertPath: (certificateId) => { + return `/etc/letsencrypt/live/npm-${certificateId}`; + }, +}; + +export default internalCertificate; diff --git a/backend/internal/dead-host.js b/backend/internal/dead-host.js new file mode 100644 index 0000000..34c94fd --- /dev/null +++ b/backend/internal/dead-host.js @@ -0,0 +1,394 @@ +import _ from "lodash"; +import errs from "../lib/error.js"; +import { castJsonIfNeed } from "../lib/helpers.js"; +import utils from "../lib/utils.js"; +import deadHostModel from "../models/dead_host.js"; +import internalAuditLog from "./audit-log.js"; +import internalCertificate from "./certificate.js"; +import internalHost from "./host.js"; +import internalNginx from "./nginx.js"; + +const omissions = () => { + return ["is_deleted"]; +}; + +const internalDeadHost = { + /** + * @param {Access} access + * @param {Object} data + * @returns {Promise} + */ + create: async (access, data) => { + const createCertificate = data.certificate_id === "new"; + + if (createCertificate) { + delete data.certificate_id; + } + + await access.can("dead_hosts:create", data); + + // Get a list of the domain names and check each of them against existing records + const domainNameCheckPromises = []; + + data.domain_names.map((domain_name) => { + domainNameCheckPromises.push(internalHost.isHostnameTaken(domain_name)); + return true; + }); + + await Promise.all(domainNameCheckPromises).then((check_results) => { + check_results.map((result) => { + if (result.is_taken) { + throw new errs.ValidationError(`${result.hostname} is already in use`); + } + return true; + }); + }); + + // At this point the domains should have been checked + data.owner_user_id = access.token.getUserId(1); + const thisData = internalHost.cleanSslHstsData(data); + + // Fix for db field not having a default value + // for this optional field. + if (typeof data.advanced_config === "undefined") { + thisData.advanced_config = ""; + } + + const row = await deadHostModel.query() + .insertAndFetch(thisData) + .then(utils.omitRow(omissions())); + + // Add to audit log + await internalAuditLog.add(access, { + action: "created", + object_type: "dead-host", + object_id: row.id, + meta: thisData, + }); + + if (createCertificate) { + const cert = await internalCertificate.createQuickCertificate(access, data); + + // update host with cert id + await internalDeadHost.update(access, { + id: row.id, + certificate_id: cert.id, + }); + } + + // re-fetch with cert + const freshRow = await internalDeadHost.get(access, { + id: row.id, + expand: ["certificate", "owner"], + }); + + // Sanity check + if (createCertificate && !freshRow.certificate_id) { + throw new errs.InternalValidationError("The host was created but the Certificate creation failed."); + } + + // Configure nginx + await internalNginx.configure(deadHostModel, "dead_host", freshRow); + + return freshRow; + }, + + /** + * @param {Access} access + * @param {Object} data + * @param {Number} data.id + * @return {Promise} + */ + update: async (access, data) => { + const createCertificate = data.certificate_id === "new"; + if (createCertificate) { + delete data.certificate_id; + } + + await access.can("dead_hosts:update", data.id); + + // Get a list of the domain names and check each of them against existing records + const domainNameCheckPromises = []; + if (typeof data.domain_names !== "undefined") { + data.domain_names.map((domainName) => { + domainNameCheckPromises.push(internalHost.isHostnameTaken(domainName, "dead", data.id)); + return true; + }); + + const checkResults = await Promise.all(domainNameCheckPromises); + checkResults.map((result) => { + if (result.is_taken) { + throw new errs.ValidationError(`${result.hostname} is already in use`); + } + return true; + }); + } + const row = await internalDeadHost.get(access, { id: data.id }); + + if (row.id !== data.id) { + // Sanity check that something crazy hasn't happened + throw new errs.InternalValidationError( + `404 Host could not be updated, IDs do not match: ${row.id} !== ${data.id}`, + ); + } + + if (createCertificate) { + const cert = await internalCertificate.createQuickCertificate(access, { + domain_names: data.domain_names || row.domain_names, + meta: _.assign({}, row.meta, data.meta), + }); + + // update host with cert id + data.certificate_id = cert.id; + } + + // Add domain_names to the data in case it isn't there, so that the audit log renders correctly. The order is important here. + let thisData = _.assign( + {}, + { + domain_names: row.domain_names, + }, + data, + ); + + thisData = internalHost.cleanSslHstsData(thisData, row); + + + // do the row update + await deadHostModel + .query() + .where({id: data.id}) + .patch(data); + + // Add to audit log + await internalAuditLog.add(access, { + action: "updated", + object_type: "dead-host", + object_id: row.id, + meta: thisData, + }); + + const thisRow = await internalDeadHost + .get(access, { + id: thisData.id, + expand: ["owner", "certificate"], + }); + + // Configure nginx + const newMeta = await internalNginx.configure(deadHostModel, "dead_host", row); + row.meta = newMeta; + return _.omit(internalHost.cleanRowCertificateMeta(thisRow), omissions()); + }, + + /** + * @param {Access} access + * @param {Object} data + * @param {Number} data.id + * @param {Array} [data.expand] + * @param {Array} [data.omit] + * @return {Promise} + */ + get: async (access, data) => { + const accessData = await access.can("dead_hosts:get", data.id); + const query = deadHostModel + .query() + .where("is_deleted", 0) + .andWhere("id", data.id) + .allowGraph(deadHostModel.defaultAllowGraph) + .first(); + + if (accessData.permission_visibility !== "all") { + query.andWhere("owner_user_id", access.token.getUserId(1)); + } + + if (typeof data.expand !== "undefined" && data.expand !== null) { + query.withGraphFetched(`[${data.expand.join(", ")}]`); + } + + const row = await query.then(utils.omitRow(omissions())); + if (!row || !row.id) { + throw new errs.ItemNotFoundError(data.id); + } + // Custom omissions + if (typeof data.omit !== "undefined" && data.omit !== null) { + return _.omit(row, data.omit); + } + return row; + }, + + /** + * @param {Access} access + * @param {Object} data + * @param {Number} data.id + * @param {String} [data.reason] + * @returns {Promise} + */ + delete: async (access, data) => { + await access.can("dead_hosts:delete", data.id) + const row = await internalDeadHost.get(access, { id: data.id }); + if (!row || !row.id) { + throw new errs.ItemNotFoundError(data.id); + } + + await deadHostModel + .query() + .where("id", row.id) + .patch({ + is_deleted: 1, + }); + + // Delete Nginx Config + await internalNginx.deleteConfig("dead_host", row); + await internalNginx.reload(); + + // Add to audit log + await internalAuditLog.add(access, { + action: "deleted", + object_type: "dead-host", + object_id: row.id, + meta: _.omit(row, omissions()), + }); + return true; + }, + + /** + * @param {Access} access + * @param {Object} data + * @param {Number} data.id + * @param {String} [data.reason] + * @returns {Promise} + */ + enable: async (access, data) => { + await access.can("dead_hosts:update", data.id) + const row = await internalDeadHost.get(access, { + id: data.id, + expand: ["certificate", "owner"], + }); + if (!row || !row.id) { + throw new errs.ItemNotFoundError(data.id); + } + if (row.enabled) { + throw new errs.ValidationError("Host is already enabled"); + } + + row.enabled = 1; + + await deadHostModel + .query() + .where("id", row.id) + .patch({ + enabled: 1, + }); + + // Configure nginx + await internalNginx.configure(deadHostModel, "dead_host", row); + + // Add to audit log + await internalAuditLog.add(access, { + action: "enabled", + object_type: "dead-host", + object_id: row.id, + meta: _.omit(row, omissions()), + }); + return true; + }, + + /** + * @param {Access} access + * @param {Object} data + * @param {Number} data.id + * @param {String} [data.reason] + * @returns {Promise} + */ + disable: async (access, data) => { + await access.can("dead_hosts:update", data.id) + const row = await internalDeadHost.get(access, { id: data.id }); + if (!row || !row.id) { + throw new errs.ItemNotFoundError(data.id); + } + if (!row.enabled) { + throw new errs.ValidationError("Host is already disabled"); + } + + row.enabled = 0; + + await deadHostModel + .query() + .where("id", row.id) + .patch({ + enabled: 0, + }); + + // Delete Nginx Config + await internalNginx.deleteConfig("dead_host", row); + await internalNginx.reload(); + + // Add to audit log + await internalAuditLog.add(access, { + action: "disabled", + object_type: "dead-host", + object_id: row.id, + meta: _.omit(row, omissions()), + }); + return true; + }, + + /** + * All Hosts + * + * @param {Access} access + * @param {Array} [expand] + * @param {String} [searchQuery] + * @returns {Promise} + */ + getAll: async (access, expand, searchQuery) => { + const accessData = await access.can("dead_hosts:list") + const query = deadHostModel + .query() + .where("is_deleted", 0) + .groupBy("id") + .allowGraph(deadHostModel.defaultAllowGraph) + .orderBy(castJsonIfNeed("domain_names"), "ASC"); + + if (accessData.permission_visibility !== "all") { + query.andWhere("owner_user_id", access.token.getUserId(1)); + } + + // Query is used for searching + if (typeof searchQuery === "string" && searchQuery.length > 0) { + query.where(function () { + this.where(castJsonIfNeed("domain_names"), "like", `%${searchQuery}%`); + }); + } + + if (typeof expand !== "undefined" && expand !== null) { + query.withGraphFetched(`[${expand.join(", ")}]`); + } + + const rows = await query.then(utils.omitRows(omissions())); + if (typeof expand !== "undefined" && expand !== null && expand.indexOf("certificate") !== -1) { + internalHost.cleanAllRowsCertificateMeta(rows); + } + return rows; + }, + + /** + * Report use + * + * @param {Number} user_id + * @param {String} visibility + * @returns {Promise} + */ + getCount: async (user_id, visibility) => { + const query = deadHostModel.query().count("id as count").where("is_deleted", 0); + + if (visibility !== "all") { + query.andWhere("owner_user_id", user_id); + } + + const row = await query.first(); + return Number.parseInt(row.count, 10); + }, +}; + +export default internalDeadHost; diff --git a/backend/internal/host.js b/backend/internal/host.js new file mode 100644 index 0000000..7487162 --- /dev/null +++ b/backend/internal/host.js @@ -0,0 +1,234 @@ +import _ from "lodash"; +import { castJsonIfNeed } from "../lib/helpers.js"; +import deadHostModel from "../models/dead_host.js"; +import proxyHostModel from "../models/proxy_host.js"; +import redirectionHostModel from "../models/redirection_host.js"; + +const internalHost = { + /** + * Makes sure that the ssl_* and hsts_* fields play nicely together. + * ie: if there is no cert, then force_ssl is off. + * if force_ssl is off, then hsts_enabled is definitely off. + * + * @param {object} data + * @param {object} [existing_data] + * @returns {object} + */ + cleanSslHstsData: (data, existingData) => { + const combinedData = _.assign({}, existingData || {}, data); + + if (!combinedData.certificate_id) { + combinedData.ssl_forced = false; + combinedData.http2_support = false; + } + + if (!combinedData.ssl_forced) { + combinedData.hsts_enabled = false; + } + + if (!combinedData.hsts_enabled) { + combinedData.hsts_subdomains = false; + } + + return combinedData; + }, + + /** + * used by the getAll functions of hosts, this removes the certificate meta if present + * + * @param {Array} rows + * @returns {Array} + */ + cleanAllRowsCertificateMeta: (rows) => { + rows.map((_, idx) => { + if (typeof rows[idx].certificate !== "undefined" && rows[idx].certificate) { + rows[idx].certificate.meta = {}; + } + return true; + }); + + return rows; + }, + + /** + * used by the get/update functions of hosts, this removes the certificate meta if present + * + * @param {Object} row + * @returns {Object} + */ + cleanRowCertificateMeta: (row) => { + if (typeof row.certificate !== "undefined" && row.certificate) { + row.certificate.meta = {}; + } + + return row; + }, + + /** + * This returns all the host types with any domain listed in the provided domainNames array. + * This is used by the certificates to temporarily disable any host that is using the domain + * + * @param {Array} domainNames + * @returns {Promise} + */ + getHostsWithDomains: async (domainNames) => { + const responseObject = { + total_count: 0, + dead_hosts: [], + proxy_hosts: [], + redirection_hosts: [], + }; + + const proxyRes = await proxyHostModel.query().where("is_deleted", 0); + responseObject.proxy_hosts = internalHost._getHostsWithDomains(proxyRes, domainNames); + responseObject.total_count += responseObject.proxy_hosts.length; + + const redirRes = await redirectionHostModel.query().where("is_deleted", 0); + responseObject.redirection_hosts = internalHost._getHostsWithDomains(redirRes, domainNames); + responseObject.total_count += responseObject.redirection_hosts.length; + + const deadRes = await deadHostModel.query().where("is_deleted", 0); + responseObject.dead_hosts = internalHost._getHostsWithDomains(deadRes, domainNames); + responseObject.total_count += responseObject.dead_hosts.length; + + return responseObject; + }, + + /** + * Internal use only, checks to see if the domain is already taken by any other record + * + * @param {String} hostname + * @param {String} [ignore_type] 'proxy', 'redirection', 'dead' + * @param {Integer} [ignore_id] Must be supplied if type was also supplied + * @returns {Promise} + */ + isHostnameTaken: (hostname, ignore_type, ignore_id) => { + const promises = [ + proxyHostModel + .query() + .where("is_deleted", 0) + .andWhere(castJsonIfNeed("domain_names"), "like", `%${hostname}%`), + redirectionHostModel + .query() + .where("is_deleted", 0) + .andWhere(castJsonIfNeed("domain_names"), "like", `%${hostname}%`), + deadHostModel + .query() + .where("is_deleted", 0) + .andWhere(castJsonIfNeed("domain_names"), "like", `%${hostname}%`), + ]; + + return Promise.all(promises).then((promises_results) => { + let is_taken = false; + + if (promises_results[0]) { + // Proxy Hosts + if ( + internalHost._checkHostnameRecordsTaken( + hostname, + promises_results[0], + ignore_type === "proxy" && ignore_id ? ignore_id : 0, + ) + ) { + is_taken = true; + } + } + + if (promises_results[1]) { + // Redirection Hosts + if ( + internalHost._checkHostnameRecordsTaken( + hostname, + promises_results[1], + ignore_type === "redirection" && ignore_id ? ignore_id : 0, + ) + ) { + is_taken = true; + } + } + + if (promises_results[2]) { + // Dead Hosts + if ( + internalHost._checkHostnameRecordsTaken( + hostname, + promises_results[2], + ignore_type === "dead" && ignore_id ? ignore_id : 0, + ) + ) { + is_taken = true; + } + } + + return { + hostname: hostname, + is_taken: is_taken, + }; + }); + }, + + /** + * Private call only + * + * @param {String} hostname + * @param {Array} existingRows + * @param {Integer} [ignoreId] + * @returns {Boolean} + */ + _checkHostnameRecordsTaken: (hostname, existingRows, ignoreId) => { + let isTaken = false; + + if (existingRows?.length) { + existingRows.map((existingRow) => { + existingRow.domain_names.map((existingHostname) => { + // Does this domain match? + if (existingHostname.toLowerCase() === hostname.toLowerCase()) { + if (!ignoreId || ignoreId !== existingRow.id) { + isTaken = true; + } + } + return true; + }); + return true; + }); + } + + return isTaken; + }, + + /** + * Private call only + * + * @param {Array} hosts + * @param {Array} domainNames + * @returns {Array} + */ + _getHostsWithDomains: (hosts, domainNames) => { + const response = []; + + if (hosts?.length) { + hosts.map((host) => { + let hostMatches = false; + + domainNames.map((domainName) => { + host.domain_names.map((hostDomainName) => { + if (domainName.toLowerCase() === hostDomainName.toLowerCase()) { + hostMatches = true; + } + return true; + }); + return true; + }); + + if (hostMatches) { + response.push(host); + } + return true; + }); + } + + return response; + }, +}; + +export default internalHost; diff --git a/backend/internal/ip_ranges.js b/backend/internal/ip_ranges.js new file mode 100644 index 0000000..6aa2b88 --- /dev/null +++ b/backend/internal/ip_ranges.js @@ -0,0 +1,158 @@ +import fs from "node:fs"; +import https from "node:https"; +import { dirname } from "node:path"; +import { fileURLToPath } from "node:url"; +import { ProxyAgent } from "proxy-agent"; +import errs from "../lib/error.js"; +import utils from "../lib/utils.js"; +import { ipRanges as logger } from "../logger.js"; +import internalNginx from "./nginx.js"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +const CLOUDFRONT_URL = "https://ip-ranges.amazonaws.com/ip-ranges.json"; +const CLOUDFARE_V4_URL = "https://www.cloudflare.com/ips-v4"; +const CLOUDFARE_V6_URL = "https://www.cloudflare.com/ips-v6"; + +const regIpV4 = /^(\d+\.?){4}\/\d+/; +const regIpV6 = /^(([\da-fA-F]+)?:)+\/\d+/; + +const internalIpRanges = { + interval_timeout: 1000 * 60 * 60 * 6, // 6 hours + interval: null, + interval_processing: false, + iteration_count: 0, + + initTimer: () => { + logger.info("IP Ranges Renewal Timer initialized"); + internalIpRanges.interval = setInterval(internalIpRanges.fetch, internalIpRanges.interval_timeout); + }, + + fetchUrl: (url) => { + const agent = new ProxyAgent(); + return new Promise((resolve, reject) => { + logger.info(`Fetching ${url}`); + return https + .get(url, { agent }, (res) => { + res.setEncoding("utf8"); + let raw_data = ""; + res.on("data", (chunk) => { + raw_data += chunk; + }); + + res.on("end", () => { + resolve(raw_data); + }); + }) + .on("error", (err) => { + reject(err); + }); + }); + }, + + /** + * Triggered at startup and then later by a timer, this will fetch the ip ranges from services and apply them to nginx. + */ + fetch: () => { + if (!internalIpRanges.interval_processing) { + internalIpRanges.interval_processing = true; + logger.info("Fetching IP Ranges from online services..."); + + let ip_ranges = []; + + return internalIpRanges + .fetchUrl(CLOUDFRONT_URL) + .then((cloudfront_data) => { + const data = JSON.parse(cloudfront_data); + + if (data && typeof data.prefixes !== "undefined") { + data.prefixes.map((item) => { + if (item.service === "CLOUDFRONT") { + ip_ranges.push(item.ip_prefix); + } + return true; + }); + } + + if (data && typeof data.ipv6_prefixes !== "undefined") { + data.ipv6_prefixes.map((item) => { + if (item.service === "CLOUDFRONT") { + ip_ranges.push(item.ipv6_prefix); + } + return true; + }); + } + }) + .then(() => { + return internalIpRanges.fetchUrl(CLOUDFARE_V4_URL); + }) + .then((cloudfare_data) => { + const items = cloudfare_data.split("\n").filter((line) => regIpV4.test(line)); + ip_ranges = [...ip_ranges, ...items]; + }) + .then(() => { + return internalIpRanges.fetchUrl(CLOUDFARE_V6_URL); + }) + .then((cloudfare_data) => { + const items = cloudfare_data.split("\n").filter((line) => regIpV6.test(line)); + ip_ranges = [...ip_ranges, ...items]; + }) + .then(() => { + const clean_ip_ranges = []; + ip_ranges.map((range) => { + if (range) { + clean_ip_ranges.push(range); + } + return true; + }); + + return internalIpRanges.generateConfig(clean_ip_ranges).then(() => { + if (internalIpRanges.iteration_count) { + // Reload nginx + return internalNginx.reload(); + } + }); + }) + .then(() => { + internalIpRanges.interval_processing = false; + internalIpRanges.iteration_count++; + }) + .catch((err) => { + logger.fatal(err.message); + internalIpRanges.interval_processing = false; + }); + } + }, + + /** + * @param {Array} ip_ranges + * @returns {Promise} + */ + generateConfig: (ip_ranges) => { + const renderEngine = utils.getRenderEngine(); + return new Promise((resolve, reject) => { + let template = null; + const filename = "/etc/nginx/conf.d/include/ip_ranges.conf"; + try { + template = fs.readFileSync(`${__dirname}/../templates/ip_ranges.conf`, { encoding: "utf8" }); + } catch (err) { + reject(new errs.ConfigurationError(err.message)); + return; + } + + renderEngine + .parseAndRender(template, { ip_ranges: ip_ranges }) + .then((config_text) => { + fs.writeFileSync(filename, config_text, { encoding: "utf8" }); + resolve(true); + }) + .catch((err) => { + logger.warn(`Could not write ${filename}: ${err.message}`); + reject(new errs.ConfigurationError(err.message)); + }); + }); + }, +}; + +export default internalIpRanges; diff --git a/backend/internal/nginx.js b/backend/internal/nginx.js new file mode 100644 index 0000000..fe84607 --- /dev/null +++ b/backend/internal/nginx.js @@ -0,0 +1,437 @@ +import fs from "node:fs"; +import { dirname } from "node:path"; +import { fileURLToPath } from "node:url"; +import _ from "lodash"; +import errs from "../lib/error.js"; +import utils from "../lib/utils.js"; +import { debug, nginx as logger } from "../logger.js"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +const internalNginx = { + /** + * This will: + * - test the nginx config first to make sure it's OK + * - create / recreate the config for the host + * - test again + * - IF OK: update the meta with online status + * - IF BAD: update the meta with offline status and remove the config entirely + * - then reload nginx + * + * @param {Object|String} model + * @param {String} host_type + * @param {Object} host + * @returns {Promise} + */ + configure: (model, host_type, host) => { + let combined_meta = {}; + + return internalNginx + .test() + .then(() => { + // Nginx is OK + // We're deleting this config regardless. + // Don't throw errors, as the file may not exist at all + // Delete the .err file too + return internalNginx.deleteConfig(host_type, host, false, true); + }) + .then(() => { + return internalNginx.generateConfig(host_type, host); + }) + .then(() => { + // Test nginx again and update meta with result + return internalNginx + .test() + .then(() => { + // nginx is ok + combined_meta = _.assign({}, host.meta, { + nginx_online: true, + nginx_err: null, + }); + + return model.query().where("id", host.id).patch({ + meta: combined_meta, + }); + }) + .catch((err) => { + // Remove the error_log line because it's a docker-ism false positive that doesn't need to be reported. + // It will always look like this: + // nginx: [alert] could not open error log file: open() "/var/log/nginx/error.log" failed (6: No such device or address) + + const valid_lines = []; + const err_lines = err.message.split("\n"); + err_lines.map((line) => { + if (line.indexOf("/var/log/nginx/error.log") === -1) { + valid_lines.push(line); + } + return true; + }); + + debug(logger, "Nginx test failed:", valid_lines.join("\n")); + + // config is bad, update meta and delete config + combined_meta = _.assign({}, host.meta, { + nginx_online: false, + nginx_err: valid_lines.join("\n"), + }); + + return model + .query() + .where("id", host.id) + .patch({ + meta: combined_meta, + }) + .then(() => { + internalNginx.renameConfigAsError(host_type, host); + }) + .then(() => { + return internalNginx.deleteConfig(host_type, host, true); + }); + }); + }) + .then(() => { + return internalNginx.reload(); + }) + .then(() => { + return combined_meta; + }); + }, + + /** + * @returns {Promise} + */ + test: () => { + debug(logger, "Testing Nginx configuration"); + return utils.execFile("/usr/sbin/nginx", ["-t", "-g", "error_log off;"]); + }, + + /** + * @returns {Promise} + */ + reload: () => { + return internalNginx.test().then(() => { + logger.info("Reloading Nginx"); + return utils.execFile("/usr/sbin/nginx", ["-s", "reload"]); + }); + }, + + /** + * @param {String} host_type + * @param {Integer} host_id + * @returns {String} + */ + getConfigName: (host_type, host_id) => { + if (host_type === "default") { + return "/data/nginx/default_host/site.conf"; + } + return `/data/nginx/${internalNginx.getFileFriendlyHostType(host_type)}/${host_id}.conf`; + }, + + /** + * Generates custom locations + * @param {Object} host + * @returns {Promise} + */ + renderLocations: (host) => { + return new Promise((resolve, reject) => { + let template; + + try { + template = fs.readFileSync(`${__dirname}/../templates/_location.conf`, { encoding: "utf8" }); + } catch (err) { + reject(new errs.ConfigurationError(err.message)); + return; + } + + const renderEngine = utils.getRenderEngine(); + let renderedLocations = ""; + + const locationRendering = async () => { + for (let i = 0; i < host.locations.length; i++) { + const locationCopy = Object.assign( + {}, + { access_list_id: host.access_list_id }, + { certificate_id: host.certificate_id }, + { ssl_forced: host.ssl_forced }, + { caching_enabled: host.caching_enabled }, + { block_exploits: host.block_exploits }, + { allow_websocket_upgrade: host.allow_websocket_upgrade }, + { http2_support: host.http2_support }, + { hsts_enabled: host.hsts_enabled }, + { hsts_subdomains: host.hsts_subdomains }, + { access_list: host.access_list }, + { certificate: host.certificate }, + host.locations[i], + ); + + if (locationCopy.forward_host.indexOf("/") > -1) { + const splitted = locationCopy.forward_host.split("/"); + + locationCopy.forward_host = splitted.shift(); + locationCopy.forward_path = `/${splitted.join("/")}`; + } + + renderedLocations += await renderEngine.parseAndRender(template, locationCopy); + } + }; + + locationRendering().then(() => resolve(renderedLocations)); + }); + }, + + /** + * @param {String} host_type + * @param {Object} host + * @returns {Promise} + */ + generateConfig: (host_type, host_row) => { + // Prevent modifying the original object: + const host = JSON.parse(JSON.stringify(host_row)); + const nice_host_type = internalNginx.getFileFriendlyHostType(host_type); + + debug(logger, `Generating ${nice_host_type} Config:`, JSON.stringify(host, null, 2)); + + const renderEngine = utils.getRenderEngine(); + + return new Promise((resolve, reject) => { + let template = null; + const filename = internalNginx.getConfigName(nice_host_type, host.id); + + try { + template = fs.readFileSync(`${__dirname}/../templates/${nice_host_type}.conf`, { encoding: "utf8" }); + } catch (err) { + reject(new errs.ConfigurationError(err.message)); + return; + } + + let locationsPromise; + let origLocations; + + // Manipulate the data a bit before sending it to the template + if (nice_host_type !== "default") { + host.use_default_location = true; + if (typeof host.advanced_config !== "undefined" && host.advanced_config) { + host.use_default_location = !internalNginx.advancedConfigHasDefaultLocation(host.advanced_config); + } + } + + // 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); + locationsPromise = internalNginx.renderLocations(host).then((renderedLocations) => { + host.locations = renderedLocations; + }); + + // Allow someone who is using / custom location path to use it, and skip the default / location + _.map(host.locations, (location) => { + if (location.path === "/") { + host.use_default_location = false; + } + }); + } else { + locationsPromise = Promise.resolve(); + } + + // Set the IPv6 setting for the host + host.ipv6 = internalNginx.ipv6Enabled(); + + locationsPromise.then(() => { + renderEngine + .parseAndRender(template, host) + .then((config_text) => { + fs.writeFileSync(filename, config_text, { encoding: "utf8" }); + debug(logger, "Wrote config:", filename, config_text); + + // Restore locations array + host.locations = origLocations; + + resolve(true); + }) + .catch((err) => { + debug(logger, `Could not write ${filename}:`, err.message); + reject(new errs.ConfigurationError(err.message)); + }); + }); + }); + }, + + /** + * This generates a temporary nginx config listening on port 80 for the domain names listed + * in the certificate setup. It allows the letsencrypt acme challenge to be requested by letsencrypt + * when requesting a certificate without having a hostname set up already. + * + * @param {Object} certificate + * @returns {Promise} + */ + generateLetsEncryptRequestConfig: (certificate) => { + debug(logger, "Generating LetsEncrypt Request Config:", certificate); + const renderEngine = utils.getRenderEngine(); + + return new Promise((resolve, reject) => { + let template = null; + const filename = `/data/nginx/temp/letsencrypt_${certificate.id}.conf`; + + try { + template = fs.readFileSync(`${__dirname}/../templates/letsencrypt-request.conf`, { encoding: "utf8" }); + } catch (err) { + reject(new errs.ConfigurationError(err.message)); + return; + } + + certificate.ipv6 = internalNginx.ipv6Enabled(); + + renderEngine + .parseAndRender(template, certificate) + .then((config_text) => { + fs.writeFileSync(filename, config_text, { encoding: "utf8" }); + debug(logger, "Wrote config:", filename, config_text); + resolve(true); + }) + .catch((err) => { + debug(logger, `Could not write ${filename}:`, err.message); + reject(new errs.ConfigurationError(err.message)); + }); + }); + }, + + /** + * A simple wrapper around unlinkSync that writes to the logger + * + * @param {String} filename + */ + deleteFile: (filename) => { + if (!fs.existsSync(filename)) { + return; + } + try { + debug(logger, `Deleting file: ${filename}`); + fs.unlinkSync(filename); + } catch (err) { + debug(logger, "Could not delete file:", JSON.stringify(err, null, 2)); + } + }, + + /** + * + * @param {String} host_type + * @returns String + */ + getFileFriendlyHostType: (host_type) => { + return host_type.replace(/-/g, "_"); + }, + + /** + * This removes the temporary nginx config file generated by `generateLetsEncryptRequestConfig` + * + * @param {Object} certificate + * @returns {Promise} + */ + deleteLetsEncryptRequestConfig: (certificate) => { + const config_file = `/data/nginx/temp/letsencrypt_${certificate.id}.conf`; + return new Promise((resolve /*, reject*/) => { + internalNginx.deleteFile(config_file); + resolve(); + }); + }, + + /** + * @param {String} host_type + * @param {Object} [host] + * @param {Boolean} [delete_err_file] + * @returns {Promise} + */ + deleteConfig: (host_type, host, delete_err_file) => { + const config_file = internalNginx.getConfigName( + internalNginx.getFileFriendlyHostType(host_type), + typeof host === "undefined" ? 0 : host.id, + ); + const config_file_err = `${config_file}.err`; + + return new Promise((resolve /*, reject*/) => { + internalNginx.deleteFile(config_file); + if (delete_err_file) { + internalNginx.deleteFile(config_file_err); + } + resolve(); + }); + }, + + /** + * @param {String} host_type + * @param {Object} [host] + * @returns {Promise} + */ + renameConfigAsError: (host_type, host) => { + const config_file = internalNginx.getConfigName( + internalNginx.getFileFriendlyHostType(host_type), + typeof host === "undefined" ? 0 : host.id, + ); + const config_file_err = `${config_file}.err`; + + return new Promise((resolve /*, reject*/) => { + fs.unlink(config_file, () => { + // ignore result, continue + fs.rename(config_file, config_file_err, () => { + // also ignore result, as this is a debugging informative file anyway + resolve(); + }); + }); + }); + }, + + /** + * @param {String} hostType + * @param {Array} hosts + * @returns {Promise} + */ + bulkGenerateConfigs: (hostType, hosts) => { + const promises = []; + hosts.map((host) => { + promises.push(internalNginx.generateConfig(hostType, host)); + return true; + }); + + return Promise.all(promises); + }, + + /** + * @param {String} host_type + * @param {Array} hosts + * @returns {Promise} + */ + bulkDeleteConfigs: (host_type, hosts) => { + const promises = []; + hosts.map((host) => { + promises.push(internalNginx.deleteConfig(host_type, host, true)); + return true; + }); + + return Promise.all(promises); + }, + + /** + * @param {string} config + * @returns {boolean} + */ + advancedConfigHasDefaultLocation: (cfg) => !!cfg.match(/^(?:.*;)?\s*?location\s*?\/\s*?{/im), + + /** + * @returns {boolean} + */ + ipv6Enabled: () => { + if (typeof process.env.DISABLE_IPV6 !== "undefined") { + const disabled = process.env.DISABLE_IPV6.toLowerCase(); + return !(disabled === "on" || disabled === "true" || disabled === "1" || disabled === "yes"); + } + + return true; + }, +}; + +export default internalNginx; diff --git a/backend/internal/proxy-host.js b/backend/internal/proxy-host.js new file mode 100644 index 0000000..34475c9 --- /dev/null +++ b/backend/internal/proxy-host.js @@ -0,0 +1,474 @@ +import _ from "lodash"; +import errs from "../lib/error.js"; +import { castJsonIfNeed } from "../lib/helpers.js"; +import utils from "../lib/utils.js"; +import proxyHostModel from "../models/proxy_host.js"; +import internalAuditLog from "./audit-log.js"; +import internalCertificate from "./certificate.js"; +import internalHost from "./host.js"; +import internalNginx from "./nginx.js"; + +const omissions = () => { + return ["is_deleted", "owner.is_deleted"]; +}; + +const internalProxyHost = { + /** + * @param {Access} access + * @param {Object} data + * @returns {Promise} + */ + create: (access, data) => { + let thisData = data; + const createCertificate = thisData.certificate_id === "new"; + + if (createCertificate) { + delete thisData.certificate_id; + } + + return access + .can("proxy_hosts:create", thisData) + .then(() => { + // Get a list of the domain names and check each of them against existing records + const domain_name_check_promises = []; + + thisData.domain_names.map((domain_name) => { + domain_name_check_promises.push(internalHost.isHostnameTaken(domain_name)); + return true; + }); + + return Promise.all(domain_name_check_promises).then((check_results) => { + check_results.map((result) => { + if (result.is_taken) { + throw new errs.ValidationError(`${result.hostname} is already in use`); + } + return true; + }); + }); + }) + .then(() => { + // At this point the domains should have been checked + thisData.owner_user_id = access.token.getUserId(1); + thisData = internalHost.cleanSslHstsData(thisData); + + // Fix for db field not having a default value + // for this optional field. + if (typeof thisData.advanced_config === "undefined") { + thisData.advanced_config = ""; + } + + return proxyHostModel.query().insertAndFetch(thisData).then(utils.omitRow(omissions())); + }) + .then((row) => { + if (createCertificate) { + return internalCertificate + .createQuickCertificate(access, thisData) + .then((cert) => { + // update host with cert id + return internalProxyHost.update(access, { + id: row.id, + certificate_id: cert.id, + }); + }) + .then(() => { + return row; + }); + } + return row; + }) + .then((row) => { + // re-fetch with cert + return internalProxyHost.get(access, { + id: row.id, + expand: ["certificate", "owner", "access_list.[clients,items]"], + }); + }) + .then((row) => { + // Configure nginx + return internalNginx.configure(proxyHostModel, "proxy_host", row).then(() => { + return row; + }); + }) + .then((row) => { + // Audit log + thisData.meta = _.assign({}, thisData.meta || {}, row.meta); + + // Add to audit log + return internalAuditLog + .add(access, { + action: "created", + object_type: "proxy-host", + object_id: row.id, + meta: thisData, + }) + .then(() => { + return row; + }); + }); + }, + + /** + * @param {Access} access + * @param {Object} data + * @param {Number} data.id + * @return {Promise} + */ + update: (access, data) => { + let thisData = data; + const createCertificate = thisData.certificate_id === "new"; + + if (createCertificate) { + delete thisData.certificate_id; + } + + return access + .can("proxy_hosts:update", thisData.id) + .then((/*access_data*/) => { + // Get a list of the domain names and check each of them against existing records + const domain_name_check_promises = []; + + if (typeof thisData.domain_names !== "undefined") { + thisData.domain_names.map((domain_name) => { + return domain_name_check_promises.push( + internalHost.isHostnameTaken(domain_name, "proxy", thisData.id), + ); + }); + + return Promise.all(domain_name_check_promises).then((check_results) => { + check_results.map((result) => { + if (result.is_taken) { + throw new errs.ValidationError(`${result.hostname} is already in use`); + } + return true; + }); + }); + } + }) + .then(() => { + return internalProxyHost.get(access, { id: thisData.id }); + }) + .then((row) => { + if (row.id !== thisData.id) { + // Sanity check that something crazy hasn't happened + throw new errs.InternalValidationError( + `Proxy Host could not be updated, IDs do not match: ${row.id} !== ${thisData.id}`, + ); + } + + if (createCertificate) { + return internalCertificate + .createQuickCertificate(access, { + domain_names: thisData.domain_names || row.domain_names, + meta: _.assign({}, row.meta, thisData.meta), + }) + .then((cert) => { + // update host with cert id + thisData.certificate_id = cert.id; + }) + .then(() => { + return row; + }); + } + return row; + }) + .then((row) => { + // Add domain_names to the data in case it isn't there, so that the audit log renders correctly. The order is important here. + thisData = _.assign( + {}, + { + domain_names: row.domain_names, + }, + data, + ); + + thisData = internalHost.cleanSslHstsData(thisData, row); + + return proxyHostModel + .query() + .where({ id: thisData.id }) + .patch(thisData) + .then(utils.omitRow(omissions())) + .then((saved_row) => { + // Add to audit log + return internalAuditLog + .add(access, { + action: "updated", + object_type: "proxy-host", + object_id: row.id, + meta: thisData, + }) + .then(() => { + return saved_row; + }); + }); + }) + .then(() => { + return internalProxyHost + .get(access, { + id: thisData.id, + expand: ["owner", "certificate", "access_list.[clients,items]"], + }) + .then((row) => { + if (!row.enabled) { + // No need to add nginx config if host is disabled + return row; + } + // Configure nginx + return internalNginx.configure(proxyHostModel, "proxy_host", row).then((new_meta) => { + row.meta = new_meta; + return _.omit(internalHost.cleanRowCertificateMeta(row), omissions()); + }); + }); + }); + }, + + /** + * @param {Access} access + * @param {Object} data + * @param {Number} data.id + * @param {Array} [data.expand] + * @param {Array} [data.omit] + * @return {Promise} + */ + get: (access, data) => { + const thisData = data || {}; + return access + .can("proxy_hosts:get", thisData.id) + .then((access_data) => { + const query = proxyHostModel + .query() + .where("is_deleted", 0) + .andWhere("id", thisData.id) + .allowGraph(proxyHostModel.defaultAllowGraph) + .first(); + + if (access_data.permission_visibility !== "all") { + query.andWhere("owner_user_id", access.token.getUserId(1)); + } + + if (typeof thisData.expand !== "undefined" && thisData.expand !== null) { + query.withGraphFetched(`[${thisData.expand.join(", ")}]`); + } + + return query.then(utils.omitRow(omissions())); + }) + .then((row) => { + if (!row || !row.id) { + throw new errs.ItemNotFoundError(thisData.id); + } + const thisRow = internalHost.cleanRowCertificateMeta(row); + // Custom omissions + if (typeof thisData.omit !== "undefined" && thisData.omit !== null) { + return _.omit(row, thisData.omit); + } + return thisRow; + }); + }, + + /** + * @param {Access} access + * @param {Object} data + * @param {Number} data.id + * @param {String} [data.reason] + * @returns {Promise} + */ + delete: (access, data) => { + return access + .can("proxy_hosts:delete", data.id) + .then(() => { + return internalProxyHost.get(access, { id: data.id }); + }) + .then((row) => { + if (!row || !row.id) { + throw new errs.ItemNotFoundError(data.id); + } + + return proxyHostModel + .query() + .where("id", row.id) + .patch({ + is_deleted: 1, + }) + .then(() => { + // Delete Nginx Config + return internalNginx.deleteConfig("proxy_host", row).then(() => { + return internalNginx.reload(); + }); + }) + .then(() => { + // Add to audit log + return internalAuditLog.add(access, { + action: "deleted", + object_type: "proxy-host", + object_id: row.id, + meta: _.omit(row, omissions()), + }); + }); + }) + .then(() => { + return true; + }); + }, + + /** + * @param {Access} access + * @param {Object} data + * @param {Number} data.id + * @param {String} [data.reason] + * @returns {Promise} + */ + enable: (access, data) => { + return access + .can("proxy_hosts:update", data.id) + .then(() => { + return internalProxyHost.get(access, { + id: data.id, + expand: ["certificate", "owner", "access_list"], + }); + }) + .then((row) => { + if (!row || !row.id) { + throw new errs.ItemNotFoundError(data.id); + } + if (row.enabled) { + throw new errs.ValidationError("Host is already enabled"); + } + + row.enabled = 1; + + return proxyHostModel + .query() + .where("id", row.id) + .patch({ + enabled: 1, + }) + .then(() => { + // Configure nginx + return internalNginx.configure(proxyHostModel, "proxy_host", row); + }) + .then(() => { + // Add to audit log + return internalAuditLog.add(access, { + action: "enabled", + object_type: "proxy-host", + object_id: row.id, + meta: _.omit(row, omissions()), + }); + }); + }) + .then(() => { + return true; + }); + }, + + /** + * @param {Access} access + * @param {Object} data + * @param {Number} data.id + * @param {String} [data.reason] + * @returns {Promise} + */ + disable: (access, data) => { + return access + .can("proxy_hosts:update", data.id) + .then(() => { + return internalProxyHost.get(access, { id: data.id }); + }) + .then((row) => { + if (!row || !row.id) { + throw new errs.ItemNotFoundError(data.id); + } + if (!row.enabled) { + throw new errs.ValidationError("Host is already disabled"); + } + + row.enabled = 0; + + return proxyHostModel + .query() + .where("id", row.id) + .patch({ + enabled: 0, + }) + .then(() => { + // Delete Nginx Config + return internalNginx.deleteConfig("proxy_host", row).then(() => { + return internalNginx.reload(); + }); + }) + .then(() => { + // Add to audit log + return internalAuditLog.add(access, { + action: "disabled", + object_type: "proxy-host", + object_id: row.id, + meta: _.omit(row, omissions()), + }); + }); + }) + .then(() => { + return true; + }); + }, + + /** + * All Hosts + * + * @param {Access} access + * @param {Array} [expand] + * @param {String} [search_query] + * @returns {Promise} + */ + getAll: async (access, expand, searchQuery) => { + const accessData = await access.can("proxy_hosts:list"); + + const query = proxyHostModel + .query() + .where("is_deleted", 0) + .groupBy("id") + .allowGraph(proxyHostModel.defaultAllowGraph) + .orderBy(castJsonIfNeed("domain_names"), "ASC"); + + if (accessData.permission_visibility !== "all") { + query.andWhere("owner_user_id", access.token.getUserId(1)); + } + + // Query is used for searching + if (typeof searchQuery === "string" && searchQuery.length > 0) { + query.where(function () { + this.where(castJsonIfNeed("domain_names"), "like", `%${searchQuery}%`); + }); + } + + if (typeof expand !== "undefined" && expand !== null) { + query.withGraphFetched(`[${expand.join(", ")}]`); + } + + const rows = await query.then(utils.omitRows(omissions())); + if (typeof expand !== "undefined" && expand !== null && expand.indexOf("certificate") !== -1) { + return internalHost.cleanAllRowsCertificateMeta(rows); + } + return rows; + }, + + /** + * Report use + * + * @param {Number} user_id + * @param {String} visibility + * @returns {Promise} + */ + getCount: (user_id, visibility) => { + const query = proxyHostModel.query().count("id as count").where("is_deleted", 0); + + if (visibility !== "all") { + query.andWhere("owner_user_id", user_id); + } + + return query.first().then((row) => { + return Number.parseInt(row.count, 10); + }); + }, +}; + +export default internalProxyHost; diff --git a/backend/internal/redirection-host.js b/backend/internal/redirection-host.js new file mode 100644 index 0000000..5237859 --- /dev/null +++ b/backend/internal/redirection-host.js @@ -0,0 +1,477 @@ +import _ from "lodash"; +import errs from "../lib/error.js"; +import { castJsonIfNeed } from "../lib/helpers.js"; +import utils from "../lib/utils.js"; +import redirectionHostModel from "../models/redirection_host.js"; +import internalAuditLog from "./audit-log.js"; +import internalCertificate from "./certificate.js"; +import internalHost from "./host.js"; +import internalNginx from "./nginx.js"; + +const omissions = () => { + return ["is_deleted"]; +}; + +const internalRedirectionHost = { + /** + * @param {Access} access + * @param {Object} data + * @returns {Promise} + */ + create: (access, data) => { + let thisData = data || {}; + const createCertificate = thisData.certificate_id === "new"; + + if (createCertificate) { + delete thisData.certificate_id; + } + + return access + .can("redirection_hosts:create", thisData) + .then((/*access_data*/) => { + // Get a list of the domain names and check each of them against existing records + const domain_name_check_promises = []; + + thisData.domain_names.map((domain_name) => { + domain_name_check_promises.push(internalHost.isHostnameTaken(domain_name)); + return true; + }); + + return Promise.all(domain_name_check_promises).then((check_results) => { + check_results.map((result) => { + if (result.is_taken) { + throw new errs.ValidationError(`${result.hostname} is already in use`); + } + return true; + }); + }); + }) + .then(() => { + // At this point the domains should have been checked + thisData.owner_user_id = access.token.getUserId(1); + thisData = internalHost.cleanSslHstsData(thisData); + + // Fix for db field not having a default value + // for this optional field. + if (typeof data.advanced_config === "undefined") { + data.advanced_config = ""; + } + + return redirectionHostModel.query().insertAndFetch(thisData).then(utils.omitRow(omissions())); + }) + .then((row) => { + if (createCertificate) { + return internalCertificate + .createQuickCertificate(access, thisData) + .then((cert) => { + // update host with cert id + return internalRedirectionHost.update(access, { + id: row.id, + certificate_id: cert.id, + }); + }) + .then(() => { + return row; + }); + } + return row; + }) + .then((row) => { + // re-fetch with cert + return internalRedirectionHost.get(access, { + id: row.id, + expand: ["certificate", "owner"], + }); + }) + .then((row) => { + // Configure nginx + return internalNginx.configure(redirectionHostModel, "redirection_host", row).then(() => { + return row; + }); + }) + .then((row) => { + thisData.meta = _.assign({}, thisData.meta || {}, row.meta); + + // Add to audit log + return internalAuditLog + .add(access, { + action: "created", + object_type: "redirection-host", + object_id: row.id, + meta: thisData, + }) + .then(() => { + return row; + }); + }); + }, + + /** + * @param {Access} access + * @param {Object} data + * @param {Number} data.id + * @return {Promise} + */ + update: (access, data) => { + let thisData = data || {}; + const createCertificate = thisData.certificate_id === "new"; + + if (createCertificate) { + delete thisData.certificate_id; + } + + return access + .can("redirection_hosts:update", thisData.id) + .then((/*access_data*/) => { + // Get a list of the domain names and check each of them against existing records + const domain_name_check_promises = []; + + if (typeof thisData.domain_names !== "undefined") { + thisData.domain_names.map((domain_name) => { + domain_name_check_promises.push( + internalHost.isHostnameTaken(domain_name, "redirection", thisData.id), + ); + return true; + }); + + return Promise.all(domain_name_check_promises).then((check_results) => { + check_results.map((result) => { + if (result.is_taken) { + throw new errs.ValidationError(`${result.hostname} is already in use`); + } + return true; + }); + }); + } + }) + .then(() => { + return internalRedirectionHost.get(access, { id: thisData.id }); + }) + .then((row) => { + if (row.id !== thisData.id) { + // Sanity check that something crazy hasn't happened + throw new errs.InternalValidationError( + `Redirection Host could not be updated, IDs do not match: ${row.id} !== ${thisData.id}`, + ); + } + + if (createCertificate) { + return internalCertificate + .createQuickCertificate(access, { + domain_names: thisData.domain_names || row.domain_names, + meta: _.assign({}, row.meta, thisData.meta), + }) + .then((cert) => { + // update host with cert id + thisData.certificate_id = cert.id; + }) + .then(() => { + return row; + }); + } + return row; + }) + .then((row) => { + // Add domain_names to the data in case it isn't there, so that the audit log renders correctly. The order is important here. + thisData = _.assign( + {}, + { + domain_names: row.domain_names, + }, + thisData, + ); + + thisData = internalHost.cleanSslHstsData(thisData, row); + + return redirectionHostModel + .query() + .where({ id: thisData.id }) + .patch(thisData) + .then((saved_row) => { + // Add to audit log + return internalAuditLog + .add(access, { + action: "updated", + object_type: "redirection-host", + object_id: row.id, + meta: thisData, + }) + .then(() => { + return _.omit(saved_row, omissions()); + }); + }); + }) + .then(() => { + return internalRedirectionHost + .get(access, { + id: thisData.id, + expand: ["owner", "certificate"], + }) + .then((row) => { + // Configure nginx + return internalNginx + .configure(redirectionHostModel, "redirection_host", row) + .then((new_meta) => { + row.meta = new_meta; + return _.omit(internalHost.cleanRowCertificateMeta(row), omissions()); + }); + }); + }); + }, + + /** + * @param {Access} access + * @param {Object} data + * @param {Number} data.id + * @param {Array} [data.expand] + * @param {Array} [data.omit] + * @return {Promise} + */ + get: (access, data) => { + const thisData = data || {}; + return access + .can("redirection_hosts:get", thisData.id) + .then((access_data) => { + const query = redirectionHostModel + .query() + .where("is_deleted", 0) + .andWhere("id", thisData.id) + .allowGraph(redirectionHostModel.defaultAllowGraph) + .first(); + + if (access_data.permission_visibility !== "all") { + query.andWhere("owner_user_id", access.token.getUserId(1)); + } + + if (typeof thisData.expand !== "undefined" && thisData.expand !== null) { + query.withGraphFetched(`[${thisData.expand.join(", ")}]`); + } + + return query.then(utils.omitRow(omissions())); + }) + .then((row) => { + let thisRow = row; + if (!thisRow || !thisRow.id) { + throw new errs.ItemNotFoundError(thisData.id); + } + thisRow = internalHost.cleanRowCertificateMeta(thisRow); + // Custom omissions + if (typeof thisData.omit !== "undefined" && thisData.omit !== null) { + return _.omit(thisRow, thisData.omit); + } + return thisRow; + }); + }, + + /** + * @param {Access} access + * @param {Object} data + * @param {Number} data.id + * @param {String} [data.reason] + * @returns {Promise} + */ + delete: (access, data) => { + return access + .can("redirection_hosts:delete", data.id) + .then(() => { + return internalRedirectionHost.get(access, { id: data.id }); + }) + .then((row) => { + if (!row || !row.id) { + throw new errs.ItemNotFoundError(data.id); + } + + return redirectionHostModel + .query() + .where("id", row.id) + .patch({ + is_deleted: 1, + }) + .then(() => { + // Delete Nginx Config + return internalNginx.deleteConfig("redirection_host", row).then(() => { + return internalNginx.reload(); + }); + }) + .then(() => { + // Add to audit log + return internalAuditLog.add(access, { + action: "deleted", + object_type: "redirection-host", + object_id: row.id, + meta: _.omit(row, omissions()), + }); + }); + }) + .then(() => { + return true; + }); + }, + + /** + * @param {Access} access + * @param {Object} data + * @param {Number} data.id + * @param {String} [data.reason] + * @returns {Promise} + */ + enable: (access, data) => { + return access + .can("redirection_hosts:update", data.id) + .then(() => { + return internalRedirectionHost.get(access, { + id: data.id, + expand: ["certificate", "owner"], + }); + }) + .then((row) => { + if (!row || !row.id) { + throw new errs.ItemNotFoundError(data.id); + } + if (row.enabled) { + throw new errs.ValidationError("Host is already enabled"); + } + + row.enabled = 1; + + return redirectionHostModel + .query() + .where("id", row.id) + .patch({ + enabled: 1, + }) + .then(() => { + // Configure nginx + return internalNginx.configure(redirectionHostModel, "redirection_host", row); + }) + .then(() => { + // Add to audit log + return internalAuditLog.add(access, { + action: "enabled", + object_type: "redirection-host", + object_id: row.id, + meta: _.omit(row, omissions()), + }); + }); + }) + .then(() => { + return true; + }); + }, + + /** + * @param {Access} access + * @param {Object} data + * @param {Number} data.id + * @param {String} [data.reason] + * @returns {Promise} + */ + disable: (access, data) => { + return access + .can("redirection_hosts:update", data.id) + .then(() => { + return internalRedirectionHost.get(access, { id: data.id }); + }) + .then((row) => { + if (!row || !row.id) { + throw new errs.ItemNotFoundError(data.id); + } + if (!row.enabled) { + throw new errs.ValidationError("Host is already disabled"); + } + + row.enabled = 0; + + return redirectionHostModel + .query() + .where("id", row.id) + .patch({ + enabled: 0, + }) + .then(() => { + // Delete Nginx Config + return internalNginx.deleteConfig("redirection_host", row).then(() => { + return internalNginx.reload(); + }); + }) + .then(() => { + // Add to audit log + return internalAuditLog.add(access, { + action: "disabled", + object_type: "redirection-host", + object_id: row.id, + meta: _.omit(row, omissions()), + }); + }); + }) + .then(() => { + return true; + }); + }, + + /** + * All Hosts + * + * @param {Access} access + * @param {Array} [expand] + * @param {String} [search_query] + * @returns {Promise} + */ + getAll: (access, expand, search_query) => { + return access + .can("redirection_hosts:list") + .then((access_data) => { + const query = redirectionHostModel + .query() + .where("is_deleted", 0) + .groupBy("id") + .allowGraph(redirectionHostModel.defaultAllowGraph) + .orderBy(castJsonIfNeed("domain_names"), "ASC"); + + if (access_data.permission_visibility !== "all") { + query.andWhere("owner_user_id", access.token.getUserId(1)); + } + + // Query is used for searching + if (typeof search_query === "string" && search_query.length > 0) { + query.where(function () { + this.where(castJsonIfNeed("domain_names"), "like", `%${search_query}%`); + }); + } + + if (typeof expand !== "undefined" && expand !== null) { + query.withGraphFetched(`[${expand.join(", ")}]`); + } + + return query.then(utils.omitRows(omissions())); + }) + .then((rows) => { + if (typeof expand !== "undefined" && expand !== null && expand.indexOf("certificate") !== -1) { + return internalHost.cleanAllRowsCertificateMeta(rows); + } + + return rows; + }); + }, + + /** + * Report use + * + * @param {Number} user_id + * @param {String} visibility + * @returns {Promise} + */ + getCount: (user_id, visibility) => { + const query = redirectionHostModel.query().count("id as count").where("is_deleted", 0); + + if (visibility !== "all") { + query.andWhere("owner_user_id", user_id); + } + + return query.first().then((row) => { + return Number.parseInt(row.count, 10); + }); + }, +}; + +export default internalRedirectionHost; diff --git a/backend/internal/remote-version.js b/backend/internal/remote-version.js new file mode 100644 index 0000000..dd9c927 --- /dev/null +++ b/backend/internal/remote-version.js @@ -0,0 +1,84 @@ +import https from "node:https"; +import { ProxyAgent } from "proxy-agent"; +import { debug, remoteVersion as logger } from "../logger.js"; +import pjson from "../package.json" with { type: "json" }; + +const VERSION_URL = "https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest"; + +const internalRemoteVersion = { + cache_timeout: 1000 * 60 * 15, // 15 minutes + last_result: null, + last_fetch_time: null, + + /** + * Fetch the latest version info, using a cached result if within the cache timeout period. + * @return {Promise<{current: string, latest: string, update_available: boolean}>} Version info + */ + get: async () => { + if ( + !internalRemoteVersion.last_result || + !internalRemoteVersion.last_fetch_time || + Date.now() - internalRemoteVersion.last_fetch_time > internalRemoteVersion.cache_timeout + ) { + const raw = await internalRemoteVersion.fetchUrl(VERSION_URL); + const data = JSON.parse(raw); + internalRemoteVersion.last_result = data; + internalRemoteVersion.last_fetch_time = Date.now(); + } else { + debug(logger, "Using cached remote version result"); + } + + const latestVersion = internalRemoteVersion.last_result.tag_name; + const version = pjson.version.split("-").shift().split("."); + const currentVersion = `v${version[0]}.${version[1]}.${version[2]}`; + return { + current: currentVersion, + latest: latestVersion, + update_available: internalRemoteVersion.compareVersions(currentVersion, latestVersion), + }; + }, + + fetchUrl: (url) => { + const agent = new ProxyAgent(); + const headers = { + "User-Agent": `NginxProxyManager v${pjson.version}`, + }; + + return new Promise((resolve, reject) => { + logger.info(`Fetching ${url}`); + return https + .get(url, { agent, headers }, (res) => { + res.setEncoding("utf8"); + let raw_data = ""; + res.on("data", (chunk) => { + raw_data += chunk; + }); + res.on("end", () => { + resolve(raw_data); + }); + }) + .on("error", (err) => { + reject(err); + }); + }); + }, + + compareVersions: (current, latest) => { + const cleanCurrent = current.replace(/^v/, ""); + const cleanLatest = latest.replace(/^v/, ""); + + const currentParts = cleanCurrent.split(".").map(Number); + const latestParts = cleanLatest.split(".").map(Number); + + for (let i = 0; i < Math.max(currentParts.length, latestParts.length); i++) { + const curr = currentParts[i] || 0; + const lat = latestParts[i] || 0; + + if (lat > curr) return true; + if (lat < curr) return false; + } + return false; + }, +}; + +export default internalRemoteVersion; diff --git a/backend/internal/report.js b/backend/internal/report.js new file mode 100644 index 0000000..59f13fe --- /dev/null +++ b/backend/internal/report.js @@ -0,0 +1,37 @@ +import internalDeadHost from "./dead-host.js"; +import internalProxyHost from "./proxy-host.js"; +import internalRedirectionHost from "./redirection-host.js"; +import internalStream from "./stream.js"; + +const internalReport = { + /** + * @param {Access} access + * @return {Promise} + */ + getHostsReport: (access) => { + return access + .can("reports:hosts", 1) + .then((access_data) => { + const userId = access.token.getUserId(1); + + const promises = [ + internalProxyHost.getCount(userId, access_data.permission_visibility), + internalRedirectionHost.getCount(userId, access_data.permission_visibility), + internalStream.getCount(userId, access_data.permission_visibility), + internalDeadHost.getCount(userId, access_data.permission_visibility), + ]; + + return Promise.all(promises); + }) + .then((counts) => { + return { + proxy: counts.shift(), + redirection: counts.shift(), + stream: counts.shift(), + dead: counts.shift(), + }; + }); + }, +}; + +export default internalReport; diff --git a/backend/internal/setting.js b/backend/internal/setting.js new file mode 100644 index 0000000..f8fc711 --- /dev/null +++ b/backend/internal/setting.js @@ -0,0 +1,125 @@ +import fs from "node:fs"; +import errs from "../lib/error.js"; +import settingModel from "../models/setting.js"; +import internalNginx from "./nginx.js"; + +const internalSetting = { + /** + * @param {Access} access + * @param {Object} data + * @param {String} data.id + * @return {Promise} + */ + update: (access, data) => { + return access + .can("settings:update", data.id) + .then((/*access_data*/) => { + return internalSetting.get(access, { id: data.id }); + }) + .then((row) => { + if (row.id !== data.id) { + // Sanity check that something crazy hasn't happened + throw new errs.InternalValidationError( + `Setting could not be updated, IDs do not match: ${row.id} !== ${data.id}`, + ); + } + + return settingModel.query().where({ id: data.id }).patch(data); + }) + .then(() => { + return internalSetting.get(access, { + id: data.id, + }); + }) + .then((row) => { + if (row.id === "default-site") { + // write the html if we need to + if (row.value === "html") { + fs.writeFileSync("/data/nginx/default_www/index.html", row.meta.html, { encoding: "utf8" }); + } + + // Configure nginx + return internalNginx + .deleteConfig("default") + .then(() => { + return internalNginx.generateConfig("default", row); + }) + .then(() => { + return internalNginx.test(); + }) + .then(() => { + return internalNginx.reload(); + }) + .then(() => { + return row; + }) + .catch((/*err*/) => { + internalNginx + .deleteConfig("default") + .then(() => { + return internalNginx.test(); + }) + .then(() => { + return internalNginx.reload(); + }) + .then(() => { + // I'm being slack here I know.. + throw new errs.ValidationError("Could not reconfigure Nginx. Please check logs."); + }); + }); + } + return row; + }); + }, + + /** + * @param {Access} access + * @param {Object} data + * @param {String} data.id + * @return {Promise} + */ + get: (access, data) => { + return access + .can("settings:get", data.id) + .then(() => { + return settingModel.query().where("id", data.id).first(); + }) + .then((row) => { + if (row) { + return row; + } + throw new errs.ItemNotFoundError(data.id); + }); + }, + + /** + * This will only count the settings + * + * @param {Access} access + * @returns {*} + */ + getCount: (access) => { + return access + .can("settings:list") + .then(() => { + return settingModel.query().count("id as count").first(); + }) + .then((row) => { + return Number.parseInt(row.count, 10); + }); + }, + + /** + * All settings + * + * @param {Access} access + * @returns {Promise} + */ + getAll: (access) => { + return access.can("settings:list").then(() => { + return settingModel.query().orderBy("description", "ASC"); + }); + }, +}; + +export default internalSetting; diff --git a/backend/internal/stream.js b/backend/internal/stream.js new file mode 100644 index 0000000..909c92f --- /dev/null +++ b/backend/internal/stream.js @@ -0,0 +1,426 @@ +import _ from "lodash"; +import errs from "../lib/error.js"; +import { castJsonIfNeed } from "../lib/helpers.js"; +import utils from "../lib/utils.js"; +import streamModel from "../models/stream.js"; +import internalAuditLog from "./audit-log.js"; +import internalCertificate from "./certificate.js"; +import internalHost from "./host.js"; +import internalNginx from "./nginx.js"; + +const omissions = () => { + return ["is_deleted", "owner.is_deleted", "certificate.is_deleted"]; +}; + +const internalStream = { + /** + * @param {Access} access + * @param {Object} data + * @returns {Promise} + */ + create: (access, data) => { + const create_certificate = data.certificate_id === "new"; + + if (create_certificate) { + delete data.certificate_id; + } + + return access + .can("streams:create", data) + .then((/*access_data*/) => { + // TODO: At this point the existing ports should have been checked + data.owner_user_id = access.token.getUserId(1); + + if (typeof data.meta === "undefined") { + data.meta = {}; + } + + // streams aren't routed by domain name so don't store domain names in the DB + const data_no_domains = structuredClone(data); + delete data_no_domains.domain_names; + + return streamModel.query().insertAndFetch(data_no_domains).then(utils.omitRow(omissions())); + }) + .then((row) => { + if (create_certificate) { + return internalCertificate + .createQuickCertificate(access, data) + .then((cert) => { + // update host with cert id + return internalStream.update(access, { + id: row.id, + certificate_id: cert.id, + }); + }) + .then(() => { + return row; + }); + } + return row; + }) + .then((row) => { + // re-fetch with cert + return internalStream.get(access, { + id: row.id, + expand: ["certificate", "owner"], + }); + }) + .then((row) => { + // Configure nginx + return internalNginx.configure(streamModel, "stream", row).then(() => { + return row; + }); + }) + .then((row) => { + // Add to audit log + return internalAuditLog + .add(access, { + action: "created", + object_type: "stream", + object_id: row.id, + meta: data, + }) + .then(() => { + return row; + }); + }); + }, + + /** + * @param {Access} access + * @param {Object} data + * @param {Number} data.id + * @return {Promise} + */ + update: (access, data) => { + let thisData = data; + const create_certificate = thisData.certificate_id === "new"; + + if (create_certificate) { + delete thisData.certificate_id; + } + + return access + .can("streams:update", thisData.id) + .then((/*access_data*/) => { + // TODO: at this point the existing streams should have been checked + return internalStream.get(access, { id: thisData.id }); + }) + .then((row) => { + if (row.id !== thisData.id) { + // Sanity check that something crazy hasn't happened + throw new errs.InternalValidationError( + `Stream could not be updated, IDs do not match: ${row.id} !== ${thisData.id}`, + ); + } + + if (create_certificate) { + return internalCertificate + .createQuickCertificate(access, { + domain_names: thisData.domain_names || row.domain_names, + meta: _.assign({}, row.meta, thisData.meta), + }) + .then((cert) => { + // update host with cert id + thisData.certificate_id = cert.id; + }) + .then(() => { + return row; + }); + } + return row; + }) + .then((row) => { + // Add domain_names to the data in case it isn't there, so that the audit log renders correctly. The order is important here. + thisData = _.assign( + {}, + { + domain_names: row.domain_names, + }, + thisData, + ); + + return streamModel + .query() + .patchAndFetchById(row.id, thisData) + .then(utils.omitRow(omissions())) + .then((saved_row) => { + // Add to audit log + return internalAuditLog + .add(access, { + action: "updated", + object_type: "stream", + object_id: row.id, + meta: thisData, + }) + .then(() => { + return saved_row; + }); + }); + }) + .then(() => { + return internalStream.get(access, { id: thisData.id, expand: ["owner", "certificate"] }).then((row) => { + return internalNginx.configure(streamModel, "stream", row).then((new_meta) => { + row.meta = new_meta; + return _.omit(internalHost.cleanRowCertificateMeta(row), omissions()); + }); + }); + }); + }, + + /** + * @param {Access} access + * @param {Object} data + * @param {Number} data.id + * @param {Array} [data.expand] + * @param {Array} [data.omit] + * @return {Promise} + */ + get: (access, data) => { + const thisData = data || {}; + return access + .can("streams:get", thisData.id) + .then((access_data) => { + const query = streamModel + .query() + .where("is_deleted", 0) + .andWhere("id", thisData.id) + .allowGraph(streamModel.defaultAllowGraph) + .first(); + + if (access_data.permission_visibility !== "all") { + query.andWhere("owner_user_id", access.token.getUserId(1)); + } + + if (typeof thisData.expand !== "undefined" && thisData.expand !== null) { + query.withGraphFetched(`[${thisData.expand.join(", ")}]`); + } + + return query.then(utils.omitRow(omissions())); + }) + .then((row) => { + let thisRow = row; + if (!thisRow || !thisRow.id) { + throw new errs.ItemNotFoundError(thisData.id); + } + thisRow = internalHost.cleanRowCertificateMeta(thisRow); + // Custom omissions + if (typeof thisData.omit !== "undefined" && thisData.omit !== null) { + return _.omit(thisRow, thisData.omit); + } + return thisRow; + }); + }, + + /** + * @param {Access} access + * @param {Object} data + * @param {Number} data.id + * @param {String} [data.reason] + * @returns {Promise} + */ + delete: (access, data) => { + return access + .can("streams:delete", data.id) + .then(() => { + return internalStream.get(access, { id: data.id }); + }) + .then((row) => { + if (!row || !row.id) { + throw new errs.ItemNotFoundError(data.id); + } + + return streamModel + .query() + .where("id", row.id) + .patch({ + is_deleted: 1, + }) + .then(() => { + // Delete Nginx Config + return internalNginx.deleteConfig("stream", row).then(() => { + return internalNginx.reload(); + }); + }) + .then(() => { + // Add to audit log + return internalAuditLog.add(access, { + action: "deleted", + object_type: "stream", + object_id: row.id, + meta: _.omit(row, omissions()), + }); + }); + }) + .then(() => { + return true; + }); + }, + + /** + * @param {Access} access + * @param {Object} data + * @param {Number} data.id + * @param {String} [data.reason] + * @returns {Promise} + */ + enable: (access, data) => { + return access + .can("streams:update", data.id) + .then(() => { + return internalStream.get(access, { + id: data.id, + expand: ["certificate", "owner"], + }); + }) + .then((row) => { + if (!row || !row.id) { + throw new errs.ItemNotFoundError(data.id); + } + if (row.enabled) { + throw new errs.ValidationError("Stream is already enabled"); + } + + row.enabled = 1; + + return streamModel + .query() + .where("id", row.id) + .patch({ + enabled: 1, + }) + .then(() => { + // Configure nginx + return internalNginx.configure(streamModel, "stream", row); + }) + .then(() => { + // Add to audit log + return internalAuditLog.add(access, { + action: "enabled", + object_type: "stream", + object_id: row.id, + meta: _.omit(row, omissions()), + }); + }); + }) + .then(() => { + return true; + }); + }, + + /** + * @param {Access} access + * @param {Object} data + * @param {Number} data.id + * @param {String} [data.reason] + * @returns {Promise} + */ + disable: (access, data) => { + return access + .can("streams:update", data.id) + .then(() => { + return internalStream.get(access, { id: data.id }); + }) + .then((row) => { + if (!row || !row.id) { + throw new errs.ItemNotFoundError(data.id); + } + if (!row.enabled) { + throw new errs.ValidationError("Stream is already disabled"); + } + + row.enabled = 0; + + return streamModel + .query() + .where("id", row.id) + .patch({ + enabled: 0, + }) + .then(() => { + // Delete Nginx Config + return internalNginx.deleteConfig("stream", row).then(() => { + return internalNginx.reload(); + }); + }) + .then(() => { + // Add to audit log + return internalAuditLog.add(access, { + action: "disabled", + object_type: "stream", + object_id: row.id, + meta: _.omit(row, omissions()), + }); + }); + }) + .then(() => { + return true; + }); + }, + + /** + * All Streams + * + * @param {Access} access + * @param {Array} [expand] + * @param {String} [search_query] + * @returns {Promise} + */ + getAll: (access, expand, search_query) => { + return access + .can("streams:list") + .then((access_data) => { + const query = streamModel + .query() + .where("is_deleted", 0) + .groupBy("id") + .allowGraph(streamModel.defaultAllowGraph) + .orderBy("incoming_port", "ASC"); + + if (access_data.permission_visibility !== "all") { + query.andWhere("owner_user_id", access.token.getUserId(1)); + } + + // Query is used for searching + if (typeof search_query === "string" && search_query.length > 0) { + query.where(function () { + this.where(castJsonIfNeed("incoming_port"), "like", `%${search_query}%`); + }); + } + + if (typeof expand !== "undefined" && expand !== null) { + query.withGraphFetched(`[${expand.join(", ")}]`); + } + + return query.then(utils.omitRows(omissions())); + }) + .then((rows) => { + if (typeof expand !== "undefined" && expand !== null && expand.indexOf("certificate") !== -1) { + return internalHost.cleanAllRowsCertificateMeta(rows); + } + + return rows; + }); + }, + + /** + * Report use + * + * @param {Number} user_id + * @param {String} visibility + * @returns {Promise} + */ + getCount: (user_id, visibility) => { + const query = streamModel.query().count("id AS count").where("is_deleted", 0); + + if (visibility !== "all") { + query.andWhere("owner_user_id", user_id); + } + + return query.first().then((row) => { + return Number.parseInt(row.count, 10); + }); + }, +}; + +export default internalStream; diff --git a/backend/internal/token.js b/backend/internal/token.js new file mode 100644 index 0000000..126283e --- /dev/null +++ b/backend/internal/token.js @@ -0,0 +1,237 @@ +import _ from "lodash"; +import errs from "../lib/error.js"; +import { parseDatePeriod } from "../lib/helpers.js"; +import authModel from "../models/auth.js"; +import TokenModel from "../models/token.js"; +import userModel from "../models/user.js"; +import twoFactor from "./2fa.js"; + +const ERROR_MESSAGE_INVALID_AUTH = "Invalid email or password"; +const ERROR_MESSAGE_INVALID_AUTH_I18N = "error.invalid-auth"; +const ERROR_MESSAGE_INVALID_2FA = "Invalid verification code"; +const ERROR_MESSAGE_INVALID_2FA_I18N = "error.invalid-2fa"; + +export default { + /** + * @param {Object} data + * @param {String} data.identity + * @param {String} data.secret + * @param {String} [data.scope] + * @param {String} [data.expiry] + * @param {String} [issuer] + * @returns {Promise} + */ + getTokenFromEmail: async (data, issuer) => { + const Token = TokenModel(); + + data.scope = data.scope || "user"; + data.expiry = data.expiry || "1d"; + + const user = await userModel + .query() + .where("email", data.identity.toLowerCase().trim()) + .andWhere("is_deleted", 0) + .andWhere("is_disabled", 0) + .first(); + + if (!user) { + throw new errs.AuthError(ERROR_MESSAGE_INVALID_AUTH); + } + + const auth = await authModel + .query() + .where("user_id", "=", user.id) + .where("type", "=", "password") + .first(); + + if (!auth) { + throw new errs.AuthError(ERROR_MESSAGE_INVALID_AUTH); + } + + const valid = await auth.verifyPassword(data.secret); + if (!valid) { + throw new errs.AuthError( + ERROR_MESSAGE_INVALID_AUTH, + ERROR_MESSAGE_INVALID_AUTH_I18N, + ); + } + + if (data.scope !== "user" && _.indexOf(user.roles, data.scope) === -1) { + // The scope requested doesn't exist as a role against the user, + // you shall not pass. + throw new errs.AuthError(`Invalid scope: ${data.scope}`); + } + + // Check if 2FA is enabled + const has2FA = await twoFactor.isEnabled(user.id); + if (has2FA) { + // Return challenge token instead of full token + const challengeToken = await Token.create({ + iss: issuer || "api", + attrs: { + id: user.id, + }, + scope: ["2fa-challenge"], + expiresIn: "5m", + }); + + return { + requires_2fa: true, + challenge_token: challengeToken.token, + }; + } + + // Create a moment of the expiry expression + const expiry = parseDatePeriod(data.expiry); + if (expiry === null) { + throw new errs.AuthError(`Invalid expiry time: ${data.expiry}`); + } + + const signed = await Token.create({ + iss: issuer || "api", + attrs: { + id: user.id, + }, + scope: [data.scope], + expiresIn: data.expiry, + }); + + return { + token: signed.token, + expires: expiry.toISOString(), + }; + }, + + /** + * @param {Access} access + * @param {Object} [data] + * @param {String} [data.expiry] + * @param {String} [data.scope] Only considered if existing token scope is admin + * @returns {Promise} + */ + getFreshToken: async (access, data) => { + const Token = TokenModel(); + const thisData = data || {}; + + thisData.expiry = thisData.expiry || "1d"; + + if (access?.token.getUserId(0)) { + // Create a moment of the expiry expression + const expiry = parseDatePeriod(thisData.expiry); + if (expiry === null) { + throw new errs.AuthError(`Invalid expiry time: ${thisData.expiry}`); + } + + const token_attrs = { + id: access.token.getUserId(0), + }; + + // Only admins can request otherwise scoped tokens + let scope = access.token.get("scope"); + if (thisData.scope && access.token.hasScope("admin")) { + scope = [thisData.scope]; + + if (thisData.scope === "job-board" || thisData.scope === "worker") { + token_attrs.id = 0; + } + } + + const signed = await Token.create({ + iss: "api", + scope: scope, + attrs: token_attrs, + expiresIn: thisData.expiry, + }); + + return { + token: signed.token, + expires: expiry.toISOString(), + }; + } + throw new error.AssertionFailedError("Existing token contained invalid user data"); + }, + + /** + * Verify 2FA code and return full token + * @param {string} challengeToken + * @param {string} code + * @param {string} [expiry] + * @returns {Promise} + */ + verify2FA: async (challengeToken, code, expiry) => { + const Token = TokenModel(); + const tokenExpiry = expiry || "1d"; + + // Verify challenge token + let tokenData; + try { + tokenData = await Token.load(challengeToken); + } catch { + throw new errs.AuthError("Invalid or expired challenge token"); + } + + // Check scope + if (!tokenData.scope || tokenData.scope[0] !== "2fa-challenge") { + throw new errs.AuthError("Invalid challenge token"); + } + + const userId = tokenData.attrs?.id; + if (!userId) { + throw new errs.AuthError("Invalid challenge token"); + } + + // Verify 2FA code + const valid = await twoFactor.verifyForLogin(userId, code); + if (!valid) { + throw new errs.AuthError( + ERROR_MESSAGE_INVALID_2FA, + ERROR_MESSAGE_INVALID_2FA_I18N, + ); + } + + // Create full token + const expiryDate = parseDatePeriod(tokenExpiry); + if (expiryDate === null) { + throw new errs.AuthError(`Invalid expiry time: ${tokenExpiry}`); + } + + const signed = await Token.create({ + iss: "api", + attrs: { + id: userId, + }, + scope: ["user"], + expiresIn: tokenExpiry, + }); + + return { + token: signed.token, + expires: expiryDate.toISOString(), + }; + }, + + /** + * @param {Object} user + * @returns {Promise} + */ + getTokenFromUser: async (user) => { + const expire = "1d"; + const Token = TokenModel(); + const expiry = parseDatePeriod(expire); + + const signed = await Token.create({ + iss: "api", + attrs: { + id: user.id, + }, + scope: ["user"], + expiresIn: expire, + }); + + return { + token: signed.token, + expires: expiry.toISOString(), + user: user, + }; + }, +}; diff --git a/backend/internal/user.js b/backend/internal/user.js new file mode 100644 index 0000000..d13931d --- /dev/null +++ b/backend/internal/user.js @@ -0,0 +1,494 @@ +import gravatar from "gravatar"; +import _ from "lodash"; +import errs from "../lib/error.js"; +import utils from "../lib/utils.js"; +import authModel from "../models/auth.js"; +import userModel from "../models/user.js"; +import userPermissionModel from "../models/user_permission.js"; +import internalAuditLog from "./audit-log.js"; +import internalToken from "./token.js"; + +const omissions = () => { + return ["is_deleted", "permissions.id", "permissions.user_id", "permissions.created_on", "permissions.modified_on"]; +}; + +const DEFAULT_AVATAR = gravatar.url("admin@example.com", { default: "mm" }); + +const internalUser = { + /** + * Create a user can happen unauthenticated only once and only when no active users exist. + * Otherwise, a valid auth method is required. + * + * @param {Access} access + * @param {Object} data + * @returns {Promise} + */ + create: async (access, data) => { + const auth = data.auth || null; + delete data.auth; + + data.avatar = data.avatar || ""; + data.roles = data.roles || []; + + if (typeof data.is_disabled !== "undefined") { + data.is_disabled = data.is_disabled ? 1 : 0; + } + + await access.can("users:create", data); + data.avatar = gravatar.url(data.email, { default: "mm" }); + + let user = await userModel.query().insertAndFetch(data).then(utils.omitRow(omissions())); + if (auth) { + user = await authModel.query().insert({ + user_id: user.id, + type: auth.type, + secret: auth.secret, + meta: {}, + }); + } + + // Create permissions row as well + const isAdmin = data.roles.indexOf("admin") !== -1; + + 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", + }); + + user = await internalUser.get(access, { id: user.id, expand: ["permissions"] }); + + await internalAuditLog.add(access, { + action: "created", + object_type: "user", + object_id: user.id, + meta: user, + }); + + return user; + }, + + /** + * @param {Access} access + * @param {Object} data + * @param {Integer} data.id + * @param {String} [data.email] + * @param {String} [data.name] + * @return {Promise} + */ + update: (access, data) => { + if (typeof data.is_disabled !== "undefined") { + data.is_disabled = data.is_disabled ? 1 : 0; + } + + return access + .can("users:update", data.id) + .then(() => { + // Make sure that the user being updated doesn't change their email to another user that is already using it + // 1. get user we want to update + return internalUser.get(access, { id: data.id }).then((user) => { + // 2. if email is to be changed, find other users with that email + if (typeof data.email !== "undefined") { + data.email = data.email.toLowerCase().trim(); + + if (user.email !== data.email) { + return internalUser.isEmailAvailable(data.email, data.id).then((available) => { + if (!available) { + throw new errs.ValidationError(`Email address already in use - ${data.email}`); + } + return user; + }); + } + } + + // No change to email: + return user; + }); + }) + .then((user) => { + if (user.id !== data.id) { + // Sanity check that something crazy hasn't happened + throw new errs.InternalValidationError( + `User could not be updated, IDs do not match: ${user.id} !== ${data.id}`, + ); + } + + data.avatar = gravatar.url(data.email || user.email, { default: "mm" }); + return userModel.query().patchAndFetchById(user.id, data).then(utils.omitRow(omissions())); + }) + .then(() => { + return internalUser.get(access, { id: data.id }); + }) + .then((user) => { + // Add to audit log + return internalAuditLog + .add(access, { + action: "updated", + object_type: "user", + object_id: user.id, + meta: { ...data, id: user.id, name: user.name }, + }) + .then(() => { + return user; + }); + }); + }, + + /** + * @param {Access} access + * @param {Object} [data] + * @param {Integer} [data.id] Defaults to the token user + * @param {Array} [data.expand] + * @param {Array} [data.omit] + * @return {Promise} + */ + get: (access, data) => { + const thisData = data || {}; + + if (typeof thisData.id === "undefined" || !thisData.id) { + thisData.id = access.token.getUserId(0); + } + + return access + .can("users:get", thisData.id) + .then(() => { + const query = userModel + .query() + .where("is_deleted", 0) + .andWhere("id", thisData.id) + .allowGraph("[permissions]") + .first(); + + if (typeof thisData.expand !== "undefined" && thisData.expand !== null) { + query.withGraphFetched(`[${thisData.expand.join(", ")}]`); + } + + return query.then(utils.omitRow(omissions())); + }) + .then((row) => { + if (!row || !row.id) { + throw new errs.ItemNotFoundError(thisData.id); + } + // Custom omissions + if (typeof thisData.omit !== "undefined" && thisData.omit !== null) { + return _.omit(row, thisData.omit); + } + + if (row.avatar === "") { + row.avatar = DEFAULT_AVATAR; + } + + return row; + }); + }, + + /** + * Checks if an email address is available, but if a user_id is supplied, it will ignore checking + * against that user. + * + * @param email + * @param user_id + */ + isEmailAvailable: (email, user_id) => { + const query = userModel.query().where("email", "=", email.toLowerCase().trim()).where("is_deleted", 0).first(); + + if (typeof user_id !== "undefined") { + query.where("id", "!=", user_id); + } + + return query.then((user) => { + return !user; + }); + }, + + /** + * @param {Access} access + * @param {Object} data + * @param {Integer} data.id + * @param {String} [data.reason] + * @returns {Promise} + */ + delete: (access, data) => { + return access + .can("users:delete", data.id) + .then(() => { + return internalUser.get(access, { id: data.id }); + }) + .then((user) => { + if (!user) { + throw new errs.ItemNotFoundError(data.id); + } + + // Make sure user can't delete themselves + if (user.id === access.token.getUserId(0)) { + throw new errs.PermissionError("You cannot delete yourself."); + } + + return userModel + .query() + .where("id", user.id) + .patch({ + is_deleted: 1, + }) + .then(() => { + // Add to audit log + return internalAuditLog.add(access, { + action: "deleted", + object_type: "user", + object_id: user.id, + meta: _.omit(user, omissions()), + }); + }); + }) + .then(() => { + return true; + }); + }, + + deleteAll: async () => { + await userModel + .query() + .patch({ + is_deleted: 1, + }); + }, + + /** + * This will only count the users + * + * @param {Access} access + * @param {String} [search_query] + * @returns {*} + */ + getCount: (access, search_query) => { + return access + .can("users:list") + .then(() => { + const query = userModel.query().count("id as count").where("is_deleted", 0).first(); + + // Query is used for searching + if (typeof search_query === "string") { + query.where(function () { + this.where("user.name", "like", `%${search_query}%`).orWhere( + "user.email", + "like", + `%${search_query}%`, + ); + }); + } + + return query; + }) + .then((row) => { + return Number.parseInt(row.count, 10); + }); + }, + + /** + * All users + * + * @param {Access} access + * @param {Array} [expand] + * @param {String} [search_query] + * @returns {Promise} + */ + getAll: async (access, expand, search_query) => { + await access.can("users:list"); + const query = userModel + .query() + .where("is_deleted", 0) + .groupBy("id") + .allowGraph("[permissions]") + .orderBy("name", "ASC"); + + // Query is used for searching + if (typeof search_query === "string") { + query.where(function () { + this.where("name", "like", `%${search_query}%`).orWhere("email", "like", `%${search_query}%`); + }); + } + + if (typeof expand !== "undefined" && expand !== null) { + query.withGraphFetched(`[${expand.join(", ")}]`); + } + + const res = await query; + return utils.omitRows(omissions())(res); + }, + + /** + * @param {Access} access + * @param {Integer} [id_requested] + * @returns {[String]} + */ + getUserOmisionsByAccess: (access, idRequested) => { + let response = []; // Admin response + + if (!access.token.hasScope("admin") && access.token.getUserId(0) !== idRequested) { + response = ["is_deleted"]; // Restricted response + } + + return response; + }, + + /** + * @param {Access} access + * @param {Object} data + * @param {Integer} data.id + * @param {String} data.type + * @param {String} data.secret + * @return {Promise} + */ + setPassword: (access, data) => { + return access + .can("users:password", data.id) + .then(() => { + return internalUser.get(access, { id: data.id }); + }) + .then((user) => { + if (user.id !== data.id) { + // Sanity check that something crazy hasn't happened + throw new errs.InternalValidationError( + `User could not be updated, IDs do not match: ${user.id} !== ${data.id}`, + ); + } + + if (user.id === access.token.getUserId(0)) { + // they're setting their own password. Make sure their current password is correct + if (typeof data.current === "undefined" || !data.current) { + throw new errs.ValidationError("Current password was not supplied"); + } + + return internalToken + .getTokenFromEmail({ + identity: user.email, + secret: data.current, + }) + .then(() => { + return user; + }); + } + + return user; + }) + .then((user) => { + // Get auth, patch if it exists + return authModel + .query() + .where("user_id", user.id) + .andWhere("type", data.type) + .first() + .then((existing_auth) => { + if (existing_auth) { + // patch + return authModel.query().where("user_id", user.id).andWhere("type", data.type).patch({ + type: data.type, // This is required for the model to encrypt on save + secret: data.secret, + }); + } + // insert + return authModel.query().insert({ + user_id: user.id, + type: data.type, + secret: data.secret, + meta: {}, + }); + }) + .then(() => { + // Add to Audit Log + return internalAuditLog.add(access, { + action: "updated", + object_type: "user", + object_id: user.id, + meta: { + name: user.name, + password_changed: true, + auth_type: data.type, + }, + }); + }); + }) + .then(() => { + return true; + }); + }, + + /** + * @param {Access} access + * @param {Object} data + * @return {Promise} + */ + setPermissions: (access, data) => { + return access + .can("users:permissions", data.id) + .then(() => { + return internalUser.get(access, { id: data.id }); + }) + .then((user) => { + if (user.id !== data.id) { + // Sanity check that something crazy hasn't happened + throw new errs.InternalValidationError( + `User could not be updated, IDs do not match: ${user.id} !== ${data.id}`, + ); + } + + return user; + }) + .then((user) => { + // Get perms row, patch if it exists + return userPermissionModel + .query() + .where("user_id", user.id) + .first() + .then((existing_auth) => { + if (existing_auth) { + // patch + return userPermissionModel + .query() + .where("user_id", user.id) + .patchAndFetchById(existing_auth.id, _.assign({ user_id: user.id }, data)); + } + // insert + return userPermissionModel.query().insertAndFetch(_.assign({ user_id: user.id }, data)); + }) + .then((permissions) => { + // Add to Audit Log + return internalAuditLog.add(access, { + action: "updated", + object_type: "user", + object_id: user.id, + meta: { + name: user.name, + permissions: permissions, + }, + }); + }); + }) + .then(() => { + return true; + }); + }, + + /** + * @param {Access} access + * @param {Object} data + * @param {Integer} data.id + */ + loginAs: (access, data) => { + return access + .can("users:loginas", data.id) + .then(() => { + return internalUser.get(access, data); + }) + .then((user) => { + return internalToken.getTokenFromUser(user); + }); + }, +}; + +export default internalUser; diff --git a/backend/internal/wireguard.js b/backend/internal/wireguard.js new file mode 100644 index 0000000..f7b8fc0 --- /dev/null +++ b/backend/internal/wireguard.js @@ -0,0 +1,366 @@ +import fs from "fs"; +import { global as logger } from "../logger.js"; +import * as wgHelpers from "../lib/wg-helpers.js"; + +const WG_INTERFACE_NAME = process.env.WG_INTERFACE_NAME || "wg0"; +const WG_DEFAULT_PORT = Number.parseInt(process.env.WG_PORT || "51820", 10); +const WG_DEFAULT_MTU = Number.parseInt(process.env.WG_MTU || "1420", 10); +const WG_DEFAULT_ADDRESS = process.env.WG_DEFAULT_ADDRESS || "10.8.0.0/24"; +const WG_DEFAULT_DNS = process.env.WG_DNS || "1.1.1.1, 8.8.8.8"; +const WG_HOST = process.env.WG_HOST || ""; +const WG_DEFAULT_ALLOWED_IPS = process.env.WG_ALLOWED_IPS || "0.0.0.0/0, ::/0"; +const WG_DEFAULT_PERSISTENT_KEEPALIVE = Number.parseInt(process.env.WG_PERSISTENT_KEEPALIVE || "25", 10); +const WG_CONFIG_DIR = "/etc/wireguard"; + +let cronTimer = null; + +const internalWireguard = { + + /** + * Get or create the WireGuard interface in DB + */ + async getOrCreateInterface(knex) { + let iface = await knex("wg_interface").first(); + if (!iface) { + // Generate keys + const privateKey = await wgHelpers.generatePrivateKey(); + const publicKey = await wgHelpers.getPublicKey(privateKey); + + const [id] = await knex("wg_interface").insert({ + name: WG_INTERFACE_NAME, + private_key: privateKey, + public_key: publicKey, + ipv4_cidr: WG_DEFAULT_ADDRESS, + listen_port: WG_DEFAULT_PORT, + mtu: WG_DEFAULT_MTU, + dns: WG_DEFAULT_DNS, + host: WG_HOST, + post_up: `iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE`, + post_down: `iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE`, + created_on: knex.fn.now(), + modified_on: knex.fn.now(), + }); + + iface = await knex("wg_interface").where("id", id).first(); + logger.info("WireGuard interface created with new keypair"); + } + return iface; + }, + + /** + * Save WireGuard config to /etc/wireguard/wg0.conf and sync + */ + async saveConfig(knex) { + const iface = await this.getOrCreateInterface(knex); + const clients = await knex("wg_client").where("enabled", true); + + // Generate server interface section + const parsed = wgHelpers.parseCIDR(iface.ipv4_cidr); + const serverAddress = `${parsed.firstHost}/${parsed.prefix}`; + + let configContent = wgHelpers.generateServerInterface({ + privateKey: iface.private_key, + address: serverAddress, + listenPort: iface.listen_port, + mtu: iface.mtu, + dns: null, // DNS is for clients, not server + postUp: iface.post_up, + postDown: iface.post_down, + }); + + // Generate peer sections for each enabled client + for (const client of clients) { + configContent += "\n\n" + wgHelpers.generateServerPeer({ + publicKey: client.public_key, + preSharedKey: client.pre_shared_key, + allowedIps: `${client.ipv4_address}/32`, + }); + } + + configContent += "\n"; + + // Write config file + const configPath = `${WG_CONFIG_DIR}/${iface.name}.conf`; + fs.writeFileSync(configPath, configContent, { mode: 0o600 }); + logger.info(`WireGuard config saved to ${configPath}`); + + // Sync config + try { + await wgHelpers.wgSync(iface.name); + logger.info("WireGuard config synced"); + } catch (err) { + logger.warn("WireGuard sync failed, may need full restart:", err.message); + } + }, + + /** + * Start WireGuard interface + */ + async startup(knex) { + try { + const iface = await this.getOrCreateInterface(knex); + + // Ensure config dir exists + if (!fs.existsSync(WG_CONFIG_DIR)) { + fs.mkdirSync(WG_CONFIG_DIR, { recursive: true }); + } + + // Save config first + await this.saveConfig(knex); + + // Bring down if already up, then up + try { + await wgHelpers.wgDown(iface.name); + } catch (_) { + // Ignore if not up + } + + await wgHelpers.wgUp(iface.name); + logger.info(`WireGuard interface ${iface.name} started on port ${iface.listen_port}`); + + // Start cron job for expiration + this.startCronJob(knex); + } catch (err) { + logger.error("WireGuard startup failed:", err.message); + logger.warn("WireGuard features will be unavailable. Ensure the host supports WireGuard kernel module."); + } + }, + + /** + * Shutdown WireGuard interface + */ + async shutdown(knex) { + if (cronTimer) { + clearInterval(cronTimer); + cronTimer = null; + } + try { + const iface = await knex("wg_interface").first(); + if (iface) { + await wgHelpers.wgDown(iface.name); + logger.info(`WireGuard interface ${iface.name} stopped`); + } + } catch (err) { + logger.warn("WireGuard shutdown warning:", err.message); + } + }, + + /** + * Get all clients with live status + */ + async getClients(knex) { + const iface = await this.getOrCreateInterface(knex); + const dbClients = await knex("wg_client").orderBy("created_on", "desc"); + + const clients = dbClients.map((c) => ({ + id: c.id, + name: c.name, + enabled: c.enabled === 1 || c.enabled === true, + ipv4_address: c.ipv4_address, + public_key: c.public_key, + allowed_ips: c.allowed_ips, + persistent_keepalive: c.persistent_keepalive, + created_on: c.created_on, + updated_on: c.modified_on, + expires_at: c.expires_at, + // Live status (populated below) + latest_handshake_at: null, + endpoint: null, + transfer_rx: 0, + transfer_tx: 0, + })); + + // Get live WireGuard status + try { + const dump = await wgHelpers.wgDump(iface.name); + for (const peer of dump) { + const client = clients.find((c) => c.public_key === peer.publicKey); + if (client) { + client.latest_handshake_at = peer.latestHandshakeAt; + client.endpoint = peer.endpoint; + client.transfer_rx = peer.transferRx; + client.transfer_tx = peer.transferTx; + } + } + } catch (_) { + // WireGuard may not be running + } + + return clients; + }, + + /** + * Create a new WireGuard client + */ + async createClient(knex, data) { + const iface = await this.getOrCreateInterface(knex); + + // Generate keys + const privateKey = await wgHelpers.generatePrivateKey(); + const publicKey = await wgHelpers.getPublicKey(privateKey); + const preSharedKey = await wgHelpers.generatePreSharedKey(); + + // Allocate IP + const existingClients = await knex("wg_client").select("ipv4_address"); + const allocatedIPs = existingClients.map((c) => c.ipv4_address); + const ipv4Address = wgHelpers.findNextAvailableIP(iface.ipv4_cidr, allocatedIPs); + + const clientData = { + name: data.name || "Unnamed Client", + enabled: true, + ipv4_address: ipv4Address, + private_key: privateKey, + public_key: publicKey, + pre_shared_key: preSharedKey, + allowed_ips: data.allowed_ips || WG_DEFAULT_ALLOWED_IPS, + persistent_keepalive: data.persistent_keepalive || WG_DEFAULT_PERSISTENT_KEEPALIVE, + expires_at: data.expires_at || null, + created_on: knex.fn.now(), + modified_on: knex.fn.now(), + }; + + const [id] = await knex("wg_client").insert(clientData); + + // Sync WireGuard config + await this.saveConfig(knex); + + return knex("wg_client").where("id", id).first(); + }, + + /** + * Delete a WireGuard client + */ + async deleteClient(knex, clientId) { + const client = await knex("wg_client").where("id", clientId).first(); + if (!client) { + throw new Error("Client not found"); + } + + await knex("wg_client").where("id", clientId).del(); + await this.saveConfig(knex); + + return { success: true }; + }, + + /** + * Toggle a WireGuard client enabled/disabled + */ + async toggleClient(knex, clientId, enabled) { + const client = await knex("wg_client").where("id", clientId).first(); + if (!client) { + throw new Error("Client not found"); + } + + await knex("wg_client").where("id", clientId).update({ + enabled: enabled, + modified_on: knex.fn.now(), + }); + + await this.saveConfig(knex); + + return knex("wg_client").where("id", clientId).first(); + }, + + /** + * Update a WireGuard client + */ + async updateClient(knex, clientId, data) { + const client = await knex("wg_client").where("id", clientId).first(); + if (!client) { + throw new Error("Client not found"); + } + + const updateData = {}; + if (data.name !== undefined) updateData.name = data.name; + if (data.allowed_ips !== undefined) updateData.allowed_ips = data.allowed_ips; + if (data.persistent_keepalive !== undefined) updateData.persistent_keepalive = data.persistent_keepalive; + if (data.expires_at !== undefined) updateData.expires_at = data.expires_at; + updateData.modified_on = knex.fn.now(); + + await knex("wg_client").where("id", clientId).update(updateData); + await this.saveConfig(knex); + + return knex("wg_client").where("id", clientId).first(); + }, + + /** + * Get client configuration file content + */ + async getClientConfiguration(knex, clientId) { + const iface = await this.getOrCreateInterface(knex); + const client = await knex("wg_client").where("id", clientId).first(); + if (!client) { + throw new Error("Client not found"); + } + + const endpoint = `${iface.host || "YOUR_SERVER_IP"}:${iface.listen_port}`; + + return wgHelpers.generateClientConfig({ + clientPrivateKey: client.private_key, + clientAddress: `${client.ipv4_address}/32`, + dns: iface.dns, + mtu: iface.mtu, + serverPublicKey: iface.public_key, + preSharedKey: client.pre_shared_key, + allowedIps: client.allowed_ips, + persistentKeepalive: client.persistent_keepalive, + endpoint: endpoint, + }); + }, + + /** + * Get QR code SVG for client config + */ + async getClientQRCode(knex, clientId) { + const config = await this.getClientConfiguration(knex, clientId); + return wgHelpers.generateQRCodeSVG(config); + }, + + /** + * Get the WireGuard interface info + */ + async getInterfaceInfo(knex) { + const iface = await this.getOrCreateInterface(knex); + return { + id: iface.id, + name: iface.name, + public_key: iface.public_key, + ipv4_cidr: iface.ipv4_cidr, + listen_port: iface.listen_port, + mtu: iface.mtu, + dns: iface.dns, + host: iface.host, + }; + }, + + /** + * Cron job to check client expirations + */ + startCronJob(knex) { + cronTimer = setInterval(async () => { + try { + const clients = await knex("wg_client").where("enabled", true).whereNotNull("expires_at"); + let needsSave = false; + + for (const client of clients) { + if (new Date() > new Date(client.expires_at)) { + logger.info(`WireGuard client "${client.name}" (${client.id}) has expired, disabling.`); + await knex("wg_client").where("id", client.id).update({ + enabled: false, + modified_on: knex.fn.now(), + }); + needsSave = true; + } + } + + if (needsSave) { + await this.saveConfig(knex); + } + } catch (err) { + logger.error("WireGuard cron job error:", err.message); + } + }, 60 * 1000); // every 60 seconds + }, +}; + +export default internalWireguard; diff --git a/backend/knexfile.js b/backend/knexfile.js new file mode 100644 index 0000000..607552f --- /dev/null +++ b/backend/knexfile.js @@ -0,0 +1,19 @@ +module.exports = { + development: { + client: 'mysql2', + migrations: { + tableName: 'migrations', + stub: 'lib/migrate_template.js', + directory: 'migrations' + } + }, + + production: { + client: 'mysql2', + migrations: { + tableName: 'migrations', + stub: 'lib/migrate_template.js', + directory: 'migrations' + } + } +}; diff --git a/backend/lib/access.js b/backend/lib/access.js new file mode 100644 index 0000000..a4dec5c --- /dev/null +++ b/backend/lib/access.js @@ -0,0 +1,278 @@ +/** + * Some Notes: This is a friggin complicated piece of code. + * + * "scope" in this file means "where did this token come from and what is using it", so 99% of the time + * the "scope" is going to be "user" because it would be a user token. This is not to be confused with + * the "role" which could be "user" or "admin". The scope in fact, could be "worker" or anything else. + */ + +import fs from "node:fs"; +import { dirname } from "node:path"; +import { fileURLToPath } from "node:url"; +import Ajv from "ajv/dist/2020.js"; +import _ from "lodash"; +import { access as logger } from "../logger.js"; +import proxyHostModel from "../models/proxy_host.js"; +import TokenModel from "../models/token.js"; +import userModel from "../models/user.js"; +import permsSchema from "./access/permissions.json" with { type: "json" }; +import roleSchema from "./access/roles.json" with { type: "json" }; +import errs from "./error.js"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +export default function (tokenString) { + const Token = TokenModel(); + let tokenData = null; + let initialised = false; + const objectCache = {}; + let allowInternalAccess = false; + let userRoles = []; + let permissions = {}; + + /** + * Loads the Token object from the token string + * + * @returns {Promise} + */ + this.init = async () => { + if (initialised) { + return; + } + + if (!tokenString) { + throw new errs.PermissionError("Permission Denied"); + } + + tokenData = await Token.load(tokenString); + + // At this point we need to load the user from the DB and make sure they: + // - exist (and not soft deleted) + // - still have the appropriate scopes for this token + // This is only required when the User ID is supplied or if the token scope has `user` + if ( + tokenData.attrs.id || + (typeof tokenData.scope !== "undefined" && _.indexOf(tokenData.scope, "user") !== -1) + ) { + // Has token user id or token user scope + const user = await userModel + .query() + .where("id", tokenData.attrs.id) + .andWhere("is_deleted", 0) + .andWhere("is_disabled", 0) + .allowGraph("[permissions]") + .withGraphFetched("[permissions]") + .first(); + + if (user) { + // make sure user has all scopes of the token + // The `user` role is not added against the user row, so we have to just add it here to get past this check. + user.roles.push("user"); + + let ok = true; + _.forEach(tokenData.scope, (scope_item) => { + if (_.indexOf(user.roles, scope_item) === -1) { + ok = false; + } + }); + + if (!ok) { + throw new errs.AuthError("Invalid token scope for User"); + } + initialised = true; + userRoles = user.roles; + permissions = user.permissions; + } else { + throw new errs.AuthError("User cannot be loaded for Token"); + } + } + initialised = true; + }; + + /** + * Fetches the object ids from the database, only once per object type, for this token. + * This only applies to USER token scopes, as all other tokens are not really bound + * by object scopes + * + * @param {String} objectType + * @returns {Promise} + */ + this.loadObjects = async (objectType) => { + let objects = null; + + if (Token.hasScope("user")) { + if (typeof tokenData.attrs.id === "undefined" || !tokenData.attrs.id) { + throw new errs.AuthError("User Token supplied without a User ID"); + } + + const tokenUserId = tokenData.attrs.id ? tokenData.attrs.id : 0; + + if (typeof objectCache[objectType] !== "undefined") { + objects = objectCache[objectType]; + } else { + switch (objectType) { + // USERS - should only return yourself + case "users": + objects = tokenUserId ? [tokenUserId] : []; + break; + + // Proxy Hosts + case "proxy_hosts": { + const query = proxyHostModel + .query() + .select("id") + .andWhere("is_deleted", 0); + + if (permissions.visibility === "user") { + query.andWhere("owner_user_id", tokenUserId); + } + + const rows = await query; + objects = []; + _.forEach(rows, (ruleRow) => { + objects.push(ruleRow.id); + }); + + // enum should not have less than 1 item + if (!objects.length) { + objects.push(0); + } + break; + } + } + objectCache[objectType] = objects; + } + } + return objects; + }; + + /** + * Creates a schema object on the fly with the IDs and other values required to be checked against the permissionSchema + * + * @param {String} permissionLabel + * @returns {Object} + */ + this.getObjectSchema = async (permissionLabel) => { + const baseObjectType = permissionLabel.split(":").shift(); + + const schema = { + $id: "objects", + description: "Actor Properties", + type: "object", + additionalProperties: false, + properties: { + user_id: { + anyOf: [ + { + type: "number", + enum: [Token.get("attrs").id], + }, + ], + }, + scope: { + type: "string", + pattern: `^${Token.get("scope")}$`, + }, + }, + }; + + const result = await this.loadObjects(baseObjectType); + if (typeof result === "object" && result !== null) { + schema.properties[baseObjectType] = { + type: "number", + enum: result, + minimum: 1, + }; + } else { + schema.properties[baseObjectType] = { + type: "number", + minimum: 1, + }; + } + + return schema; + }; + + // here: + + return { + token: Token, + + /** + * + * @param {Boolean} [allowInternal] + * @returns {Promise} + */ + load: async (allowInternal) => { + if (tokenString) { + return await Token.load(tokenString); + } + allowInternalAccess = allowInternal; + return allowInternal || null; + }, + + reloadObjects: this.loadObjects, + + /** + * + * @param {String} permission + * @param {*} [data] + * @returns {Promise} + */ + can: async (permission, data) => { + if (allowInternalAccess === true) { + return true; + } + + try { + await this.init(); + const objectSchema = await this.getObjectSchema(permission); + + const dataSchema = { + [permission]: { + data: data, + scope: Token.get("scope"), + roles: userRoles, + permission_visibility: permissions.visibility, + permission_proxy_hosts: permissions.proxy_hosts, + permission_redirection_hosts: permissions.redirection_hosts, + permission_dead_hosts: permissions.dead_hosts, + permission_streams: permissions.streams, + permission_access_lists: permissions.access_lists, + permission_certificates: permissions.certificates, + }, + }; + + const permissionSchema = { + $async: true, + $id: "permissions", + type: "object", + additionalProperties: false, + properties: {}, + }; + + const rawData = fs.readFileSync(`${__dirname}/access/${permission.replace(/:/gim, "-")}.json`, { + encoding: "utf8", + }); + permissionSchema.properties[permission] = JSON.parse(rawData); + + const ajv = new Ajv({ + verbose: true, + allErrors: true, + breakOnError: true, + coerceTypes: true, + schemas: [roleSchema, permsSchema, objectSchema, permissionSchema], + }); + + const valid = await ajv.validate("permissions", dataSchema); + return valid && dataSchema[permission]; + } catch (err) { + err.permission = permission; + err.permission_data = data; + logger.error(permission, data, err.message); + throw errs.PermissionError("Permission Denied", err); + } + }, + }; +} diff --git a/backend/lib/access/access_lists-create.json b/backend/lib/access/access_lists-create.json new file mode 100644 index 0000000..5a16a86 --- /dev/null +++ b/backend/lib/access/access_lists-create.json @@ -0,0 +1,23 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + }, + { + "type": "object", + "required": ["permission_access_lists", "roles"], + "properties": { + "permission_access_lists": { + "$ref": "perms#/definitions/manage" + }, + "roles": { + "type": "array", + "items": { + "type": "string", + "enum": ["user"] + } + } + } + } + ] +} diff --git a/backend/lib/access/access_lists-delete.json b/backend/lib/access/access_lists-delete.json new file mode 100644 index 0000000..5a16a86 --- /dev/null +++ b/backend/lib/access/access_lists-delete.json @@ -0,0 +1,23 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + }, + { + "type": "object", + "required": ["permission_access_lists", "roles"], + "properties": { + "permission_access_lists": { + "$ref": "perms#/definitions/manage" + }, + "roles": { + "type": "array", + "items": { + "type": "string", + "enum": ["user"] + } + } + } + } + ] +} diff --git a/backend/lib/access/access_lists-get.json b/backend/lib/access/access_lists-get.json new file mode 100644 index 0000000..8f6dd8c --- /dev/null +++ b/backend/lib/access/access_lists-get.json @@ -0,0 +1,23 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + }, + { + "type": "object", + "required": ["permission_access_lists", "roles"], + "properties": { + "permission_access_lists": { + "$ref": "perms#/definitions/view" + }, + "roles": { + "type": "array", + "items": { + "type": "string", + "enum": ["user"] + } + } + } + } + ] +} diff --git a/backend/lib/access/access_lists-list.json b/backend/lib/access/access_lists-list.json new file mode 100644 index 0000000..8f6dd8c --- /dev/null +++ b/backend/lib/access/access_lists-list.json @@ -0,0 +1,23 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + }, + { + "type": "object", + "required": ["permission_access_lists", "roles"], + "properties": { + "permission_access_lists": { + "$ref": "perms#/definitions/view" + }, + "roles": { + "type": "array", + "items": { + "type": "string", + "enum": ["user"] + } + } + } + } + ] +} diff --git a/backend/lib/access/access_lists-update.json b/backend/lib/access/access_lists-update.json new file mode 100644 index 0000000..5a16a86 --- /dev/null +++ b/backend/lib/access/access_lists-update.json @@ -0,0 +1,23 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + }, + { + "type": "object", + "required": ["permission_access_lists", "roles"], + "properties": { + "permission_access_lists": { + "$ref": "perms#/definitions/manage" + }, + "roles": { + "type": "array", + "items": { + "type": "string", + "enum": ["user"] + } + } + } + } + ] +} diff --git a/backend/lib/access/auditlog-list.json b/backend/lib/access/auditlog-list.json new file mode 100644 index 0000000..aeadc94 --- /dev/null +++ b/backend/lib/access/auditlog-list.json @@ -0,0 +1,7 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + } + ] +} diff --git a/backend/lib/access/certificates-create.json b/backend/lib/access/certificates-create.json new file mode 100644 index 0000000..bcdf667 --- /dev/null +++ b/backend/lib/access/certificates-create.json @@ -0,0 +1,23 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + }, + { + "type": "object", + "required": ["permission_certificates", "roles"], + "properties": { + "permission_certificates": { + "$ref": "perms#/definitions/manage" + }, + "roles": { + "type": "array", + "items": { + "type": "string", + "enum": ["user"] + } + } + } + } + ] +} diff --git a/backend/lib/access/certificates-delete.json b/backend/lib/access/certificates-delete.json new file mode 100644 index 0000000..bcdf667 --- /dev/null +++ b/backend/lib/access/certificates-delete.json @@ -0,0 +1,23 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + }, + { + "type": "object", + "required": ["permission_certificates", "roles"], + "properties": { + "permission_certificates": { + "$ref": "perms#/definitions/manage" + }, + "roles": { + "type": "array", + "items": { + "type": "string", + "enum": ["user"] + } + } + } + } + ] +} diff --git a/backend/lib/access/certificates-get.json b/backend/lib/access/certificates-get.json new file mode 100644 index 0000000..9ccfa4f --- /dev/null +++ b/backend/lib/access/certificates-get.json @@ -0,0 +1,23 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + }, + { + "type": "object", + "required": ["permission_certificates", "roles"], + "properties": { + "permission_certificates": { + "$ref": "perms#/definitions/view" + }, + "roles": { + "type": "array", + "items": { + "type": "string", + "enum": ["user"] + } + } + } + } + ] +} diff --git a/backend/lib/access/certificates-list.json b/backend/lib/access/certificates-list.json new file mode 100644 index 0000000..9ccfa4f --- /dev/null +++ b/backend/lib/access/certificates-list.json @@ -0,0 +1,23 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + }, + { + "type": "object", + "required": ["permission_certificates", "roles"], + "properties": { + "permission_certificates": { + "$ref": "perms#/definitions/view" + }, + "roles": { + "type": "array", + "items": { + "type": "string", + "enum": ["user"] + } + } + } + } + ] +} diff --git a/backend/lib/access/certificates-update.json b/backend/lib/access/certificates-update.json new file mode 100644 index 0000000..bcdf667 --- /dev/null +++ b/backend/lib/access/certificates-update.json @@ -0,0 +1,23 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + }, + { + "type": "object", + "required": ["permission_certificates", "roles"], + "properties": { + "permission_certificates": { + "$ref": "perms#/definitions/manage" + }, + "roles": { + "type": "array", + "items": { + "type": "string", + "enum": ["user"] + } + } + } + } + ] +} diff --git a/backend/lib/access/dead_hosts-create.json b/backend/lib/access/dead_hosts-create.json new file mode 100644 index 0000000..a276c68 --- /dev/null +++ b/backend/lib/access/dead_hosts-create.json @@ -0,0 +1,23 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + }, + { + "type": "object", + "required": ["permission_dead_hosts", "roles"], + "properties": { + "permission_dead_hosts": { + "$ref": "perms#/definitions/manage" + }, + "roles": { + "type": "array", + "items": { + "type": "string", + "enum": ["user"] + } + } + } + } + ] +} diff --git a/backend/lib/access/dead_hosts-delete.json b/backend/lib/access/dead_hosts-delete.json new file mode 100644 index 0000000..a276c68 --- /dev/null +++ b/backend/lib/access/dead_hosts-delete.json @@ -0,0 +1,23 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + }, + { + "type": "object", + "required": ["permission_dead_hosts", "roles"], + "properties": { + "permission_dead_hosts": { + "$ref": "perms#/definitions/manage" + }, + "roles": { + "type": "array", + "items": { + "type": "string", + "enum": ["user"] + } + } + } + } + ] +} diff --git a/backend/lib/access/dead_hosts-get.json b/backend/lib/access/dead_hosts-get.json new file mode 100644 index 0000000..87aa12e --- /dev/null +++ b/backend/lib/access/dead_hosts-get.json @@ -0,0 +1,23 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + }, + { + "type": "object", + "required": ["permission_dead_hosts", "roles"], + "properties": { + "permission_dead_hosts": { + "$ref": "perms#/definitions/view" + }, + "roles": { + "type": "array", + "items": { + "type": "string", + "enum": ["user"] + } + } + } + } + ] +} diff --git a/backend/lib/access/dead_hosts-list.json b/backend/lib/access/dead_hosts-list.json new file mode 100644 index 0000000..87aa12e --- /dev/null +++ b/backend/lib/access/dead_hosts-list.json @@ -0,0 +1,23 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + }, + { + "type": "object", + "required": ["permission_dead_hosts", "roles"], + "properties": { + "permission_dead_hosts": { + "$ref": "perms#/definitions/view" + }, + "roles": { + "type": "array", + "items": { + "type": "string", + "enum": ["user"] + } + } + } + } + ] +} diff --git a/backend/lib/access/dead_hosts-update.json b/backend/lib/access/dead_hosts-update.json new file mode 100644 index 0000000..a276c68 --- /dev/null +++ b/backend/lib/access/dead_hosts-update.json @@ -0,0 +1,23 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + }, + { + "type": "object", + "required": ["permission_dead_hosts", "roles"], + "properties": { + "permission_dead_hosts": { + "$ref": "perms#/definitions/manage" + }, + "roles": { + "type": "array", + "items": { + "type": "string", + "enum": ["user"] + } + } + } + } + ] +} diff --git a/backend/lib/access/permissions.json b/backend/lib/access/permissions.json new file mode 100644 index 0000000..e7a82ec --- /dev/null +++ b/backend/lib/access/permissions.json @@ -0,0 +1,13 @@ +{ + "$id": "perms", + "definitions": { + "view": { + "type": "string", + "pattern": "^(view|manage)$" + }, + "manage": { + "type": "string", + "pattern": "^(manage)$" + } + } +} diff --git a/backend/lib/access/proxy_hosts-create.json b/backend/lib/access/proxy_hosts-create.json new file mode 100644 index 0000000..166527a --- /dev/null +++ b/backend/lib/access/proxy_hosts-create.json @@ -0,0 +1,23 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + }, + { + "type": "object", + "required": ["permission_proxy_hosts", "roles"], + "properties": { + "permission_proxy_hosts": { + "$ref": "perms#/definitions/manage" + }, + "roles": { + "type": "array", + "items": { + "type": "string", + "enum": ["user"] + } + } + } + } + ] +} diff --git a/backend/lib/access/proxy_hosts-delete.json b/backend/lib/access/proxy_hosts-delete.json new file mode 100644 index 0000000..166527a --- /dev/null +++ b/backend/lib/access/proxy_hosts-delete.json @@ -0,0 +1,23 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + }, + { + "type": "object", + "required": ["permission_proxy_hosts", "roles"], + "properties": { + "permission_proxy_hosts": { + "$ref": "perms#/definitions/manage" + }, + "roles": { + "type": "array", + "items": { + "type": "string", + "enum": ["user"] + } + } + } + } + ] +} diff --git a/backend/lib/access/proxy_hosts-get.json b/backend/lib/access/proxy_hosts-get.json new file mode 100644 index 0000000..d88e4cf --- /dev/null +++ b/backend/lib/access/proxy_hosts-get.json @@ -0,0 +1,23 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + }, + { + "type": "object", + "required": ["permission_proxy_hosts", "roles"], + "properties": { + "permission_proxy_hosts": { + "$ref": "perms#/definitions/view" + }, + "roles": { + "type": "array", + "items": { + "type": "string", + "enum": ["user"] + } + } + } + } + ] +} diff --git a/backend/lib/access/proxy_hosts-list.json b/backend/lib/access/proxy_hosts-list.json new file mode 100644 index 0000000..d88e4cf --- /dev/null +++ b/backend/lib/access/proxy_hosts-list.json @@ -0,0 +1,23 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + }, + { + "type": "object", + "required": ["permission_proxy_hosts", "roles"], + "properties": { + "permission_proxy_hosts": { + "$ref": "perms#/definitions/view" + }, + "roles": { + "type": "array", + "items": { + "type": "string", + "enum": ["user"] + } + } + } + } + ] +} diff --git a/backend/lib/access/proxy_hosts-update.json b/backend/lib/access/proxy_hosts-update.json new file mode 100644 index 0000000..166527a --- /dev/null +++ b/backend/lib/access/proxy_hosts-update.json @@ -0,0 +1,23 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + }, + { + "type": "object", + "required": ["permission_proxy_hosts", "roles"], + "properties": { + "permission_proxy_hosts": { + "$ref": "perms#/definitions/manage" + }, + "roles": { + "type": "array", + "items": { + "type": "string", + "enum": ["user"] + } + } + } + } + ] +} diff --git a/backend/lib/access/redirection_hosts-create.json b/backend/lib/access/redirection_hosts-create.json new file mode 100644 index 0000000..342babc --- /dev/null +++ b/backend/lib/access/redirection_hosts-create.json @@ -0,0 +1,23 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + }, + { + "type": "object", + "required": ["permission_redirection_hosts", "roles"], + "properties": { + "permission_redirection_hosts": { + "$ref": "perms#/definitions/manage" + }, + "roles": { + "type": "array", + "items": { + "type": "string", + "enum": ["user"] + } + } + } + } + ] +} diff --git a/backend/lib/access/redirection_hosts-delete.json b/backend/lib/access/redirection_hosts-delete.json new file mode 100644 index 0000000..342babc --- /dev/null +++ b/backend/lib/access/redirection_hosts-delete.json @@ -0,0 +1,23 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + }, + { + "type": "object", + "required": ["permission_redirection_hosts", "roles"], + "properties": { + "permission_redirection_hosts": { + "$ref": "perms#/definitions/manage" + }, + "roles": { + "type": "array", + "items": { + "type": "string", + "enum": ["user"] + } + } + } + } + ] +} diff --git a/backend/lib/access/redirection_hosts-get.json b/backend/lib/access/redirection_hosts-get.json new file mode 100644 index 0000000..ba22920 --- /dev/null +++ b/backend/lib/access/redirection_hosts-get.json @@ -0,0 +1,23 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + }, + { + "type": "object", + "required": ["permission_redirection_hosts", "roles"], + "properties": { + "permission_redirection_hosts": { + "$ref": "perms#/definitions/view" + }, + "roles": { + "type": "array", + "items": { + "type": "string", + "enum": ["user"] + } + } + } + } + ] +} diff --git a/backend/lib/access/redirection_hosts-list.json b/backend/lib/access/redirection_hosts-list.json new file mode 100644 index 0000000..ba22920 --- /dev/null +++ b/backend/lib/access/redirection_hosts-list.json @@ -0,0 +1,23 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + }, + { + "type": "object", + "required": ["permission_redirection_hosts", "roles"], + "properties": { + "permission_redirection_hosts": { + "$ref": "perms#/definitions/view" + }, + "roles": { + "type": "array", + "items": { + "type": "string", + "enum": ["user"] + } + } + } + } + ] +} diff --git a/backend/lib/access/redirection_hosts-update.json b/backend/lib/access/redirection_hosts-update.json new file mode 100644 index 0000000..342babc --- /dev/null +++ b/backend/lib/access/redirection_hosts-update.json @@ -0,0 +1,23 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + }, + { + "type": "object", + "required": ["permission_redirection_hosts", "roles"], + "properties": { + "permission_redirection_hosts": { + "$ref": "perms#/definitions/manage" + }, + "roles": { + "type": "array", + "items": { + "type": "string", + "enum": ["user"] + } + } + } + } + ] +} diff --git a/backend/lib/access/reports-hosts.json b/backend/lib/access/reports-hosts.json new file mode 100644 index 0000000..dbc9e0c --- /dev/null +++ b/backend/lib/access/reports-hosts.json @@ -0,0 +1,7 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/user" + } + ] +} diff --git a/backend/lib/access/roles.json b/backend/lib/access/roles.json new file mode 100644 index 0000000..c97313d --- /dev/null +++ b/backend/lib/access/roles.json @@ -0,0 +1,38 @@ +{ + "$id": "roles", + "definitions": { + "admin": { + "type": "object", + "required": ["scope", "roles"], + "properties": { + "scope": { + "type": "array", + "contains": { + "type": "string", + "pattern": "^user$" + } + }, + "roles": { + "type": "array", + "contains": { + "type": "string", + "pattern": "^admin$" + } + } + } + }, + "user": { + "type": "object", + "required": ["scope"], + "properties": { + "scope": { + "type": "array", + "contains": { + "type": "string", + "pattern": "^user$" + } + } + } + } + } +} diff --git a/backend/lib/access/settings-get.json b/backend/lib/access/settings-get.json new file mode 100644 index 0000000..aeadc94 --- /dev/null +++ b/backend/lib/access/settings-get.json @@ -0,0 +1,7 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + } + ] +} diff --git a/backend/lib/access/settings-list.json b/backend/lib/access/settings-list.json new file mode 100644 index 0000000..aeadc94 --- /dev/null +++ b/backend/lib/access/settings-list.json @@ -0,0 +1,7 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + } + ] +} diff --git a/backend/lib/access/settings-update.json b/backend/lib/access/settings-update.json new file mode 100644 index 0000000..aeadc94 --- /dev/null +++ b/backend/lib/access/settings-update.json @@ -0,0 +1,7 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + } + ] +} diff --git a/backend/lib/access/streams-create.json b/backend/lib/access/streams-create.json new file mode 100644 index 0000000..fbeb1cc --- /dev/null +++ b/backend/lib/access/streams-create.json @@ -0,0 +1,23 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + }, + { + "type": "object", + "required": ["permission_streams", "roles"], + "properties": { + "permission_streams": { + "$ref": "perms#/definitions/manage" + }, + "roles": { + "type": "array", + "items": { + "type": "string", + "enum": ["user"] + } + } + } + } + ] +} diff --git a/backend/lib/access/streams-delete.json b/backend/lib/access/streams-delete.json new file mode 100644 index 0000000..fbeb1cc --- /dev/null +++ b/backend/lib/access/streams-delete.json @@ -0,0 +1,23 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + }, + { + "type": "object", + "required": ["permission_streams", "roles"], + "properties": { + "permission_streams": { + "$ref": "perms#/definitions/manage" + }, + "roles": { + "type": "array", + "items": { + "type": "string", + "enum": ["user"] + } + } + } + } + ] +} diff --git a/backend/lib/access/streams-get.json b/backend/lib/access/streams-get.json new file mode 100644 index 0000000..7e99628 --- /dev/null +++ b/backend/lib/access/streams-get.json @@ -0,0 +1,23 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + }, + { + "type": "object", + "required": ["permission_streams", "roles"], + "properties": { + "permission_streams": { + "$ref": "perms#/definitions/view" + }, + "roles": { + "type": "array", + "items": { + "type": "string", + "enum": ["user"] + } + } + } + } + ] +} diff --git a/backend/lib/access/streams-list.json b/backend/lib/access/streams-list.json new file mode 100644 index 0000000..7e99628 --- /dev/null +++ b/backend/lib/access/streams-list.json @@ -0,0 +1,23 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + }, + { + "type": "object", + "required": ["permission_streams", "roles"], + "properties": { + "permission_streams": { + "$ref": "perms#/definitions/view" + }, + "roles": { + "type": "array", + "items": { + "type": "string", + "enum": ["user"] + } + } + } + } + ] +} diff --git a/backend/lib/access/streams-update.json b/backend/lib/access/streams-update.json new file mode 100644 index 0000000..fbeb1cc --- /dev/null +++ b/backend/lib/access/streams-update.json @@ -0,0 +1,23 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + }, + { + "type": "object", + "required": ["permission_streams", "roles"], + "properties": { + "permission_streams": { + "$ref": "perms#/definitions/manage" + }, + "roles": { + "type": "array", + "items": { + "type": "string", + "enum": ["user"] + } + } + } + } + ] +} diff --git a/backend/lib/access/users-create.json b/backend/lib/access/users-create.json new file mode 100644 index 0000000..aeadc94 --- /dev/null +++ b/backend/lib/access/users-create.json @@ -0,0 +1,7 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + } + ] +} diff --git a/backend/lib/access/users-delete.json b/backend/lib/access/users-delete.json new file mode 100644 index 0000000..aeadc94 --- /dev/null +++ b/backend/lib/access/users-delete.json @@ -0,0 +1,7 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + } + ] +} diff --git a/backend/lib/access/users-get.json b/backend/lib/access/users-get.json new file mode 100644 index 0000000..2a2f042 --- /dev/null +++ b/backend/lib/access/users-get.json @@ -0,0 +1,23 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + }, + { + "type": "object", + "required": ["data", "scope"], + "properties": { + "data": { + "$ref": "objects#/properties/users" + }, + "scope": { + "type": "array", + "contains": { + "type": "string", + "pattern": "^user$" + } + } + } + } + ] +} diff --git a/backend/lib/access/users-list.json b/backend/lib/access/users-list.json new file mode 100644 index 0000000..aeadc94 --- /dev/null +++ b/backend/lib/access/users-list.json @@ -0,0 +1,7 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + } + ] +} diff --git a/backend/lib/access/users-loginas.json b/backend/lib/access/users-loginas.json new file mode 100644 index 0000000..aeadc94 --- /dev/null +++ b/backend/lib/access/users-loginas.json @@ -0,0 +1,7 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + } + ] +} diff --git a/backend/lib/access/users-password.json b/backend/lib/access/users-password.json new file mode 100644 index 0000000..2a2f042 --- /dev/null +++ b/backend/lib/access/users-password.json @@ -0,0 +1,23 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + }, + { + "type": "object", + "required": ["data", "scope"], + "properties": { + "data": { + "$ref": "objects#/properties/users" + }, + "scope": { + "type": "array", + "contains": { + "type": "string", + "pattern": "^user$" + } + } + } + } + ] +} diff --git a/backend/lib/access/users-permissions.json b/backend/lib/access/users-permissions.json new file mode 100644 index 0000000..aeadc94 --- /dev/null +++ b/backend/lib/access/users-permissions.json @@ -0,0 +1,7 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + } + ] +} diff --git a/backend/lib/access/users-update.json b/backend/lib/access/users-update.json new file mode 100644 index 0000000..2a2f042 --- /dev/null +++ b/backend/lib/access/users-update.json @@ -0,0 +1,23 @@ +{ + "anyOf": [ + { + "$ref": "roles#/definitions/admin" + }, + { + "type": "object", + "required": ["data", "scope"], + "properties": { + "data": { + "$ref": "objects#/properties/users" + }, + "scope": { + "type": "array", + "contains": { + "type": "string", + "pattern": "^user$" + } + } + } + } + ] +} diff --git a/backend/lib/certbot.js b/backend/lib/certbot.js new file mode 100644 index 0000000..3a2dd07 --- /dev/null +++ b/backend/lib/certbot.js @@ -0,0 +1,86 @@ +import batchflow from "batchflow"; +import dnsPlugins from "../certbot/dns-plugins.json" with { type: "json" }; +import { certbot as logger } from "../logger.js"; +import errs from "./error.js"; +import utils from "./utils.js"; + +const CERTBOT_VERSION_REPLACEMENT = "$(certbot --version | grep -Eo '[0-9](\\.[0-9]+)+')"; + +/** + * Installs a cerbot plugin given the key for the object from + * ../certbot/dns-plugins.json + * + * @param {string} pluginKey + * @returns {Object} + */ +const installPlugin = async (pluginKey) => { + if (typeof dnsPlugins[pluginKey] === "undefined") { + // throw Error(`Certbot plugin ${pluginKey} not found`); + throw new errs.ItemNotFoundError(pluginKey); + } + + const plugin = dnsPlugins[pluginKey]; + logger.start(`Installing ${pluginKey}...`); + + plugin.version = plugin.version.replace(/{{certbot-version}}/g, CERTBOT_VERSION_REPLACEMENT); + plugin.dependencies = plugin.dependencies.replace(/{{certbot-version}}/g, CERTBOT_VERSION_REPLACEMENT); + + // SETUPTOOLS_USE_DISTUTILS is required for certbot plugins to install correctly + // in new versions of Python + let env = Object.assign({}, process.env, { SETUPTOOLS_USE_DISTUTILS: "stdlib" }); + if (typeof plugin.env === "object") { + env = Object.assign(env, plugin.env); + } + + const cmd = `. /opt/certbot/bin/activate && pip install --no-cache-dir ${plugin.dependencies} ${plugin.package_name}${plugin.version} && deactivate`; + return utils + .exec(cmd, { env }) + .then((result) => { + logger.complete(`Installed ${pluginKey}`); + return result; + }) + .catch((err) => { + throw err; + }); +}; + +/** + * @param {array} pluginKeys + */ +const installPlugins = async (pluginKeys) => { + let hasErrors = false; + + return new Promise((resolve, reject) => { + if (pluginKeys.length === 0) { + resolve(); + return; + } + + batchflow(pluginKeys) + .sequential() + .each((_i, pluginKey, next) => { + installPlugin(pluginKey) + .then(() => { + next(); + }) + .catch((err) => { + hasErrors = true; + next(err); + }); + }) + .error((err) => { + logger.error(err.message); + }) + .end(() => { + if (hasErrors) { + reject( + new errs.CommandError("Some plugins failed to install. Please check the logs above", 1), + ); + } else { + resolve(); + } + }); + }); +}; + +export { installPlugins, installPlugin }; diff --git a/backend/lib/config.js b/backend/lib/config.js new file mode 100644 index 0000000..544bbfe --- /dev/null +++ b/backend/lib/config.js @@ -0,0 +1,262 @@ +import fs from "node:fs"; +import NodeRSA from "node-rsa"; +import { global as logger } from "../logger.js"; + +const keysFile = '/data/keys.json'; +const mysqlEngine = 'mysql2'; +const postgresEngine = 'pg'; +const sqliteClientName = 'better-sqlite3'; + +// Not used for new setups anymore but may exist in legacy setups +const legacySqliteClientName = 'sqlite3'; + +let instance = null; + +// 1. Load from config file first (not recommended anymore) +// 2. Use config env variables next +const configure = () => { + const filename = `${process.env.NODE_CONFIG_DIR || "./config"}/${process.env.NODE_ENV || "default"}.json`; + if (fs.existsSync(filename)) { + let configData; + try { + // Load this json synchronously + const rawData = fs.readFileSync(filename); + configData = JSON.parse(rawData); + } catch (_) { + // do nothing + } + + if (configData?.database) { + logger.info(`Using configuration from file: ${filename}`); + + // Migrate those who have "mysql" engine to "mysql2" + if (configData.database.engine === "mysql") { + configData.database.engine = mysqlEngine; + } + + instance = configData; + instance.keys = getKeys(); + return; + } + } + + const toBool = (v) => /^(1|true|yes|on)$/i.test((v || '').trim()); + + const envMysqlHost = process.env.DB_MYSQL_HOST || null; + const envMysqlUser = process.env.DB_MYSQL_USER || null; + const envMysqlName = process.env.DB_MYSQL_NAME || null; + const envMysqlSSL = toBool(process.env.DB_MYSQL_SSL); + const envMysqlSSLRejectUnauthorized = process.env.DB_MYSQL_SSL_REJECT_UNAUTHORIZED === undefined ? true : toBool(process.env.DB_MYSQL_SSL_REJECT_UNAUTHORIZED); + const envMysqlSSLVerifyIdentity = process.env.DB_MYSQL_SSL_VERIFY_IDENTITY === undefined ? true : toBool(process.env.DB_MYSQL_SSL_VERIFY_IDENTITY); + if (envMysqlHost && envMysqlUser && envMysqlName) { + // we have enough mysql creds to go with mysql + logger.info("Using MySQL configuration"); + instance = { + database: { + engine: mysqlEngine, + host: envMysqlHost, + port: process.env.DB_MYSQL_PORT || 3306, + user: envMysqlUser, + password: process.env.DB_MYSQL_PASSWORD, + name: envMysqlName, + ssl: envMysqlSSL ? { rejectUnauthorized: envMysqlSSLRejectUnauthorized, verifyIdentity: envMysqlSSLVerifyIdentity } : false, + }, + keys: getKeys(), + }; + return; + } + + const envPostgresHost = process.env.DB_POSTGRES_HOST || null; + const envPostgresUser = process.env.DB_POSTGRES_USER || null; + const envPostgresName = process.env.DB_POSTGRES_NAME || null; + if (envPostgresHost && envPostgresUser && envPostgresName) { + // we have enough postgres creds to go with postgres + logger.info("Using Postgres configuration"); + instance = { + database: { + engine: postgresEngine, + host: envPostgresHost, + port: process.env.DB_POSTGRES_PORT || 5432, + user: envPostgresUser, + password: process.env.DB_POSTGRES_PASSWORD, + name: envPostgresName, + }, + keys: getKeys(), + }; + return; + } + + const envSqliteFile = process.env.DB_SQLITE_FILE || "/data/database.sqlite"; + + logger.info(`Using Sqlite: ${envSqliteFile}`); + instance = { + database: { + engine: "knex-native", + knex: { + client: sqliteClientName, + connection: { + filename: envSqliteFile, + }, + useNullAsDefault: true, + }, + }, + keys: getKeys(), + }; +}; + +const getKeys = () => { + // Get keys from file + if (isDebugMode()) { + logger.debug("Checking for keys file:", keysFile); + } + if (!fs.existsSync(keysFile)) { + generateKeys(); + } else if (process.env.DEBUG) { + logger.info("Keys file exists OK"); + } + try { + // Load this json keysFile synchronously and return the json object + const rawData = fs.readFileSync(keysFile); + return JSON.parse(rawData); + } catch (err) { + logger.error(`Could not read JWT key pair from config file: ${keysFile}`, err); + process.exit(1); + } +}; + +const generateKeys = () => { + logger.info("Creating a new JWT key pair..."); + // Now create the keys and save them in the config. + const key = new NodeRSA({ b: 2048 }); + key.generateKeyPair(); + + const keys = { + key: key.exportKey("private").toString(), + pub: key.exportKey("public").toString(), + }; + + // Write keys config + try { + fs.writeFileSync(keysFile, JSON.stringify(keys, null, 2)); + } catch (err) { + logger.error(`Could not write JWT key pair to config file: ${keysFile}: ${err.message}`); + process.exit(1); + } + logger.info(`Wrote JWT key pair to config file: ${keysFile}`); +}; + +/** + * + * @param {string} key ie: 'database' or 'database.engine' + * @returns {boolean} + */ +const configHas = (key) => { + instance === null && configure(); + const keys = key.split("."); + let level = instance; + let has = true; + keys.forEach((keyItem) => { + if (typeof level[keyItem] === "undefined") { + has = false; + } else { + level = level[keyItem]; + } + }); + + return has; +}; + +/** + * Gets a specific key from the top level + * + * @param {string} key + * @returns {*} + */ +const configGet = (key) => { + instance === null && configure(); + if (key && typeof instance[key] !== "undefined") { + return instance[key]; + } + return instance; +}; + +/** + * Is this a sqlite configuration? + * + * @returns {boolean} + */ +const isSqlite = () => { + instance === null && configure(); + return instance.database.knex && [sqliteClientName, legacySqliteClientName].includes(instance.database.knex.client); +}; + +/** + * Is this a mysql configuration? + * + * @returns {boolean} + */ +const isMysql = () => { + instance === null && configure(); + return instance.database.engine === mysqlEngine; +}; + +/** + * Is this a postgres configuration? + * + * @returns {boolean} + */ +const isPostgres = () => { + instance === null && configure(); + return instance.database.engine === postgresEngine; +}; + +/** + * Are we running in debug mdoe? + * + * @returns {boolean} + */ +const isDebugMode = () => !!process.env.DEBUG; + +/** + * Are we running in CI? + * + * @returns {boolean} + */ +const isCI = () => process.env.CI === 'true' && process.env.DEBUG === 'true'; + +/** + * Returns a public key + * + * @returns {string} + */ +const getPublicKey = () => { + instance === null && configure(); + return instance.keys.pub; +}; + +/** + * Returns a private key + * + * @returns {string} + */ +const getPrivateKey = () => { + instance === null && configure(); + return instance.keys.key; +}; + +/** + * @returns {boolean} + */ +const useLetsencryptStaging = () => !!process.env.LE_STAGING; + +/** + * @returns {string|null} + */ +const useLetsencryptServer = () => { + if (process.env.LE_SERVER) { + return process.env.LE_SERVER; + } + return null; +}; + +export { isCI, configHas, configGet, isSqlite, isMysql, isPostgres, isDebugMode, getPrivateKey, getPublicKey, useLetsencryptStaging, useLetsencryptServer }; diff --git a/backend/lib/error.js b/backend/lib/error.js new file mode 100644 index 0000000..d7dbf0c --- /dev/null +++ b/backend/lib/error.js @@ -0,0 +1,103 @@ +import _ from "lodash"; + +const errs = { + PermissionError: function (_, previous) { + Error.captureStackTrace(this, this.constructor); + this.name = this.constructor.name; + this.previous = previous; + this.message = "Permission Denied"; + this.public = true; + this.status = 403; + }, + + ItemNotFoundError: function (id, previous) { + Error.captureStackTrace(this, this.constructor); + this.name = this.constructor.name; + this.previous = previous; + this.message = "Not Found"; + if (id) { + this.message = `Not Found - ${id}`; + } + this.public = true; + this.status = 404; + }, + + AuthError: function (message, messageI18n, previous) { + Error.captureStackTrace(this, this.constructor); + this.name = this.constructor.name; + this.previous = previous; + this.message = message; + this.message_i18n = messageI18n; + this.public = true; + this.status = 400; + }, + + InternalError: function (message, previous) { + Error.captureStackTrace(this, this.constructor); + this.name = this.constructor.name; + this.previous = previous; + this.message = message; + this.status = 500; + this.public = false; + }, + + InternalValidationError: function (message, previous) { + Error.captureStackTrace(this, this.constructor); + this.name = this.constructor.name; + this.previous = previous; + this.message = message; + this.status = 400; + this.public = false; + }, + + ConfigurationError: function (message, previous) { + Error.captureStackTrace(this, this.constructor); + this.name = this.constructor.name; + this.previous = previous; + this.message = message; + this.status = 400; + this.public = true; + }, + + CacheError: function (message, previous) { + Error.captureStackTrace(this, this.constructor); + this.name = this.constructor.name; + this.message = message; + this.previous = previous; + this.status = 500; + this.public = false; + }, + + ValidationError: function (message, previous) { + Error.captureStackTrace(this, this.constructor); + this.name = this.constructor.name; + this.previous = previous; + this.message = message; + this.public = true; + this.status = 400; + }, + + AssertionFailedError: function (message, previous) { + Error.captureStackTrace(this, this.constructor); + this.name = this.constructor.name; + this.previous = previous; + this.message = message; + this.public = false; + this.status = 400; + }, + + CommandError: function (stdErr, code, previous) { + Error.captureStackTrace(this, this.constructor); + this.name = this.constructor.name; + this.previous = previous; + this.message = stdErr; + this.code = code; + this.public = false; + }, +}; + +_.forEach(errs, (err) => { + err.prototype = Object.create(Error.prototype); +}); + +export default errs; diff --git a/backend/lib/express/cors.js b/backend/lib/express/cors.js new file mode 100644 index 0000000..6fbf3ba --- /dev/null +++ b/backend/lib/express/cors.js @@ -0,0 +1,17 @@ +export default (req, res, next) => { + if (req.headers.origin) { + res.set({ + "Access-Control-Allow-Origin": req.headers.origin, + "Access-Control-Allow-Credentials": true, + "Access-Control-Allow-Methods": "OPTIONS, GET, POST", + "Access-Control-Allow-Headers": + "Content-Type, Cache-Control, Pragma, Expires, Authorization, X-Dataset-Total, X-Dataset-Offset, X-Dataset-Limit", + "Access-Control-Max-Age": 5 * 60, + "Access-Control-Expose-Headers": "X-Dataset-Total, X-Dataset-Offset, X-Dataset-Limit", + }); + next(); + } else { + // No origin + next(); + } +}; diff --git a/backend/lib/express/jwt-decode.js b/backend/lib/express/jwt-decode.js new file mode 100644 index 0000000..90fe241 --- /dev/null +++ b/backend/lib/express/jwt-decode.js @@ -0,0 +1,15 @@ +import Access from "../access.js"; + +export default () => { + return async (_, res, next) => { + try { + res.locals.access = null; + const access = new Access(res.locals.token || null); + await access.load(); + res.locals.access = access; + next(); + } catch (err) { + next(err); + } + }; +}; diff --git a/backend/lib/express/jwt.js b/backend/lib/express/jwt.js new file mode 100644 index 0000000..ce907b6 --- /dev/null +++ b/backend/lib/express/jwt.js @@ -0,0 +1,13 @@ +export default function () { + return (req, res, next) => { + if (req.headers.authorization) { + const parts = req.headers.authorization.split(" "); + + if (parts && parts[0] === "Bearer" && parts[1]) { + res.locals.token = parts[1]; + } + } + + next(); + }; +} diff --git a/backend/lib/express/pagination.js b/backend/lib/express/pagination.js new file mode 100644 index 0000000..188df27 --- /dev/null +++ b/backend/lib/express/pagination.js @@ -0,0 +1,55 @@ +import _ from "lodash"; + +export default (default_sort, default_offset, default_limit, max_limit) => { + /** + * This will setup the req query params with filtered data and defaults + * + * sort will be an array of fields and their direction + * offset will be an int, defaulting to zero if no other default supplied + * limit will be an int, defaulting to 50 if no other default supplied, and limited to the max if that was supplied + * + */ + + return (req, _res, next) => { + req.query.offset = + typeof req.query.limit === "undefined" ? default_offset || 0 : Number.parseInt(req.query.offset, 10); + req.query.limit = + typeof req.query.limit === "undefined" ? default_limit || 50 : Number.parseInt(req.query.limit, 10); + + if (max_limit && req.query.limit > max_limit) { + req.query.limit = max_limit; + } + + // Sorting + let sort = typeof req.query.sort === "undefined" ? default_sort : req.query.sort; + const myRegexp = /.*\.(asc|desc)$/gi; + const sort_array = []; + + sort = sort.split(","); + _.map(sort, (val) => { + const matches = myRegexp.exec(val); + + if (matches !== null) { + const dir = matches[1]; + sort_array.push({ + field: val.substr(0, val.length - (dir.length + 1)), + dir: dir.toLowerCase(), + }); + } else { + sort_array.push({ + field: val, + dir: "asc", + }); + } + }); + + // Sort will now be in this format: + // [ + // { field: 'field1', dir: 'asc' }, + // { field: 'field2', dir: 'desc' } + // ] + + req.query.sort = sort_array; + next(); + }; +}; diff --git a/backend/lib/express/user-id-from-me.js b/backend/lib/express/user-id-from-me.js new file mode 100644 index 0000000..9c29ba2 --- /dev/null +++ b/backend/lib/express/user-id-from-me.js @@ -0,0 +1,8 @@ +export default (req, res, next) => { + if (req.params.user_id === 'me' && res.locals.access) { + req.params.user_id = res.locals.access.token.get('attrs').id; + } else { + req.params.user_id = Number.parseInt(req.params.user_id, 10); + } + next(); +}; diff --git a/backend/lib/helpers.js b/backend/lib/helpers.js new file mode 100644 index 0000000..853a7a5 --- /dev/null +++ b/backend/lib/helpers.js @@ -0,0 +1,58 @@ +import moment from "moment"; +import { ref } from "objection"; +import { isPostgres } from "./config.js"; + +/** + * Takes an expression such as 30d and returns a moment object of that date in future + * + * Key Shorthand + * ================== + * years y + * quarters Q + * months M + * weeks w + * days d + * hours h + * minutes m + * seconds s + * milliseconds ms + * + * @param {String} expression + * @returns {Object} + */ +const parseDatePeriod = (expression) => { + const matches = expression.match(/^([0-9]+)(y|Q|M|w|d|h|m|s|ms)$/m); + if (matches) { + return moment().add(matches[1], matches[2]); + } + + return null; +}; + +const convertIntFieldsToBool = (obj, fields) => { + fields.forEach((field) => { + if (typeof obj[field] !== "undefined") { + obj[field] = obj[field] === 1; + } + }); + return obj; +}; + +const convertBoolFieldsToInt = (obj, fields) => { + fields.forEach((field) => { + if (typeof obj[field] !== "undefined") { + obj[field] = obj[field] ? 1 : 0; + } + }); + return obj; +}; + +/** + * Casts a column to json if using postgres + * + * @param {string} colName + * @returns {string|Objection.ReferenceBuilder} + */ +const castJsonIfNeed = (colName) => (isPostgres() ? ref(colName).castText() : colName); + +export { parseDatePeriod, convertIntFieldsToBool, convertBoolFieldsToInt, castJsonIfNeed }; diff --git a/backend/lib/migrate_template.js b/backend/lib/migrate_template.js new file mode 100644 index 0000000..0b8e284 --- /dev/null +++ b/backend/lib/migrate_template.js @@ -0,0 +1,59 @@ +import { migrate as logger } from "../logger.js"; + +const migrateName = "identifier_for_migrate"; + +/** + * Migrate + * + * @see http://knexjs.org/#Schema + * + * @param {Object} knex + * @returns {Promise} + */ +const up = (_knex) => { + logger.info(`[${migrateName}] Migrating Up...`); + + // Create Table example: + + /* + return knex.schema.createTable('notification', (table) => { + table.increments().primary(); + table.string('name').notNull(); + table.string('type').notNull(); + table.integer('created_on').notNull(); + table.integer('modified_on').notNull(); + }) + .then(function () { + logger.info('[' + migrateName + '] Notification Table created'); + }); + */ + + logger.info(`[${migrateName}] Migrating Up Complete`); + + return Promise.resolve(true); +}; + +/** + * Undo Migrate + * + * @param {Object} knex + * @returns {Promise} + */ +const down = (_knex) => { + logger.info(`[${migrateName}] Migrating Down...`); + + // Drop table example: + + /* + return knex.schema.dropTable('notification') + .then(() => { + logger.info(`[${migrateName}] Notification Table dropped`); + }); + */ + + logger.info(`[${migrateName}] Migrating Down Complete`); + + return Promise.resolve(true); +}; + +export { up, down }; diff --git a/backend/lib/utils.js b/backend/lib/utils.js new file mode 100644 index 0000000..af7ad3c --- /dev/null +++ b/backend/lib/utils.js @@ -0,0 +1,110 @@ +import { exec as nodeExec, execFile as nodeExecFile } from "node:child_process"; +import { dirname } from "node:path"; +import { fileURLToPath } from "node:url"; +import { Liquid } from "liquidjs"; +import _ from "lodash"; +import { debug, global as logger } from "../logger.js"; +import errs from "./error.js"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +const exec = async (cmd, options = {}) => { + debug(logger, "CMD:", cmd); + const { stdout, stderr } = await new Promise((resolve, reject) => { + const child = nodeExec(cmd, options, (isError, stdout, stderr) => { + if (isError) { + reject(new errs.CommandError(stderr, isError)); + } else { + resolve({ stdout, stderr }); + } + }); + + child.on("error", (e) => { + reject(new errs.CommandError(stderr, 1, e)); + }); + }); + return stdout; +}; + +/** + * @param {String} cmd + * @param {Array} args + * @param {Object|undefined} options + * @returns {Promise} + */ +const execFile = (cmd, args, options) => { + debug(logger, `CMD: ${cmd} ${args ? args.join(" ") : ""}`); + const opts = options || {}; + + return new Promise((resolve, reject) => { + nodeExecFile(cmd, args, opts, (err, stdout, stderr) => { + if (err && typeof err === "object") { + reject(new errs.CommandError(stderr, 1, err)); + } else { + resolve(stdout.trim()); + } + }); + }); +}; + +/** + * Used in objection query builder + * + * @param {Array} omissions + * @returns {Function} + */ +const omitRow = (omissions) => { + /** + * @param {Object} row + * @returns {Object} + */ + return (row) => { + return _.omit(row, omissions); + }; +}; + +/** + * Used in objection query builder + * + * @param {Array} omissions + * @returns {Function} + */ +const omitRows = (omissions) => { + /** + * @param {Array} rows + * @returns {Object} + */ + return (rows) => { + rows.forEach((row, idx) => { + rows[idx] = _.omit(row, omissions); + }); + return rows; + }; +}; + +/** + * @returns {Object} Liquid render engine + */ +const getRenderEngine = () => { + const renderEngine = new Liquid({ + root: `${__dirname}/../templates/`, + }); + + /** + * nginxAccessRule expects the object given to have 2 properties: + * + * directive string + * address string + */ + renderEngine.registerFilter("nginxAccessRule", (v) => { + if (typeof v.directive !== "undefined" && typeof v.address !== "undefined" && v.directive && v.address) { + return `${v.directive} ${v.address};`; + } + return ""; + }); + + return renderEngine; +}; + +export default { exec, execFile, omitRow, omitRows, getRenderEngine }; diff --git a/backend/lib/validator/api.js b/backend/lib/validator/api.js new file mode 100644 index 0000000..6c738d5 --- /dev/null +++ b/backend/lib/validator/api.js @@ -0,0 +1,45 @@ +import Ajv from "ajv/dist/2020.js"; +import errs from "../error.js"; + +const ajv = new Ajv({ + verbose: true, + allErrors: true, + allowUnionTypes: true, + strict: false, + coerceTypes: true, +}); + +/** + * @param {Object} schema + * @param {Object} payload + * @returns {Promise} + */ +const apiValidator = async (schema, payload /*, description*/) => { + if (!schema) { + throw new errs.ValidationError("Schema is undefined"); + } + + // Can't use falsy check here as valid payload could be `0` or `false` + if (typeof payload === "undefined") { + throw new errs.ValidationError("Payload is undefined"); + } + + + const validate = ajv.compile(schema); + + const valid = validate(payload); + + + if (valid && !validate.errors) { + return payload; + } + + + + const message = ajv.errorsText(validate.errors); + const err = new errs.ValidationError(message); + err.debug = {validationErrors: validate.errors, payload}; + throw err; +}; + +export default apiValidator; diff --git a/backend/lib/validator/index.js b/backend/lib/validator/index.js new file mode 100644 index 0000000..5f2586f --- /dev/null +++ b/backend/lib/validator/index.js @@ -0,0 +1,45 @@ +import Ajv from 'ajv/dist/2020.js'; +import _ from "lodash"; +import commonDefinitions from "../../schema/common.json" with { type: "json" }; +import errs from "../error.js"; + +RegExp.prototype.toJSON = RegExp.prototype.toString; + +const ajv = new Ajv({ + verbose: true, + allErrors: true, + allowUnionTypes: true, + coerceTypes: true, + strict: false, + schemas: [commonDefinitions], +}); + +/** + * + * @param {Object} schema + * @param {Object} payload + * @returns {Promise} + */ +const validator = (schema, payload) => { + return new Promise((resolve, reject) => { + if (!payload) { + reject(new errs.InternalValidationError("Payload is falsy")); + } else { + try { + const validate = ajv.compile(schema); + const valid = validate(payload); + + if (valid && !validate.errors) { + resolve(_.cloneDeep(payload)); + } else { + const message = ajv.errorsText(validate.errors); + reject(new errs.InternalValidationError(message)); + } + } catch (err) { + reject(err); + } + } + }); +}; + +export default validator; diff --git a/backend/lib/wg-helpers.js b/backend/lib/wg-helpers.js new file mode 100644 index 0000000..653a0f6 --- /dev/null +++ b/backend/lib/wg-helpers.js @@ -0,0 +1,183 @@ +import { spawn } from "child_process"; + +/** + * Execute a shell command and return stdout + */ +export function exec(cmd) { + return new Promise((resolve, reject) => { + const child = spawn("bash", ["-c", cmd], { + stdio: ["pipe", "pipe", "pipe"], + }); + let stdout = ""; + let stderr = ""; + child.stdout.on("data", (data) => { + stdout += data.toString(); + }); + child.stderr.on("data", (data) => { + stderr += data.toString(); + }); + child.on("close", (code) => { + if (code !== 0) { + reject(new Error(`Command failed (exit ${code}): ${cmd}\n${stderr}`)); + } else { + resolve(stdout.trim()); + } + }); + child.on("error", reject); + }); +} + +/** + * Generate a WireGuard private key + */ +export async function generatePrivateKey() { + return exec("wg genkey"); +} + +/** + * Derive a public key from a private key + */ +export async function getPublicKey(privateKey) { + return exec(`echo ${privateKey} | wg pubkey`); +} + +/** + * Generate a pre-shared key + */ +export async function generatePreSharedKey() { + return exec("wg genpsk"); +} + +/** + * Bring up the WireGuard interface + */ +export async function wgUp(interfaceName) { + return exec(`wg-quick up ${interfaceName}`); +} + +/** + * Bring down the WireGuard interface + */ +export async function wgDown(interfaceName) { + return exec(`wg-quick down ${interfaceName}`); +} + +/** + * Sync WireGuard config without restarting + */ +export async function wgSync(interfaceName) { + return exec(`wg syncconf ${interfaceName} <(wg-quick strip ${interfaceName})`); +} + +/** + * Get WireGuard status dump + * Returns array of peer objects + */ +export async function wgDump(interfaceName) { + const rawDump = await exec(`wg show ${interfaceName} dump`); + return rawDump + .trim() + .split("\n") + .slice(1) // skip interface line + .map((line) => { + const [publicKey, preSharedKey, endpoint, allowedIps, latestHandshakeAt, transferRx, transferTx, persistentKeepalive] = line.split("\t"); + return { + publicKey, + preSharedKey, + endpoint: endpoint === "(none)" ? null : endpoint, + allowedIps, + latestHandshakeAt: latestHandshakeAt === "0" ? null : new Date(Number.parseInt(`${latestHandshakeAt}000`)), + transferRx: Number.parseInt(transferRx), + transferTx: Number.parseInt(transferTx), + persistentKeepalive, + }; + }); +} + +/** + * Generate the [Interface] section for the server config + */ +export function generateServerInterface({ privateKey, address, listenPort, mtu, dns, postUp, postDown }) { + const lines = ["[Interface]", `PrivateKey = ${privateKey}`, `Address = ${address}`, `ListenPort = ${listenPort}`]; + if (mtu) lines.push(`MTU = ${mtu}`); + if (dns) lines.push(`DNS = ${dns}`); + if (postUp) lines.push(`PostUp = ${postUp}`); + if (postDown) lines.push(`PostDown = ${postDown}`); + return lines.join("\n"); +} + +/** + * Generate a [Peer] section for the server config + */ +export function generateServerPeer({ publicKey, preSharedKey, allowedIps }) { + const lines = ["[Peer]", `PublicKey = ${publicKey}`, `PresharedKey = ${preSharedKey}`, `AllowedIPs = ${allowedIps}`]; + return lines.join("\n"); +} + +/** + * Generate complete client config file + */ +export function generateClientConfig({ clientPrivateKey, clientAddress, dns, mtu, serverPublicKey, preSharedKey, allowedIps, persistentKeepalive, endpoint }) { + const lines = [ + "[Interface]", + `PrivateKey = ${clientPrivateKey}`, + `Address = ${clientAddress}`, + ]; + if (mtu) lines.push(`MTU = ${mtu}`); + if (dns) lines.push(`DNS = ${dns}`); + lines.push("", "[Peer]", `PublicKey = ${serverPublicKey}`, `PresharedKey = ${preSharedKey}`, `AllowedIPs = ${allowedIps}`, `PersistentKeepalive = ${persistentKeepalive}`, `Endpoint = ${endpoint}`); + return lines.join("\n"); +} + +/** + * Simple QR code generator (outputs SVG via qrencode) + */ +export async function generateQRCodeSVG(text) { + return exec(`echo -n '${text.replace(/'/g, "'\\''")}' | qrencode -t SVG -o -`); +} + +/** + * Parse a CIDR string and return the network details + */ +export function parseCIDR(cidr) { + const [ip, prefix] = cidr.split("/"); + const prefixLen = Number.parseInt(prefix, 10); + const parts = ip.split(".").map(Number); + const ipNum = ((parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8) | parts[3]) >>> 0; + const mask = prefixLen === 0 ? 0 : (~0 << (32 - prefixLen)) >>> 0; + const networkNum = (ipNum & mask) >>> 0; + const broadcastNum = (networkNum | ~mask) >>> 0; + return { + network: numToIp(networkNum), + broadcast: numToIp(broadcastNum), + firstHost: numToIp(networkNum + 1), + lastHost: numToIp(broadcastNum - 1), + prefix: prefixLen, + networkNum, + broadcastNum, + }; +} + +function numToIp(num) { + return `${(num >>> 24) & 255}.${(num >>> 16) & 255}.${(num >>> 8) & 255}.${num & 255}`; +} + +/** + * Find next available IP in a CIDR range given existing allocated IPs + * The first IP (network+1) is reserved for the server + */ +export function findNextAvailableIP(cidr, allocatedIPs) { + const parsed = parseCIDR(cidr); + // Start from network+2 (network+1 is server) + const startIP = parsed.networkNum + 2; + const endIP = parsed.broadcastNum - 1; + const allocatedSet = new Set(allocatedIPs); + + for (let ip = startIP; ip <= endIP; ip++) { + const ipStr = numToIp(ip); + if (!allocatedSet.has(ipStr)) { + return ipStr; + } + } + throw new Error("No available IP addresses in the CIDR range"); +} diff --git a/backend/logger.js b/backend/logger.js new file mode 100644 index 0000000..2b60dbf --- /dev/null +++ b/backend/logger.js @@ -0,0 +1,26 @@ +import signale from "signale"; +import { isDebugMode } from "./lib/config.js"; + +const opts = { + logLevel: "info", +}; + +const global = new signale.Signale({ scope: "Global ", ...opts }); +const migrate = new signale.Signale({ scope: "Migrate ", ...opts }); +const express = new signale.Signale({ scope: "Express ", ...opts }); +const access = new signale.Signale({ scope: "Access ", ...opts }); +const nginx = new signale.Signale({ scope: "Nginx ", ...opts }); +const ssl = new signale.Signale({ scope: "SSL ", ...opts }); +const certbot = new signale.Signale({ scope: "Certbot ", ...opts }); +const importer = new signale.Signale({ scope: "Importer ", ...opts }); +const setup = new signale.Signale({ scope: "Setup ", ...opts }); +const ipRanges = new signale.Signale({ scope: "IP Ranges", ...opts }); +const remoteVersion = new signale.Signale({ scope: "Remote Version", ...opts }); + +const debug = (logger, ...args) => { + if (isDebugMode()) { + logger.debug(...args); + } +}; + +export { debug, global, migrate, express, access, nginx, ssl, certbot, importer, setup, ipRanges, remoteVersion }; diff --git a/backend/migrate.js b/backend/migrate.js new file mode 100644 index 0000000..4c99cab --- /dev/null +++ b/backend/migrate.js @@ -0,0 +1,13 @@ +import db from "./db.js"; +import { migrate as logger } from "./logger.js"; + +const migrateUp = async () => { + const version = await db().migrate.currentVersion(); + logger.info("Current database version:", version); + return await db().migrate.latest({ + tableName: "migrations", + directory: "migrations", + }); +}; + +export { migrateUp }; diff --git a/backend/migrations/20180618015850_initial.js b/backend/migrations/20180618015850_initial.js new file mode 100644 index 0000000..d3c55d9 --- /dev/null +++ b/backend/migrations/20180618015850_initial.js @@ -0,0 +1,206 @@ +import { migrate as logger } from "../logger.js"; + +const migrateName = "initial-schema"; + +/** + * Migrate + * + * @see http://knexjs.org/#Schema + * + * @param {Object} knex + * @returns {Promise} + */ +const up = (knex) => { + logger.info(`[${migrateName}] Migrating Up...`); + + return knex.schema + .createTable("auth", (table) => { + table.increments().primary(); + table.dateTime("created_on").notNull(); + table.dateTime("modified_on").notNull(); + table.integer("user_id").notNull().unsigned(); + table.string("type", 30).notNull(); + table.string("secret").notNull(); + table.json("meta").notNull(); + table.integer("is_deleted").notNull().unsigned().defaultTo(0); + }) + .then(() => { + logger.info(`[${migrateName}] auth Table created`); + + return knex.schema.createTable("user", (table) => { + table.increments().primary(); + table.dateTime("created_on").notNull(); + table.dateTime("modified_on").notNull(); + table.integer("is_deleted").notNull().unsigned().defaultTo(0); + table.integer("is_disabled").notNull().unsigned().defaultTo(0); + table.string("email").notNull(); + table.string("name").notNull(); + table.string("nickname").notNull(); + table.string("avatar").notNull(); + table.json("roles").notNull(); + }); + }) + .then(() => { + logger.info(`[${migrateName}] user Table created`); + + return knex.schema.createTable("user_permission", (table) => { + table.increments().primary(); + table.dateTime("created_on").notNull(); + table.dateTime("modified_on").notNull(); + table.integer("user_id").notNull().unsigned(); + table.string("visibility").notNull(); + table.string("proxy_hosts").notNull(); + table.string("redirection_hosts").notNull(); + table.string("dead_hosts").notNull(); + table.string("streams").notNull(); + table.string("access_lists").notNull(); + table.string("certificates").notNull(); + table.unique("user_id"); + }); + }) + .then(() => { + logger.info(`[${migrateName}] user_permission Table created`); + + return knex.schema.createTable("proxy_host", (table) => { + table.increments().primary(); + table.dateTime("created_on").notNull(); + table.dateTime("modified_on").notNull(); + table.integer("owner_user_id").notNull().unsigned(); + table.integer("is_deleted").notNull().unsigned().defaultTo(0); + table.json("domain_names").notNull(); + table.string("forward_ip").notNull(); + table.integer("forward_port").notNull().unsigned(); + table.integer("access_list_id").notNull().unsigned().defaultTo(0); + table.integer("certificate_id").notNull().unsigned().defaultTo(0); + table.integer("ssl_forced").notNull().unsigned().defaultTo(0); + table.integer("caching_enabled").notNull().unsigned().defaultTo(0); + table.integer("block_exploits").notNull().unsigned().defaultTo(0); + table.text("advanced_config").notNull().defaultTo(""); + table.json("meta").notNull(); + }); + }) + .then(() => { + logger.info(`[${migrateName}] proxy_host Table created`); + + return knex.schema.createTable("redirection_host", (table) => { + table.increments().primary(); + table.dateTime("created_on").notNull(); + table.dateTime("modified_on").notNull(); + table.integer("owner_user_id").notNull().unsigned(); + table.integer("is_deleted").notNull().unsigned().defaultTo(0); + table.json("domain_names").notNull(); + table.string("forward_domain_name").notNull(); + table.integer("preserve_path").notNull().unsigned().defaultTo(0); + table.integer("certificate_id").notNull().unsigned().defaultTo(0); + table.integer("ssl_forced").notNull().unsigned().defaultTo(0); + table.integer("block_exploits").notNull().unsigned().defaultTo(0); + table.text("advanced_config").notNull().defaultTo(""); + table.json("meta").notNull(); + }); + }) + .then(() => { + logger.info(`[${migrateName}] redirection_host Table created`); + + return knex.schema.createTable("dead_host", (table) => { + table.increments().primary(); + table.dateTime("created_on").notNull(); + table.dateTime("modified_on").notNull(); + table.integer("owner_user_id").notNull().unsigned(); + table.integer("is_deleted").notNull().unsigned().defaultTo(0); + table.json("domain_names").notNull(); + table.integer("certificate_id").notNull().unsigned().defaultTo(0); + table.integer("ssl_forced").notNull().unsigned().defaultTo(0); + table.text("advanced_config").notNull().defaultTo(""); + table.json("meta").notNull(); + }); + }) + .then(() => { + logger.info(`[${migrateName}] dead_host Table created`); + + return knex.schema.createTable("stream", (table) => { + table.increments().primary(); + table.dateTime("created_on").notNull(); + table.dateTime("modified_on").notNull(); + table.integer("owner_user_id").notNull().unsigned(); + table.integer("is_deleted").notNull().unsigned().defaultTo(0); + table.integer("incoming_port").notNull().unsigned(); + table.string("forward_ip").notNull(); + table.integer("forwarding_port").notNull().unsigned(); + table.integer("tcp_forwarding").notNull().unsigned().defaultTo(0); + table.integer("udp_forwarding").notNull().unsigned().defaultTo(0); + table.json("meta").notNull(); + }); + }) + .then(() => { + logger.info(`[${migrateName}] stream Table created`); + + return knex.schema.createTable("access_list", (table) => { + table.increments().primary(); + table.dateTime("created_on").notNull(); + table.dateTime("modified_on").notNull(); + table.integer("owner_user_id").notNull().unsigned(); + table.integer("is_deleted").notNull().unsigned().defaultTo(0); + table.string("name").notNull(); + table.json("meta").notNull(); + }); + }) + .then(() => { + logger.info(`[${migrateName}] access_list Table created`); + + return knex.schema.createTable("certificate", (table) => { + table.increments().primary(); + table.dateTime("created_on").notNull(); + table.dateTime("modified_on").notNull(); + table.integer("owner_user_id").notNull().unsigned(); + table.integer("is_deleted").notNull().unsigned().defaultTo(0); + table.string("provider").notNull(); + table.string("nice_name").notNull().defaultTo(""); + table.json("domain_names").notNull(); + table.dateTime("expires_on").notNull(); + table.json("meta").notNull(); + }); + }) + .then(() => { + logger.info(`[${migrateName}] certificate Table created`); + + return knex.schema.createTable("access_list_auth", (table) => { + table.increments().primary(); + table.dateTime("created_on").notNull(); + table.dateTime("modified_on").notNull(); + table.integer("access_list_id").notNull().unsigned(); + table.string("username").notNull(); + table.string("password").notNull(); + table.json("meta").notNull(); + }); + }) + .then(() => { + logger.info(`[${migrateName}] access_list_auth Table created`); + + return knex.schema.createTable("audit_log", (table) => { + table.increments().primary(); + table.dateTime("created_on").notNull(); + table.dateTime("modified_on").notNull(); + table.integer("user_id").notNull().unsigned(); + table.string("object_type").notNull().defaultTo(""); + table.integer("object_id").notNull().unsigned().defaultTo(0); + table.string("action").notNull(); + table.json("meta").notNull(); + }); + }) + .then(() => { + logger.info(`[${migrateName}] audit_log Table created`); + }); +}; + +/** + * Undo Migrate + * + * @param {Object} knex + * @returns {Promise} + */ +const down = (_knex) => { + logger.warn(`[${migrateName}] You can't migrate down the initial data.`); + return Promise.resolve(true); +}; + +export { up, down }; diff --git a/backend/migrations/20180929054513_websockets.js b/backend/migrations/20180929054513_websockets.js new file mode 100644 index 0000000..cce80d3 --- /dev/null +++ b/backend/migrations/20180929054513_websockets.js @@ -0,0 +1,36 @@ +import { migrate as logger } from "../logger.js"; + +const migrateName = "websockets"; + +/** + * Migrate + * + * @see http://knexjs.org/#Schema + * + * @param {Object} knex + * @returns {Promise} + */ +const up = (knex) => { + logger.info(`[${migrateName}] Migrating Up...`); + + return knex.schema + .table("proxy_host", (proxy_host) => { + proxy_host.integer("allow_websocket_upgrade").notNull().unsigned().defaultTo(0); + }) + .then(() => { + logger.info(`[${migrateName}] proxy_host Table altered`); + }); +}; + +/** + * Undo Migrate + * + * @param {Object} knex + * @returns {Promise} + */ +const down = (_knex) => { + logger.warn(`[${migrateName}] You can't migrate down this one.`); + return Promise.resolve(true); +}; + +export { up, down }; diff --git a/backend/migrations/20181019052346_forward_host.js b/backend/migrations/20181019052346_forward_host.js new file mode 100644 index 0000000..fe11edc --- /dev/null +++ b/backend/migrations/20181019052346_forward_host.js @@ -0,0 +1,36 @@ +import { migrate as logger } from "../logger.js"; + +const migrateName = "forward_host"; + +/** + * Migrate + * + * @see http://knexjs.org/#Schema + * + * @param {Object} knex + * @returns {Promise} + */ +const up = (knex) => { + logger.info(`[${migrateName}] Migrating Up...`); + + return knex.schema + .table("proxy_host", (proxy_host) => { + proxy_host.renameColumn("forward_ip", "forward_host"); + }) + .then(() => { + logger.info(`[${migrateName}] proxy_host Table altered`); + }); +}; + +/** + * Undo Migrate + * + * @param {Object} knex + * @returns {Promise} + */ +const down = (_knex) => { + logger.warn(`[${migrateName}] You can't migrate down this one.`); + return Promise.resolve(true); +}; + +export { up, down }; diff --git a/backend/migrations/20181113041458_http2_support.js b/backend/migrations/20181113041458_http2_support.js new file mode 100644 index 0000000..cfa94a9 --- /dev/null +++ b/backend/migrations/20181113041458_http2_support.js @@ -0,0 +1,50 @@ +import { migrate as logger } from "../logger.js"; + +const migrateName = "http2_support"; + +/** + * Migrate + * + * @see http://knexjs.org/#Schema + * + * @param {Object} knex + * @returns {Promise} + */ +const up = (knex) => { + logger.info(`[${migrateName}] Migrating Up...`); + + return knex.schema + .table("proxy_host", (proxy_host) => { + proxy_host.integer("http2_support").notNull().unsigned().defaultTo(0); + }) + .then(() => { + logger.info(`[${migrateName}] proxy_host Table altered`); + + return knex.schema.table("redirection_host", (redirection_host) => { + redirection_host.integer("http2_support").notNull().unsigned().defaultTo(0); + }); + }) + .then(() => { + logger.info(`[${migrateName}] redirection_host Table altered`); + + return knex.schema.table("dead_host", (dead_host) => { + dead_host.integer("http2_support").notNull().unsigned().defaultTo(0); + }); + }) + .then(() => { + logger.info(`[${migrateName}] dead_host Table altered`); + }); +}; + +/** + * Undo Migrate + * + * @param {Object} knex + * @returns {Promise} + */ +const down = (_knex) => { + logger.warn(`[${migrateName}] You can't migrate down this one.`); + return Promise.resolve(true); +}; + +export { up, down }; diff --git a/backend/migrations/20181213013211_forward_scheme.js b/backend/migrations/20181213013211_forward_scheme.js new file mode 100644 index 0000000..ba3bc56 --- /dev/null +++ b/backend/migrations/20181213013211_forward_scheme.js @@ -0,0 +1,36 @@ +import { migrate as logger } from "../logger.js"; + +const migrateName = "forward_scheme"; + +/** + * Migrate + * + * @see http://knexjs.org/#Schema + * + * @param {Object} knex + * @returns {Promise} + */ +const up = (knex) => { + logger.info(`[${migrateName}] Migrating Up...`); + + return knex.schema + .table("proxy_host", (proxy_host) => { + proxy_host.string("forward_scheme").notNull().defaultTo("http"); + }) + .then(() => { + logger.info(`[${migrateName}] proxy_host Table altered`); + }); +}; + +/** + * Undo Migrate + * + * @param {Object} knex + * @returns {Promise} + */ +const down = (_knex) => { + logger.warn(`[${migrateName}] You can't migrate down this one.`); + return Promise.resolve(true); +}; + +export { up, down }; diff --git a/backend/migrations/20190104035154_disabled.js b/backend/migrations/20190104035154_disabled.js new file mode 100644 index 0000000..28fcc7b --- /dev/null +++ b/backend/migrations/20190104035154_disabled.js @@ -0,0 +1,57 @@ +import { migrate as logger } from "../logger.js"; + +const migrateName = "disabled"; + +/** + * Migrate + * + * @see http://knexjs.org/#Schema + * + * @param {Object} knex + * @returns {Promise} + */ +const up = (knex) => { + logger.info(`[${migrateName}] Migrating Up...`); + + return knex.schema + .table("proxy_host", (proxy_host) => { + proxy_host.integer("enabled").notNull().unsigned().defaultTo(1); + }) + .then(() => { + logger.info(`[${migrateName}] proxy_host Table altered`); + + return knex.schema.table("redirection_host", (redirection_host) => { + redirection_host.integer("enabled").notNull().unsigned().defaultTo(1); + }); + }) + .then(() => { + logger.info(`[${migrateName}] redirection_host Table altered`); + + return knex.schema.table("dead_host", (dead_host) => { + dead_host.integer("enabled").notNull().unsigned().defaultTo(1); + }); + }) + .then(() => { + logger.info(`[${migrateName}] dead_host Table altered`); + + return knex.schema.table("stream", (stream) => { + stream.integer("enabled").notNull().unsigned().defaultTo(1); + }); + }) + .then(() => { + logger.info(`[${migrateName}] stream Table altered`); + }); +}; + +/** + * Undo Migrate + * + * @param {Object} knex + * @returns {Promise} + */ +const down = (_knex) => { + logger.warn(`[${migrateName}] You can't migrate down this one.`); + return Promise.resolve(true); +}; + +export { up, down }; diff --git a/backend/migrations/20190215115310_customlocations.js b/backend/migrations/20190215115310_customlocations.js new file mode 100644 index 0000000..c4f7797 --- /dev/null +++ b/backend/migrations/20190215115310_customlocations.js @@ -0,0 +1,37 @@ +import { migrate as logger } from "../logger.js"; + +const migrateName = "custom_locations"; + +/** + * Migrate + * Extends proxy_host table with locations field + * + * @see http://knexjs.org/#Schema + * + * @param {Object} knex + * @returns {Promise} + */ +const up = (knex) => { + logger.info(`[${migrateName}] Migrating Up...`); + + return knex.schema + .table("proxy_host", (proxy_host) => { + proxy_host.json("locations"); + }) + .then(() => { + logger.info(`[${migrateName}] proxy_host Table altered`); + }); +}; + +/** + * Undo Migrate + * + * @param {Object} knex + * @returns {Promise} + */ +const down = (_knex) => { + logger.warn(`[${migrateName}] You can't migrate down this one.`); + return Promise.resolve(true); +}; + +export { up, down }; diff --git a/backend/migrations/20190218060101_hsts.js b/backend/migrations/20190218060101_hsts.js new file mode 100644 index 0000000..1253130 --- /dev/null +++ b/backend/migrations/20190218060101_hsts.js @@ -0,0 +1,53 @@ +import { migrate as logger } from "../logger.js"; + +const migrateName = "hsts"; + +/** + * Migrate + * + * @see http://knexjs.org/#Schema + * + * @param {Object} knex + * @returns {Promise} + */ +const up = (knex) => { + logger.info(`[${migrateName}] Migrating Up...`); + + return knex.schema + .table("proxy_host", (proxy_host) => { + proxy_host.integer("hsts_enabled").notNull().unsigned().defaultTo(0); + proxy_host.integer("hsts_subdomains").notNull().unsigned().defaultTo(0); + }) + .then(() => { + logger.info(`[${migrateName}] proxy_host Table altered`); + + return knex.schema.table("redirection_host", (redirection_host) => { + redirection_host.integer("hsts_enabled").notNull().unsigned().defaultTo(0); + redirection_host.integer("hsts_subdomains").notNull().unsigned().defaultTo(0); + }); + }) + .then(() => { + logger.info(`[${migrateName}] redirection_host Table altered`); + + return knex.schema.table("dead_host", (dead_host) => { + dead_host.integer("hsts_enabled").notNull().unsigned().defaultTo(0); + dead_host.integer("hsts_subdomains").notNull().unsigned().defaultTo(0); + }); + }) + .then(() => { + logger.info(`[${migrateName}] dead_host Table altered`); + }); +}; + +/** + * Undo Migrate + * + * @param {Object} knex + * @returns {Promise} + */ +const down = (_knex) => { + logger.warn(`[${migrateName}] You can't migrate down this one.`); + return Promise.resolve(true); +}; + +export { up, down }; diff --git a/backend/migrations/20190227065017_settings.js b/backend/migrations/20190227065017_settings.js new file mode 100644 index 0000000..a6cbe2c --- /dev/null +++ b/backend/migrations/20190227065017_settings.js @@ -0,0 +1,39 @@ +import { migrate as logger } from "../logger.js"; + +const migrateName = "settings"; + +/** + * Migrate + * + * @see http://knexjs.org/#Schema + * + * @param {Object} knex + * @returns {Promise} + */ +const up = (knex) => { + logger.info(`[${migrateName}] Migrating Up...`); + + return knex.schema.createTable('setting', (table) => { + table.string('id').notNull().primary(); + table.string('name', 100).notNull(); + table.string('description', 255).notNull(); + table.string('value', 255).notNull(); + table.json('meta').notNull(); + }) + .then(() => { + logger.info(`[${migrateName}] setting Table created`); + }); +}; + +/** + * Undo Migrate + * + * @param {Object} knex + * @returns {Promise} + */ +const down = (_knex) => { + logger.warn(`[${migrateName}] You can't migrate down the initial data.`); + return Promise.resolve(true); +}; + +export { up, down }; diff --git a/backend/migrations/20200410143839_access_list_client.js b/backend/migrations/20200410143839_access_list_client.js new file mode 100644 index 0000000..e682504 --- /dev/null +++ b/backend/migrations/20200410143839_access_list_client.js @@ -0,0 +1,52 @@ +import { migrate as logger } from "../logger.js"; + +const migrateName = "access_list_client"; + +/** + * Migrate + * + * @see http://knexjs.org/#Schema + * + * @param {Object} knex + * @returns {Promise} + */ +const up = (knex) => { + logger.info(`[${migrateName}] Migrating Up...`); + + return knex.schema + .createTable("access_list_client", (table) => { + table.increments().primary(); + table.dateTime("created_on").notNull(); + table.dateTime("modified_on").notNull(); + table.integer("access_list_id").notNull().unsigned(); + table.string("address").notNull(); + table.string("directive").notNull(); + table.json("meta").notNull(); + }) + .then(() => { + logger.info(`[${migrateName}] access_list_client Table created`); + + return knex.schema.table("access_list", (access_list) => { + access_list.integer("satify_any").notNull().defaultTo(0); + }); + }) + .then(() => { + logger.info(`[${migrateName}] access_list Table altered`); + }); +}; + +/** + * Undo Migrate + * + * @param {Object} knex + * @returns {Promise} + */ +const down = (knex) => { + logger.info(`[${migrateName}] Migrating Down...`); + + return knex.schema.dropTable("access_list_client").then(() => { + logger.info(`[${migrateName}] access_list_client Table dropped`); + }); +}; + +export { up, down }; diff --git a/backend/migrations/20200410143840_access_list_client_fix.js b/backend/migrations/20200410143840_access_list_client_fix.js new file mode 100644 index 0000000..6bdaedb --- /dev/null +++ b/backend/migrations/20200410143840_access_list_client_fix.js @@ -0,0 +1,36 @@ +import { migrate as logger } from "../logger.js"; + +const migrateName = "access_list_client_fix"; + +/** + * Migrate + * + * @see http://knexjs.org/#Schema + * + * @param {Object} knex + * @returns {Promise} + */ +const up = (knex) => { + logger.info(`[${migrateName}] Migrating Up...`); + + return knex.schema + .table("access_list", (access_list) => { + access_list.renameColumn("satify_any", "satisfy_any"); + }) + .then(() => { + logger.info(`[${migrateName}] access_list Table altered`); + }); +}; + +/** + * Undo Migrate + * + * @param {Object} knex + * @returns {Promise} + */ +const down = (_knex) => { + logger.warn(`[${migrateName}] You can't migrate down this one.`); + return Promise.resolve(true); +}; + +export { up, down }; diff --git a/backend/migrations/20201014143841_pass_auth.js b/backend/migrations/20201014143841_pass_auth.js new file mode 100644 index 0000000..dc57e2a --- /dev/null +++ b/backend/migrations/20201014143841_pass_auth.js @@ -0,0 +1,43 @@ +import { migrate as logger } from "../logger.js"; + +const migrateName = "pass_auth"; + +/** + * Migrate + * + * @see http://knexjs.org/#Schema + * + * @param {Object} knex + * @returns {Promise} + */ +const up = (knex) => { + logger.info(`[${migrateName}] Migrating Up...`); + + return knex.schema + .table("access_list", (access_list) => { + access_list.integer("pass_auth").notNull().defaultTo(1); + }) + .then(() => { + logger.info(`[${migrateName}] access_list Table altered`); + }); +}; + +/** + * Undo Migrate + * + * @param {Object} knex + * @returns {Promise} + */ +const down = (knex) => { + logger.info(`[${migrateName}] Migrating Down...`); + + return knex.schema + .table("access_list", (access_list) => { + access_list.dropColumn("pass_auth"); + }) + .then(() => { + logger.info(`[${migrateName}] access_list pass_auth Column dropped`); + }); +}; + +export { up, down }; diff --git a/backend/migrations/20210210154702_redirection_scheme.js b/backend/migrations/20210210154702_redirection_scheme.js new file mode 100644 index 0000000..b3f18ae --- /dev/null +++ b/backend/migrations/20210210154702_redirection_scheme.js @@ -0,0 +1,43 @@ +import { migrate as logger } from "../logger.js"; + +const migrateName = "redirection_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", (table) => { + table.string("forward_scheme").notNull().defaultTo("$scheme"); + }) + .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", (table) => { + table.dropColumn("forward_scheme"); + }) + .then(() => { + logger.info(`[${migrateName}] redirection_host Table altered`); + }); +}; + +export { up, down }; diff --git a/backend/migrations/20210210154703_redirection_status_code.js b/backend/migrations/20210210154703_redirection_status_code.js new file mode 100644 index 0000000..cf84298 --- /dev/null +++ b/backend/migrations/20210210154703_redirection_status_code.js @@ -0,0 +1,43 @@ +import { migrate as logger } from "../logger.js"; + +const migrateName = "redirection_status_code"; + +/** + * 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", (table) => { + table.integer("forward_http_code").notNull().unsigned().defaultTo(302); + }) + .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", (table) => { + table.dropColumn("forward_http_code"); + }) + .then(() => { + logger.info(`[${migrateName}] redirection_host Table altered`); + }); +}; + +export { up, down }; diff --git a/backend/migrations/20210423103500_stream_domain.js b/backend/migrations/20210423103500_stream_domain.js new file mode 100644 index 0000000..b4afabd --- /dev/null +++ b/backend/migrations/20210423103500_stream_domain.js @@ -0,0 +1,43 @@ +import { migrate as logger } from "../logger.js"; + +const migrateName = "stream_domain"; + +/** + * Migrate + * + * @see http://knexjs.org/#Schema + * + * @param {Object} knex + * @returns {Promise} + */ +const up = (knex) => { + logger.info(`[${migrateName}] Migrating Up...`); + + return knex.schema + .table("stream", (table) => { + table.renameColumn("forward_ip", "forwarding_host"); + }) + .then(() => { + logger.info(`[${migrateName}] stream Table altered`); + }); +}; + +/** + * Undo Migrate + * + * @param {Object} knex + * @returns {Promise} + */ +const down = (knex) => { + logger.info(`[${migrateName}] Migrating Down...`); + + return knex.schema + .table("stream", (table) => { + table.renameColumn("forwarding_host", "forward_ip"); + }) + .then(() => { + logger.info(`[${migrateName}] stream Table altered`); + }); +}; + +export { up, down }; diff --git a/backend/migrations/20211108145214_regenerate_default_host.js b/backend/migrations/20211108145214_regenerate_default_host.js new file mode 100644 index 0000000..c280515 --- /dev/null +++ b/backend/migrations/20211108145214_regenerate_default_host.js @@ -0,0 +1,52 @@ +import internalNginx from "../internal/nginx.js"; +import { migrate as logger } from "../logger.js"; + +const migrateName = "stream_domain"; + +async function regenerateDefaultHost(knex) { + const row = await knex("setting").select("*").where("id", "default-site").first(); + + if (!row) { + return Promise.resolve(); + } + + return internalNginx + .deleteConfig("default") + .then(() => { + return internalNginx.generateConfig("default", row); + }) + .then(() => { + return internalNginx.test(); + }) + .then(() => { + return internalNginx.reload(); + }); +} + +/** + * Migrate + * + * @see http://knexjs.org/#Schema + * + * @param {Object} knex + * @returns {Promise} + */ +const up = (knex) => { + logger.info(`[${migrateName}] Migrating Up...`); + + return regenerateDefaultHost(knex); +}; + +/** + * Undo Migrate + * + * @param {Object} knex + * @returns {Promise} + */ +const down = (knex) => { + logger.info(`[${migrateName}] Migrating Down...`); + + return regenerateDefaultHost(knex); +}; + +export { up, down }; diff --git a/backend/migrations/20240427161436_stream_ssl.js b/backend/migrations/20240427161436_stream_ssl.js new file mode 100644 index 0000000..0fbba11 --- /dev/null +++ b/backend/migrations/20240427161436_stream_ssl.js @@ -0,0 +1,43 @@ +import { migrate as logger } from "../logger.js"; + +const migrateName = "stream_ssl"; + +/** + * Migrate + * + * @see http://knexjs.org/#Schema + * + * @param {Object} knex + * @returns {Promise} + */ +const up = (knex) => { + logger.info(`[${migrateName}] Migrating Up...`); + + return knex.schema + .table("stream", (table) => { + table.integer("certificate_id").notNull().unsigned().defaultTo(0); + }) + .then(() => { + logger.info(`[${migrateName}] stream Table altered`); + }); +}; + +/** + * Undo Migrate + * + * @param {Object} knex + * @returns {Promise} + */ +const down = (knex) => { + logger.info(`[${migrateName}] Migrating Down...`); + + return knex.schema + .table("stream", (table) => { + table.dropColumn("certificate_id"); + }) + .then(() => { + logger.info(`[${migrateName}] stream Table altered`); + }); +}; + +export { up, down }; diff --git a/backend/migrations/20251111090000_redirect_auto_scheme.js b/backend/migrations/20251111090000_redirect_auto_scheme.js new file mode 100644 index 0000000..9f5f9d0 --- /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/migrations/20260131163528_trust_forwarded_proto.js b/backend/migrations/20260131163528_trust_forwarded_proto.js new file mode 100644 index 0000000..546cbca --- /dev/null +++ b/backend/migrations/20260131163528_trust_forwarded_proto.js @@ -0,0 +1,43 @@ +import { migrate as logger } from "../logger.js"; + +const migrateName = "trust_forwarded_proto"; + +/** + * Migrate + * + * @see http://knexjs.org/#Schema + * + * @param {Object} knex + * @returns {Promise} + */ +const up = function (knex) { + logger.info(`[${migrateName}] Migrating Up...`); + + return knex.schema + .alterTable('proxy_host', (table) => { + table.tinyint('trust_forwarded_proto').notNullable().defaultTo(0); + }) + .then(() => { + logger.info(`[${migrateName}] proxy_host Table altered`); + }); +}; + +/** + * Undo Migrate + * + * @param {Object} knex + * @returns {Promise} + */ +const down = function (knex) { + logger.info(`[${migrateName}] Migrating Down...`); + + return knex.schema + .alterTable('proxy_host', (table) => { + table.dropColumn('trust_forwarded_proto'); + }) + .then(() => { + logger.info(`[${migrateName}] proxy_host Table altered`); + }); +}; + +export { up, down }; \ No newline at end of file diff --git a/backend/migrations/20260307000000_wireguard.js b/backend/migrations/20260307000000_wireguard.js new file mode 100644 index 0000000..def38fe --- /dev/null +++ b/backend/migrations/20260307000000_wireguard.js @@ -0,0 +1,41 @@ +const migrate_name = "wireguard"; + +/** + * Wireguard tables migration + */ +export function up(knex) { + return knex.schema + .createTable("wg_interface", (table) => { + table.increments("id").primary(); + table.string("name").notNullable().defaultTo("wg0"); + table.text("private_key").notNullable(); + table.text("public_key").notNullable(); + table.string("ipv4_cidr").notNullable().defaultTo("10.8.0.0/24"); + table.integer("listen_port").notNullable().defaultTo(51820); + table.integer("mtu").notNullable().defaultTo(1420); + table.string("dns").defaultTo("1.1.1.1, 8.8.8.8"); + table.string("host").defaultTo(""); + table.text("post_up").defaultTo(""); + table.text("post_down").defaultTo(""); + table.dateTime("created_on").notNullable(); + table.dateTime("modified_on").notNullable(); + }) + .createTable("wg_client", (table) => { + table.increments("id").primary(); + table.string("name").notNullable().defaultTo("Unnamed Client"); + table.boolean("enabled").notNullable().defaultTo(true); + table.string("ipv4_address").notNullable(); + table.text("private_key").notNullable(); + table.text("public_key").notNullable(); + table.text("pre_shared_key").notNullable(); + table.string("allowed_ips").notNullable().defaultTo("0.0.0.0/0, ::/0"); + table.integer("persistent_keepalive").notNullable().defaultTo(25); + table.dateTime("expires_at").nullable(); + table.dateTime("created_on").notNullable(); + table.dateTime("modified_on").notNullable(); + }); +}; + +export function down(knex) { + return knex.schema.dropTableIfExists("wg_client").dropTableIfExists("wg_interface"); +}; diff --git a/backend/models/access_list.js b/backend/models/access_list.js new file mode 100644 index 0000000..427d447 --- /dev/null +++ b/backend/models/access_list.js @@ -0,0 +1,98 @@ +// Objection Docs: +// http://vincit.github.io/objection.js/ + +import { Model } from "objection"; +import db from "../db.js"; +import { convertBoolFieldsToInt, convertIntFieldsToBool } from "../lib/helpers.js"; +import AccessListAuth from "./access_list_auth.js"; +import AccessListClient from "./access_list_client.js"; +import now from "./now_helper.js"; +import ProxyHostModel from "./proxy_host.js"; +import User from "./user.js"; + +Model.knex(db()); + +const boolFields = ["is_deleted", "satisfy_any", "pass_auth"]; + +class AccessList extends Model { + $beforeInsert() { + this.created_on = now(); + this.modified_on = now(); + + // Default for meta + if (typeof this.meta === "undefined") { + this.meta = {}; + } + } + + $beforeUpdate() { + this.modified_on = now(); + } + + $parseDatabaseJson(json) { + const thisJson = super.$parseDatabaseJson(json); + return convertIntFieldsToBool(thisJson, boolFields); + } + + $formatDatabaseJson(json) { + const thisJson = convertBoolFieldsToInt(json, boolFields); + return super.$formatDatabaseJson(thisJson); + } + + static get name() { + return "AccessList"; + } + + static get tableName() { + return "access_list"; + } + + static get jsonAttributes() { + return ["meta"]; + } + + static get relationMappings() { + return { + owner: { + relation: Model.HasOneRelation, + modelClass: User, + join: { + from: "access_list.owner_user_id", + to: "user.id", + }, + modify: (qb) => { + qb.where("user.is_deleted", 0); + }, + }, + items: { + relation: Model.HasManyRelation, + modelClass: AccessListAuth, + join: { + from: "access_list.id", + to: "access_list_auth.access_list_id", + }, + }, + clients: { + relation: Model.HasManyRelation, + modelClass: AccessListClient, + join: { + from: "access_list.id", + to: "access_list_client.access_list_id", + }, + }, + proxy_hosts: { + relation: Model.HasManyRelation, + modelClass: ProxyHostModel, + join: { + from: "access_list.id", + to: "proxy_host.access_list_id", + }, + modify: (qb) => { + qb.where("proxy_host.is_deleted", 0); + }, + }, + }; + } +} + +export default AccessList; diff --git a/backend/models/access_list_auth.js b/backend/models/access_list_auth.js new file mode 100644 index 0000000..75bf435 --- /dev/null +++ b/backend/models/access_list_auth.js @@ -0,0 +1,55 @@ +// Objection Docs: +// http://vincit.github.io/objection.js/ + +import { Model } from "objection"; +import db from "../db.js"; +import accessListModel from "./access_list.js"; +import now from "./now_helper.js"; + +Model.knex(db()); + +class AccessListAuth extends Model { + $beforeInsert() { + this.created_on = now(); + this.modified_on = now(); + + // Default for meta + if (typeof this.meta === "undefined") { + this.meta = {}; + } + } + + $beforeUpdate() { + this.modified_on = now(); + } + + static get name() { + return "AccessListAuth"; + } + + static get tableName() { + return "access_list_auth"; + } + + static get jsonAttributes() { + return ["meta"]; + } + + static get relationMappings() { + return { + access_list: { + relation: Model.HasOneRelation, + modelClass: accessListModel, + join: { + from: "access_list_auth.access_list_id", + to: "access_list.id", + }, + modify: (qb) => { + qb.where("access_list.is_deleted", 0); + }, + }, + }; + } +} + +export default AccessListAuth; diff --git a/backend/models/access_list_client.js b/backend/models/access_list_client.js new file mode 100644 index 0000000..91165fe --- /dev/null +++ b/backend/models/access_list_client.js @@ -0,0 +1,55 @@ +// Objection Docs: +// http://vincit.github.io/objection.js/ + +import { Model } from "objection"; +import db from "../db.js"; +import accessListModel from "./access_list.js"; +import now from "./now_helper.js"; + +Model.knex(db()); + +class AccessListClient extends Model { + $beforeInsert() { + this.created_on = now(); + this.modified_on = now(); + + // Default for meta + if (typeof this.meta === "undefined") { + this.meta = {}; + } + } + + $beforeUpdate() { + this.modified_on = now(); + } + + static get name() { + return "AccessListClient"; + } + + static get tableName() { + return "access_list_client"; + } + + static get jsonAttributes() { + return ["meta"]; + } + + static get relationMappings() { + return { + access_list: { + relation: Model.HasOneRelation, + modelClass: accessListModel, + join: { + from: "access_list_client.access_list_id", + to: "access_list.id", + }, + modify: (qb) => { + qb.where("access_list.is_deleted", 0); + }, + }, + }; + } +} + +export default AccessListClient; diff --git a/backend/models/audit-log.js b/backend/models/audit-log.js new file mode 100644 index 0000000..6e2d398 --- /dev/null +++ b/backend/models/audit-log.js @@ -0,0 +1,52 @@ +// Objection Docs: +// http://vincit.github.io/objection.js/ + +import { Model } from "objection"; +import db from "../db.js"; +import now from "./now_helper.js"; +import User from "./user.js"; + +Model.knex(db()); + +class AuditLog extends Model { + $beforeInsert() { + this.created_on = now(); + this.modified_on = now(); + + // Default for meta + if (typeof this.meta === "undefined") { + this.meta = {}; + } + } + + $beforeUpdate() { + this.modified_on = now(); + } + + static get name() { + return "AuditLog"; + } + + static get tableName() { + return "audit_log"; + } + + static get jsonAttributes() { + return ["meta"]; + } + + static get relationMappings() { + return { + user: { + relation: Model.HasOneRelation, + modelClass: User, + join: { + from: "audit_log.user_id", + to: "user.id", + }, + }, + }; + } +} + +export default AuditLog; diff --git a/backend/models/auth.js b/backend/models/auth.js new file mode 100644 index 0000000..e8af582 --- /dev/null +++ b/backend/models/auth.js @@ -0,0 +1,92 @@ +// Objection Docs: +// http://vincit.github.io/objection.js/ + +import bcrypt from "bcrypt"; +import { Model } from "objection"; +import db from "../db.js"; +import { convertBoolFieldsToInt, convertIntFieldsToBool } from "../lib/helpers.js"; +import now from "./now_helper.js"; +import User from "./user.js"; + +Model.knex(db()); + +const boolFields = ["is_deleted"]; + +function encryptPassword() { + if (this.type === "password" && this.secret) { + return bcrypt.hash(this.secret, 13).then((hash) => { + this.secret = hash; + }); + } + + return null; +} + +class Auth extends Model { + $beforeInsert(queryContext) { + this.created_on = now(); + this.modified_on = now(); + + // Default for meta + if (typeof this.meta === "undefined") { + this.meta = {}; + } + + return encryptPassword.apply(this, queryContext); + } + + $beforeUpdate(queryContext) { + this.modified_on = now(); + return encryptPassword.apply(this, queryContext); + } + + $parseDatabaseJson(json) { + const thisJson = super.$parseDatabaseJson(json); + return convertIntFieldsToBool(thisJson, boolFields); + } + + $formatDatabaseJson(json) { + const thisJson = convertBoolFieldsToInt(json, boolFields); + return super.$formatDatabaseJson(thisJson); + } + + /** + * Verify a plain password against the encrypted password + * + * @param {String} password + * @returns {Promise} + */ + verifyPassword(password) { + return bcrypt.compare(password, this.secret); + } + + static get name() { + return "Auth"; + } + + static get tableName() { + return "auth"; + } + + static get jsonAttributes() { + return ["meta"]; + } + + static get relationMappings() { + return { + user: { + relation: Model.HasOneRelation, + modelClass: User, + join: { + from: "auth.user_id", + to: "user.id", + }, + filter: { + is_deleted: 0, + }, + }, + }; + } +} + +export default Auth; diff --git a/backend/models/certificate.js b/backend/models/certificate.js new file mode 100644 index 0000000..ad6e0a6 --- /dev/null +++ b/backend/models/certificate.js @@ -0,0 +1,133 @@ +// Objection Docs: +// http://vincit.github.io/objection.js/ + +import { Model } from "objection"; +import db from "../db.js"; +import { convertBoolFieldsToInt, convertIntFieldsToBool } from "../lib/helpers.js"; +import deadHostModel from "./dead_host.js"; +import now from "./now_helper.js"; +import proxyHostModel from "./proxy_host.js"; +import redirectionHostModel from "./redirection_host.js"; +import streamModel from "./stream.js"; +import userModel from "./user.js"; + +Model.knex(db()); + +const boolFields = ["is_deleted"]; + +class Certificate extends Model { + $beforeInsert() { + this.created_on = now(); + this.modified_on = now(); + + // Default for expires_on + if (typeof this.expires_on === "undefined") { + this.expires_on = now(); + } + + // Default for domain_names + if (typeof this.domain_names === "undefined") { + this.domain_names = []; + } + + // Default for meta + if (typeof this.meta === "undefined") { + this.meta = {}; + } + + this.domain_names.sort(); + } + + $beforeUpdate() { + this.modified_on = now(); + + // Sort domain_names + if (typeof this.domain_names !== "undefined") { + this.domain_names.sort(); + } + } + + $parseDatabaseJson(json) { + const thisJson = super.$parseDatabaseJson(json); + return convertIntFieldsToBool(thisJson, boolFields); + } + + $formatDatabaseJson(json) { + const thisJson = convertBoolFieldsToInt(json, boolFields); + return super.$formatDatabaseJson(thisJson); + } + + static get name() { + return "Certificate"; + } + + static get tableName() { + return "certificate"; + } + + static get jsonAttributes() { + return ["domain_names", "meta"]; + } + + static get relationMappings() { + return { + owner: { + relation: Model.HasOneRelation, + modelClass: userModel, + join: { + from: "certificate.owner_user_id", + to: "user.id", + }, + modify: (qb) => { + qb.where("user.is_deleted", 0); + }, + }, + proxy_hosts: { + relation: Model.HasManyRelation, + modelClass: proxyHostModel, + join: { + from: "certificate.id", + to: "proxy_host.certificate_id", + }, + modify: (qb) => { + qb.where("proxy_host.is_deleted", 0); + }, + }, + dead_hosts: { + relation: Model.HasManyRelation, + modelClass: deadHostModel, + join: { + from: "certificate.id", + to: "dead_host.certificate_id", + }, + modify: (qb) => { + qb.where("dead_host.is_deleted", 0); + }, + }, + redirection_hosts: { + relation: Model.HasManyRelation, + modelClass: redirectionHostModel, + join: { + from: "certificate.id", + to: "redirection_host.certificate_id", + }, + modify: (qb) => { + qb.where("redirection_host.is_deleted", 0); + }, + }, + streams: { + relation: Model.HasManyRelation, + modelClass: streamModel, + join: { + from: "certificate.id", + to: "stream.certificate_id", + }, + modify: (qb) => { + qb.where("stream.is_deleted", 0); + }, + }, + }; + } +} + +export default Certificate; diff --git a/backend/models/dead_host.js b/backend/models/dead_host.js new file mode 100644 index 0000000..dc7c775 --- /dev/null +++ b/backend/models/dead_host.js @@ -0,0 +1,104 @@ +// Objection Docs: +// http://vincit.github.io/objection.js/ + +import { Model } from "objection"; +import db from "../db.js"; +import { castJsonIfNeed, convertBoolFieldsToInt, convertIntFieldsToBool } from "../lib/helpers.js"; +import Certificate from "./certificate.js"; +import now from "./now_helper.js"; +import User from "./user.js"; + +Model.knex(db()); + +const boolFields = ["is_deleted", "ssl_forced", "http2_support", "enabled", "hsts_enabled", "hsts_subdomains"]; + +class DeadHost extends Model { + $beforeInsert() { + this.created_on = now(); + this.modified_on = now(); + + // Default for domain_names + if (typeof this.domain_names === "undefined") { + this.domain_names = []; + } + + // Default for meta + if (typeof this.meta === "undefined") { + this.meta = {}; + } + + this.domain_names.sort(); + } + + $beforeUpdate() { + this.modified_on = now(); + + // Sort domain_names + if (typeof this.domain_names !== "undefined") { + this.domain_names.sort(); + } + } + + $parseDatabaseJson(json) { + const thisJson = super.$parseDatabaseJson(json); + return convertIntFieldsToBool(thisJson, boolFields); + } + + $formatDatabaseJson(json) { + const thisJson = convertBoolFieldsToInt(json, boolFields); + return super.$formatDatabaseJson(thisJson); + } + + static get name() { + return "DeadHost"; + } + + static get tableName() { + return "dead_host"; + } + + static get jsonAttributes() { + return ["domain_names", "meta"]; + } + + static get defaultAllowGraph() { + return "[owner,certificate]"; + } + + static get defaultExpand() { + return ["certificate", "owner"]; + } + + static get defaultOrder() { + return [castJsonIfNeed("domain_names"), "ASC"]; + } + + static get relationMappings() { + return { + owner: { + relation: Model.HasOneRelation, + modelClass: User, + join: { + from: "dead_host.owner_user_id", + to: "user.id", + }, + modify: (qb) => { + qb.where("user.is_deleted", 0); + }, + }, + certificate: { + relation: Model.HasOneRelation, + modelClass: Certificate, + join: { + from: "dead_host.certificate_id", + to: "certificate.id", + }, + modify: (qb) => { + qb.where("certificate.is_deleted", 0); + }, + }, + }; + } +} + +export default DeadHost; diff --git a/backend/models/now_helper.js b/backend/models/now_helper.js new file mode 100644 index 0000000..293dcc7 --- /dev/null +++ b/backend/models/now_helper.js @@ -0,0 +1,12 @@ +import { Model } from "objection"; +import db from "../db.js"; +import { isSqlite } from "../lib/config.js"; + +Model.knex(db()); + +export default () => { + if (isSqlite()) { + return Model.raw("datetime('now','localtime')"); + } + return Model.raw("NOW()"); +}; diff --git a/backend/models/proxy_host.js b/backend/models/proxy_host.js new file mode 100644 index 0000000..acb8da9 --- /dev/null +++ b/backend/models/proxy_host.js @@ -0,0 +1,127 @@ +// Objection Docs: +// http://vincit.github.io/objection.js/ + +import { Model } from "objection"; +import db from "../db.js"; +import { castJsonIfNeed, convertBoolFieldsToInt, convertIntFieldsToBool } from "../lib/helpers.js"; +import AccessList from "./access_list.js"; +import Certificate from "./certificate.js"; +import now from "./now_helper.js"; +import User from "./user.js"; + +Model.knex(db()); + +const boolFields = [ + "is_deleted", + "ssl_forced", + "caching_enabled", + "block_exploits", + "allow_websocket_upgrade", + "http2_support", + "enabled", + "hsts_enabled", + "hsts_subdomains", + "trust_forwarded_proto", +]; + +class ProxyHost extends Model { + $beforeInsert() { + this.created_on = now(); + this.modified_on = now(); + + // Default for domain_names + if (typeof this.domain_names === "undefined") { + this.domain_names = []; + } + + // Default for meta + if (typeof this.meta === "undefined") { + this.meta = {}; + } + + this.domain_names.sort(); + } + + $beforeUpdate() { + this.modified_on = now(); + + // Sort domain_names + if (typeof this.domain_names !== "undefined") { + this.domain_names.sort(); + } + } + + $parseDatabaseJson(json) { + const thisJson = super.$parseDatabaseJson(json); + return convertIntFieldsToBool(thisJson, boolFields); + } + + $formatDatabaseJson(json) { + const thisJson = convertBoolFieldsToInt(json, boolFields); + return super.$formatDatabaseJson(thisJson); + } + + static get name() { + return "ProxyHost"; + } + + static get tableName() { + return "proxy_host"; + } + + static get jsonAttributes() { + return ["domain_names", "meta", "locations"]; + } + + static get defaultAllowGraph() { + return "[owner,access_list.[clients,items],certificate]"; + } + + static get defaultExpand() { + return ["owner", "certificate", "access_list.[clients,items]"]; + } + + static get defaultOrder() { + return [castJsonIfNeed("domain_names"), "ASC"]; + } + + static get relationMappings() { + return { + owner: { + relation: Model.HasOneRelation, + modelClass: User, + join: { + from: "proxy_host.owner_user_id", + to: "user.id", + }, + modify: (qb) => { + qb.where("user.is_deleted", 0); + }, + }, + access_list: { + relation: Model.HasOneRelation, + modelClass: AccessList, + join: { + from: "proxy_host.access_list_id", + to: "access_list.id", + }, + modify: (qb) => { + qb.where("access_list.is_deleted", 0); + }, + }, + certificate: { + relation: Model.HasOneRelation, + modelClass: Certificate, + join: { + from: "proxy_host.certificate_id", + to: "certificate.id", + }, + modify: (qb) => { + qb.where("certificate.is_deleted", 0); + }, + }, + }; + } +} + +export default ProxyHost; diff --git a/backend/models/redirection_host.js b/backend/models/redirection_host.js new file mode 100644 index 0000000..0c47de6 --- /dev/null +++ b/backend/models/redirection_host.js @@ -0,0 +1,113 @@ +// Objection Docs: +// http://vincit.github.io/objection.js/ + +import { Model } from "objection"; +import db from "../db.js"; +import { castJsonIfNeed, convertBoolFieldsToInt, convertIntFieldsToBool } from "../lib/helpers.js"; +import Certificate from "./certificate.js"; +import now from "./now_helper.js"; +import User from "./user.js"; + +Model.knex(db()); + +const boolFields = [ + "is_deleted", + "enabled", + "preserve_path", + "ssl_forced", + "block_exploits", + "hsts_enabled", + "hsts_subdomains", + "http2_support", +]; + +class RedirectionHost extends Model { + $beforeInsert() { + this.created_on = now(); + this.modified_on = now(); + + // Default for domain_names + if (typeof this.domain_names === "undefined") { + this.domain_names = []; + } + + // Default for meta + if (typeof this.meta === "undefined") { + this.meta = {}; + } + + this.domain_names.sort(); + } + + $beforeUpdate() { + this.modified_on = now(); + + // Sort domain_names + if (typeof this.domain_names !== "undefined") { + this.domain_names.sort(); + } + } + + $parseDatabaseJson(json) { + const thisJson = super.$parseDatabaseJson(json); + return convertIntFieldsToBool(thisJson, boolFields); + } + + $formatDatabaseJson(json) { + const thisJson = convertBoolFieldsToInt(json, boolFields); + return super.$formatDatabaseJson(thisJson); + } + + static get name() { + return "RedirectionHost"; + } + + static get tableName() { + return "redirection_host"; + } + + static get jsonAttributes() { + return ["domain_names", "meta"]; + } + + static get defaultAllowGraph() { + return "[owner,certificate]"; + } + + static get defaultExpand() { + return ["certificate", "owner"]; + } + + static get defaultOrder() { + return [castJsonIfNeed("domain_names"), "ASC"]; + } + + static get relationMappings() { + return { + owner: { + relation: Model.HasOneRelation, + modelClass: User, + join: { + from: "redirection_host.owner_user_id", + to: "user.id", + }, + modify: (qb) => { + qb.where("user.is_deleted", 0); + }, + }, + certificate: { + relation: Model.HasOneRelation, + modelClass: Certificate, + join: { + from: "redirection_host.certificate_id", + to: "certificate.id", + }, + modify: (qb) => { + qb.where("certificate.is_deleted", 0); + }, + }, + }; + } +} + +export default RedirectionHost; diff --git a/backend/models/setting.js b/backend/models/setting.js new file mode 100644 index 0000000..56f7dc5 --- /dev/null +++ b/backend/models/setting.js @@ -0,0 +1,30 @@ +// Objection Docs: +// http://vincit.github.io/objection.js/ + +import { Model } from "objection"; +import db from "../db.js"; + +Model.knex(db()); + +class Setting extends Model { + $beforeInsert () { + // Default for meta + if (typeof this.meta === 'undefined') { + this.meta = {}; + } + } + + static get name () { + return 'Setting'; + } + + static get tableName () { + return 'setting'; + } + + static get jsonAttributes () { + return ['meta']; + } +} + +export default Setting; diff --git a/backend/models/stream.js b/backend/models/stream.js new file mode 100644 index 0000000..20a23a2 --- /dev/null +++ b/backend/models/stream.js @@ -0,0 +1,89 @@ +import { Model } from "objection"; +import db from "../db.js"; +import { castJsonIfNeed, convertBoolFieldsToInt, convertIntFieldsToBool } from "../lib/helpers.js"; +import Certificate from "./certificate.js"; +import now from "./now_helper.js"; +import User from "./user.js"; + +Model.knex(db()); + +const boolFields = ["is_deleted", "enabled", "tcp_forwarding", "udp_forwarding"]; + +class Stream extends Model { + $beforeInsert() { + this.created_on = now(); + this.modified_on = now(); + + // Default for meta + if (typeof this.meta === "undefined") { + this.meta = {}; + } + } + + $beforeUpdate() { + this.modified_on = now(); + } + + $parseDatabaseJson(json) { + const thisJson = super.$parseDatabaseJson(json); + return convertIntFieldsToBool(thisJson, boolFields); + } + + $formatDatabaseJson(json) { + const thisJson = convertBoolFieldsToInt(json, boolFields); + return super.$formatDatabaseJson(thisJson); + } + + static get name() { + return "Stream"; + } + + static get tableName() { + return "stream"; + } + + static get jsonAttributes() { + return ["meta"]; + } + + static get defaultAllowGraph() { + return "[owner,certificate]"; + } + + static get defaultExpand() { + return ["certificate", "owner"]; + } + + static get defaultOrder() { + return [castJsonIfNeed("incoming_port"), "ASC"]; + } + + static get relationMappings() { + return { + owner: { + relation: Model.HasOneRelation, + modelClass: User, + join: { + from: "stream.owner_user_id", + to: "user.id", + }, + modify: (qb) => { + qb.where("user.is_deleted", 0); + }, + }, + certificate: { + relation: Model.HasOneRelation, + modelClass: Certificate, + join: { + from: "stream.certificate_id", + to: "certificate.id", + }, + modify: (qb) => { + qb.where("certificate.is_deleted", 0); + }, + }, + }; + } +} + +export default Stream; diff --git a/backend/models/token.js b/backend/models/token.js new file mode 100644 index 0000000..4edab5b --- /dev/null +++ b/backend/models/token.js @@ -0,0 +1,140 @@ +/** + NOTE: This is not a database table, this is a model of a Token object that can be created/loaded + and then has abilities after that. + */ + +import crypto from "node:crypto"; +import jwt from "jsonwebtoken"; +import _ from "lodash"; +import { getPrivateKey, getPublicKey } from "../lib/config.js"; +import errs from "../lib/error.js"; +import { global as logger } from "../logger.js"; + +const ALGO = "RS256"; + +export default () => { + let tokenData = {}; + + const self = { + /** + * @param {Object} payload + * @returns {Promise} + */ + create: (payload) => { + if (!getPrivateKey()) { + logger.error("Private key is empty!"); + } + // sign with RSA SHA256 + const options = { + algorithm: ALGO, + expiresIn: payload.expiresIn || "1d", + }; + + payload.jti = crypto.randomBytes(12).toString("base64").substring(-8); + + return new Promise((resolve, reject) => { + jwt.sign(payload, getPrivateKey(), options, (err, token) => { + if (err) { + reject(err); + } else { + tokenData = payload; + resolve({ + token: token, + payload: payload, + }); + } + }); + }); + }, + + /** + * @param {String} token + * @returns {Promise} + */ + load: (token) => { + if (!getPublicKey()) { + logger.error("Public key is empty!"); + } + return new Promise((resolve, reject) => { + try { + if (!token || token === null || token === "null") { + reject(new errs.AuthError("Empty token")); + } else { + jwt.verify( + token, + getPublicKey(), + { ignoreExpiration: false, algorithms: [ALGO] }, + (err, result) => { + if (err) { + if (err.name === "TokenExpiredError") { + reject(new errs.AuthError("Token has expired", err)); + } else { + reject(err); + } + } else { + tokenData = result; + + // Hack: some tokens out in the wild have a scope of 'all' instead of 'user'. + // For 30 days at least, we need to replace 'all' with user. + if ( + typeof tokenData.scope !== "undefined" && + _.indexOf(tokenData.scope, "all") !== -1 + ) { + tokenData.scope = ["user"]; + } + + resolve(tokenData); + } + }, + ); + } + } catch (err) { + reject(err); + } + }); + }, + + /** + * Does the token have the specified scope? + * + * @param {String} scope + * @returns {Boolean} + */ + hasScope: (scope) => typeof tokenData.scope !== "undefined" && _.indexOf(tokenData.scope, scope) !== -1, + + /** + * @param {String} key + * @return {*} + */ + get: (key) => { + if (typeof tokenData[key] !== "undefined") { + return tokenData[key]; + } + + return null; + }, + + /** + * @param {String} key + * @param {*} value + */ + set: (key, value) => { + tokenData[key] = value; + }, + + /** + * @param [defaultValue] + * @returns {Integer} + */ + getUserId: (defaultValue) => { + const attrs = self.get("attrs"); + if (attrs?.id) { + return attrs.id; + } + + return defaultValue || 0; + }, + }; + + return self; +}; diff --git a/backend/models/user.js b/backend/models/user.js new file mode 100644 index 0000000..68a3144 --- /dev/null +++ b/backend/models/user.js @@ -0,0 +1,65 @@ +// Objection Docs: +// http://vincit.github.io/objection.js/ + +import { Model } from "objection"; +import db from "../db.js"; +import { convertBoolFieldsToInt, convertIntFieldsToBool } from "../lib/helpers.js"; +import now from "./now_helper.js"; +import UserPermission from "./user_permission.js"; + +Model.knex(db()); + +const boolFields = ["is_deleted", "is_disabled"]; + +class User extends Model { + $beforeInsert() { + this.created_on = now(); + this.modified_on = now(); + + // Default for roles + if (typeof this.roles === "undefined") { + this.roles = []; + } + } + + $beforeUpdate() { + this.modified_on = now(); + } + + $parseDatabaseJson(json) { + const thisJson = super.$parseDatabaseJson(json); + return convertIntFieldsToBool(thisJson, boolFields); + } + + $formatDatabaseJson(json) { + const thisJson = convertBoolFieldsToInt(json, boolFields); + return super.$formatDatabaseJson(thisJson); + } + + static get name() { + return "User"; + } + + static get tableName() { + return "user"; + } + + static get jsonAttributes() { + return ["roles"]; + } + + static get relationMappings() { + return { + permissions: { + relation: Model.HasOneRelation, + modelClass: UserPermission, + join: { + from: "user.id", + to: "user_permission.user_id", + }, + }, + }; + } +} + +export default User; diff --git a/backend/models/user_permission.js b/backend/models/user_permission.js new file mode 100644 index 0000000..d878471 --- /dev/null +++ b/backend/models/user_permission.js @@ -0,0 +1,29 @@ +// Objection Docs: +// http://vincit.github.io/objection.js/ + +import { Model } from "objection"; +import db from "../db.js"; +import now from "./now_helper.js"; + +Model.knex(db()); + +class UserPermission extends Model { + $beforeInsert () { + this.created_on = now(); + this.modified_on = now(); + } + + $beforeUpdate () { + this.modified_on = now(); + } + + static get name () { + return 'UserPermission'; + } + + static get tableName () { + return 'user_permission'; + } +} + +export default UserPermission; diff --git a/backend/models/wg_client.js b/backend/models/wg_client.js new file mode 100644 index 0000000..9c38afc --- /dev/null +++ b/backend/models/wg_client.js @@ -0,0 +1,43 @@ +// WireGuard Client model - simple Knex queries +// Used directly in internal/wireguard.js via knex + +const tableName = "wg_client"; + +export default { + tableName, + + async getAll(knex) { + return knex(tableName).orderBy("created_on", "desc"); + }, + + async get(knex, id) { + return knex(tableName).where("id", id).first(); + }, + + async create(knex, data) { + const [id] = await knex(tableName).insert({ + ...data, + created_on: knex.fn.now(), + modified_on: knex.fn.now(), + }); + return knex(tableName).where("id", id).first(); + }, + + async update(knex, id, data) { + return knex(tableName).where("id", id).update({ + ...data, + modified_on: knex.fn.now(), + }); + }, + + async delete(knex, id) { + return knex(tableName).where("id", id).del(); + }, + + async toggle(knex, id, enabled) { + return knex(tableName).where("id", id).update({ + enabled: enabled, + modified_on: knex.fn.now(), + }); + }, +}; diff --git a/backend/models/wg_interface.js b/backend/models/wg_interface.js new file mode 100644 index 0000000..7caf222 --- /dev/null +++ b/backend/models/wg_interface.js @@ -0,0 +1,20 @@ +// WireGuard Interface model - simple Knex queries (no Objection.js for simplicity) +// Used directly in internal/wireguard.js via knex +// This file exports table name and basic query helpers + +const tableName = "wg_interface"; + +export default { + tableName, + + async get(knex) { + return knex(tableName).first(); + }, + + async update(knex, id, data) { + return knex(tableName).where("id", id).update({ + ...data, + modified_on: knex.fn.now(), + }); + }, +}; diff --git a/backend/nodemon.json b/backend/nodemon.json new file mode 100644 index 0000000..90223a2 --- /dev/null +++ b/backend/nodemon.json @@ -0,0 +1,7 @@ +{ + "verbose": false, + "ignore": [ + "data" + ], + "ext": "js json ejs cjs" +} diff --git a/backend/package.json b/backend/package.json new file mode 100644 index 0000000..e31bf22 --- /dev/null +++ b/backend/package.json @@ -0,0 +1,53 @@ +{ + "name": "nginx-proxy-manager", + "version": "2.0.0", + "description": "A beautiful interface for creating Nginx endpoints", + "author": "Jamie Curnow ", + "license": "MIT", + "main": "index.js", + "type": "module", + "scripts": { + "lint": "biome lint", + "prettier": "biome format --write .", + "validate-schema": "node validate-schema.js", + "regenerate-config": "node scripts/regenerate-config" + }, + "dependencies": { + "@apidevtools/json-schema-ref-parser": "^15.3.1", + "ajv": "^8.18.0", + "archiver": "^7.0.1", + "batchflow": "^0.4.0", + "bcrypt": "^6.0.0", + "better-sqlite3": "^12.6.2", + "body-parser": "^2.2.2", + "compression": "^1.8.1", + "express": "^5.2.1", + "express-fileupload": "^1.5.2", + "gravatar": "^1.8.2", + "jsonwebtoken": "^9.0.3", + "knex": "3.1.0", + "liquidjs": "10.24.0", + "lodash": "^4.17.23", + "moment": "^2.30.1", + "mysql2": "^3.18.2", + "node-rsa": "^1.1.1", + "objection": "3.1.5", + "otplib": "^13.3.0", + "path": "^0.12.7", + "pg": "^8.19.0", + "proxy-agent": "^6.5.0", + "signale": "1.4.0", + "sqlite3": "^5.1.7", + "temp-write": "^6.0.1" + }, + "devDependencies": { + "@apidevtools/swagger-parser": "^12.1.0", + "@biomejs/biome": "^2.4.5", + "chalk": "5.6.2", + "nodemon": "^3.1.14" + }, + "signale": { + "displayDate": true, + "displayTimestamp": true + } +} diff --git a/backend/routes/audit-log.js b/backend/routes/audit-log.js new file mode 100644 index 0000000..c40b162 --- /dev/null +++ b/backend/routes/audit-log.js @@ -0,0 +1,107 @@ +import express from "express"; +import internalAuditLog from "../internal/audit-log.js"; +import jwtdecode from "../lib/express/jwt-decode.js"; +import validator from "../lib/validator/index.js"; +import { debug, express as logger } from "../logger.js"; + +const router = express.Router({ + caseSensitive: true, + strict: true, + mergeParams: true, +}); + +/** + * /api/audit-log + */ +router + .route("/") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + + /** + * GET /api/audit-log + * + * Retrieve all logs + */ + .get(async (req, res, next) => { + try { + const data = await validator( + { + additionalProperties: false, + properties: { + expand: { + $ref: "common#/properties/expand", + }, + query: { + $ref: "common#/properties/query", + }, + }, + }, + { + expand: typeof req.query.expand === "string" ? req.query.expand.split(",") : null, + query: typeof req.query.query === "string" ? req.query.query : null, + }, + ); + const rows = await internalAuditLog.getAll(res.locals.access, data.expand, data.query); + res.status(200).send(rows); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +/** + * Specific audit log entry + * + * /api/audit-log/123 + */ +router + .route("/:event_id") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + + /** + * GET /api/audit-log/123 + * + * Retrieve a specific entry + */ + .get(async (req, res, next) => { + try { + const data = await validator( + { + required: ["event_id"], + additionalProperties: false, + properties: { + event_id: { + $ref: "common#/properties/id", + }, + expand: { + $ref: "common#/properties/expand", + }, + }, + }, + { + event_id: req.params.event_id, + expand: + typeof req.query.expand === "string" + ? req.query.expand.split(",") + : null, + }, + ); + + const item = await internalAuditLog.get(res.locals.access, { + id: data.event_id, + expand: data.expand, + }); + res.status(200).send(item); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +export default router; diff --git a/backend/routes/main.js b/backend/routes/main.js new file mode 100644 index 0000000..a91cf2e --- /dev/null +++ b/backend/routes/main.js @@ -0,0 +1,70 @@ +import express from "express"; +import errs from "../lib/error.js"; +import pjson from "../package.json" with { type: "json" }; +import { isSetup } from "../setup.js"; +import auditLogRoutes from "./audit-log.js"; +import accessListsRoutes from "./nginx/access_lists.js"; +import certificatesHostsRoutes from "./nginx/certificates.js"; +import deadHostsRoutes from "./nginx/dead_hosts.js"; +import proxyHostsRoutes from "./nginx/proxy_hosts.js"; +import redirectionHostsRoutes from "./nginx/redirection_hosts.js"; +import streamsRoutes from "./nginx/streams.js"; +import reportsRoutes from "./reports.js"; +import schemaRoutes from "./schema.js"; +import settingsRoutes from "./settings.js"; +import tokensRoutes from "./tokens.js"; +import usersRoutes from "./users.js"; +import versionRoutes from "./version.js"; +import wireguardRoutes from "./wireguard.js"; + +const router = express.Router({ + caseSensitive: true, + strict: true, + mergeParams: true, +}); + +/** + * Health Check + * GET /api + */ +router.get("/", async (_, res /*, next*/) => { + const version = pjson.version.split("-").shift().split("."); + const setup = await isSetup(); + + res.status(200).send({ + status: "OK", + setup, + version: { + major: Number.parseInt(version.shift(), 10), + minor: Number.parseInt(version.shift(), 10), + revision: Number.parseInt(version.shift(), 10), + }, + }); +}); + +router.use("/schema", schemaRoutes); +router.use("/tokens", tokensRoutes); +router.use("/users", usersRoutes); +router.use("/audit-log", auditLogRoutes); +router.use("/reports", reportsRoutes); +router.use("/settings", settingsRoutes); +router.use("/version", versionRoutes); +router.use("/nginx/proxy-hosts", proxyHostsRoutes); +router.use("/nginx/redirection-hosts", redirectionHostsRoutes); +router.use("/nginx/dead-hosts", deadHostsRoutes); +router.use("/nginx/streams", streamsRoutes); +router.use("/nginx/access-lists", accessListsRoutes); +router.use("/nginx/certificates", certificatesHostsRoutes); +router.use("/wireguard", wireguardRoutes); + +/** + * API 404 for all other routes + * + * ALL /api/* + */ +router.all(/(.+)/, (req, _, next) => { + req.params.page = req.params["0"]; + next(new errs.ItemNotFoundError(req.params.page)); +}); + +export default router; diff --git a/backend/routes/nginx/access_lists.js b/backend/routes/nginx/access_lists.js new file mode 100644 index 0000000..9dfcf7e --- /dev/null +++ b/backend/routes/nginx/access_lists.js @@ -0,0 +1,155 @@ +import express from "express"; +import internalAccessList from "../../internal/access-list.js"; +import jwtdecode from "../../lib/express/jwt-decode.js"; +import apiValidator from "../../lib/validator/api.js"; +import validator from "../../lib/validator/index.js"; +import { debug, express as logger } from "../../logger.js"; +import { getValidationSchema } from "../../schema/index.js"; + +const router = express.Router({ + caseSensitive: true, + strict: true, + mergeParams: true, +}); + +/** + * /api/nginx/access-lists + */ +router + .route("/") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + + /** + * GET /api/nginx/access-lists + * + * Retrieve all access-lists + */ + .get(async (req, res, next) => { + try { + const data = await validator( + { + additionalProperties: false, + properties: { + expand: { + $ref: "common#/properties/expand", + }, + query: { + $ref: "common#/properties/query", + }, + }, + }, + { + expand: typeof req.query.expand === "string" ? req.query.expand.split(",") : null, + query: typeof req.query.query === "string" ? req.query.query : null, + }, + ); + const rows = await internalAccessList.getAll(res.locals.access, data.expand, data.query); + res.status(200).send(rows); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }) + + /** + * POST /api/nginx/access-lists + * + * Create a new access-list + */ + .post(async (req, res, next) => { + try { + const payload = await apiValidator(getValidationSchema("/nginx/access-lists", "post"), req.body); + const result = await internalAccessList.create(res.locals.access, payload); + res.status(201).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +/** + * Specific access-list + * + * /api/nginx/access-lists/123 + */ +router + .route("/:list_id") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + + /** + * GET /api/nginx/access-lists/123 + * + * Retrieve a specific access-list + */ + .get(async (req, res, next) => { + try { + const data = await validator( + { + required: ["list_id"], + additionalProperties: false, + properties: { + list_id: { + $ref: "common#/properties/id", + }, + expand: { + $ref: "common#/properties/expand", + }, + }, + }, + { + list_id: req.params.list_id, + expand: typeof req.query.expand === "string" ? req.query.expand.split(",") : null, + }, + ); + const row = await internalAccessList.get(res.locals.access, { + id: Number.parseInt(data.list_id, 10), + expand: data.expand, + }); + res.status(200).send(row); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }) + + /** + * PUT /api/nginx/access-lists/123 + * + * Update and existing access-list + */ + .put(async (req, res, next) => { + try { + const payload = await apiValidator(getValidationSchema("/nginx/access-lists/{listID}", "put"), req.body); + payload.id = Number.parseInt(req.params.list_id, 10); + const result = await internalAccessList.update(res.locals.access, payload); + res.status(200).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }) + + /** + * DELETE /api/nginx/access-lists/123 + * + * Delete and existing access-list + */ + .delete(async (req, res, next) => { + try { + const result = await internalAccessList.delete(res.locals.access, { + id: Number.parseInt(req.params.list_id, 10), + }); + res.status(200).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +export default router; diff --git a/backend/routes/nginx/certificates.js b/backend/routes/nginx/certificates.js new file mode 100644 index 0000000..99f429b --- /dev/null +++ b/backend/routes/nginx/certificates.js @@ -0,0 +1,355 @@ +import express from "express"; +import dnsPlugins from "../../certbot/dns-plugins.json" with { type: "json" }; +import internalCertificate from "../../internal/certificate.js"; +import errs from "../../lib/error.js"; +import jwtdecode from "../../lib/express/jwt-decode.js"; +import apiValidator from "../../lib/validator/api.js"; +import validator from "../../lib/validator/index.js"; +import { debug, express as logger } from "../../logger.js"; +import { getValidationSchema } from "../../schema/index.js"; + +const router = express.Router({ + caseSensitive: true, + strict: true, + mergeParams: true, +}); + +/** + * /api/nginx/certificates + */ +router + .route("/") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + + /** + * GET /api/nginx/certificates + * + * Retrieve all certificates + */ + .get(async (req, res, next) => { + try { + const data = await validator( + { + additionalProperties: false, + properties: { + expand: { + $ref: "common#/properties/expand", + }, + query: { + $ref: "common#/properties/query", + }, + }, + }, + { + expand: + typeof req.query.expand === "string" + ? req.query.expand.split(",") + : null, + query: typeof req.query.query === "string" ? req.query.query : null, + }, + ); + const rows = await internalCertificate.getAll( + res.locals.access, + data.expand, + data.query, + ); + res.status(200).send(rows); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }) + + /** + * POST /api/nginx/certificates + * + * Create a new certificate + */ + .post(async (req, res, next) => { + try { + const payload = await apiValidator( + getValidationSchema("/nginx/certificates", "post"), + req.body, + ); + req.setTimeout(900000); // 15 minutes timeout + const result = await internalCertificate.create( + res.locals.access, + payload, + ); + res.status(201).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +/** + * /api/nginx/certificates/dns-providers + */ +router + .route("/dns-providers") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + + /** + * GET /api/nginx/certificates/dns-providers + * + * Get list of all supported DNS providers + */ + .get(async (req, res, next) => { + try { + if (!res.locals.access.token.getUserId()) { + throw new errs.PermissionError("Login required"); + } + const clean = Object.keys(dnsPlugins).map((key) => ({ + id: key, + name: dnsPlugins[key].name, + credentials: dnsPlugins[key].credentials, + })); + + clean.sort((a, b) => a.name.localeCompare(b.name)); + res.status(200).send(clean); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +/** + * Test HTTP challenge for domains + * + * /api/nginx/certificates/test-http + */ +router + .route("/test-http") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + + /** + * POST /api/nginx/certificates/test-http + * + * Test HTTP challenge for domains + */ + .post(async (req, res, next) => { + try { + const payload = await apiValidator( + getValidationSchema("/nginx/certificates/test-http", "post"), + req.body, + ); + req.setTimeout(60000); // 1 minute timeout + + const result = await internalCertificate.testHttpsChallenge( + res.locals.access, + payload, + ); + res.status(200).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +/** + * Validate Certs before saving + * + * /api/nginx/certificates/validate + */ +router + .route("/validate") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + + /** + * POST /api/nginx/certificates/validate + * + * Validate certificates + */ + .post(async (req, res, next) => { + if (!req.files) { + res.status(400).send({ error: "No files were uploaded" }); + return; + } + + try { + const result = await internalCertificate.validate({ + files: req.files, + }); + res.status(200).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +/** + * Specific certificate + * + * /api/nginx/certificates/123 + */ +router + .route("/:certificate_id") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + + /** + * GET /api/nginx/certificates/123 + * + * Retrieve a specific certificate + */ + .get(async (req, res, next) => { + try { + const data = await validator( + { + required: ["certificate_id"], + additionalProperties: false, + properties: { + certificate_id: { + $ref: "common#/properties/id", + }, + expand: { + $ref: "common#/properties/expand", + }, + }, + }, + { + certificate_id: req.params.certificate_id, + expand: + typeof req.query.expand === "string" + ? req.query.expand.split(",") + : null, + }, + ); + const row = await internalCertificate.get(res.locals.access, { + id: Number.parseInt(data.certificate_id, 10), + expand: data.expand, + }); + res.status(200).send(row); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }) + + /** + * DELETE /api/nginx/certificates/123 + * + * Update and existing certificate + */ + .delete(async (req, res, next) => { + try { + const result = await internalCertificate.delete(res.locals.access, { + id: Number.parseInt(req.params.certificate_id, 10), + }); + res.status(200).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +/** + * Upload Certs + * + * /api/nginx/certificates/123/upload + */ +router + .route("/:certificate_id/upload") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + + /** + * POST /api/nginx/certificates/123/upload + * + * Upload certificates + */ + .post(async (req, res, next) => { + if (!req.files) { + res.status(400).send({ error: "No files were uploaded" }); + return; + } + + try { + const result = await internalCertificate.upload(res.locals.access, { + id: Number.parseInt(req.params.certificate_id, 10), + files: req.files, + }); + res.status(200).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +/** + * Renew LE Certs + * + * /api/nginx/certificates/123/renew + */ +router + .route("/:certificate_id/renew") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + + /** + * POST /api/nginx/certificates/123/renew + * + * Renew certificate + */ + .post(async (req, res, next) => { + req.setTimeout(900000); // 15 minutes timeout + try { + const result = await internalCertificate.renew(res.locals.access, { + id: Number.parseInt(req.params.certificate_id, 10), + }); + res.status(200).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +/** + * Download LE Certs + * + * /api/nginx/certificates/123/download + */ +router + .route("/:certificate_id/download") + .options((_req, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + + /** + * GET /api/nginx/certificates/123/download + * + * Renew certificate + */ + .get(async (req, res, next) => { + try { + const result = await internalCertificate.download(res.locals.access, { + id: Number.parseInt(req.params.certificate_id, 10), + }); + res.status(200).download(result.fileName); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +export default router; diff --git a/backend/routes/nginx/dead_hosts.js b/backend/routes/nginx/dead_hosts.js new file mode 100644 index 0000000..31f7043 --- /dev/null +++ b/backend/routes/nginx/dead_hosts.js @@ -0,0 +1,207 @@ +import express from "express"; +import internalDeadHost from "../../internal/dead-host.js"; +import jwtdecode from "../../lib/express/jwt-decode.js"; +import apiValidator from "../../lib/validator/api.js"; +import validator from "../../lib/validator/index.js"; +import { debug, express as logger } from "../../logger.js"; +import { getValidationSchema } from "../../schema/index.js"; + +const router = express.Router({ + caseSensitive: true, + strict: true, + mergeParams: true, +}); + +/** + * /api/nginx/dead-hosts + */ +router + .route("/") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + + /** + * GET /api/nginx/dead-hosts + * + * Retrieve all dead-hosts + */ + .get(async (req, res, next) => { + try { + const data = await validator( + { + additionalProperties: false, + properties: { + expand: { + $ref: "common#/properties/expand", + }, + query: { + $ref: "common#/properties/query", + }, + }, + }, + { + expand: typeof req.query.expand === "string" ? req.query.expand.split(",") : null, + query: typeof req.query.query === "string" ? req.query.query : null, + }, + ); + const rows = await internalDeadHost.getAll(res.locals.access, data.expand, data.query); + res.status(200).send(rows); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }) + + /** + * POST /api/nginx/dead-hosts + * + * Create a new dead-host + */ + .post(async (req, res, next) => { + try { + const payload = await apiValidator(getValidationSchema("/nginx/dead-hosts", "post"), req.body); + const result = await internalDeadHost.create(res.locals.access, payload); + res.status(201).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +/** + * Specific dead-host + * + * /api/nginx/dead-hosts/123 + */ +router + .route("/:host_id") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + + /** + * GET /api/nginx/dead-hosts/123 + * + * Retrieve a specific dead-host + */ + .get(async (req, res, next) => { + try { + const data = await validator( + { + required: ["host_id"], + additionalProperties: false, + properties: { + host_id: { + $ref: "common#/properties/id", + }, + expand: { + $ref: "common#/properties/expand", + }, + }, + }, + { + host_id: req.params.host_id, + expand: typeof req.query.expand === "string" ? req.query.expand.split(",") : null, + }, + ); + const row = await internalDeadHost.get(res.locals.access, { + id: Number.parseInt(data.host_id, 10), + expand: data.expand, + }); + res.status(200).send(row); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }) + + /** + * PUT /api/nginx/dead-hosts/123 + * + * Update an existing dead-host + */ + .put(async (req, res, next) => { + try { + const payload = await apiValidator(getValidationSchema("/nginx/dead-hosts/{hostID}", "put"), req.body); + payload.id = Number.parseInt(req.params.host_id, 10); + const result = await internalDeadHost.update(res.locals.access, payload); + res.status(200).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }) + + /** + * DELETE /api/nginx/dead-hosts/123 + * + * Delete a dead-host + */ + .delete(async (req, res, next) => { + try { + const result = await internalDeadHost.delete(res.locals.access, { + id: Number.parseInt(req.params.host_id, 10), + }); + res.status(200).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +/** + * Enable dead-host + * + * /api/nginx/dead-hosts/123/enable + */ +router + .route("/:host_id/enable") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + + /** + * POST /api/nginx/dead-hosts/123/enable + */ + .post(async (req, res, next) => { + try { + const result = await internalDeadHost.enable(res.locals.access, { + id: Number.parseInt(req.params.host_id, 10), + }); + res.status(200).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +/** + * Disable dead-host + * + * /api/nginx/dead-hosts/123/disable + */ +router + .route("/:host_id/disable") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + + /** + * POST /api/nginx/dead-hosts/123/disable + */ + .post((req, res, next) => { + try { + const result = internalDeadHost.disable(res.locals.access, { id: Number.parseInt(req.params.host_id, 10) }); + res.status(200).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +export default router; diff --git a/backend/routes/nginx/proxy_hosts.js b/backend/routes/nginx/proxy_hosts.js new file mode 100644 index 0000000..7045a19 --- /dev/null +++ b/backend/routes/nginx/proxy_hosts.js @@ -0,0 +1,209 @@ +import express from "express"; +import internalProxyHost from "../../internal/proxy-host.js"; +import jwtdecode from "../../lib/express/jwt-decode.js"; +import apiValidator from "../../lib/validator/api.js"; +import validator from "../../lib/validator/index.js"; +import { debug, express as logger } from "../../logger.js"; +import { getValidationSchema } from "../../schema/index.js"; + +const router = express.Router({ + caseSensitive: true, + strict: true, + mergeParams: true, +}); + +/** + * /api/nginx/proxy-hosts + */ +router + .route("/") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + + /** + * GET /api/nginx/proxy-hosts + * + * Retrieve all proxy-hosts + */ + .get(async (req, res, next) => { + try { + const data = await validator( + { + additionalProperties: false, + properties: { + expand: { + $ref: "common#/properties/expand", + }, + query: { + $ref: "common#/properties/query", + }, + }, + }, + { + expand: typeof req.query.expand === "string" ? req.query.expand.split(",") : null, + query: typeof req.query.query === "string" ? req.query.query : null, + }, + ); + const rows = await internalProxyHost.getAll(res.locals.access, data.expand, data.query); + res.status(200).send(rows); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }) + + /** + * POST /api/nginx/proxy-hosts + * + * Create a new proxy-host + */ + .post(async (req, res, next) => { + try { + const payload = await apiValidator(getValidationSchema("/nginx/proxy-hosts", "post"), req.body); + const result = await internalProxyHost.create(res.locals.access, payload); + res.status(201).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err} ${JSON.stringify(err.debug, null, 2)}`); + next(err); + } + }); + +/** + * Specific proxy-host + * + * /api/nginx/proxy-hosts/123 + */ +router + .route("/:host_id") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + + /** + * GET /api/nginx/proxy-hosts/123 + * + * Retrieve a specific proxy-host + */ + .get(async (req, res, next) => { + try { + const data = await validator( + { + required: ["host_id"], + additionalProperties: false, + properties: { + host_id: { + $ref: "common#/properties/id", + }, + expand: { + $ref: "common#/properties/expand", + }, + }, + }, + { + host_id: req.params.host_id, + expand: typeof req.query.expand === "string" ? req.query.expand.split(",") : null, + }, + ); + const row = await internalProxyHost.get(res.locals.access, { + id: Number.parseInt(data.host_id, 10), + expand: data.expand, + }); + res.status(200).send(row); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }) + + /** + * PUT /api/nginx/proxy-hosts/123 + * + * Update and existing proxy-host + */ + .put(async (req, res, next) => { + try { + const payload = await apiValidator(getValidationSchema("/nginx/proxy-hosts/{hostID}", "put"), req.body); + payload.id = Number.parseInt(req.params.host_id, 10); + const result = await internalProxyHost.update(res.locals.access, payload); + res.status(200).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }) + + /** + * DELETE /api/nginx/proxy-hosts/123 + * + * Update and existing proxy-host + */ + .delete(async (req, res, next) => { + try { + const result = await internalProxyHost.delete(res.locals.access, { + id: Number.parseInt(req.params.host_id, 10), + }); + res.status(200).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +/** + * Enable proxy-host + * + * /api/nginx/proxy-hosts/123/enable + */ +router + .route("/:host_id/enable") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + + /** + * POST /api/nginx/proxy-hosts/123/enable + */ + .post(async (req, res, next) => { + try { + const result = await internalProxyHost.enable(res.locals.access, { + id: Number.parseInt(req.params.host_id, 10), + }); + res.status(200).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +/** + * Disable proxy-host + * + * /api/nginx/proxy-hosts/123/disable + */ +router + .route("/:host_id/disable") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + + /** + * POST /api/nginx/proxy-hosts/123/disable + */ + .post(async (req, res, next) => { + try { + const result = await internalProxyHost.disable(res.locals.access, { + id: Number.parseInt(req.params.host_id, 10), + }); + res.status(200).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +export default router; diff --git a/backend/routes/nginx/redirection_hosts.js b/backend/routes/nginx/redirection_hosts.js new file mode 100644 index 0000000..9b5b5b3 --- /dev/null +++ b/backend/routes/nginx/redirection_hosts.js @@ -0,0 +1,212 @@ +import express from "express"; +import internalRedirectionHost from "../../internal/redirection-host.js"; +import jwtdecode from "../../lib/express/jwt-decode.js"; +import apiValidator from "../../lib/validator/api.js"; +import validator from "../../lib/validator/index.js"; +import { debug, express as logger } from "../../logger.js"; +import { getValidationSchema } from "../../schema/index.js"; + +const router = express.Router({ + caseSensitive: true, + strict: true, + mergeParams: true, +}); + +/** + * /api/nginx/redirection-hosts + */ +router + .route("/") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + + /** + * GET /api/nginx/redirection-hosts + * + * Retrieve all redirection-hosts + */ + .get(async (req, res, next) => { + try { + const data = await validator( + { + additionalProperties: false, + properties: { + expand: { + $ref: "common#/properties/expand", + }, + query: { + $ref: "common#/properties/query", + }, + }, + }, + { + expand: typeof req.query.expand === "string" ? req.query.expand.split(",") : null, + query: typeof req.query.query === "string" ? req.query.query : null, + }, + ); + const rows = await internalRedirectionHost.getAll(res.locals.access, data.expand, data.query); + res.status(200).send(rows); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }) + + /** + * POST /api/nginx/redirection-hosts + * + * Create a new redirection-host + */ + .post(async (req, res, next) => { + try { + const payload = await apiValidator(getValidationSchema("/nginx/redirection-hosts", "post"), req.body); + const result = await internalRedirectionHost.create(res.locals.access, payload); + res.status(201).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +/** + * Specific redirection-host + * + * /api/nginx/redirection-hosts/123 + */ +router + .route("/:host_id") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + + /** + * GET /api/nginx/redirection-hosts/123 + * + * Retrieve a specific redirection-host + */ + .get(async (req, res, next) => { + try { + const data = await validator( + { + required: ["host_id"], + additionalProperties: false, + properties: { + host_id: { + $ref: "common#/properties/id", + }, + expand: { + $ref: "common#/properties/expand", + }, + }, + }, + { + host_id: req.params.host_id, + expand: typeof req.query.expand === "string" ? req.query.expand.split(",") : null, + }, + ); + const row = await internalRedirectionHost.get(res.locals.access, { + id: Number.parseInt(data.host_id, 10), + expand: data.expand, + }); + res.status(200).send(row); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }) + + /** + * PUT /api/nginx/redirection-hosts/123 + * + * Update and existing redirection-host + */ + .put(async (req, res, next) => { + try { + const payload = await apiValidator( + getValidationSchema("/nginx/redirection-hosts/{hostID}", "put"), + req.body, + ); + payload.id = Number.parseInt(req.params.host_id, 10); + const result = await internalRedirectionHost.update(res.locals.access, payload); + res.status(200).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }) + + /** + * DELETE /api/nginx/redirection-hosts/123 + * + * Update and existing redirection-host + */ + .delete(async (req, res, next) => { + try { + const result = await internalRedirectionHost.delete(res.locals.access, { + id: Number.parseInt(req.params.host_id, 10), + }); + res.status(200).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +/** + * Enable redirection-host + * + * /api/nginx/redirection-hosts/123/enable + */ +router + .route("/:host_id/enable") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + + /** + * POST /api/nginx/redirection-hosts/123/enable + */ + .post(async (req, res, next) => { + try { + const result = await internalRedirectionHost.enable(res.locals.access, { + id: Number.parseInt(req.params.host_id, 10), + }); + res.status(200).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +/** + * Disable redirection-host + * + * /api/nginx/redirection-hosts/123/disable + */ +router + .route("/:host_id/disable") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + + /** + * POST /api/nginx/redirection-hosts/123/disable + */ + .post(async (req, res, next) => { + try { + const result = await internalRedirectionHost.disable(res.locals.access, { + id: Number.parseInt(req.params.host_id, 10), + }); + res.status(200).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +export default router; diff --git a/backend/routes/nginx/streams.js b/backend/routes/nginx/streams.js new file mode 100644 index 0000000..dec2e1a --- /dev/null +++ b/backend/routes/nginx/streams.js @@ -0,0 +1,209 @@ +import express from "express"; +import internalStream from "../../internal/stream.js"; +import jwtdecode from "../../lib/express/jwt-decode.js"; +import apiValidator from "../../lib/validator/api.js"; +import validator from "../../lib/validator/index.js"; +import { debug, express as logger } from "../../logger.js"; +import { getValidationSchema } from "../../schema/index.js"; + +const router = express.Router({ + caseSensitive: true, + strict: true, + mergeParams: true, +}); + +/** + * /api/nginx/streams + */ +router + .route("/") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) // preferred so it doesn't apply to nonexistent routes + + /** + * GET /api/nginx/streams + * + * Retrieve all streams + */ + .get(async (req, res, next) => { + try { + const data = await validator( + { + additionalProperties: false, + properties: { + expand: { + $ref: "common#/properties/expand", + }, + query: { + $ref: "common#/properties/query", + }, + }, + }, + { + expand: typeof req.query.expand === "string" ? req.query.expand.split(",") : null, + query: typeof req.query.query === "string" ? req.query.query : null, + }, + ); + const rows = await internalStream.getAll(res.locals.access, data.expand, data.query); + res.status(200).send(rows); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }) + + /** + * POST /api/nginx/streams + * + * Create a new stream + */ + .post(async (req, res, next) => { + try { + const payload = await apiValidator(getValidationSchema("/nginx/streams", "post"), req.body); + const result = await internalStream.create(res.locals.access, payload); + res.status(201).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +/** + * Specific stream + * + * /api/nginx/streams/123 + */ +router + .route("/:stream_id") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) // preferred so it doesn't apply to nonexistent routes + + /** + * GET /api/nginx/streams/123 + * + * Retrieve a specific stream + */ + .get(async (req, res, next) => { + try { + const data = await validator( + { + required: ["stream_id"], + additionalProperties: false, + properties: { + stream_id: { + $ref: "common#/properties/id", + }, + expand: { + $ref: "common#/properties/expand", + }, + }, + }, + { + stream_id: req.params.stream_id, + expand: typeof req.query.expand === "string" ? req.query.expand.split(",") : null, + }, + ); + const row = await internalStream.get(res.locals.access, { + id: Number.parseInt(data.stream_id, 10), + expand: data.expand, + }); + res.status(200).send(row); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }) + + /** + * PUT /api/nginx/streams/123 + * + * Update and existing stream + */ + .put(async (req, res, next) => { + try { + const payload = await apiValidator(getValidationSchema("/nginx/streams/{streamID}", "put"), req.body); + payload.id = Number.parseInt(req.params.stream_id, 10); + const result = await internalStream.update(res.locals.access, payload); + res.status(200).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }) + + /** + * DELETE /api/nginx/streams/123 + * + * Update and existing stream + */ + .delete(async (req, res, next) => { + try { + const result = await internalStream.delete(res.locals.access, { + id: Number.parseInt(req.params.stream_id, 10), + }); + res.status(200).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +/** + * Enable stream + * + * /api/nginx/streams/123/enable + */ +router + .route("/:host_id/enable") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + + /** + * POST /api/nginx/streams/123/enable + */ + .post(async (req, res, next) => { + try { + const result = await internalStream.enable(res.locals.access, { + id: Number.parseInt(req.params.host_id, 10), + }); + res.status(200).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +/** + * Disable stream + * + * /api/nginx/streams/123/disable + */ +router + .route("/:host_id/disable") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + + /** + * POST /api/nginx/streams/123/disable + */ + .post(async (req, res, next) => { + try { + const result = await internalStream.disable(res.locals.access, { + id: Number.parseInt(req.params.host_id, 10), + }); + res.status(200).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +export default router; diff --git a/backend/routes/reports.js b/backend/routes/reports.js new file mode 100644 index 0000000..df9962a --- /dev/null +++ b/backend/routes/reports.js @@ -0,0 +1,32 @@ +import express from "express"; +import internalReport from "../internal/report.js"; +import jwtdecode from "../lib/express/jwt-decode.js"; +import { debug, express as logger } from "../logger.js"; + +const router = express.Router({ + caseSensitive: true, + strict: true, + mergeParams: true, +}); + +router + .route("/hosts") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + + /** + * GET /reports/hosts + */ + .get(async (req, res, next) => { + try { + const data = await internalReport.getHostsReport(res.locals.access); + res.status(200).send(data); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +export default router; diff --git a/backend/routes/schema.js b/backend/routes/schema.js new file mode 100644 index 0000000..86bc186 --- /dev/null +++ b/backend/routes/schema.js @@ -0,0 +1,44 @@ +import express from "express"; +import { debug, express as logger } from "../logger.js"; +import PACKAGE from "../package.json" with { type: "json" }; +import { getCompiledSchema } from "../schema/index.js"; + +const router = express.Router({ + caseSensitive: true, + strict: true, + mergeParams: true, +}); + +router + .route("/") + .options((_, res) => { + res.sendStatus(204); + }) + + /** + * GET /schema + */ + .get(async (req, res) => { + try { + const swaggerJSON = await getCompiledSchema(); + + let proto = req.protocol; + if (typeof req.headers["x-forwarded-proto"] !== "undefined" && req.headers["x-forwarded-proto"]) { + proto = req.headers["x-forwarded-proto"]; + } + + let origin = `${proto}://${req.hostname}`; + if (typeof req.headers.origin !== "undefined" && req.headers.origin) { + origin = req.headers.origin; + } + + swaggerJSON.info.version = PACKAGE.version; + swaggerJSON.servers[0].url = `${origin}/api`; + res.status(200).send(swaggerJSON); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +export default router; diff --git a/backend/routes/settings.js b/backend/routes/settings.js new file mode 100644 index 0000000..ca4af65 --- /dev/null +++ b/backend/routes/settings.js @@ -0,0 +1,101 @@ +import express from "express"; +import internalSetting from "../internal/setting.js"; +import jwtdecode from "../lib/express/jwt-decode.js"; +import apiValidator from "../lib/validator/api.js"; +import validator from "../lib/validator/index.js"; +import { debug, express as logger } from "../logger.js"; +import { getValidationSchema } from "../schema/index.js"; + +const router = express.Router({ + caseSensitive: true, + strict: true, + mergeParams: true, +}); + +/** + * /api/settings + */ +router + .route("/") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + + /** + * GET /api/settings + * + * Retrieve all settings + */ + .get(async (req, res, next) => { + try { + const rows = await internalSetting.getAll(res.locals.access); + res.status(200).send(rows); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +/** + * Specific setting + * + * /api/settings/something + */ +router + .route("/:setting_id") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + + /** + * GET /settings/something + * + * Retrieve a specific setting + */ + .get(async (req, res, next) => { + try { + const data = await validator( + { + required: ["setting_id"], + additionalProperties: false, + properties: { + setting_id: { + type: "string", + minLength: 1, + }, + }, + }, + { + setting_id: req.params.setting_id, + }, + ); + const row = await internalSetting.get(res.locals.access, { + id: data.setting_id, + }); + res.status(200).send(row); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }) + + /** + * PUT /api/settings/something + * + * Update and existing setting + */ + .put(async (req, res, next) => { + try { + const payload = await apiValidator(getValidationSchema("/settings/{settingID}", "put"), req.body); + payload.id = req.params.setting_id; + const result = await internalSetting.update(res.locals.access, payload); + res.status(200).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +export default router; diff --git a/backend/routes/tokens.js b/backend/routes/tokens.js new file mode 100644 index 0000000..8a6a1bc --- /dev/null +++ b/backend/routes/tokens.js @@ -0,0 +1,78 @@ +import express from "express"; +import internalToken from "../internal/token.js"; +import jwtdecode from "../lib/express/jwt-decode.js"; +import apiValidator from "../lib/validator/api.js"; +import { debug, express as logger } from "../logger.js"; +import { getValidationSchema } from "../schema/index.js"; + +const router = express.Router({ + caseSensitive: true, + strict: true, + mergeParams: true, +}); + +router + .route("/") + .options((_, res) => { + res.sendStatus(204); + }) + + /** + * GET /tokens + * + * Get a new Token, given they already have a token they want to refresh + * We also piggy back on to this method, allowing admins to get tokens + * for services like Job board and Worker. + */ + .get(jwtdecode(), async (req, res, next) => { + try { + const data = await internalToken.getFreshToken(res.locals.access, { + expiry: typeof req.query.expiry !== "undefined" ? req.query.expiry : null, + scope: typeof req.query.scope !== "undefined" ? req.query.scope : null, + }); + res.status(200).send(data); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }) + + /** + * POST /tokens + * + * Create a new Token + */ + .post(async (req, res, next) => { + try { + const data = await apiValidator(getValidationSchema("/tokens", "post"), req.body); + const result = await internalToken.getTokenFromEmail(data); + res.status(200).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +router + .route("/2fa") + .options((_, res) => { + res.sendStatus(204); + }) + + /** + * POST /tokens/2fa + * + * Verify 2FA code and get full token + */ + .post(async (req, res, next) => { + try { + const { challenge_token, code } = await apiValidator(getValidationSchema("/tokens/2fa", "post"), req.body); + const result = await internalToken.verify2FA(challenge_token, code); + res.status(200).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +export default router; diff --git a/backend/routes/users.js b/backend/routes/users.js new file mode 100644 index 0000000..7c3da8c --- /dev/null +++ b/backend/routes/users.js @@ -0,0 +1,455 @@ +import express from "express"; +import internal2FA from "../internal/2fa.js"; +import internalUser from "../internal/user.js"; +import Access from "../lib/access.js"; +import { isCI } from "../lib/config.js"; +import errs from "../lib/error.js"; +import jwtdecode from "../lib/express/jwt-decode.js"; +import userIdFromMe from "../lib/express/user-id-from-me.js"; +import apiValidator from "../lib/validator/api.js"; +import validator from "../lib/validator/index.js"; +import { debug, express as logger } from "../logger.js"; +import { getValidationSchema } from "../schema/index.js"; +import { isSetup } from "../setup.js"; + +const router = express.Router({ + caseSensitive: true, + strict: true, + mergeParams: true, +}); + +/** + * /api/users + */ +router + .route("/") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + + /** + * GET /api/users + * + * Retrieve all users + */ + .get(async (req, res, next) => { + try { + const data = await validator( + { + additionalProperties: false, + properties: { + expand: { + $ref: "common#/properties/expand", + }, + query: { + $ref: "common#/properties/query", + }, + }, + }, + { + expand: + typeof req.query.expand === "string" + ? req.query.expand.split(",") + : null, + query: typeof req.query.query === "string" ? req.query.query : null, + }, + ); + const users = await internalUser.getAll( + res.locals.access, + data.expand, + data.query, + ); + res.status(200).send(users); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }) + + /** + * POST /api/users + * + * Create a new User + */ + .post(async (req, res, next) => { + const body = req.body; + + try { + // If we are in setup mode, we don't check access for current user + const setup = await isSetup(); + if (!setup) { + logger.info("Creating a new user in setup mode"); + const access = new Access(null); + await access.load(true); + res.locals.access = access; + + // We are in setup mode, set some defaults for this first new user, such as making + // them an admin. + body.is_disabled = false; + if (typeof body.roles !== "object" || body.roles === null) { + body.roles = []; + } + if (body.roles.indexOf("admin") === -1) { + body.roles.push("admin"); + } + } + + const payload = await apiValidator( + getValidationSchema("/users", "post"), + body, + ); + const user = await internalUser.create(res.locals.access, payload); + res.status(201).send(user); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }) + + /** + * DELETE /api/users + * + * Deletes ALL users. This is NOT GENERALLY AVAILABLE! + * (!) It is NOT an authenticated endpoint. + * (!) Only CI should be able to call this endpoint. As a result, + * + * it will only work when the env vars DEBUG=true and CI=true + * + * Do NOT set those env vars in a production environment! + */ + .delete(async (_, res, next) => { + if (isCI()) { + try { + logger.warn("Deleting all users - CI environment detected, allowing this operation"); + await internalUser.deleteAll(); + res.status(200).send(true); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + return; + } + + next(new errs.ItemNotFoundError()); + }); + +/** + * Specific user + * + * /api/users/123 + */ +router + .route("/:user_id") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + .all(userIdFromMe) + + /** + * GET /users/123 or /users/me + * + * Retrieve a specific user + */ + .get(async (req, res, next) => { + try { + const data = await validator( + { + required: ["user_id"], + additionalProperties: false, + properties: { + user_id: { + $ref: "common#/properties/id", + }, + expand: { + $ref: "common#/properties/expand", + }, + }, + }, + { + user_id: req.params.user_id, + expand: + typeof req.query.expand === "string" + ? req.query.expand.split(",") + : null, + }, + ); + + const user = await internalUser.get(res.locals.access, { + id: data.user_id, + expand: data.expand, + omit: internalUser.getUserOmisionsByAccess( + res.locals.access, + data.user_id, + ), + }); + res.status(200).send(user); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }) + + /** + * PUT /api/users/123 + * + * Update and existing user + */ + .put(async (req, res, next) => { + try { + const payload = await apiValidator( + getValidationSchema("/users/{userID}", "put"), + req.body, + ); + payload.id = req.params.user_id; + const result = await internalUser.update(res.locals.access, payload); + res.status(200).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }) + + /** + * DELETE /api/users/123 + * + * Update and existing user + */ + .delete(async (req, res, next) => { + try { + const result = await internalUser.delete(res.locals.access, { + id: req.params.user_id, + }); + res.status(200).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +/** + * Specific user auth + * + * /api/users/123/auth + */ +router + .route("/:user_id/auth") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + .all(userIdFromMe) + + /** + * PUT /api/users/123/auth + * + * Update password for a user + */ + .put(async (req, res, next) => { + try { + const payload = await apiValidator( + getValidationSchema("/users/{userID}/auth", "put"), + req.body, + ); + payload.id = req.params.user_id; + const result = await internalUser.setPassword(res.locals.access, payload); + res.status(200).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +/** + * Specific user permissions + * + * /api/users/123/permissions + */ +router + .route("/:user_id/permissions") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + .all(userIdFromMe) + + /** + * PUT /api/users/123/permissions + * + * Set some or all permissions for a user + */ + .put(async (req, res, next) => { + try { + const payload = await apiValidator( + getValidationSchema("/users/{userID}/permissions", "put"), + req.body, + ); + payload.id = req.params.user_id; + const result = await internalUser.setPermissions( + res.locals.access, + payload, + ); + res.status(200).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +/** + * Specific user login as + * + * /api/users/123/login + */ +router + .route("/:user_id/login") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + + /** + * POST /api/users/123/login + * + * Log in as a user + */ + .post(async (req, res, next) => { + try { + const result = await internalUser.loginAs(res.locals.access, { + id: Number.parseInt(req.params.user_id, 10), + }); + res.status(200).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +/** + * User 2FA status + * + * /api/users/123/2fa + */ +router + .route("/:user_id/2fa") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + .all(userIdFromMe) + + /** + * POST /api/users/123/2fa + * + * Start 2FA setup, returns QR code URL + */ + .post(async (req, res, next) => { + try { + const result = await internal2FA.startSetup(res.locals.access, req.params.user_id); + res.status(200).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }) + + /** + * GET /api/users/123/2fa + * + * Get 2FA status for a user + */ + .get(async (req, res, next) => { + try { + const status = await internal2FA.getStatus(res.locals.access, req.params.user_id); + res.status(200).send(status); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }) + + /** + * DELETE /api/users/123/2fa?code=XXXXXX + * + * Disable 2FA for a user + */ + .delete(async (req, res, next) => { + try { + const code = typeof req.query.code === "string" ? req.query.code : null; + if (!code) { + throw new errs.ValidationError("Missing required parameter: code"); + } + await internal2FA.disable(res.locals.access, req.params.user_id, code); + res.status(200).send(true); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +/** + * User 2FA enable + * + * /api/users/123/2fa/enable + */ +router + .route("/:user_id/2fa/enable") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + .all(userIdFromMe) + + /** + * POST /api/users/123/2fa/enable + * + * Verify code and enable 2FA + */ + .post(async (req, res, next) => { + try { + const { code } = await apiValidator( + getValidationSchema("/users/{userID}/2fa/enable", "post"), + req.body, + ); + const result = await internal2FA.enable(res.locals.access, req.params.user_id, code); + res.status(200).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +/** + * User 2FA backup codes + * + * /api/users/123/2fa/backup-codes + */ +router + .route("/:user_id/2fa/backup-codes") + .options((_, res) => { + res.sendStatus(204); + }) + .all(jwtdecode()) + .all(userIdFromMe) + + /** + * POST /api/users/123/2fa/backup-codes + * + * Regenerate backup codes + */ + .post(async (req, res, next) => { + try { + const { code } = await apiValidator( + getValidationSchema("/users/{userID}/2fa/backup-codes", "post"), + req.body, + ); + const result = await internal2FA.regenerateBackupCodes(res.locals.access, req.params.user_id, code); + res.status(200).send(result); + } catch (err) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${err}`); + next(err); + } + }); + +export default router; diff --git a/backend/routes/version.js b/backend/routes/version.js new file mode 100644 index 0000000..266e56f --- /dev/null +++ b/backend/routes/version.js @@ -0,0 +1,40 @@ +import express from "express"; +import internalRemoteVersion from "../internal/remote-version.js"; +import { debug, express as logger } from "../logger.js"; + +const router = express.Router({ + caseSensitive: true, + strict: true, + mergeParams: true, +}); + +/** + * /api/version/check + */ +router + .route("/check") + .options((_, res) => { + res.sendStatus(204); + }) + + /** + * GET /api/version/check + * + * Check for available updates + */ + .get(async (req, res, _next) => { + try { + const data = await internalRemoteVersion.get(); + res.status(200).send(data); + } catch (error) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${error}`); + // Send 200 even though there's an error to avoid triggering update checks repeatedly + res.status(200).send({ + current: null, + latest: null, + update_available: false, + }); + } + }); + +export default router; diff --git a/backend/routes/wireguard.js b/backend/routes/wireguard.js new file mode 100644 index 0000000..8fb9cb4 --- /dev/null +++ b/backend/routes/wireguard.js @@ -0,0 +1,162 @@ +import express from "express"; +import internalWireguard from "../internal/wireguard.js"; +import db from "../db.js"; + +const router = express.Router({ + caseSensitive: true, + strict: true, + mergeParams: true, +}); + +/** + * GET /api/wireguard + * Get WireGuard interface info + */ +router.get("/", async (req, res, next) => { + try { + const knex = db(); + const iface = await internalWireguard.getInterfaceInfo(knex); + res.status(200).json(iface); + } catch (err) { + next(err); + } +}); + +/** + * GET /api/wireguard/client + * List all WireGuard clients with live status + */ +router.get("/client", async (req, res, next) => { + try { + const knex = db(); + const clients = await internalWireguard.getClients(knex); + res.status(200).json(clients); + } catch (err) { + next(err); + } +}); + +/** + * POST /api/wireguard/client + * Create a new WireGuard client + */ +router.post("/client", async (req, res, next) => { + try { + const knex = db(); + const client = await internalWireguard.createClient(knex, req.body); + res.status(201).json(client); + } catch (err) { + next(err); + } +}); + +/** + * GET /api/wireguard/client/:id + * Get a specific WireGuard client + */ +router.get("/client/:id", async (req, res, next) => { + try { + const knex = db(); + const client = await knex("wg_client").where("id", req.params.id).first(); + if (!client) { + return res.status(404).json({ error: { message: "Client not found" } }); + } + res.status(200).json(client); + } catch (err) { + next(err); + } +}); + +/** + * PUT /api/wireguard/client/:id + * Update a WireGuard client + */ +router.put("/client/:id", async (req, res, next) => { + try { + const knex = db(); + const client = await internalWireguard.updateClient(knex, req.params.id, req.body); + res.status(200).json(client); + } catch (err) { + next(err); + } +}); + +/** + * DELETE /api/wireguard/client/:id + * Delete a WireGuard client + */ +router.delete("/client/:id", async (req, res, next) => { + try { + const knex = db(); + const result = await internalWireguard.deleteClient(knex, req.params.id); + res.status(200).json(result); + } catch (err) { + next(err); + } +}); + +/** + * POST /api/wireguard/client/:id/enable + * Enable a WireGuard client + */ +router.post("/client/:id/enable", async (req, res, next) => { + try { + const knex = db(); + const client = await internalWireguard.toggleClient(knex, req.params.id, true); + res.status(200).json(client); + } catch (err) { + next(err); + } +}); + +/** + * POST /api/wireguard/client/:id/disable + * Disable a WireGuard client + */ +router.post("/client/:id/disable", async (req, res, next) => { + try { + const knex = db(); + const client = await internalWireguard.toggleClient(knex, req.params.id, false); + res.status(200).json(client); + } catch (err) { + next(err); + } +}); + +/** + * GET /api/wireguard/client/:id/configuration + * Download WireGuard client configuration file + */ +router.get("/client/:id/configuration", async (req, res, next) => { + try { + const knex = db(); + const client = await knex("wg_client").where("id", req.params.id).first(); + if (!client) { + return res.status(404).json({ error: { message: "Client not found" } }); + } + const config = await internalWireguard.getClientConfiguration(knex, req.params.id); + const safeName = client.name.replace(/[^a-zA-Z0-9_.-]/g, "-").substring(0, 32); + res.set("Content-Disposition", `attachment; filename="${safeName}.conf"`); + res.set("Content-Type", "text/plain"); + res.status(200).send(config); + } catch (err) { + next(err); + } +}); + +/** + * GET /api/wireguard/client/:id/qrcode.svg + * Get QR code SVG for client configuration + */ +router.get("/client/:id/qrcode.svg", async (req, res, next) => { + try { + const knex = db(); + const svg = await internalWireguard.getClientQRCode(knex, req.params.id); + res.set("Content-Type", "image/svg+xml"); + res.status(200).send(svg); + } catch (err) { + next(err); + } +}); + +export default router; diff --git a/backend/schema/common.json b/backend/schema/common.json new file mode 100644 index 0000000..00b06e0 --- /dev/null +++ b/backend/schema/common.json @@ -0,0 +1,241 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "common", + "type": "object", + "properties": { + "id": { + "description": "Unique identifier", + "readOnly": true, + "type": "integer", + "minimum": 1, + "example": 11 + }, + "expand": { + "anyOf": [ + { + "type": "null" + }, + { + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } + } + ] + }, + "query": { + "anyOf": [ + { + "type": "null" + }, + { + "type": "string", + "minLength": 1, + "maxLength": 255 + } + ] + }, + "created_on": { + "description": "Date and time of creation", + "readOnly": true, + "type": "string", + "example": "2025-10-28T04:17:54.000Z" + }, + "modified_on": { + "description": "Date and time of last update", + "readOnly": true, + "type": "string", + "example": "2025-10-28T04:17:54.000Z" + }, + "user_id": { + "description": "User ID", + "type": "integer", + "minimum": 1, + "example": 2 + }, + "certificate_id": { + "description": "Certificate ID", + "anyOf": [ + { + "type": "integer", + "minimum": 0, + "example": 5 + }, + { + "type": "string", + "pattern": "^new$", + "example": "new" + } + ], + "example": 5 + }, + "access_list_id": { + "description": "Access List ID", + "type": "integer", + "minimum": 0, + "example": 3 + }, + "domain_names": { + "description": "Domain Names separated by a comma", + "type": "array", + "minItems": 1, + "maxItems": 100, + "uniqueItems": true, + "items": { + "type": "string", + "pattern": "^[^&| @!#%^();:/\\\\}{=+?<>,~`'\"]+$" + }, + "example": ["example.com", "www.example.com"] + }, + "enabled": { + "description": "Is Enabled", + "type": "boolean", + "example": false + }, + "ssl_forced": { + "description": "Is SSL Forced", + "type": "boolean", + "example": true + }, + "hsts_enabled": { + "description": "Is HSTS Enabled", + "type": "boolean", + "example": true + }, + "hsts_subdomains": { + "description": "Is HSTS applicable to all subdomains", + "type": "boolean", + "example": true + }, + "ssl_provider": { + "type": "string", + "pattern": "^(letsencrypt|other)$", + "example": "letsencrypt" + }, + "http2_support": { + "description": "HTTP2 Protocol Support", + "type": "boolean", + "example": true + }, + "block_exploits": { + "description": "Should we block common exploits", + "type": "boolean", + "example": false + }, + "caching_enabled": { + "description": "Should we cache assets", + "type": "boolean", + "example": true + }, + "email": { + "description": "Email address", + "type": "string", + "pattern": "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$", + "example": "me@example.com" + }, + "directive": { + "type": "string", + "enum": ["allow", "deny"], + "example": "allow" + }, + "address": { + "oneOf": [ + { + "type": "string", + "pattern": "^([0-9]{1,3}\\.){3}[0-9]{1,3}(/([0-9]|[1-2][0-9]|3[0-2]))?$" + }, + { + "type": "string", + "pattern": "^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8]))?$" + }, + { + "type": "string", + "pattern": "^all$" + } + ], + "example": "192.168.0.11" + }, + "access_items": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "username": { + "type": "string", + "minLength": 1 + }, + "password": { + "type": "string" + } + }, + "example": { + "username": "admin", + "password": "pass" + } + }, + "example": [ + { + "username": "admin", + "password": "pass" + } + ] + }, + "access_clients": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "$ref": "#/properties/address" + }, + "directive": { + "$ref": "#/properties/directive" + } + }, + "example": { + "directive": "allow", + "address": "192.168.0.0/24" + } + }, + "example": [ + { + "directive": "allow", + "address": "192.168.0.0/24" + } + ] + }, + "certificate_files": { + "description": "Certificate Files", + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "additionalProperties": false, + "required": ["certificate", "certificate_key"], + "properties": { + "certificate": { + "type": "string", + "example": "-----BEGIN CERTIFICATE-----\nMIID...-----END CERTIFICATE-----" + }, + "certificate_key": { + "type": "string", + "example": "-----BEGIN CERTIFICATE-----\nMIID...-----END CERTIFICATE-----" + }, + "intermediate_certificate": { + "type": "string", + "example": "-----BEGIN CERTIFICATE-----\nMIID...-----END CERTIFICATE-----" + } + } + }, + "example": { + "certificate": "-----BEGIN CERTIFICATE-----\nMIID...-----END CERTIFICATE-----", + "certificate_key": "-----BEGIN PRIVATE\nMIID...-----END CERTIFICATE-----" + } + } + } + } + } +} diff --git a/backend/schema/components/access-list-object.json b/backend/schema/components/access-list-object.json new file mode 100644 index 0000000..d80eb06 --- /dev/null +++ b/backend/schema/components/access-list-object.json @@ -0,0 +1,41 @@ +{ + "type": "object", + "description": "Access List object", + "required": ["id", "created_on", "modified_on", "owner_user_id", "name", "meta", "satisfy_any", "pass_auth", "proxy_host_count"], + "properties": { + "id": { + "$ref": "../common.json#/properties/id" + }, + "created_on": { + "$ref": "../common.json#/properties/created_on" + }, + "modified_on": { + "$ref": "../common.json#/properties/modified_on" + }, + "owner_user_id": { + "$ref": "../common.json#/properties/user_id" + }, + "name": { + "type": "string", + "minLength": 1, + "example": "My Access List" + }, + "meta": { + "type": "object", + "example": {} + }, + "satisfy_any": { + "type": "boolean", + "example": true + }, + "pass_auth": { + "type": "boolean", + "example": false + }, + "proxy_host_count": { + "type": "integer", + "minimum": 0, + "example": 3 + } + } +} diff --git a/backend/schema/components/audit-log-list.json b/backend/schema/components/audit-log-list.json new file mode 100644 index 0000000..7436852 --- /dev/null +++ b/backend/schema/components/audit-log-list.json @@ -0,0 +1,7 @@ +{ + "type": "array", + "description": "Audit Log list", + "items": { + "$ref": "./audit-log-object.json" + } +} diff --git a/backend/schema/components/audit-log-object.json b/backend/schema/components/audit-log-object.json new file mode 100644 index 0000000..307cac8 --- /dev/null +++ b/backend/schema/components/audit-log-object.json @@ -0,0 +1,47 @@ +{ + "type": "object", + "description": "Audit Log object", + "required": [ + "id", + "created_on", + "modified_on", + "user_id", + "object_type", + "object_id", + "action", + "meta" + ], + "additionalProperties": false, + "properties": { + "id": { + "$ref": "../common.json#/properties/id" + }, + "created_on": { + "$ref": "../common.json#/properties/created_on" + }, + "modified_on": { + "$ref": "../common.json#/properties/modified_on" + }, + "user_id": { + "$ref": "../common.json#/properties/user_id" + }, + "object_type": { + "type": "string", + "example": "certificate" + }, + "object_id": { + "$ref": "../common.json#/properties/id" + }, + "action": { + "type": "string", + "example": "created" + }, + "meta": { + "type": "object", + "example": {} + }, + "user": { + "$ref": "./user-object.json" + } + } +} diff --git a/backend/schema/components/certificate-list.json b/backend/schema/components/certificate-list.json new file mode 100644 index 0000000..cec4db8 --- /dev/null +++ b/backend/schema/components/certificate-list.json @@ -0,0 +1,7 @@ +{ + "type": "array", + "description": "Certificates list", + "items": { + "$ref": "./certificate-object.json" + } +} diff --git a/backend/schema/components/certificate-object.json b/backend/schema/components/certificate-object.json new file mode 100644 index 0000000..80cd92b --- /dev/null +++ b/backend/schema/components/certificate-object.json @@ -0,0 +1,86 @@ +{ + "type": "object", + "description": "Certificate object", + "required": ["id", "created_on", "modified_on", "owner_user_id", "provider", "nice_name", "domain_names", "expires_on", "meta"], + "additionalProperties": false, + "properties": { + "id": { + "$ref": "../common.json#/properties/id" + }, + "created_on": { + "$ref": "../common.json#/properties/created_on" + }, + "modified_on": { + "$ref": "../common.json#/properties/modified_on" + }, + "owner_user_id": { + "$ref": "../common.json#/properties/user_id" + }, + "provider": { + "$ref": "../common.json#/properties/ssl_provider" + }, + "nice_name": { + "type": "string", + "description": "Nice Name for the custom certificate", + "example": "My Custom Cert" + }, + "domain_names": { + "description": "Domain Names separated by a comma", + "type": "array", + "maxItems": 100, + "uniqueItems": true, + "items": { + "type": "string", + "pattern": "^[^&| @!#%^();:/\\\\}{=+?<>,~`'\"]+$" + }, + "example": ["example.com", "www.example.com"] + }, + "expires_on": { + "description": "Date and time of expiration", + "readOnly": true, + "type": "string", + "example": "2025-10-28T04:17:54.000Z" + }, + "owner": { + "$ref": "./user-object.json" + }, + "meta": { + "type": "object", + "additionalProperties": false, + "properties": { + "certificate": { + "type": "string", + "minLength": 1 + }, + "certificate_key": { + "type": "string", + "minLength": 1 + }, + "dns_challenge": { + "type": "boolean" + }, + "dns_provider_credentials": { + "type": "string" + }, + "dns_provider": { + "type": "string" + }, + "letsencrypt_certificate": { + "type": "object" + }, + "propagation_seconds": { + "type": "integer", + "minimum": 0 + }, + "key_type": { + "type": "string", + "enum": ["rsa", "ecdsa"], + "default": "rsa" + } + }, + "example": { + "dns_challenge": false + } + } + } +} diff --git a/backend/schema/components/check-version-object.json b/backend/schema/components/check-version-object.json new file mode 100644 index 0000000..ef2ffac --- /dev/null +++ b/backend/schema/components/check-version-object.json @@ -0,0 +1,23 @@ +{ + "type": "object", + "description": "Check Version object", + "additionalProperties": false, + "required": ["current", "latest", "update_available"], + "properties": { + "current": { + "type": ["string", "null"], + "description": "Current version string", + "example": "v2.10.1" + }, + "latest": { + "type": ["string", "null"], + "description": "Latest version string", + "example": "v2.13.4" + }, + "update_available": { + "type": "boolean", + "description": "Whether there's an update available", + "example": true + } + } +} diff --git a/backend/schema/components/dead-host-list.json b/backend/schema/components/dead-host-list.json new file mode 100644 index 0000000..56ff303 --- /dev/null +++ b/backend/schema/components/dead-host-list.json @@ -0,0 +1,7 @@ +{ + "type": "array", + "description": "404 Hosts list", + "items": { + "$ref": "./dead-host-object.json" + } +} diff --git a/backend/schema/components/dead-host-object.json b/backend/schema/components/dead-host-object.json new file mode 100644 index 0000000..b876ebf --- /dev/null +++ b/backend/schema/components/dead-host-object.json @@ -0,0 +1,64 @@ +{ + "type": "object", + "description": "404 Host object", + "required": ["id", "created_on", "modified_on", "owner_user_id", "domain_names", "certificate_id", "ssl_forced", "hsts_enabled", "hsts_subdomains", "http2_support", "advanced_config", "enabled", "meta"], + "additionalProperties": false, + "properties": { + "id": { + "$ref": "../common.json#/properties/id" + }, + "created_on": { + "$ref": "../common.json#/properties/created_on" + }, + "modified_on": { + "$ref": "../common.json#/properties/modified_on" + }, + "owner_user_id": { + "$ref": "../common.json#/properties/user_id" + }, + "domain_names": { + "$ref": "../common.json#/properties/domain_names" + }, + "certificate_id": { + "$ref": "../common.json#/properties/certificate_id" + }, + "ssl_forced": { + "$ref": "../common.json#/properties/ssl_forced" + }, + "hsts_enabled": { + "$ref": "../common.json#/properties/hsts_enabled" + }, + "hsts_subdomains": { + "$ref": "../common.json#/properties/hsts_subdomains" + }, + "http2_support": { + "$ref": "../common.json#/properties/http2_support" + }, + "advanced_config": { + "type": "string", + "example": "" + }, + "enabled": { + "$ref": "../common.json#/properties/enabled" + }, + "meta": { + "type": "object", + "example": {} + }, + "certificate": { + "oneOf": [ + { + "type": "null", + "example": null + }, + { + "$ref": "./certificate-object.json" + } + ], + "example": null + }, + "owner": { + "$ref": "./user-object.json" + } + } +} diff --git a/backend/schema/components/dns-providers-list.json b/backend/schema/components/dns-providers-list.json new file mode 100644 index 0000000..c240db1 --- /dev/null +++ b/backend/schema/components/dns-providers-list.json @@ -0,0 +1,23 @@ +{ + "type": "array", + "description": "DNS Providers list", + "items": { + "type": "object", + "required": ["id", "name", "credentials"], + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the DNS provider, matching the python package" + }, + "name": { + "type": "string", + "description": "Human-readable name of the DNS provider" + }, + "credentials": { + "type": "string", + "description": "Instructions on how to format the credentials for this DNS provider" + } + } + } +} diff --git a/backend/schema/components/error-object.json b/backend/schema/components/error-object.json new file mode 100644 index 0000000..6f350a0 --- /dev/null +++ b/backend/schema/components/error-object.json @@ -0,0 +1,16 @@ +{ + "type": "object", + "description": "Error object", + "additionalProperties": false, + "required": ["code", "message"], + "properties": { + "code": { + "type": "integer", + "example": 400 + }, + "message": { + "type": "string", + "example": "Bad Request" + } + } +} diff --git a/backend/schema/components/error.json b/backend/schema/components/error.json new file mode 100644 index 0000000..ceb3e14 --- /dev/null +++ b/backend/schema/components/error.json @@ -0,0 +1,9 @@ +{ + "type": "object", + "description": "Error", + "properties": { + "error": { + "$ref": "./error-object.json" + } + } +} diff --git a/backend/schema/components/health-object.json b/backend/schema/components/health-object.json new file mode 100644 index 0000000..592ead2 --- /dev/null +++ b/backend/schema/components/health-object.json @@ -0,0 +1,46 @@ +{ + "type": "object", + "description": "Health object", + "additionalProperties": false, + "required": ["status", "version"], + "properties": { + "status": { + "type": "string", + "description": "Healthy", + "example": "OK" + }, + "setup": { + "type": "boolean", + "description": "Whether the initial setup has been completed", + "example": true + }, + "version": { + "type": "object", + "description": "The version object", + "example": { + "major": 2, + "minor": 0, + "revision": 0 + }, + "additionalProperties": false, + "required": ["major", "minor", "revision"], + "properties": { + "major": { + "type": "integer", + "minimum": 0, + "example": 2 + }, + "minor": { + "type": "integer", + "minimum": 0, + "example": 10 + }, + "revision": { + "type": "integer", + "minimum": 0, + "example": 1 + } + } + } + } +} diff --git a/backend/schema/components/permission-object.json b/backend/schema/components/permission-object.json new file mode 100644 index 0000000..cae9d26 --- /dev/null +++ b/backend/schema/components/permission-object.json @@ -0,0 +1,48 @@ +{ + "type": "object", + "minProperties": 1, + "properties": { + "visibility": { + "type": "string", + "description": "Visibility Type", + "enum": ["all", "user"], + "example": "all" + }, + "access_lists": { + "type": "string", + "description": "Access Lists Permissions", + "enum": ["hidden", "view", "manage"], + "example": "view" + }, + "dead_hosts": { + "type": "string", + "description": "404 Hosts Permissions", + "enum": ["hidden", "view", "manage"], + "example": "manage" + }, + "proxy_hosts": { + "type": "string", + "description": "Proxy Hosts Permissions", + "enum": ["hidden", "view", "manage"], + "example": "hidden" + }, + "redirection_hosts": { + "type": "string", + "description": "Redirection Permissions", + "enum": ["hidden", "view", "manage"], + "example": "view" + }, + "streams": { + "type": "string", + "description": "Streams Permissions", + "enum": ["hidden", "view", "manage"], + "example": "manage" + }, + "certificates": { + "type": "string", + "description": "Certificates Permissions", + "enum": ["hidden", "view", "manage"], + "example": "hidden" + } + } +} diff --git a/backend/schema/components/proxy-host-list.json b/backend/schema/components/proxy-host-list.json new file mode 100644 index 0000000..39789b4 --- /dev/null +++ b/backend/schema/components/proxy-host-list.json @@ -0,0 +1,7 @@ +{ + "type": "array", + "description": "Proxy Hosts list", + "items": { + "$ref": "./proxy-host-object.json" + } +} diff --git a/backend/schema/components/proxy-host-object.json b/backend/schema/components/proxy-host-object.json new file mode 100644 index 0000000..3ac6462 --- /dev/null +++ b/backend/schema/components/proxy-host-object.json @@ -0,0 +1,178 @@ +{ + "type": "object", + "description": "Proxy Host object", + "required": [ + "id", + "created_on", + "modified_on", + "owner_user_id", + "domain_names", + "forward_host", + "forward_port", + "access_list_id", + "certificate_id", + "ssl_forced", + "caching_enabled", + "block_exploits", + "advanced_config", + "meta", + "allow_websocket_upgrade", + "http2_support", + "forward_scheme", + "enabled", + "locations", + "hsts_enabled", + "hsts_subdomains", + "trust_forwarded_proto" + ], + "properties": { + "id": { + "$ref": "../common.json#/properties/id" + }, + "created_on": { + "$ref": "../common.json#/properties/created_on" + }, + "modified_on": { + "$ref": "../common.json#/properties/modified_on" + }, + "owner_user_id": { + "$ref": "../common.json#/properties/user_id" + }, + "domain_names": { + "$ref": "../common.json#/properties/domain_names" + }, + "forward_host": { + "type": "string", + "minLength": 1, + "maxLength": 255, + "example": "127.0.0.1" + }, + "forward_port": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "example": 8080 + }, + "access_list_id": { + "$ref": "../common.json#/properties/access_list_id" + }, + "certificate_id": { + "$ref": "../common.json#/properties/certificate_id" + }, + "ssl_forced": { + "$ref": "../common.json#/properties/ssl_forced" + }, + "caching_enabled": { + "$ref": "../common.json#/properties/caching_enabled" + }, + "block_exploits": { + "$ref": "../common.json#/properties/block_exploits" + }, + "advanced_config": { + "type": "string", + "example": "" + }, + "meta": { + "type": "object", + "example": { + "nginx_online": true, + "nginx_err": null + } + }, + "allow_websocket_upgrade": { + "description": "Allow Websocket Upgrade for all paths", + "type": "boolean", + "example": true + }, + "http2_support": { + "$ref": "../common.json#/properties/http2_support" + }, + "forward_scheme": { + "type": "string", + "enum": ["http", "https"], + "example": "http" + }, + "enabled": { + "$ref": "../common.json#/properties/enabled" + }, + "locations": { + "type": "array", + "minItems": 0, + "items": { + "type": "object", + "required": ["forward_scheme", "forward_host", "forward_port", "path"], + "additionalProperties": false, + "properties": { + "id": { + "type": ["integer", "null"] + }, + "path": { + "type": "string", + "minLength": 1 + }, + "forward_scheme": { + "$ref": "#/properties/forward_scheme" + }, + "forward_host": { + "$ref": "#/properties/forward_host" + }, + "forward_port": { + "$ref": "#/properties/forward_port" + }, + "forward_path": { + "type": "string" + }, + "advanced_config": { + "type": "string" + } + } + }, + "example": [ + { + "path": "/app", + "forward_scheme": "http", + "forward_host": "example.com", + "forward_port": 80 + } + ] + }, + "hsts_enabled": { + "$ref": "../common.json#/properties/hsts_enabled" + }, + "hsts_subdomains": { + "$ref": "../common.json#/properties/hsts_subdomains" + }, + "trust_forwarded_proto":{ + "type": "boolean", + "description": "Trust the forwarded headers", + "example": false + }, + "certificate": { + "oneOf": [ + { + "type": "null", + "example": null + }, + { + "$ref": "./certificate-object.json" + } + ], + "example": null + }, + "owner": { + "$ref": "./user-object.json" + }, + "access_list": { + "oneOf": [ + { + "type": "null", + "example": null + }, + { + "$ref": "./access-list-object.json" + } + ], + "example": null + } + } +} diff --git a/backend/schema/components/redirection-host-list.json b/backend/schema/components/redirection-host-list.json new file mode 100644 index 0000000..716dcfa --- /dev/null +++ b/backend/schema/components/redirection-host-list.json @@ -0,0 +1,7 @@ +{ + "type": "array", + "description": "Redirection Hosts list", + "items": { + "$ref": "./redirection-host-object.json" + } +} diff --git a/backend/schema/components/redirection-host-object.json b/backend/schema/components/redirection-host-object.json new file mode 100644 index 0000000..5816972 --- /dev/null +++ b/backend/schema/components/redirection-host-object.json @@ -0,0 +1,116 @@ +{ + "type": "object", + "description": "Redirection Host object", + "required": [ + "id", + "created_on", + "modified_on", + "owner_user_id", + "domain_names", + "forward_http_code", + "forward_scheme", + "forward_domain_name", + "preserve_path", + "certificate_id", + "ssl_forced", + "hsts_enabled", + "hsts_subdomains", + "http2_support", + "block_exploits", + "advanced_config", + "enabled", + "meta" + ], + "additionalProperties": false, + "properties": { + "id": { + "$ref": "../common.json#/properties/id" + }, + "created_on": { + "$ref": "../common.json#/properties/created_on" + }, + "modified_on": { + "$ref": "../common.json#/properties/modified_on" + }, + "owner_user_id": { + "$ref": "../common.json#/properties/user_id" + }, + "domain_names": { + "$ref": "../common.json#/properties/domain_names" + }, + "forward_http_code": { + "description": "Redirect HTTP Status Code", + "type": "integer", + "minimum": 300, + "maximum": 308, + "example": 302 + }, + "forward_scheme": { + "type": "string", + "enum": [ + "auto", + "http", + "https" + ], + "example": "http" + }, + "forward_domain_name": { + "description": "Domain Name", + "type": "string", + "pattern": "^(?:[^.*]+\\.?)+[^.]$", + "example": "jc21.com" + }, + "preserve_path": { + "description": "Should the path be preserved", + "type": "boolean", + "example": true + }, + "certificate_id": { + "$ref": "../common.json#/properties/certificate_id" + }, + "ssl_forced": { + "$ref": "../common.json#/properties/ssl_forced" + }, + "hsts_enabled": { + "$ref": "../common.json#/properties/hsts_enabled" + }, + "hsts_subdomains": { + "$ref": "../common.json#/properties/hsts_subdomains" + }, + "http2_support": { + "$ref": "../common.json#/properties/http2_support" + }, + "block_exploits": { + "$ref": "../common.json#/properties/block_exploits" + }, + "advanced_config": { + "type": "string", + "example": "" + }, + "enabled": { + "$ref": "../common.json#/properties/enabled" + }, + "meta": { + "type": "object", + "example": { + "nginx_online": true, + "nginx_err": null + } + }, + "certificate": { + "oneOf": [ + { + "type": "null", + "example": null + }, + { + "$ref": "./certificate-object.json" + } + ], + "example": null + }, + "owner": { + "$ref": "./user-object.json" + } + } +} diff --git a/backend/schema/components/security-schemes.json b/backend/schema/components/security-schemes.json new file mode 100644 index 0000000..4ae57bd --- /dev/null +++ b/backend/schema/components/security-schemes.json @@ -0,0 +1,8 @@ +{ + "bearerAuth": { + "type": "http", + "scheme": "bearer", + "bearerFormat": "JWT", + "description": "JWT Bearer Token authentication" + } +} diff --git a/backend/schema/components/setting-list.json b/backend/schema/components/setting-list.json new file mode 100644 index 0000000..c66f099 --- /dev/null +++ b/backend/schema/components/setting-list.json @@ -0,0 +1,7 @@ +{ + "type": "array", + "description": "Setting list", + "items": { + "$ref": "./setting-object.json" + } +} diff --git a/backend/schema/components/setting-object.json b/backend/schema/components/setting-object.json new file mode 100644 index 0000000..b9c6a10 --- /dev/null +++ b/backend/schema/components/setting-object.json @@ -0,0 +1,56 @@ +{ + "type": "object", + "description": "Setting object", + "required": ["id", "name", "description", "value", "meta"], + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "description": "Setting ID", + "minLength": 1, + "example": "default-site" + }, + "name": { + "type": "string", + "description": "Setting Display Name", + "minLength": 1, + "example": "Default Site" + }, + "description": { + "type": "string", + "description": "Meaningful description", + "minLength": 1, + "example": "What to show when Nginx is hit with an unknown Host" + }, + "value": { + "description": "Value in almost any form", + "example": "congratulations", + "anyOf": [ + { + "type": "string", + "minLength": 1 + }, + { + "type": "integer" + }, + { + "type": "object" + }, + { + "type": "number" + }, + { + "type": "array" + } + ] + }, + "meta": { + "description": "Extra metadata", + "example": { + "redirect": "http://example.com", + "html": "

404

" + }, + "type": "object" + } + } +} diff --git a/backend/schema/components/stream-list.json b/backend/schema/components/stream-list.json new file mode 100644 index 0000000..b6e8b6d --- /dev/null +++ b/backend/schema/components/stream-list.json @@ -0,0 +1,7 @@ +{ + "type": "array", + "description": "Streams list", + "items": { + "$ref": "./stream-object.json" + } +} diff --git a/backend/schema/components/stream-object.json b/backend/schema/components/stream-object.json new file mode 100644 index 0000000..602073c --- /dev/null +++ b/backend/schema/components/stream-object.json @@ -0,0 +1,95 @@ +{ + "type": "object", + "description": "Stream object", + "required": [ + "id", + "created_on", + "modified_on", + "owner_user_id", + "incoming_port", + "forwarding_host", + "forwarding_port", + "tcp_forwarding", + "udp_forwarding", + "enabled", + "meta" + ], + "additionalProperties": false, + "properties": { + "id": { + "$ref": "../common.json#/properties/id" + }, + "created_on": { + "$ref": "../common.json#/properties/created_on" + }, + "modified_on": { + "$ref": "../common.json#/properties/modified_on" + }, + "owner_user_id": { + "$ref": "../common.json#/properties/user_id" + }, + "incoming_port": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "example": 9090 + }, + "forwarding_host": { + "anyOf": [ + { + "description": "Domain Name", + "type": "string", + "pattern": "^(?:[^.*]+\\.?)+[^.]$", + "example": "example.com" + }, + { + "type": "string", + "format": "^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "example": "example.com" + }, + "forwarding_port": { + "type": "integer", + "minimum": 1, + "maximum": 65535, + "example": 80 + }, + "tcp_forwarding": { + "type": "boolean", + "example": true + }, + "udp_forwarding": { + "type": "boolean", + "example": false + }, + "enabled": { + "$ref": "../common.json#/properties/enabled" + }, + "certificate_id": { + "$ref": "../common.json#/properties/certificate_id" + }, + "meta": { + "type": "object", + "example": {} + }, + "certificate": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "./certificate-object.json" + } + ], + "example": null + }, + "owner": { + "$ref": "./user-object.json" + } + } +} diff --git a/backend/schema/components/token-challenge.json b/backend/schema/components/token-challenge.json new file mode 100644 index 0000000..9d79cd9 --- /dev/null +++ b/backend/schema/components/token-challenge.json @@ -0,0 +1,18 @@ +{ + "type": "object", + "description": "Token object", + "required": ["requires_2fa", "challenge_token"], + "additionalProperties": false, + "properties": { + "requires_2fa": { + "description": "Whether this token request requires two-factor authentication", + "example": true, + "type": "boolean" + }, + "challenge_token": { + "description": "Challenge Token used in subsequent 2FA verification", + "example": "eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCJ9.ey...xaHKYr3Kk6MvkUjcC4", + "type": "string" + } + } +} diff --git a/backend/schema/components/token-object.json b/backend/schema/components/token-object.json new file mode 100644 index 0000000..6ec4e43 --- /dev/null +++ b/backend/schema/components/token-object.json @@ -0,0 +1,18 @@ +{ + "type": "object", + "description": "Token object", + "required": ["expires", "token"], + "additionalProperties": false, + "properties": { + "expires": { + "description": "Token Expiry ISO Time String", + "example": "2025-02-04T20:40:46.340Z", + "type": "string" + }, + "token": { + "description": "JWT Token", + "example": "eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCJ9.ey...xaHKYr3Kk6MvkUjcC4", + "type": "string" + } + } +} diff --git a/backend/schema/components/user-list.json b/backend/schema/components/user-list.json new file mode 100644 index 0000000..c5c0f71 --- /dev/null +++ b/backend/schema/components/user-list.json @@ -0,0 +1,7 @@ +{ + "type": "array", + "description": "User list", + "items": { + "$ref": "./user-object.json" + } +} diff --git a/backend/schema/components/user-object.json b/backend/schema/components/user-object.json new file mode 100644 index 0000000..7acd0a4 --- /dev/null +++ b/backend/schema/components/user-object.json @@ -0,0 +1,116 @@ +{ + "type": "object", + "description": "User object", + "required": ["id", "created_on", "modified_on", "is_disabled", "email", "name", "nickname", "avatar", "roles"], + "additionalProperties": false, + "properties": { + "id": { + "type": "integer", + "description": "User ID", + "minimum": 1, + "example": 1 + }, + "created_on": { + "type": "string", + "description": "Created Date", + "example": "2020-01-30T09:36:08.000Z" + }, + "modified_on": { + "type": "string", + "description": "Modified Date", + "example": "2020-01-30T09:41:04.000Z" + }, + "is_disabled": { + "type": "boolean", + "description": "Is user Disabled", + "example": true + }, + "email": { + "type": "string", + "description": "Email", + "minLength": 3, + "example": "jc@jc21.com" + }, + "name": { + "type": "string", + "description": "Name", + "minLength": 1, + "example": "Jamie Curnow" + }, + "nickname": { + "type": "string", + "description": "Nickname", + "example": "James" + }, + "avatar": { + "type": "string", + "description": "Gravatar URL based on email, without scheme", + "example": "//www.gravatar.com/avatar/6193176330f8d38747f038c170ddb193?default=mm" + }, + "roles": { + "description": "Roles applied", + "example": ["admin"], + "type": "array", + "items": { + "type": "string" + } + }, + "permissions": { + "type": "object", + "description": "Permissions if expanded in request", + "required": [ + "visibility", + "proxy_hosts", + "redirection_hosts", + "dead_hosts", + "streams", + "access_lists", + "certificates" + ], + "properties": { + "visibility": { + "type": "string", + "description": "Visibility level", + "example": "all", + "pattern": "^(all|user)$" + }, + "proxy_hosts": { + "type": "string", + "description": "Proxy Hosts access level", + "example": "manage", + "pattern": "^(manage|view|hidden)$" + }, + "redirection_hosts": { + "type": "string", + "description": "Redirection Hosts access level", + "example": "manage", + "pattern": "^(manage|view|hidden)$" + }, + "dead_hosts": { + "type": "string", + "description": "Dead Hosts access level", + "example": "manage", + "pattern": "^(manage|view|hidden)$" + }, + "streams": { + "type": "string", + "description": "Streams access level", + "example": "manage", + "pattern": "^(manage|view|hidden)$" + }, + "access_lists": { + "type": "string", + "description": "Access Lists access level", + "example": "hidden", + "pattern": "^(manage|view|hidden)$" + }, + "certificates": { + "type": "string", + "description": "Certificates access level", + "example": "view", + "pattern": "^(manage|view|hidden)$" + } + } + } + } +} diff --git a/backend/schema/index.js b/backend/schema/index.js new file mode 100644 index 0000000..0478486 --- /dev/null +++ b/backend/schema/index.js @@ -0,0 +1,46 @@ +import { dirname } from "node:path"; +import { fileURLToPath } from "node:url"; +import $RefParser from "@apidevtools/json-schema-ref-parser"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +let compiledSchema = null; + +/** + * Compiles the schema, by dereferencing it, only once + * and returns the memory cached value + */ +const getCompiledSchema = async () => { + if (compiledSchema === null) { + compiledSchema = await $RefParser.dereference(`${__dirname}/swagger.json`, { + mutateInputSchema: false, + }); + } + return compiledSchema; +}; + +/** + * Scans the schema for the validation schema for the given path and method + * and returns it. + * + * @param {string} path + * @param {string} method + * @returns string|null + */ +const getValidationSchema = (path, method) => { + if ( + compiledSchema !== null && + typeof compiledSchema.paths[path] !== "undefined" && + typeof compiledSchema.paths[path][method] !== "undefined" && + typeof compiledSchema.paths[path][method].requestBody !== "undefined" && + typeof compiledSchema.paths[path][method].requestBody.content !== "undefined" && + typeof compiledSchema.paths[path][method].requestBody.content["application/json"] !== "undefined" && + typeof compiledSchema.paths[path][method].requestBody.content["application/json"].schema !== "undefined" + ) { + return compiledSchema.paths[path][method].requestBody.content["application/json"].schema; + } + return null; +}; + +export { getCompiledSchema, getValidationSchema }; diff --git a/backend/schema/paths/audit-log/get.json b/backend/schema/paths/audit-log/get.json new file mode 100644 index 0000000..62c09ce --- /dev/null +++ b/backend/schema/paths/audit-log/get.json @@ -0,0 +1,53 @@ +{ + "operationId": "getAuditLogs", + "summary": "Get Audit Logs", + "tags": ["audit-log"], + "security": [ + { + "bearerAuth": ["admin"] + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": [ + { + "id": 7, + "created_on": "2024-10-08T13:09:54.000Z", + "modified_on": "2024-10-08T13:09:54.000Z", + "user_id": 1, + "object_type": "user", + "object_id": 3, + "action": "updated", + "meta": { + "name": "John Doe", + "permissions": { + "user_id": 3, + "visibility": "all", + "access_lists": "manage", + "dead_hosts": "hidden", + "proxy_hosts": "manage", + "redirection_hosts": "view", + "streams": "hidden", + "certificates": "manage", + "id": 3, + "modified_on": "2024-10-08T13:09:54.000Z", + "created_on": "2024-10-08T13:09:51.000Z" + } + } + } + ] + } + }, + "schema": { + "$ref": "../../components/audit-log-list.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/audit-log/id/get.json b/backend/schema/paths/audit-log/id/get.json new file mode 100644 index 0000000..38ff1c7 --- /dev/null +++ b/backend/schema/paths/audit-log/id/get.json @@ -0,0 +1,72 @@ +{ + "operationId": "getAuditLog", + "summary": "Get Audit Log Event", + "tags": ["audit-log"], + "security": [ + { + "bearerAuth": [ + "admin" + ] + } + ], + "parameters": [ + { + "in": "path", + "name": "id", + "description": "Audit Log Event ID", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "example": 1 + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "id": 1, + "created_on": "2025-09-15T17:27:45.000Z", + "modified_on": "2025-09-15T17:27:45.000Z", + "user_id": 1, + "object_type": "user", + "object_id": 1, + "action": "created", + "meta": { + "id": 1, + "created_on": "2025-09-15T17:27:45.000Z", + "modified_on": "2025-09-15T17:27:45.000Z", + "is_disabled": false, + "email": "jc@jc21.com", + "name": "Jamie", + "nickname": "Jamie", + "avatar": "//www.gravatar.com/avatar/6193176330f8d38747f038c170ddb193?default=mm", + "roles": [ + "admin" + ], + "permissions": { + "visibility": "all", + "proxy_hosts": "manage", + "redirection_hosts": "manage", + "dead_hosts": "manage", + "streams": "manage", + "access_lists": "manage", + "certificates": "manage" + } + } + } + } + }, + "schema": { + "$ref": "../../../components/audit-log-object.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/get.json b/backend/schema/paths/get.json new file mode 100644 index 0000000..9f6ba2a --- /dev/null +++ b/backend/schema/paths/get.json @@ -0,0 +1,30 @@ +{ + "operationId": "health", + "summary": "Returns the API health status", + "tags": ["public"], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "status": "OK", + "setup": true, + "version": { + "major": 2, + "minor": 1, + "revision": 0 + } + } + } + }, + "schema": { + "$ref": "../components/health-object.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/access-lists/get.json b/backend/schema/paths/nginx/access-lists/get.json new file mode 100644 index 0000000..ada40f5 --- /dev/null +++ b/backend/schema/paths/nginx/access-lists/get.json @@ -0,0 +1,51 @@ +{ + "operationId": "getAccessLists", + "summary": "Get all access lists", + "tags": ["access-lists"], + "security": [ + { + "bearerAuth": [ + "access_lists.view" + ] + } + ], + "parameters": [ + { + "in": "query", + "name": "expand", + "description": "Expansions", + "schema": { + "type": "string", + "enum": [ + "owner", + "items", + "clients", + "proxy_hosts" + ] + } + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "example": { + "id": 1, + "created_on": "2024-10-08T22:15:40.000Z", + "modified_on": "2024-10-08T22:15:40.000Z", + "owner_user_id": 1, + "name": "test1234", + "meta": {}, + "satisfy_any": true, + "pass_auth": false, + "proxy_host_count": 0 + }, + "schema": { + "$ref": "../../../components/access-list-object.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/access-lists/listID/delete.json b/backend/schema/paths/nginx/access-lists/listID/delete.json new file mode 100644 index 0000000..182a883 --- /dev/null +++ b/backend/schema/paths/nginx/access-lists/listID/delete.json @@ -0,0 +1,40 @@ +{ + "operationId": "deleteAccessList", + "summary": "Delete a Access List", + "tags": ["access-lists"], + "security": [ + { + "bearerAuth": ["access_lists.manage"] + } + ], + "parameters": [ + { + "in": "path", + "name": "listID", + "description": "Access List ID", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "example": 2 + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": true + } + }, + "schema": { + "type": "boolean" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/access-lists/listID/get.json b/backend/schema/paths/nginx/access-lists/listID/get.json new file mode 100644 index 0000000..9705826 --- /dev/null +++ b/backend/schema/paths/nginx/access-lists/listID/get.json @@ -0,0 +1,54 @@ +{ + "operationId": "getAccessList", + "summary": "Get a access List", + "tags": [ + "access-lists" + ], + "security": [ + { + "bearerAuth": [ + "access_lists.view" + ] + } + ], + "parameters": [ + { + "in": "path", + "name": "listID", + "description": "Access List ID", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "example": 1 + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "id": 1, + "created_on": "2025-10-28T04:06:55.000Z", + "modified_on": "2025-10-29T22:48:20.000Z", + "owner_user_id": 1, + "name": "My Access List", + "meta": {}, + "satisfy_any": false, + "pass_auth": false, + "proxy_host_count": 1 + } + } + }, + "schema": { + "$ref": "../../../../components/access-list-object.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/access-lists/listID/put.json b/backend/schema/paths/nginx/access-lists/listID/put.json new file mode 100644 index 0000000..61e8044 --- /dev/null +++ b/backend/schema/paths/nginx/access-lists/listID/put.json @@ -0,0 +1,142 @@ +{ + "operationId": "updateAccessList", + "summary": "Update a Access List", + "tags": ["access-lists"], + "security": [ + { + "bearerAuth": ["access_lists.manage"] + } + ], + "parameters": [ + { + "in": "path", + "name": "listID", + "description": "Access List ID", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "example": 2 + } + ], + "requestBody": { + "description": "Access List Payload", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false, + "minProperties": 1, + "properties": { + "name": { + "$ref": "../../../../components/access-list-object.json#/properties/name" + }, + "satisfy_any": { + "$ref": "../../../../components/access-list-object.json#/properties/satisfy_any" + }, + "pass_auth": { + "$ref": "../../../../components/access-list-object.json#/properties/pass_auth" + }, + "items": { + "$ref": "../../../../common.json#/properties/access_items" + }, + "clients": { + "$ref": "../../../../common.json#/properties/access_clients" + } + } + }, + "example": { + "name": "My Access List", + "satisfy_any": true, + "pass_auth": false, + "items": [ + { + "username": "admin2", + "password": "pass2" + } + ], + "clients": [ + { + "directive": "allow", + "address": "192.168.0.0/24" + } + ] + } + } + } + }, + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "id": 1, + "created_on": "2024-10-08T22:15:40.000Z", + "modified_on": "2024-10-08T22:34:34.000Z", + "owner_user_id": 1, + "name": "test123!!", + "meta": {}, + "satisfy_any": true, + "pass_auth": false, + "proxy_host_count": 0, + "owner": { + "id": 1, + "created_on": "2024-10-07T22:43:55.000Z", + "modified_on": "2024-10-08T12:52:54.000Z", + "is_disabled": false, + "email": "admin@example.com", + "name": "Administrator", + "nickname": "some guy", + "avatar": "//www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?default=mm", + "roles": ["admin"] + }, + "items": [ + { + "id": 1, + "created_on": "2024-10-08T22:15:40.000Z", + "modified_on": "2024-10-08T22:15:40.000Z", + "access_list_id": 1, + "username": "admin", + "password": "", + "meta": {}, + "hint": "a****" + }, + { + "id": 2, + "created_on": "2024-10-08T22:15:40.000Z", + "modified_on": "2024-10-08T22:15:40.000Z", + "access_list_id": 1, + "username": "asdad", + "password": "", + "meta": {}, + "hint": "a*****" + } + ], + "clients": [ + { + "id": 1, + "created_on": "2024-10-08T22:15:40.000Z", + "modified_on": "2024-10-08T22:15:40.000Z", + "access_list_id": 1, + "address": "127.0.0.1", + "directive": "allow", + "meta": {} + } + ], + "proxy_hosts": [] + } + } + }, + "schema": { + "$ref": "../../../../components/access-list-object.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/access-lists/post.json b/backend/schema/paths/nginx/access-lists/post.json new file mode 100644 index 0000000..38b7003 --- /dev/null +++ b/backend/schema/paths/nginx/access-lists/post.json @@ -0,0 +1,135 @@ +{ + "operationId": "createAccessList", + "summary": "Create a Access List", + "tags": ["access-lists"], + "security": [ + { + "bearerAuth": [ + "access_lists.manage" + ] + } + ], + "requestBody": { + "description": "Access List Payload", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false, + "required": [ + "name" + ], + "properties": { + "name": { + "$ref": "../../../components/access-list-object.json#/properties/name" + }, + "satisfy_any": { + "$ref": "../../../components/access-list-object.json#/properties/satisfy_any" + }, + "pass_auth": { + "$ref": "../../../components/access-list-object.json#/properties/pass_auth" + }, + "items": { + "$ref": "../../../common.json#/properties/access_items" + }, + "clients": { + "$ref": "../../../common.json#/properties/access_clients" + } + } + }, + "example": { + "name": "My Access List", + "satisfy_any": true, + "pass_auth": false, + "items": [ + { + "username": "admin", + "password": "pass" + } + ], + "clients": [ + { + "directive": "allow", + "address": "192.168.0.0/24" + } + ] + } + } + } + }, + "responses": { + "201": { + "description": "201 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "id": 1, + "created_on": "2024-10-08T22:15:40.000Z", + "modified_on": "2024-10-08T22:15:40.000Z", + "owner_user_id": 1, + "name": "test1234", + "meta": {}, + "satisfy_any": true, + "pass_auth": false, + "proxy_host_count": 0, + "owner": { + "id": 1, + "created_on": "2024-10-07T22:43:55.000Z", + "modified_on": "2024-10-08T12:52:54.000Z", + "is_disabled": false, + "email": "admin@example.com", + "name": "Administrator", + "nickname": "some guy", + "avatar": "//www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?default=mm", + "roles": [ + "admin" + ] + }, + "items": [ + { + "id": 1, + "created_on": "2024-10-08T22:15:40.000Z", + "modified_on": "2024-10-08T22:15:40.000Z", + "access_list_id": 1, + "username": "admin", + "password": "", + "meta": {}, + "hint": "a****" + }, + { + "id": 2, + "created_on": "2024-10-08T22:15:40.000Z", + "modified_on": "2024-10-08T22:15:40.000Z", + "access_list_id": 1, + "username": "asdad", + "password": "", + "meta": {}, + "hint": "a*****" + } + ], + "proxy_hosts": [], + "clients": [ + { + "id": 1, + "created_on": "2024-10-08T22:15:40.000Z", + "modified_on": "2024-10-08T22:15:40.000Z", + "access_list_id": 1, + "address": "127.0.0.1", + "directive": "allow", + "meta": {} + } + ] + } + } + }, + "schema": { + "$ref": "../../../components/access-list-object.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/certificates/certID/delete.json b/backend/schema/paths/nginx/certificates/certID/delete.json new file mode 100644 index 0000000..a99f619 --- /dev/null +++ b/backend/schema/paths/nginx/certificates/certID/delete.json @@ -0,0 +1,40 @@ +{ + "operationId": "deleteCertificate", + "summary": "Delete a Certificate", + "tags": ["certificates"], + "security": [ + { + "bearerAuth": ["certificates.manage"] + } + ], + "parameters": [ + { + "in": "path", + "name": "certID", + "description": "Certificate ID", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "example": 2 + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": true + } + }, + "schema": { + "type": "boolean" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/certificates/certID/download/get.json b/backend/schema/paths/nginx/certificates/certID/download/get.json new file mode 100644 index 0000000..7c18d01 --- /dev/null +++ b/backend/schema/paths/nginx/certificates/certID/download/get.json @@ -0,0 +1,36 @@ +{ + "operationId": "downloadCertificate", + "summary": "Downloads a Certificate", + "tags": ["certificates"], + "security": [ + { + "bearerAuth": ["certificates.manage"] + } + ], + "parameters": [ + { + "in": "path", + "name": "certID", + "description": "Certificate ID", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "example": 1 + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/zip": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/certificates/certID/get.json b/backend/schema/paths/nginx/certificates/certID/get.json new file mode 100644 index 0000000..46afbf8 --- /dev/null +++ b/backend/schema/paths/nginx/certificates/certID/get.json @@ -0,0 +1,52 @@ +{ + "operationId": "getCertificate", + "summary": "Get a Certificate", + "tags": ["certificates"], + "security": [ + { + "bearerAuth": ["certificates.view"] + } + ], + "parameters": [ + { + "in": "path", + "name": "certID", + "description": "Certificate ID", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "example": 1 + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "id": 4, + "created_on": "2024-10-09T05:31:58.000Z", + "modified_on": "2024-10-09T05:32:11.000Z", + "owner_user_id": 1, + "provider": "letsencrypt", + "nice_name": "test.example.com", + "domain_names": ["test.example.com"], + "expires_on": "2025-01-07T04:34:18.000Z", + "meta": { + "dns_challenge": false + } + } + } + }, + "schema": { + "$ref": "../../../../components/certificate-object.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/certificates/certID/renew/post.json b/backend/schema/paths/nginx/certificates/certID/renew/post.json new file mode 100644 index 0000000..4466d38 --- /dev/null +++ b/backend/schema/paths/nginx/certificates/certID/renew/post.json @@ -0,0 +1,52 @@ +{ + "operationId": "renewCertificate", + "summary": "Renews a Certificate", + "tags": ["certificates"], + "security": [ + { + "bearerAuth": ["certificates.manage"] + } + ], + "parameters": [ + { + "in": "path", + "name": "certID", + "description": "Certificate ID", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "example": 1 + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "expires_on": "2025-01-07T06:41:58.000Z", + "modified_on": "2024-10-09T07:39:51.000Z", + "id": 4, + "created_on": "2024-10-09T05:31:58.000Z", + "owner_user_id": 1, + "provider": "letsencrypt", + "nice_name": "My Test Cert", + "domain_names": ["test.jc21.supernerd.pro"], + "meta": { + "dns_challenge": false + } + } + } + }, + "schema": { + "$ref": "../../../../../components/certificate-object.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/certificates/certID/upload/post.json b/backend/schema/paths/nginx/certificates/certID/upload/post.json new file mode 100644 index 0000000..2b1ba3e --- /dev/null +++ b/backend/schema/paths/nginx/certificates/certID/upload/post.json @@ -0,0 +1,65 @@ +{ + "operationId": "uploadCertificate", + "summary": "Uploads a custom Certificate", + "tags": ["certificates"], + "security": [ + { + "bearerAuth": ["certificates.manage"] + } + ], + "parameters": [ + { + "in": "path", + "name": "certID", + "description": "Certificate ID", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "example": 1 + } + ], + "requestBody": { + "$ref": "../../../../../common.json#/properties/certificate_files" + }, + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "certificate": "-----BEGIN CERTIFICATE-----\nMIIEYDCCAsigAwIBAgIRAPoSC0hvitb26ODMlsH6YbowDQYJKoZIhvcNAQELBQAw\ngZExHjAcBgNVBAoTFW1rY2VydCBkZXZlbG9wbWVudCBDQTEzMDEGA1UECwwqamN1\ncm5vd0BKYW1pZXMtTGFwdG9wLmxvY2FsIChKYW1pZSBDdXJub3cpMTowOAYDVQQD\nDDFta2NlcnQgamN1cm5vd0BKYW1pZXMtTGFwdG9wLmxvY2FsIChKYW1pZSBDdXJu\nb3cpMB4XDTI0MTAwOTA3MjIxN1oXDTI3MDEwOTA3MjIxN1owXjEnMCUGA1UEChMe\nbWtjZXJ0IGRldmVsb3BtZW50IGNlcnRpZmljYXRlMTMwMQYDVQQLDCpqY3Vybm93\nQEphbWllcy1MYXB0b3AubG9jYWwgKEphbWllIEN1cm5vdykwggEiMA0GCSqGSIb3\nDQEBAQUAA4IBDwAwggEKAoIBAQC1n9j9C5Bes1ndqACDckERauxXVNKCnUlUM1bu\nGBx1xc+j2e2Ar23wUJJuWBY18VfT8yqfqVDktO2wrbmvZvLuPmXePOKbIKS+XXh+\n2NG9L5bDG9rwGFCRXnbQj+GWCdMfzx14+CR1IHgeYz6Cv/Si2/LJPCh/CoBfM4hU\nQJON3lxAWrWBpdbZnKYMrxuPBRfW9OuzTbCVXToQoxRAHiOR9081Xn1WeoKr7kVB\nIa5UphlvWXa12w1YmUwJu7YndnJGIavLWeNCVc7ZEo+nS8Wr/4QWicatIWZXpVaE\nOPhRoeplQDxNWg5b/Q26rYoVd7PrCmRs7sVcH79XzGONeH1PAgMBAAGjZTBjMA4G\nA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATAfBgNVHSMEGDAWgBSB\n/vfmBUd4W7CvyEMl7YpMVQs8vTAbBgNVHREEFDASghB0ZXN0LmV4YW1wbGUuY29t\nMA0GCSqGSIb3DQEBCwUAA4IBgQASwON/jPAHzcARSenY0ZGY1m5OVTYoQ/JWH0oy\nl8SyFCQFEXt7UHDD/eTtLT0vMyc190nP57P8lTnZGf7hSinZz1B1d6V4cmzxpk0s\nVXZT+irL6bJVJoMBHRpllKAhGULIo33baTrWFKA0oBuWx4AevSWKcLW5j87kEawn\nATCuMQ1I3ifR1mSlB7X8fb+vF+571q0NGuB3a42j6rdtXJ6SmH4+9B4qO0sfHDNt\nIImpLCH/tycDpcYrGSCn1QrekFG1bSEh+Bb9i8rqMDSDsYrTFPZTuOQ3EtjGni9u\nm+rEP3OyJg+md8c+0LVP7/UU4QWWnw3/Wolo5kSCxE8vNTFqi4GhVbdLnUtcIdTV\nXxuR6cKyW87Snj1a0nG76ZLclt/akxDhtzqeV60BO0p8pmiev8frp+E94wFNYCmp\n1cr3CnMEGRaficLSDFC6EBENzlZW2BQT6OMIV+g0NBgSyQe39s2zcdEl5+SzDVuw\nhp8bJUp/QN7pnOVCDbjTQ+HVMXw=\n-----END CERTIFICATE-----\n", + "certificate_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC1n9j9C5Bes1nd\nqACDckERauxXVNKCnUlUM1buGBx1xc+j2e2Ar23wUJJuWBY18VfT8yqfqVDktO2w\nrbmvZvLuPmXePOKbIKS+XXh+2NG9L5bDG9rwGFCRXnbQj+GWCdMfzx14+CR1IHge\nYz6Cv/Si2/LJPCh/CoBfM4hUQJON3lxAWrWBpdbZnKYMrxuPBRfW9OuzTbCVXToQ\noxRAHiOR9081Xn1WeoKr7kVBIa5UphlvWXa12w1YmUwJu7YndnJGIavLWeNCVc7Z\nEo+nS8Wr/4QWicatIWZXpVaEOPhRoeplQDxNWg5b/Q26rYoVd7PrCmRs7sVcH79X\nzGONeH1PAgMBAAECggEAANb3Wtwl07pCjRrMvc7WbC0xYIn82yu8/g2qtjkYUJcU\nia5lQbYN7RGCS85Oc/tkq48xQEG5JQWNH8b918jDEMTrFab0aUEyYcru1q9L8PL6\nYHaNgZSrMrDcHcS8h0QOXNRJT5jeGkiHJaTR0irvB526tqF3knbK9yW22KTfycUe\na0Z9voKn5xRk1DCbHi/nk2EpT7xnjeQeLFaTIRXbS68omkr4YGhwWm5OizoyEGZu\nW0Zum5BkQyMr6kor3wdxOTG97ske2rcyvvHi+ErnwL0xBv0qY0Dhe8DpuXpDezqw\no72yY8h31Fu84i7sAj24YuE5Df8DozItFXQpkgbQ6QKBgQDPrufhvIFm2S/MzBdW\nH8JxY7CJlJPyxOvc1NIl9RczQGAQR90kx52cgIcuIGEG6/wJ/xnGfMmW40F0DnQ+\nN+oLgB9SFxeLkRb7s9Z/8N3uIN8JJFYcerEOiRQeN2BXEEWJ7bUThNtsVrAcKoUh\nELsDmnHW/3V+GKwhd0vpk842+wKBgQDf4PGLG9PTE5tlAoyHFodJRd2RhTJQkwsU\nMDNjLJ+KecLv+Nl+QiJhoflG1ccqtSFlBSCG067CDQ5LV0xm3mLJ7pfJoMgjcq31\nqjEmX4Ls91GuVOPtbwst3yFKjsHaSoKB5fBvWRcKFpBUezM7Qcw2JP3+dQT+bQIq\ncMTkRWDSvQKBgQDOdCQFDjxg/lR7NQOZ1PaZe61aBz5P3pxNqa7ClvMaOsuEQ7w9\nvMYcdtRq8TsjA2JImbSI0TIg8gb2FQxPcYwTJKl+FICOeIwtaSg5hTtJZpnxX5LO\nutTaC0DZjNkTk5RdOdWA8tihyUdGqKoxJY2TVmwGe2rUEDjFB++J4inkEwKBgB6V\ng0nmtkxanFrzOzFlMXwgEEHF+Xaqb9QFNa/xs6XeNnREAapO7JV75Cr6H2hFMFe1\nmJjyqCgYUoCWX3iaHtLJRnEkBtNY4kzyQB6m46LtsnnnXO/dwKA2oDyoPfFNRoDq\nYatEd3JIXNU9s2T/+x7WdOBjKhh72dTkbPFmTPDdAoGAU6rlPBevqOFdObYxdPq8\nEQWu44xqky3Mf5sBpOwtu6rqCYuziLiN7K4sjN5GD5mb1cEU+oS92ZiNcUQ7MFXk\n8yTYZ7U0VcXyAcpYreWwE8thmb0BohJBr+Mp3wLTx32x0HKdO6vpUa0d35LUTUmM\nRrKmPK/msHKK/sVHiL+NFqo=\n-----END PRIVATE KEY-----\n" + } + } + }, + "schema": { + "type": "object", + "additionalProperties": false, + "required": ["certificate", "certificate_key"], + "properties": { + "certificate": { + "type": "string", + "minLength": 1, + "example": "-----BEGIN CERTIFICATE-----\nMIID...-----END CERTIFICATE-----" + }, + "certificate_key": { + "type": "string", + "minLength": 1, + "example": "-----BEGIN CERTIFICATE-----\nMIID...-----END CERTIFICATE-----" + }, + "intermediate_certificate": { + "type": "string", + "minLength": 1, + "example": "-----BEGIN CERTIFICATE-----\nMIID...-----END CERTIFICATE-----" + } + } + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/certificates/dns-providers/get.json b/backend/schema/paths/nginx/certificates/dns-providers/get.json new file mode 100644 index 0000000..3efb1a0 --- /dev/null +++ b/backend/schema/paths/nginx/certificates/dns-providers/get.json @@ -0,0 +1,48 @@ +{ + "operationId": "getDNSProviders", + "summary": "Get DNS Providers for Certificates", + "tags": ["certificates"], + "security": [ + { + "bearerAuth": ["certificates.view"] + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": [ + { + "id": "vultr", + "name": "Vultr", + "credentials": "dns_vultr_key = YOUR_VULTR_API_KEY" + }, + { + "id": "websupport", + "name": "Websupport.sk", + "credentials": "dns_websupport_identifier = \ndns_websupport_secret_key = " + }, + { + "id": "wedos", + "name": "Wedos", + "credentials": "dns_wedos_user = \ndns_wedos_auth = " + }, + { + "id": "zoneedit", + "name": "ZoneEdit", + "credentials": "dns_zoneedit_user = \ndns_zoneedit_token = " + } + ] + } + }, + "schema": { + "$ref": "../../../../components/dns-providers-list.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/certificates/get.json b/backend/schema/paths/nginx/certificates/get.json new file mode 100644 index 0000000..5884c97 --- /dev/null +++ b/backend/schema/paths/nginx/certificates/get.json @@ -0,0 +1,52 @@ +{ + "operationId": "getCertificates", + "summary": "Get all certificates", + "tags": ["certificates"], + "security": [ + { + "bearerAuth": ["certificates.view"] + } + ], + "parameters": [ + { + "in": "query", + "name": "expand", + "description": "Expansions", + "schema": { + "type": "string", + "enum": ["owner"] + } + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": [ + { + "id": 4, + "created_on": "2024-10-09T05:31:58.000Z", + "modified_on": "2024-10-09T05:32:11.000Z", + "owner_user_id": 1, + "provider": "letsencrypt", + "nice_name": "test.example.com", + "domain_names": ["test.example.com"], + "expires_on": "2025-01-07T04:34:18.000Z", + "meta": { + "dns_challenge": false + } + } + ] + } + }, + "schema": { + "$ref": "../../../components/certificate-list.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/certificates/post.json b/backend/schema/paths/nginx/certificates/post.json new file mode 100644 index 0000000..15406c8 --- /dev/null +++ b/backend/schema/paths/nginx/certificates/post.json @@ -0,0 +1,101 @@ +{ + "operationId": "createCertificate", + "summary": "Create a Certificate", + "tags": ["certificates"], + "security": [ + { + "bearerAuth": ["certificates.manage"] + } + ], + "requestBody": { + "description": "Certificate Payload", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false, + "required": ["provider"], + "properties": { + "provider": { + "$ref": "../../../components/certificate-object.json#/properties/provider" + }, + "nice_name": { + "$ref": "../../../components/certificate-object.json#/properties/nice_name" + }, + "domain_names": { + "$ref": "../../../components/certificate-object.json#/properties/domain_names" + }, + "meta": { + "$ref": "../../../components/certificate-object.json#/properties/meta" + } + } + }, + "example": { + "provider": "letsencrypt", + "domain_names": ["test.example.com"], + "meta": { + "dns_challenge": false + } + } + } + } + }, + "responses": { + "201": { + "description": "201 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "expires_on": "2025-01-07 04:30:17", + "modified_on": "2024-10-09 05:28:51", + "id": 5, + "created_on": "2024-10-09 05:28:35", + "owner_user_id": 1, + "provider": "letsencrypt", + "nice_name": "test.example.com", + "domain_names": ["test.example.com"], + "meta": { + "dns_challenge": false, + "letsencrypt_certificate": { + "cn": "test.example.com", + "issuer": "C = US, O = Let's Encrypt, CN = E5", + "dates": { + "from": 1728448218, + "to": 1736224217 + } + } + } + } + } + }, + "schema": { + "$ref": "../../../components/certificate-object.json" + } + } + } + }, + "400": { + "description": "400 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "error": { + "code": 400, + "message": "Domains are invalid" + } + } + } + }, + "schema": { + "$ref": "../../../components/error.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/certificates/test-http/post.json b/backend/schema/paths/nginx/certificates/test-http/post.json new file mode 100644 index 0000000..4d738d0 --- /dev/null +++ b/backend/schema/paths/nginx/certificates/test-http/post.json @@ -0,0 +1,46 @@ +{ + "operationId": "testHttpReach", + "summary": "Test HTTP Reachability", + "tags": ["certificates"], + "security": [ + { + "bearerAuth": ["certificates.view"] + } + ], + "requestBody": { + "description": "Test Payload", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false, + "required": ["domains"], + "properties": { + "domains": { + "$ref": "../../../../common.json#/properties/domain_names" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "test.example.org": "ok", + "test.example.com": "other:Invalid domain or IP", + "nonexistent.example.com": "404" + } + } + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/certificates/validate/post.json b/backend/schema/paths/nginx/certificates/validate/post.json new file mode 100644 index 0000000..9fa2bd1 --- /dev/null +++ b/backend/schema/paths/nginx/certificates/validate/post.json @@ -0,0 +1,100 @@ +{ + "operationId": "validateCertificates", + "summary": "Validates given Custom Certificates", + "tags": ["certificates"], + "security": [ + { + "bearerAuth": ["certificates.manage"] + } + ], + "requestBody": { + "$ref": "../../../../common.json#/properties/certificate_files" + }, + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "certificate": { + "cn": "mkcert", + "issuer": "O = mkcert development CA, OU = jc@jc-Laptop.local (John Doe), CN = mkcert jc@jc-Laptop.local (John Doe)", + "dates": { + "from": 1728458537, + "to": 1799479337 + } + }, + "certificate_key": true + } + } + }, + "schema": { + "type": "object", + "additionalProperties": false, + "required": ["certificate", "certificate_key"], + "properties": { + "certificate": { + "type": "object", + "additionalProperties": false, + "required": ["cn", "issuer", "dates"], + "properties": { + "cn": { + "type": "string", + "example": "example.com" + }, + "issuer": { + "type": "string", + "example": "C = US, O = Let's Encrypt, CN = E5" + }, + "dates": { + "type": "object", + "additionalProperties": false, + "required": ["from", "to"], + "properties": { + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + }, + "example": { + "from": 1728448218, + "to": 1736224217 + } + } + } + }, + "certificate_key": { + "type": "boolean", + "example": true + } + } + } + } + } + }, + "400": { + "description": "400 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "error": { + "code": 400, + "message": "Certificate is not valid" + } + } + } + }, + "schema": { + "$ref": "../../../../components/error.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/dead-hosts/get.json b/backend/schema/paths/nginx/dead-hosts/get.json new file mode 100644 index 0000000..feb04ff --- /dev/null +++ b/backend/schema/paths/nginx/dead-hosts/get.json @@ -0,0 +1,57 @@ +{ + "operationId": "getDeadHosts", + "summary": "Get all 404 hosts", + "tags": ["404-hosts"], + "security": [ + { + "bearerAuth": ["dead_hosts.view"] + } + ], + "parameters": [ + { + "in": "query", + "name": "expand", + "description": "Expansions", + "schema": { + "type": "string", + "enum": ["owner", "certificate"] + } + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": [ + { + "id": 1, + "created_on": "2024-10-09T01:38:52.000Z", + "modified_on": "2024-10-09T01:38:52.000Z", + "owner_user_id": 1, + "domain_names": ["test.example.com"], + "certificate_id": 0, + "ssl_forced": false, + "advanced_config": "", + "meta": { + "nginx_online": true, + "nginx_err": null + }, + "http2_support": false, + "enabled": true, + "hsts_enabled": false, + "hsts_subdomains": false + } + ] + } + }, + "schema": { + "$ref": "../../../components/dead-host-list.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/dead-hosts/hostID/delete.json b/backend/schema/paths/nginx/dead-hosts/hostID/delete.json new file mode 100644 index 0000000..eed0ebc --- /dev/null +++ b/backend/schema/paths/nginx/dead-hosts/hostID/delete.json @@ -0,0 +1,40 @@ +{ + "operationId": "deleteDeadHost", + "summary": "Delete a 404 Host", + "tags": ["404-hosts"], + "security": [ + { + "bearerAuth": ["dead_hosts.manage"] + } + ], + "parameters": [ + { + "in": "path", + "name": "hostID", + "description": "The ID of the 404 Host", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "example": 2 + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": true + } + }, + "schema": { + "type": "boolean" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/dead-hosts/hostID/disable/post.json b/backend/schema/paths/nginx/dead-hosts/hostID/disable/post.json new file mode 100644 index 0000000..2a4d08a --- /dev/null +++ b/backend/schema/paths/nginx/dead-hosts/hostID/disable/post.json @@ -0,0 +1,60 @@ +{ + "operationId": "disableDeadHost", + "summary": "Disable a 404 Host", + "tags": ["404-hosts"], + "security": [ + { + "bearerAuth": ["dead_hosts.manage"] + } + ], + "parameters": [ + { + "in": "path", + "name": "hostID", + "description": "The ID of the 404 Host", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "example": 2 + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": true + } + }, + "schema": { + "type": "boolean" + } + } + } + }, + "400": { + "description": "400 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "error": { + "code": 400, + "message": "Host is already disabled" + } + } + } + }, + "schema": { + "$ref": "../../../../../components/error.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/dead-hosts/hostID/enable/post.json b/backend/schema/paths/nginx/dead-hosts/hostID/enable/post.json new file mode 100644 index 0000000..512c2a0 --- /dev/null +++ b/backend/schema/paths/nginx/dead-hosts/hostID/enable/post.json @@ -0,0 +1,60 @@ +{ + "operationId": "enableDeadHost", + "summary": "Enable a 404 Host", + "tags": ["404-hosts"], + "security": [ + { + "bearerAuth": ["dead_hosts.manage"] + } + ], + "parameters": [ + { + "in": "path", + "name": "hostID", + "description": "The ID of the 404 Host", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "example": 2 + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": true + } + }, + "schema": { + "type": "boolean" + } + } + } + }, + "400": { + "description": "400 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "error": { + "code": 400, + "message": "Host is already enabled" + } + } + } + }, + "schema": { + "$ref": "../../../../../components/error.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/dead-hosts/hostID/get.json b/backend/schema/paths/nginx/dead-hosts/hostID/get.json new file mode 100644 index 0000000..a3c24ed --- /dev/null +++ b/backend/schema/paths/nginx/dead-hosts/hostID/get.json @@ -0,0 +1,57 @@ +{ + "operationId": "getDeadHost", + "summary": "Get a 404 Host", + "tags": ["404-hosts"], + "security": [ + { + "bearerAuth": ["dead_hosts.view"] + } + ], + "parameters": [ + { + "in": "path", + "name": "hostID", + "description": "The ID of the 404 Host", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "example": 1 + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "id": 1, + "created_on": "2024-10-09T01:38:52.000Z", + "modified_on": "2024-10-09T01:38:52.000Z", + "owner_user_id": 1, + "domain_names": ["test.example.com"], + "certificate_id": 0, + "ssl_forced": false, + "advanced_config": "", + "meta": { + "nginx_online": true, + "nginx_err": null + }, + "http2_support": false, + "enabled": true, + "hsts_enabled": false, + "hsts_subdomains": false + } + } + }, + "schema": { + "$ref": "../../../../components/dead-host-object.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/dead-hosts/hostID/put.json b/backend/schema/paths/nginx/dead-hosts/hostID/put.json new file mode 100644 index 0000000..e07217c --- /dev/null +++ b/backend/schema/paths/nginx/dead-hosts/hostID/put.json @@ -0,0 +1,108 @@ +{ + "operationId": "updateDeadHost", + "summary": "Update a 404 Host", + "tags": ["404-hosts"], + "security": [ + { + "bearerAuth": ["dead_hosts.manage"] + } + ], + "parameters": [ + { + "in": "path", + "name": "hostID", + "description": "The ID of the 404 Host", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "example": 2 + } + ], + "requestBody": { + "description": "404 Host Payload", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false, + "minProperties": 1, + "properties": { + "domain_names": { + "$ref": "../../../../components/dead-host-object.json#/properties/domain_names" + }, + "certificate_id": { + "$ref": "../../../../components/dead-host-object.json#/properties/certificate_id" + }, + "ssl_forced": { + "$ref": "../../../../components/dead-host-object.json#/properties/ssl_forced" + }, + "hsts_enabled": { + "$ref": "../../../../components/dead-host-object.json#/properties/hsts_enabled" + }, + "hsts_subdomains": { + "$ref": "../../../../components/dead-host-object.json#/properties/hsts_subdomains" + }, + "http2_support": { + "$ref": "../../../../components/dead-host-object.json#/properties/http2_support" + }, + "advanced_config": { + "$ref": "../../../../components/dead-host-object.json#/properties/advanced_config" + }, + "meta": { + "$ref": "../../../../components/dead-host-object.json#/properties/meta" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "id": 1, + "created_on": "2024-10-09T01:38:52.000Z", + "modified_on": "2024-10-09T01:46:06.000Z", + "owner_user_id": 1, + "domain_names": ["test.example.com"], + "certificate_id": 0, + "ssl_forced": false, + "advanced_config": "", + "meta": { + "nginx_online": true, + "nginx_err": null + }, + "http2_support": false, + "enabled": true, + "hsts_enabled": false, + "hsts_subdomains": false, + "owner": { + "id": 1, + "created_on": "2024-10-09T00:59:56.000Z", + "modified_on": "2024-10-09T00:59:56.000Z", + "is_disabled": false, + "email": "admin@example.com", + "name": "Administrator", + "nickname": "Admin", + "avatar": "", + "roles": ["admin"] + }, + "certificate": null + } + } + }, + "schema": { + "$ref": "../../../../components/dead-host-object.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/dead-hosts/post.json b/backend/schema/paths/nginx/dead-hosts/post.json new file mode 100644 index 0000000..1ec3872 --- /dev/null +++ b/backend/schema/paths/nginx/dead-hosts/post.json @@ -0,0 +1,112 @@ +{ + "operationId": "create404Host", + "summary": "Create a 404 Host", + "tags": ["404-hosts"], + "security": [ + { + "bearerAuth": [ + "dead_hosts.manage" + ] + } + ], + "requestBody": { + "description": "404 Host Payload", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false, + "required": [ + "domain_names" + ], + "properties": { + "domain_names": { + "$ref": "../../../components/dead-host-object.json#/properties/domain_names" + }, + "certificate_id": { + "$ref": "../../../components/dead-host-object.json#/properties/certificate_id" + }, + "ssl_forced": { + "$ref": "../../../components/dead-host-object.json#/properties/ssl_forced" + }, + "hsts_enabled": { + "$ref": "../../../components/dead-host-object.json#/properties/hsts_enabled" + }, + "hsts_subdomains": { + "$ref": "../../../components/dead-host-object.json#/properties/hsts_subdomains" + }, + "http2_support": { + "$ref": "../../../components/dead-host-object.json#/properties/http2_support" + }, + "advanced_config": { + "$ref": "../../../components/dead-host-object.json#/properties/advanced_config" + }, + "meta": { + "$ref": "../../../components/dead-host-object.json#/properties/meta" + } + } + }, + "example": { + "domain_names": [ + "test.example.com" + ], + "certificate_id": 0, + "ssl_forced": false, + "advanced_config": "", + "http2_support": false, + "hsts_enabled": false, + "hsts_subdomains": false, + "meta": {} + } + } + } + }, + "responses": { + "201": { + "description": "201 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "id": 1, + "created_on": "2024-10-09T01:38:52.000Z", + "modified_on": "2024-10-09T01:38:52.000Z", + "owner_user_id": 1, + "domain_names": [ + "test.example.com" + ], + "certificate_id": 0, + "ssl_forced": false, + "advanced_config": "", + "meta": {}, + "http2_support": false, + "enabled": true, + "hsts_enabled": false, + "hsts_subdomains": false, + "certificate": null, + "owner": { + "id": 1, + "created_on": "2024-10-09T00:59:56.000Z", + "modified_on": "2024-10-09T00:59:56.000Z", + "is_disabled": false, + "email": "admin@example.com", + "name": "Administrator", + "nickname": "Admin", + "avatar": "", + "roles": [ + "admin" + ] + } + } + } + }, + "schema": { + "$ref": "../../../components/dead-host-object.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/proxy-hosts/get.json b/backend/schema/paths/nginx/proxy-hosts/get.json new file mode 100644 index 0000000..301e28b --- /dev/null +++ b/backend/schema/paths/nginx/proxy-hosts/get.json @@ -0,0 +1,74 @@ +{ + "operationId": "getProxyHosts", + "summary": "Get all proxy hosts", + "tags": ["proxy-hosts"], + "security": [ + { + "bearerAuth": [ + "proxy_hosts.view" + ] + } + ], + "parameters": [ + { + "in": "query", + "name": "expand", + "description": "Expansions", + "schema": { + "type": "string", + "enum": [ + "access_list", + "owner", + "certificate" + ] + } + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": [ + { + "id": 1, + "created_on": "2025-10-28T01:10:26.000Z", + "modified_on": "2025-10-28T04:07:16.000Z", + "owner_user_id": 1, + "domain_names": [ + "test.jc21com" + ], + "forward_host": "127.0.0.1", + "forward_port": 8081, + "access_list_id": 1, + "certificate_id": 1, + "ssl_forced": false, + "caching_enabled": false, + "block_exploits": false, + "advanced_config": "", + "meta": { + "nginx_online": true, + "nginx_err": null + }, + "allow_websocket_upgrade": false, + "http2_support": false, + "forward_scheme": "http", + "enabled": true, + "locations": [], + "hsts_enabled": false, + "hsts_subdomains": false, + "trust_forwarded_proto": false + } + ] + } + }, + "schema": { + "$ref": "../../../components/proxy-host-list.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/proxy-hosts/hostID/delete.json b/backend/schema/paths/nginx/proxy-hosts/hostID/delete.json new file mode 100644 index 0000000..da67944 --- /dev/null +++ b/backend/schema/paths/nginx/proxy-hosts/hostID/delete.json @@ -0,0 +1,40 @@ +{ + "operationId": "deleteProxyHost", + "summary": "Delete a Proxy Host", + "tags": ["proxy-hosts"], + "security": [ + { + "bearerAuth": ["proxy_hosts.manage"] + } + ], + "parameters": [ + { + "in": "path", + "name": "hostID", + "description": "The ID of the Proxy Host", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "example": 2 + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": true + } + }, + "schema": { + "type": "boolean" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/proxy-hosts/hostID/disable/post.json b/backend/schema/paths/nginx/proxy-hosts/hostID/disable/post.json new file mode 100644 index 0000000..14c2689 --- /dev/null +++ b/backend/schema/paths/nginx/proxy-hosts/hostID/disable/post.json @@ -0,0 +1,60 @@ +{ + "operationId": "disableProxyHost", + "summary": "Disable a Proxy Host", + "tags": ["proxy-hosts"], + "security": [ + { + "bearerAuth": ["proxy_hosts.manage"] + } + ], + "parameters": [ + { + "in": "path", + "name": "hostID", + "description": "The ID of the Proxy Host", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "example": 2 + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": true + } + }, + "schema": { + "type": "boolean" + } + } + } + }, + "400": { + "description": "400 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "error": { + "code": 400, + "message": "Host is already disabled" + } + } + } + }, + "schema": { + "$ref": "../../../../../components/error.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/proxy-hosts/hostID/enable/post.json b/backend/schema/paths/nginx/proxy-hosts/hostID/enable/post.json new file mode 100644 index 0000000..fe504b7 --- /dev/null +++ b/backend/schema/paths/nginx/proxy-hosts/hostID/enable/post.json @@ -0,0 +1,60 @@ +{ + "operationId": "enableProxyHost", + "summary": "Enable a Proxy Host", + "tags": ["proxy-hosts"], + "security": [ + { + "bearerAuth": ["proxy_hosts.manage"] + } + ], + "parameters": [ + { + "in": "path", + "name": "hostID", + "description": "The ID of the Proxy Host", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "example": 2 + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": true + } + }, + "schema": { + "type": "boolean" + } + } + } + }, + "400": { + "description": "400 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "error": { + "code": 400, + "message": "Host is already enabled" + } + } + } + }, + "schema": { + "$ref": "../../../../../components/error.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/proxy-hosts/hostID/get.json b/backend/schema/paths/nginx/proxy-hosts/hostID/get.json new file mode 100644 index 0000000..2e677fe --- /dev/null +++ b/backend/schema/paths/nginx/proxy-hosts/hostID/get.json @@ -0,0 +1,83 @@ +{ + "operationId": "getProxyHost", + "summary": "Get a Proxy Host", + "tags": ["proxy-hosts"], + "security": [ + { + "bearerAuth": [ + "proxy_hosts.view" + ] + } + ], + "parameters": [ + { + "in": "path", + "name": "hostID", + "description": "The ID of the Proxy Host", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "example": 1 + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "id": 3, + "created_on": "2025-10-30T01:12:05.000Z", + "modified_on": "2025-10-30T01:12:05.000Z", + "owner_user_id": 1, + "domain_names": [ + "test.example.com" + ], + "forward_host": "127.0.0.1", + "forward_port": 8080, + "access_list_id": 0, + "certificate_id": 0, + "ssl_forced": false, + "caching_enabled": false, + "block_exploits": false, + "advanced_config": "", + "meta": { + "nginx_online": true, + "nginx_err": null + }, + "allow_websocket_upgrade": false, + "http2_support": false, + "forward_scheme": "http", + "enabled": true, + "locations": [], + "hsts_enabled": false, + "hsts_subdomains": false, + "trust_forwarded_proto": false, + "owner": { + "id": 1, + "created_on": "2025-10-28T00:50:24.000Z", + "modified_on": "2025-10-28T00:50:24.000Z", + "is_disabled": false, + "email": "jc@jc21.com", + "name": "jamiec", + "nickname": "jamiec", + "avatar": "//www.gravatar.com/avatar/6193176330f8d38747f038c170ddb193?default=mm", + "roles": [ + "admin" + ] + } + } + } + }, + "schema": { + "$ref": "../../../../components/proxy-host-object.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/proxy-hosts/hostID/put.json b/backend/schema/paths/nginx/proxy-hosts/hostID/put.json new file mode 100644 index 0000000..fc31984 --- /dev/null +++ b/backend/schema/paths/nginx/proxy-hosts/hostID/put.json @@ -0,0 +1,154 @@ +{ + "operationId": "updateProxyHost", + "summary": "Update a Proxy Host", + "tags": ["proxy-hosts"], + "security": [ + { + "bearerAuth": [ + "proxy_hosts.manage" + ] + } + ], + "parameters": [ + { + "in": "path", + "name": "hostID", + "description": "The ID of the Proxy Host", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "example": 2 + } + ], + "requestBody": { + "description": "Proxy Host Payload", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false, + "minProperties": 1, + "properties": { + "domain_names": { + "$ref": "../../../../components/proxy-host-object.json#/properties/domain_names" + }, + "forward_scheme": { + "$ref": "../../../../components/proxy-host-object.json#/properties/forward_scheme" + }, + "forward_host": { + "$ref": "../../../../components/proxy-host-object.json#/properties/forward_host" + }, + "forward_port": { + "$ref": "../../../../components/proxy-host-object.json#/properties/forward_port" + }, + "certificate_id": { + "$ref": "../../../../components/proxy-host-object.json#/properties/certificate_id" + }, + "ssl_forced": { + "$ref": "../../../../components/proxy-host-object.json#/properties/ssl_forced" + }, + "hsts_enabled": { + "$ref": "../../../../components/proxy-host-object.json#/properties/hsts_enabled" + }, + "hsts_subdomains": { + "$ref": "../../../../components/proxy-host-object.json#/properties/hsts_subdomains" + }, + "trust_forwarded_proto": { + "$ref": "../../../../components/proxy-host-object.json#/properties/trust_forwarded_proto" + }, + "http2_support": { + "$ref": "../../../../components/proxy-host-object.json#/properties/http2_support" + }, + "block_exploits": { + "$ref": "../../../../components/proxy-host-object.json#/properties/block_exploits" + }, + "caching_enabled": { + "$ref": "../../../../components/proxy-host-object.json#/properties/caching_enabled" + }, + "allow_websocket_upgrade": { + "$ref": "../../../../components/proxy-host-object.json#/properties/allow_websocket_upgrade" + }, + "access_list_id": { + "$ref": "../../../../components/proxy-host-object.json#/properties/access_list_id" + }, + "advanced_config": { + "$ref": "../../../../components/proxy-host-object.json#/properties/advanced_config" + }, + "enabled": { + "$ref": "../../../../components/proxy-host-object.json#/properties/enabled" + }, + "meta": { + "$ref": "../../../../components/proxy-host-object.json#/properties/meta" + }, + "locations": { + "$ref": "../../../../components/proxy-host-object.json#/properties/locations" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "id": 3, + "created_on": "2025-10-30T01:12:05.000Z", + "modified_on": "2025-10-30T01:17:06.000Z", + "owner_user_id": 1, + "domain_names": [ + "test.example.com" + ], + "forward_host": "127.0.0.1", + "forward_port": 8080, + "access_list_id": 0, + "certificate_id": 0, + "ssl_forced": false, + "caching_enabled": false, + "block_exploits": false, + "advanced_config": "", + "meta": { + "nginx_online": true, + "nginx_err": null + }, + "allow_websocket_upgrade": false, + "http2_support": false, + "forward_scheme": "http", + "enabled": true, + "locations": [], + "hsts_enabled": false, + "hsts_subdomains": false, + "trust_forwarded_proto": false, + "owner": { + "id": 1, + "created_on": "2025-10-28T00:50:24.000Z", + "modified_on": "2025-10-28T00:50:24.000Z", + "is_disabled": false, + "email": "jc@jc21.com", + "name": "jamiec", + "nickname": "jamiec", + "avatar": "//www.gravatar.com/avatar/6193176330f8d38747f038c170ddb193?default=mm", + "roles": [ + "admin" + ] + }, + "certificate": null, + "access_list": null + } + } + }, + "schema": { + "$ref": "../../../../components/proxy-host-object.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/proxy-hosts/post.json b/backend/schema/paths/nginx/proxy-hosts/post.json new file mode 100644 index 0000000..28ddad8 --- /dev/null +++ b/backend/schema/paths/nginx/proxy-hosts/post.json @@ -0,0 +1,151 @@ +{ + "operationId": "createProxyHost", + "summary": "Create a Proxy Host", + "tags": ["proxy-hosts"], + "security": [ + { + "bearerAuth": [ + "proxy_hosts.manage" + ] + } + ], + "requestBody": { + "description": "Proxy Host Payload", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false, + "required": [ + "domain_names", + "forward_scheme", + "forward_host", + "forward_port" + ], + "properties": { + "domain_names": { + "$ref": "../../../components/proxy-host-object.json#/properties/domain_names" + }, + "forward_scheme": { + "$ref": "../../../components/proxy-host-object.json#/properties/forward_scheme" + }, + "forward_host": { + "$ref": "../../../components/proxy-host-object.json#/properties/forward_host" + }, + "forward_port": { + "$ref": "../../../components/proxy-host-object.json#/properties/forward_port" + }, + "certificate_id": { + "$ref": "../../../components/proxy-host-object.json#/properties/certificate_id" + }, + "ssl_forced": { + "$ref": "../../../components/proxy-host-object.json#/properties/ssl_forced" + }, + "hsts_enabled": { + "$ref": "../../../components/proxy-host-object.json#/properties/hsts_enabled" + }, + "hsts_subdomains": { + "$ref": "../../../components/proxy-host-object.json#/properties/hsts_subdomains" + }, + "trust_forwarded_proto": { + "$ref": "../../../components/proxy-host-object.json#/properties/trust_forwarded_proto" + }, + "http2_support": { + "$ref": "../../../components/proxy-host-object.json#/properties/http2_support" + }, + "block_exploits": { + "$ref": "../../../components/proxy-host-object.json#/properties/block_exploits" + }, + "caching_enabled": { + "$ref": "../../../components/proxy-host-object.json#/properties/caching_enabled" + }, + "allow_websocket_upgrade": { + "$ref": "../../../components/proxy-host-object.json#/properties/allow_websocket_upgrade" + }, + "access_list_id": { + "$ref": "../../../components/proxy-host-object.json#/properties/access_list_id" + }, + "advanced_config": { + "$ref": "../../../components/proxy-host-object.json#/properties/advanced_config" + }, + "enabled": { + "$ref": "../../../components/proxy-host-object.json#/properties/enabled" + }, + "meta": { + "$ref": "../../../components/proxy-host-object.json#/properties/meta" + }, + "locations": { + "$ref": "../../../components/proxy-host-object.json#/properties/locations" + } + } + }, + "example": { + "domain_names": [ + "test.example.com" + ], + "forward_scheme": "http", + "forward_host": "127.0.0.1", + "forward_port": 8080 + } + } + } + }, + "responses": { + "201": { + "description": "201 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "id": 3, + "created_on": "2025-10-30T01:12:05.000Z", + "modified_on": "2025-10-30T01:12:05.000Z", + "owner_user_id": 1, + "domain_names": [ + "test.example.com" + ], + "forward_host": "127.0.0.1", + "forward_port": 8080, + "access_list_id": 0, + "certificate_id": 0, + "ssl_forced": false, + "caching_enabled": false, + "block_exploits": false, + "advanced_config": "", + "meta": {}, + "allow_websocket_upgrade": false, + "http2_support": false, + "forward_scheme": "http", + "enabled": true, + "locations": [], + "hsts_enabled": false, + "hsts_subdomains": false, + "trust_forwarded_proto": false, + "certificate": null, + "owner": { + "id": 1, + "created_on": "2025-10-28T00:50:24.000Z", + "modified_on": "2025-10-28T00:50:24.000Z", + "is_disabled": false, + "email": "jc@jc21.com", + "name": "jamiec", + "nickname": "jamiec", + "avatar": "//www.gravatar.com/avatar/6193176330f8d38747f038c170ddb193?default=mm", + "roles": [ + "admin" + ] + }, + "access_list": null + } + } + }, + "schema": { + "$ref": "../../../components/proxy-host-object.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/redirection-hosts/get.json b/backend/schema/paths/nginx/redirection-hosts/get.json new file mode 100644 index 0000000..dfeb604 --- /dev/null +++ b/backend/schema/paths/nginx/redirection-hosts/get.json @@ -0,0 +1,62 @@ +{ + "operationId": "getRedirectionHosts", + "summary": "Get all Redirection hosts", + "tags": ["redirection-hosts"], + "security": [ + { + "bearerAuth": ["redirection_hosts.view"] + } + ], + "parameters": [ + { + "in": "query", + "name": "expand", + "description": "Expansions", + "schema": { + "type": "string", + "enum": ["owner", "certificate"] + } + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": [ + { + "id": 1, + "created_on": "2024-10-09T01:13:12.000Z", + "modified_on": "2024-10-09T01:13:13.000Z", + "owner_user_id": 1, + "domain_names": ["test.example.com"], + "forward_domain_name": "something-else.com", + "preserve_path": false, + "certificate_id": 0, + "ssl_forced": false, + "block_exploits": false, + "advanced_config": "", + "meta": { + "nginx_online": true, + "nginx_err": null + }, + "http2_support": false, + "enabled": true, + "hsts_enabled": false, + "hsts_subdomains": false, + "forward_scheme": "http", + "forward_http_code": 301 + } + ] + } + }, + "schema": { + "$ref": "../../../components/redirection-host-list.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/redirection-hosts/hostID/delete.json b/backend/schema/paths/nginx/redirection-hosts/hostID/delete.json new file mode 100644 index 0000000..0b3232e --- /dev/null +++ b/backend/schema/paths/nginx/redirection-hosts/hostID/delete.json @@ -0,0 +1,40 @@ +{ + "operationId": "deleteRedirectionHost", + "summary": "Delete a Redirection Host", + "tags": ["redirection-hosts"], + "security": [ + { + "bearerAuth": ["redirection_hosts.manage"] + } + ], + "parameters": [ + { + "in": "path", + "name": "hostID", + "description": "The ID of the Redirection Host", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "example": 2 + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": true + } + }, + "schema": { + "type": "boolean" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/redirection-hosts/hostID/disable/post.json b/backend/schema/paths/nginx/redirection-hosts/hostID/disable/post.json new file mode 100644 index 0000000..f44af11 --- /dev/null +++ b/backend/schema/paths/nginx/redirection-hosts/hostID/disable/post.json @@ -0,0 +1,60 @@ +{ + "operationId": "disableRedirectionHost", + "summary": "Disable a Redirection Host", + "tags": ["redirection-hosts"], + "security": [ + { + "bearerAuth": ["redirection_hosts.manage"] + } + ], + "parameters": [ + { + "in": "path", + "name": "hostID", + "description": "The ID of the Redirection Host", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "example": 2 + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": true + } + }, + "schema": { + "type": "boolean" + } + } + } + }, + "400": { + "description": "400 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "error": { + "code": 400, + "message": "Host is already disabled" + } + } + } + }, + "schema": { + "$ref": "../../../../../components/error.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/redirection-hosts/hostID/enable/post.json b/backend/schema/paths/nginx/redirection-hosts/hostID/enable/post.json new file mode 100644 index 0000000..07bf44d --- /dev/null +++ b/backend/schema/paths/nginx/redirection-hosts/hostID/enable/post.json @@ -0,0 +1,60 @@ +{ + "operationId": "enableRedirectionHost", + "summary": "Enable a Redirection Host", + "tags": ["redirection-hosts"], + "security": [ + { + "bearerAuth": ["redirection_hosts.manage"] + } + ], + "parameters": [ + { + "in": "path", + "name": "hostID", + "description": "The ID of the Redirection Host", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "example": 2 + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": true + } + }, + "schema": { + "type": "boolean" + } + } + } + }, + "400": { + "description": "400 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "error": { + "code": 400, + "message": "Host is already enabled" + } + } + } + }, + "schema": { + "$ref": "../../../../../components/error.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/redirection-hosts/hostID/get.json b/backend/schema/paths/nginx/redirection-hosts/hostID/get.json new file mode 100644 index 0000000..577b514 --- /dev/null +++ b/backend/schema/paths/nginx/redirection-hosts/hostID/get.json @@ -0,0 +1,62 @@ +{ + "operationId": "getRedirectionHost", + "summary": "Get a Redirection Host", + "tags": ["redirection-hosts"], + "security": [ + { + "bearerAuth": ["redirection_hosts.view"] + } + ], + "parameters": [ + { + "in": "path", + "name": "hostID", + "description": "The ID of the Redirection Host", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "example": 1 + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "id": 1, + "created_on": "2024-10-09T01:13:12.000Z", + "modified_on": "2024-10-09T01:13:13.000Z", + "owner_user_id": 1, + "domain_names": ["test.example.com"], + "forward_domain_name": "something-else.com", + "preserve_path": false, + "certificate_id": 0, + "ssl_forced": false, + "block_exploits": false, + "advanced_config": "", + "meta": { + "nginx_online": true, + "nginx_err": null + }, + "http2_support": false, + "enabled": true, + "hsts_enabled": false, + "hsts_subdomains": false, + "forward_scheme": "http", + "forward_http_code": 301 + } + } + }, + "schema": { + "$ref": "../../../../components/redirection-host-object.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/redirection-hosts/hostID/put.json b/backend/schema/paths/nginx/redirection-hosts/hostID/put.json new file mode 100644 index 0000000..454a388 --- /dev/null +++ b/backend/schema/paths/nginx/redirection-hosts/hostID/put.json @@ -0,0 +1,128 @@ +{ + "operationId": "updateRedirectionHost", + "summary": "Update a Redirection Host", + "tags": ["redirection-hosts"], + "security": [ + { + "bearerAuth": ["redirection_hosts.manage"] + } + ], + "parameters": [ + { + "in": "path", + "name": "hostID", + "description": "The ID of the Redirection Host", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "example": 2 + } + ], + "requestBody": { + "description": "Redirection Host Payload", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false, + "minProperties": 1, + "properties": { + "domain_names": { + "$ref": "../../../../components/redirection-host-object.json#/properties/domain_names" + }, + "forward_http_code": { + "$ref": "../../../../components/redirection-host-object.json#/properties/forward_http_code" + }, + "forward_scheme": { + "$ref": "../../../../components/redirection-host-object.json#/properties/forward_scheme" + }, + "forward_domain_name": { + "$ref": "../../../../components/redirection-host-object.json#/properties/forward_domain_name" + }, + "preserve_path": { + "$ref": "../../../../components/redirection-host-object.json#/properties/preserve_path" + }, + "certificate_id": { + "$ref": "../../../../components/redirection-host-object.json#/properties/certificate_id" + }, + "ssl_forced": { + "$ref": "../../../../components/redirection-host-object.json#/properties/ssl_forced" + }, + "hsts_enabled": { + "$ref": "../../../../components/redirection-host-object.json#/properties/hsts_enabled" + }, + "hsts_subdomains": { + "$ref": "../../../../components/redirection-host-object.json#/properties/hsts_subdomains" + }, + "http2_support": { + "$ref": "../../../../components/redirection-host-object.json#/properties/http2_support" + }, + "block_exploits": { + "$ref": "../../../../components/redirection-host-object.json#/properties/block_exploits" + }, + "advanced_config": { + "$ref": "../../../../components/redirection-host-object.json#/properties/advanced_config" + }, + "meta": { + "$ref": "../../../../components/redirection-host-object.json#/properties/meta" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "id": 1, + "created_on": "2024-10-09T01:13:12.000Z", + "modified_on": "2024-10-09T01:18:11.000Z", + "owner_user_id": 1, + "domain_names": ["test.example.com"], + "forward_domain_name": "something-else.com", + "preserve_path": false, + "certificate_id": 0, + "ssl_forced": false, + "block_exploits": false, + "advanced_config": "", + "meta": { + "nginx_online": true, + "nginx_err": null + }, + "http2_support": false, + "enabled": true, + "hsts_enabled": false, + "hsts_subdomains": false, + "forward_scheme": "http", + "forward_http_code": 301, + "owner": { + "id": 1, + "created_on": "2024-10-09T00:59:56.000Z", + "modified_on": "2024-10-09T00:59:56.000Z", + "is_disabled": false, + "email": "admin@example.com", + "name": "Administrator", + "nickname": "Admin", + "avatar": "", + "roles": ["admin"] + }, + "certificate": null + } + } + }, + "schema": { + "$ref": "../../../../components/redirection-host-object.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/redirection-hosts/post.json b/backend/schema/paths/nginx/redirection-hosts/post.json new file mode 100644 index 0000000..6aa5330 --- /dev/null +++ b/backend/schema/paths/nginx/redirection-hosts/post.json @@ -0,0 +1,140 @@ +{ + "operationId": "createRedirectionHost", + "summary": "Create a Redirection Host", + "tags": ["redirection-hosts"], + "security": [ + { + "bearerAuth": [ + "redirection_hosts.manage" + ] + } + ], + "requestBody": { + "description": "Redirection Host Payload", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false, + "required": [ + "domain_names", + "forward_scheme", + "forward_http_code", + "forward_domain_name" + ], + "properties": { + "domain_names": { + "$ref": "../../../components/redirection-host-object.json#/properties/domain_names" + }, + "forward_http_code": { + "$ref": "../../../components/redirection-host-object.json#/properties/forward_http_code" + }, + "forward_scheme": { + "$ref": "../../../components/redirection-host-object.json#/properties/forward_scheme" + }, + "forward_domain_name": { + "$ref": "../../../components/redirection-host-object.json#/properties/forward_domain_name" + }, + "preserve_path": { + "$ref": "../../../components/redirection-host-object.json#/properties/preserve_path" + }, + "certificate_id": { + "$ref": "../../../components/redirection-host-object.json#/properties/certificate_id" + }, + "ssl_forced": { + "$ref": "../../../components/redirection-host-object.json#/properties/ssl_forced" + }, + "hsts_enabled": { + "$ref": "../../../components/redirection-host-object.json#/properties/hsts_enabled" + }, + "hsts_subdomains": { + "$ref": "../../../components/redirection-host-object.json#/properties/hsts_subdomains" + }, + "http2_support": { + "$ref": "../../../components/redirection-host-object.json#/properties/http2_support" + }, + "block_exploits": { + "$ref": "../../../components/redirection-host-object.json#/properties/block_exploits" + }, + "advanced_config": { + "$ref": "../../../components/redirection-host-object.json#/properties/advanced_config" + }, + "meta": { + "$ref": "../../../components/redirection-host-object.json#/properties/meta" + } + } + }, + "example": { + "domain_names": [ + "test.example.com" + ], + "forward_domain_name": "example.com", + "forward_scheme": "auto", + "forward_http_code": 301, + "preserve_path": false, + "block_exploits": false, + "certificate_id": 0, + "ssl_forced": false, + "http2_support": false, + "hsts_enabled": false, + "hsts_subdomains": false, + "advanced_config": "", + "meta": {} + } + } + } + }, + "responses": { + "201": { + "description": "201 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "id": 2, + "created_on": "2025-10-30T01:27:04.000Z", + "modified_on": "2025-10-30T01:27:04.000Z", + "owner_user_id": 1, + "domain_names": [ + "test.example.com" + ], + "forward_domain_name": "example.com", + "preserve_path": false, + "certificate_id": 0, + "ssl_forced": false, + "block_exploits": false, + "advanced_config": "", + "meta": {}, + "http2_support": false, + "enabled": true, + "hsts_enabled": false, + "hsts_subdomains": false, + "forward_scheme": "auto", + "forward_http_code": 301, + "certificate": null, + "owner": { + "id": 1, + "created_on": "2025-10-28T00:50:24.000Z", + "modified_on": "2025-10-28T00:50:24.000Z", + "is_disabled": false, + "email": "jc@jc21.com", + "name": "jamiec", + "nickname": "jamiec", + "avatar": "//www.gravatar.com/avatar/6193176330f8d38747f038c170ddb193?default=mm", + "roles": [ + "admin" + ] + } + } + } + }, + "schema": { + "$ref": "../../../components/redirection-host-object.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/streams/get.json b/backend/schema/paths/nginx/streams/get.json new file mode 100644 index 0000000..6dda8e3 --- /dev/null +++ b/backend/schema/paths/nginx/streams/get.json @@ -0,0 +1,56 @@ +{ + "operationId": "getStreams", + "summary": "Get all streams", + "tags": ["streams"], + "security": [ + { + "bearerAuth": ["streams.view"] + } + ], + "parameters": [ + { + "in": "query", + "name": "expand", + "description": "Expansions", + "schema": { + "type": "string", + "enum": ["owner", "certificate"] + } + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": [ + { + "id": 1, + "created_on": "2024-10-09T02:33:45.000Z", + "modified_on": "2024-10-09T02:33:45.000Z", + "owner_user_id": 1, + "incoming_port": 9090, + "forwarding_host": "router.internal", + "forwarding_port": 80, + "tcp_forwarding": true, + "udp_forwarding": false, + "meta": { + "nginx_online": true, + "nginx_err": null + }, + "enabled": true, + "certificate_id": 0 + } + ] + } + }, + "schema": { + "$ref": "../../../components/stream-list.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/streams/post.json b/backend/schema/paths/nginx/streams/post.json new file mode 100644 index 0000000..0c986de --- /dev/null +++ b/backend/schema/paths/nginx/streams/post.json @@ -0,0 +1,110 @@ +{ + "operationId": "createStream", + "summary": "Create a Stream", + "tags": ["streams"], + "security": [ + { + "bearerAuth": [ + "streams.manage" + ] + } + ], + "requestBody": { + "description": "Stream Payload", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false, + "required": [ + "incoming_port", + "forwarding_host", + "forwarding_port" + ], + "properties": { + "incoming_port": { + "$ref": "../../../components/stream-object.json#/properties/incoming_port" + }, + "forwarding_host": { + "$ref": "../../../components/stream-object.json#/properties/forwarding_host" + }, + "forwarding_port": { + "$ref": "../../../components/stream-object.json#/properties/forwarding_port" + }, + "tcp_forwarding": { + "$ref": "../../../components/stream-object.json#/properties/tcp_forwarding" + }, + "udp_forwarding": { + "$ref": "../../../components/stream-object.json#/properties/udp_forwarding" + }, + "certificate_id": { + "$ref": "../../../components/stream-object.json#/properties/certificate_id" + }, + "meta": { + "$ref": "../../../components/stream-object.json#/properties/meta" + }, + "domain_names": { + "$ref": "../../../components/dead-host-object.json#/properties/domain_names" + } + } + }, + "example": { + "incoming_port": 8888, + "forwarding_host": "127.0.0.1", + "forwarding_port": 8080, + "tcp_forwarding": true, + "udp_forwarding": false, + "certificate_id": 0, + "meta": {} + } + } + } + }, + "responses": { + "201": { + "description": "201 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "id": 1, + "created_on": "2024-10-09T02:33:45.000Z", + "modified_on": "2024-10-09T02:33:45.000Z", + "owner_user_id": 1, + "incoming_port": 9090, + "forwarding_host": "router.internal", + "forwarding_port": 80, + "tcp_forwarding": true, + "udp_forwarding": false, + "meta": { + "nginx_online": true, + "nginx_err": null + }, + "enabled": true, + "owner": { + "id": 1, + "created_on": "2024-10-09T02:33:16.000Z", + "modified_on": "2024-10-09T02:33:16.000Z", + "is_disabled": false, + "email": "admin@example.com", + "name": "Administrator", + "nickname": "Admin", + "avatar": "", + "roles": [ + "admin" + ] + }, + "certificate_id": 0 + } + } + }, + "schema": { + "$ref": "../../../components/stream-object.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/streams/streamID/delete.json b/backend/schema/paths/nginx/streams/streamID/delete.json new file mode 100644 index 0000000..585cd82 --- /dev/null +++ b/backend/schema/paths/nginx/streams/streamID/delete.json @@ -0,0 +1,40 @@ +{ + "operationId": "deleteStream", + "summary": "Delete a Stream", + "tags": ["streams"], + "security": [ + { + "bearerAuth": ["streams.manage"] + } + ], + "parameters": [ + { + "in": "path", + "name": "streamID", + "description": "The ID of the Stream", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "example": 2 + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": true + } + }, + "schema": { + "type": "boolean" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/streams/streamID/disable/post.json b/backend/schema/paths/nginx/streams/streamID/disable/post.json new file mode 100644 index 0000000..61de851 --- /dev/null +++ b/backend/schema/paths/nginx/streams/streamID/disable/post.json @@ -0,0 +1,60 @@ +{ + "operationId": "disableStream", + "summary": "Disable a Stream", + "tags": ["streams"], + "security": [ + { + "bearerAuth": ["streams.manage"] + } + ], + "parameters": [ + { + "in": "path", + "name": "streamID", + "description": "The ID of the Stream", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "example": 2 + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": true + } + }, + "schema": { + "type": "boolean" + } + } + } + }, + "400": { + "description": "400 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "error": { + "code": 400, + "message": "Host is already disabled" + } + } + } + }, + "schema": { + "$ref": "../../../../../components/error.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/streams/streamID/enable/post.json b/backend/schema/paths/nginx/streams/streamID/enable/post.json new file mode 100644 index 0000000..d27ce52 --- /dev/null +++ b/backend/schema/paths/nginx/streams/streamID/enable/post.json @@ -0,0 +1,60 @@ +{ + "operationId": "enableStream", + "summary": "Enable a Stream", + "tags": ["streams"], + "security": [ + { + "bearerAuth": ["streams.manage"] + } + ], + "parameters": [ + { + "in": "path", + "name": "streamID", + "description": "The ID of the Stream", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "example": 2 + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": true + } + }, + "schema": { + "type": "boolean" + } + } + } + }, + "400": { + "description": "400 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "error": { + "code": 400, + "message": "Host is already enabled" + } + } + } + }, + "schema": { + "$ref": "../../../../../components/error.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/streams/streamID/get.json b/backend/schema/paths/nginx/streams/streamID/get.json new file mode 100644 index 0000000..22fae88 --- /dev/null +++ b/backend/schema/paths/nginx/streams/streamID/get.json @@ -0,0 +1,56 @@ +{ + "operationId": "getStream", + "summary": "Get a Stream", + "tags": ["streams"], + "security": [ + { + "bearerAuth": ["streams.view"] + } + ], + "parameters": [ + { + "in": "path", + "name": "streamID", + "description": "The ID of the Stream", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "example": 2 + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "id": 1, + "created_on": "2024-10-09T02:33:45.000Z", + "modified_on": "2024-10-09T02:33:45.000Z", + "owner_user_id": 1, + "incoming_port": 9090, + "forwarding_host": "router.internal", + "forwarding_port": 80, + "tcp_forwarding": true, + "udp_forwarding": false, + "meta": { + "nginx_online": true, + "nginx_err": null + }, + "enabled": true, + "certificate_id": 0 + } + } + }, + "schema": { + "$ref": "../../../../components/stream-object.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/nginx/streams/streamID/put.json b/backend/schema/paths/nginx/streams/streamID/put.json new file mode 100644 index 0000000..21ae71e --- /dev/null +++ b/backend/schema/paths/nginx/streams/streamID/put.json @@ -0,0 +1,103 @@ +{ + "operationId": "updateStream", + "summary": "Update a Stream", + "tags": ["streams"], + "security": [ + { + "bearerAuth": ["streams.manage"] + } + ], + "parameters": [ + { + "in": "path", + "name": "streamID", + "description": "The ID of the Stream", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "example": 2 + } + ], + "requestBody": { + "description": "Stream Payload", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false, + "minProperties": 1, + "properties": { + "incoming_port": { + "$ref": "../../../../components/stream-object.json#/properties/incoming_port" + }, + "forwarding_host": { + "$ref": "../../../../components/stream-object.json#/properties/forwarding_host" + }, + "forwarding_port": { + "$ref": "../../../../components/stream-object.json#/properties/forwarding_port" + }, + "tcp_forwarding": { + "$ref": "../../../../components/stream-object.json#/properties/tcp_forwarding" + }, + "udp_forwarding": { + "$ref": "../../../../components/stream-object.json#/properties/udp_forwarding" + }, + "certificate_id": { + "$ref": "../../../../components/stream-object.json#/properties/certificate_id" + }, + "meta": { + "$ref": "../../../../components/stream-object.json#/properties/meta" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "id": 1, + "created_on": "2024-10-09T02:33:45.000Z", + "modified_on": "2024-10-09T02:33:45.000Z", + "owner_user_id": 1, + "incoming_port": 9090, + "forwarding_host": "router.internal", + "forwarding_port": 80, + "tcp_forwarding": true, + "udp_forwarding": false, + "meta": { + "nginx_online": true, + "nginx_err": null + }, + "enabled": true, + "owner": { + "id": 1, + "created_on": "2024-10-09T02:33:16.000Z", + "modified_on": "2024-10-09T02:33:16.000Z", + "is_disabled": false, + "email": "admin@example.com", + "name": "Administrator", + "nickname": "Admin", + "avatar": "", + "roles": ["admin"] + }, + "certificate_id": 0 + } + } + }, + "schema": { + "$ref": "../../../../components/stream-object.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/reports/hosts/get.json b/backend/schema/paths/reports/hosts/get.json new file mode 100644 index 0000000..682a97b --- /dev/null +++ b/backend/schema/paths/reports/hosts/get.json @@ -0,0 +1,54 @@ +{ + "operationId": "reportsHosts", + "summary": "Report on Host Statistics", + "tags": ["reports"], + "security": [ + { + "bearerAuth": [] + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "proxy": 20, + "redirection": 1, + "stream": 0, + "dead": 1 + } + } + }, + "schema": { + "type": "object", + "properties": { + "proxy": { + "type": "integer", + "description": "Proxy Hosts Count", + "example": 20 + }, + "redirection": { + "type": "integer", + "description": "Redirection Hosts Count", + "example": 2 + }, + "stream": { + "type": "integer", + "description": "Streams Count", + "example": 0 + }, + "dead": { + "type": "integer", + "description": "404 Hosts Count", + "example": 3 + } + } + } + } + } + } + } +} diff --git a/backend/schema/paths/schema/get.json b/backend/schema/paths/schema/get.json new file mode 100644 index 0000000..c9e601e --- /dev/null +++ b/backend/schema/paths/schema/get.json @@ -0,0 +1,10 @@ +{ + "operationId": "schema", + "summary": "Returns this swagger API schema", + "tags": ["public"], + "responses": { + "200": { + "description": "200 response" + } + } +} diff --git a/backend/schema/paths/settings/get.json b/backend/schema/paths/settings/get.json new file mode 100644 index 0000000..a99f7f2 --- /dev/null +++ b/backend/schema/paths/settings/get.json @@ -0,0 +1,35 @@ +{ + "operationId": "getSettings", + "summary": "Get all settings", + "tags": ["settings"], + "security": [ + { + "bearerAuth": ["admin"] + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": [ + { + "id": "default-site", + "name": "Default Site", + "description": "What to show when Nginx is hit with an unknown Host", + "value": "congratulations", + "meta": {} + } + ] + } + }, + "schema": { + "$ref": "../../components/setting-list.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/settings/settingID/get.json b/backend/schema/paths/settings/settingID/get.json new file mode 100644 index 0000000..929f3e5 --- /dev/null +++ b/backend/schema/paths/settings/settingID/get.json @@ -0,0 +1,46 @@ +{ + "operationId": "getSetting", + "summary": "Get a setting", + "tags": ["settings"], + "security": [ + { + "bearerAuth": ["admin"] + } + ], + "parameters": [ + { + "in": "path", + "name": "settingID", + "schema": { + "type": "string", + "minLength": 1 + }, + "required": true, + "description": "Setting ID", + "example": "default-site" + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "id": "default-site", + "name": "Default Site", + "description": "What to show when Nginx is hit with an unknown Host", + "value": "congratulations", + "meta": {} + } + } + }, + "schema": { + "$ref": "../../../components/setting-object.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/settings/settingID/put.json b/backend/schema/paths/settings/settingID/put.json new file mode 100644 index 0000000..050ad44 --- /dev/null +++ b/backend/schema/paths/settings/settingID/put.json @@ -0,0 +1,87 @@ +{ + "operationId": "updateSetting", + "summary": "Update a setting", + "tags": ["settings"], + "security": [ + { + "bearerAuth": ["admin"] + } + ], + "parameters": [ + { + "in": "path", + "name": "settingID", + "schema": { + "type": "string", + "minLength": 1, + "enum": ["default-site"] + }, + "required": true, + "description": "Setting ID", + "example": "default-site" + } + ], + "requestBody": { + "description": "Setting Payload", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false, + "minProperties": 1, + "properties": { + "value": { + "type": "string", + "minLength": 1, + "enum": ["congratulations", "404", "444", "redirect", "html"], + "example": "html" + }, + "meta": { + "type": "object", + "additionalProperties": false, + "properties": { + "redirect": { + "type": "string" + }, + "html": { + "type": "string" + } + }, + "example": { + "html": "

hello world

" + } + } + } + }, + "example": { + "value": "congratulations", + "meta": {} + } + } + } + }, + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "id": "default-site", + "name": "Default Site", + "description": "What to show when Nginx is hit with an unknown Host", + "value": "congratulations", + "meta": {} + } + } + }, + "schema": { + "$ref": "../../../components/setting-object.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/tokens/2fa/post.json b/backend/schema/paths/tokens/2fa/post.json new file mode 100644 index 0000000..c37af8d --- /dev/null +++ b/backend/schema/paths/tokens/2fa/post.json @@ -0,0 +1,55 @@ +{ + "operationId": "loginWith2FA", + "summary": "Verify 2FA code and get full token", + "tags": ["tokens"], + "requestBody": { + "description": "2fa Challenge Payload", + "required": true, + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "challenge_token": { + "minLength": 1, + "type": "string", + "example": "eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCJ9.ey...xaHKYr3Kk6MvkUjcC4" + }, + "code": { + "minLength": 6, + "maxLength": 8, + "type": "string", + "example": "012345" + } + }, + "required": ["challenge_token", "code"], + "type": "object" + }, + "example": { + "challenge_token": "eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCJ9.ey...xaHKYr3Kk6MvkUjcC4", + "code": "012345" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "expires": "2025-02-04T20:40:46.340Z", + "token": "eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCJ9.ey...xaHKYr3Kk6MvkUjcC4" + } + } + }, + "schema": { + "$ref": "../../../components/token-object.json" + } + } + }, + "description": "200 response" + } + } +} diff --git a/backend/schema/paths/tokens/get.json b/backend/schema/paths/tokens/get.json new file mode 100644 index 0000000..4e6ae24 --- /dev/null +++ b/backend/schema/paths/tokens/get.json @@ -0,0 +1,30 @@ +{ + "operationId": "refreshToken", + "summary": "Refresh your access token", + "tags": ["tokens"], + "security": [ + { + "bearerAuth": [] + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "expires": "2025-02-04T20:40:46.340Z", + "token": "eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCJ9.ey...xaHKYr3Kk6MvkUjcC4" + } + } + }, + "schema": { + "$ref": "../../components/token-object.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/tokens/post.json b/backend/schema/paths/tokens/post.json new file mode 100644 index 0000000..470be30 --- /dev/null +++ b/backend/schema/paths/tokens/post.json @@ -0,0 +1,67 @@ +{ + "operationId": "requestToken", + "summary": "Request a new access token from credentials", + "tags": ["tokens"], + "requestBody": { + "description": "Credentials Payload", + "required": true, + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "identity": { + "minLength": 1, + "type": "string", + "example": "me@example.com" + }, + "scope": { + "minLength": 1, + "type": "string", + "enum": ["user"], + "example": "user" + }, + "secret": { + "minLength": 1, + "type": "string", + "example": "bigredhorsebanana" + } + }, + "required": ["identity", "secret"], + "type": "object" + }, + "example": { + "identity": "me@example.com", + "secret": "bigredhorsebanana" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "expires": "2025-02-04T20:40:46.340Z", + "token": "eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCJ9.ey...xaHKYr3Kk6MvkUjcC4" + } + } + }, + "schema": { + "oneOf": [ + { + "$ref": "../../components/token-object.json" + }, + { + "$ref": "../../components/token-challenge.json" + } + ] + } + } + }, + "description": "200 response" + } + } +} diff --git a/backend/schema/paths/users/get.json b/backend/schema/paths/users/get.json new file mode 100644 index 0000000..79c31ba --- /dev/null +++ b/backend/schema/paths/users/get.json @@ -0,0 +1,74 @@ +{ + "operationId": "getUsers", + "summary": "Get all users", + "tags": ["users"], + "security": [ + { + "bearerAuth": ["admin"] + } + ], + "parameters": [ + { + "in": "query", + "name": "expand", + "description": "Expansions", + "schema": { + "type": "string", + "enum": ["permissions"] + } + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": [ + { + "id": 1, + "created_on": "2020-01-30T09:36:08.000Z", + "modified_on": "2020-01-30T09:41:04.000Z", + "is_disabled": false, + "email": "jc@jc21.com", + "name": "Jamie Curnow", + "nickname": "James", + "avatar": "//www.gravatar.com/avatar/6193176330f8d38747f038c170ddb193?default=mm", + "roles": ["admin"] + } + ] + }, + "withPermissions": { + "value": [ + { + "id": 1, + "created_on": "2020-01-30T09:36:08.000Z", + "modified_on": "2020-01-30T09:41:04.000Z", + "is_disabled": false, + "email": "jc@jc21.com", + "name": "Jamie Curnow", + "nickname": "James", + "avatar": "//www.gravatar.com/avatar/6193176330f8d38747f038c170ddb193?default=mm", + "roles": ["admin"], + "permissions": { + "visibility": "all", + "proxy_hosts": "manage", + "redirection_hosts": "manage", + "dead_hosts": "manage", + "streams": "manage", + "access_lists": "manage", + "certificates": "manage" + } + } + ] + } + }, + "schema": { + "$ref": "../../components/user-list.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/users/post.json b/backend/schema/paths/users/post.json new file mode 100644 index 0000000..49025e3 --- /dev/null +++ b/backend/schema/paths/users/post.json @@ -0,0 +1,88 @@ +{ + "operationId": "createUser", + "summary": "Create a User", + "tags": ["users"], + "security": [ + { + "bearerAuth": ["admin"] + } + ], + "requestBody": { + "description": "User Payload", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false, + "required": ["name", "nickname", "email"], + "properties": { + "name": { + "$ref": "../../components/user-object.json#/properties/name" + }, + "nickname": { + "$ref": "../../components/user-object.json#/properties/nickname" + }, + "email": { + "$ref": "../../components/user-object.json#/properties/email" + }, + "roles": { + "$ref": "../../components/user-object.json#/properties/roles" + }, + "is_disabled": { + "$ref": "../../components/user-object.json#/properties/is_disabled" + }, + "auth": { + "type": "object", + "description": "Auth Credentials", + "example": { + "type": "password", + "secret": "bigredhorsebanana" + } + } + } + } + } + } + }, + "responses": { + "201": { + "description": "201 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "id": 2, + "created_on": "2020-01-30T09:41:04.000Z", + "modified_on": "2020-01-30T09:41:04.000Z", + "is_disabled": false, + "email": "jc@jc21.com", + "name": "Jamie Curnow", + "nickname": "James", + "avatar": "//www.gravatar.com/avatar/6193176330f8d38747f038c170ddb193?default=mm", + "roles": ["admin"], + "permissions": { + "id": 3, + "created_on": "2020-01-30T09:41:04.000Z", + "modified_on": "2020-01-30T09:41:04.000Z", + "user_id": 2, + "visibility": "user", + "proxy_hosts": "manage", + "redirection_hosts": "manage", + "dead_hosts": "manage", + "streams": "manage", + "access_lists": "manage", + "certificates": "manage" + } + } + } + }, + "schema": { + "$ref": "../../components/user-object.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/users/userID/2fa/backup-codes/post.json b/backend/schema/paths/users/userID/2fa/backup-codes/post.json new file mode 100644 index 0000000..00cb9d5 --- /dev/null +++ b/backend/schema/paths/users/userID/2fa/backup-codes/post.json @@ -0,0 +1,92 @@ +{ + "operationId": "regenUser2faCodes", + "summary": "Regenerate 2FA backup codes", + "tags": ["users"], + "parameters": [ + { + "in": "path", + "name": "userID", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "description": "User ID", + "example": 2 + } + ], + "requestBody": { + "description": "Verification Payload", + "required": true, + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "code": { + "minLength": 6, + "maxLength": 8, + "type": "string", + "example": "123456" + } + }, + "required": ["code"], + "type": "object" + }, + "example": { + "code": "123456" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "backup_codes": [ + "6CD7CB06", + "495302F3", + "D8037852", + "A6FFC956", + "BC1A1851", + "A05E644F", + "A406D2E8", + "0AE3C522" + ] + } + } + }, + "schema": { + "type": "object", + "required": ["backup_codes"], + "additionalProperties": false, + "properties": { + "backup_codes": { + "description": "Backup codes", + "example": [ + "6CD7CB06", + "495302F3", + "D8037852", + "A6FFC956", + "BC1A1851", + "A05E644F", + "A406D2E8", + "0AE3C522" + ], + "type": "array", + "items": { + "type": "string", + "example": "6CD7CB06" + } + } + } + } + } + }, + "description": "200 response" + } + } +} diff --git a/backend/schema/paths/users/userID/2fa/delete.json b/backend/schema/paths/users/userID/2fa/delete.json new file mode 100644 index 0000000..bff292d --- /dev/null +++ b/backend/schema/paths/users/userID/2fa/delete.json @@ -0,0 +1,48 @@ +{ + "operationId": "disableUser2fa", + "summary": "Disable 2fa for user", + "tags": ["users"], + "parameters": [ + { + "in": "path", + "name": "userID", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "description": "User ID", + "example": 2 + }, + { + "in": "query", + "name": "code", + "schema": { + "type": "string", + "minLength": 6, + "maxLength": 6, + "example": "012345" + }, + "required": true, + "description": "2fa Code", + "example": "012345" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "default": { + "value": true + } + }, + "schema": { + "type": "boolean" + } + } + }, + "description": "200 response" + } + } +} diff --git a/backend/schema/paths/users/userID/2fa/enable/post.json b/backend/schema/paths/users/userID/2fa/enable/post.json new file mode 100644 index 0000000..74c9854 --- /dev/null +++ b/backend/schema/paths/users/userID/2fa/enable/post.json @@ -0,0 +1,92 @@ +{ + "operationId": "enableUser2fa", + "summary": "Verify code and enable 2FA", + "tags": ["users"], + "parameters": [ + { + "in": "path", + "name": "userID", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "description": "User ID", + "example": 2 + } + ], + "requestBody": { + "description": "Verification Payload", + "required": true, + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "code": { + "minLength": 6, + "maxLength": 8, + "type": "string", + "example": "123456" + } + }, + "required": ["code"], + "type": "object" + }, + "example": { + "code": "123456" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "backup_codes": [ + "6CD7CB06", + "495302F3", + "D8037852", + "A6FFC956", + "BC1A1851", + "A05E644F", + "A406D2E8", + "0AE3C522" + ] + } + } + }, + "schema": { + "type": "object", + "required": ["backup_codes"], + "additionalProperties": false, + "properties": { + "backup_codes": { + "description": "Backup codes", + "example": [ + "6CD7CB06", + "495302F3", + "D8037852", + "A6FFC956", + "BC1A1851", + "A05E644F", + "A406D2E8", + "0AE3C522" + ], + "type": "array", + "items": { + "type": "string", + "example": "6CD7CB06" + } + } + } + } + } + }, + "description": "200 response" + } + } +} diff --git a/backend/schema/paths/users/userID/2fa/get.json b/backend/schema/paths/users/userID/2fa/get.json new file mode 100644 index 0000000..78ce188 --- /dev/null +++ b/backend/schema/paths/users/userID/2fa/get.json @@ -0,0 +1,57 @@ +{ + "operationId": "getUser2faStatus", + "summary": "Get user 2fa Status", + "tags": ["users"], + "security": [ + { + "bearerAuth": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "userID", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "description": "User ID", + "example": 2 + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "enabled": false, + "backup_codes_remaining": 0 + } + } + }, + "schema": { + "type": "object", + "additionalProperties": false, + "required": ["enabled", "backup_codes_remaining"], + "properties": { + "enabled": { + "type": "boolean", + "description": "Is 2FA enabled for this user", + "example": true + }, + "backup_codes_remaining": { + "type": "integer", + "description": "Number of remaining backup codes for this user", + "example": 5 + } + } + } + } + } + } + } +} diff --git a/backend/schema/paths/users/userID/2fa/post.json b/backend/schema/paths/users/userID/2fa/post.json new file mode 100644 index 0000000..cef5d19 --- /dev/null +++ b/backend/schema/paths/users/userID/2fa/post.json @@ -0,0 +1,52 @@ +{ + "operationId": "setupUser2fa", + "summary": "Start 2FA setup, returns QR code URL", + "tags": ["users"], + "parameters": [ + { + "in": "path", + "name": "userID", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "description": "User ID", + "example": 2 + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "secret": "JZYCEBIEEJYUGPQM", + "otpauth_url": "otpauth://totp/Nginx%20Proxy%20Manager:jc%40jc21.com?secret=JZYCEBIEEJYUGPQM&period=30&digits=6&algorithm=SHA1&issuer=Nginx%20Proxy%20Manager" + } + } + }, + "schema": { + "type": "object", + "required": ["secret", "otpauth_url"], + "additionalProperties": false, + "properties": { + "secret": { + "description": "TOTP Secret", + "example": "JZYCEBIEEJYUGPQM", + "type": "string" + }, + "otpauth_url": { + "description": "OTP Auth URL for QR Code generation", + "example": "otpauth://totp/Nginx%20Proxy%20Manager:jc%40jc21.com?secret=JZYCEBIEEJYUGPQM&period=30&digits=6&algorithm=SHA1&issuer=Nginx%20Proxy%20Manager", + "type": "string" + } + } + } + } + }, + "description": "200 response" + } + } +} diff --git a/backend/schema/paths/users/userID/auth/put.json b/backend/schema/paths/users/userID/auth/put.json new file mode 100644 index 0000000..3dba45b --- /dev/null +++ b/backend/schema/paths/users/userID/auth/put.json @@ -0,0 +1,79 @@ +{ + "operationId": "updateUserAuth", + "summary": "Update a User's Authentication", + "tags": ["users"], + "security": [ + { + "bearerAuth": ["admin"] + } + ], + "parameters": [ + { + "in": "path", + "name": "userID", + "schema": { + "oneOf": [ + { + "type": "string", + "pattern": "^me$" + }, + { + "type": "integer", + "minimum": 1 + } + ] + }, + "required": true, + "description": "User ID or 'me' for yourself", + "example": 2 + } + ], + "requestBody": { + "description": "Auth Payload", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": ["type", "secret"], + "properties": { + "type": { + "type": "string", + "pattern": "^password$", + "example": "password" + }, + "current": { + "type": "string", + "minLength": 1, + "maxLength": 64, + "example": "changeme" + }, + "secret": { + "type": "string", + "minLength": 8, + "maxLength": 64, + "example": "mySuperN3wP@ssword!" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": true + } + }, + "schema": { + "type": "boolean" + } + } + } + } + } +} diff --git a/backend/schema/paths/users/userID/delete.json b/backend/schema/paths/users/userID/delete.json new file mode 100644 index 0000000..767edfe --- /dev/null +++ b/backend/schema/paths/users/userID/delete.json @@ -0,0 +1,40 @@ +{ + "operationId": "deleteUser", + "summary": "Delete a User", + "tags": ["users"], + "security": [ + { + "bearerAuth": ["admin"] + } + ], + "parameters": [ + { + "in": "path", + "name": "userID", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "description": "User ID", + "example": 2 + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": true + } + }, + "schema": { + "type": "boolean" + } + } + } + } + } +} diff --git a/backend/schema/paths/users/userID/get.json b/backend/schema/paths/users/userID/get.json new file mode 100644 index 0000000..2cf5587 --- /dev/null +++ b/backend/schema/paths/users/userID/get.json @@ -0,0 +1,58 @@ +{ + "operationId": "getUser", + "summary": "Get a user", + "tags": ["users"], + "security": [ + { + "bearerAuth": ["admin"] + } + ], + "parameters": [ + { + "in": "path", + "name": "userID", + "schema": { + "oneOf": [ + { + "type": "string", + "pattern": "^me$" + }, + { + "type": "integer", + "minimum": 1 + } + ] + }, + "required": true, + "description": "User ID or 'me' for yourself", + "example": 1 + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "id": 1, + "created_on": "2020-01-30T09:36:08.000Z", + "modified_on": "2020-01-30T09:41:04.000Z", + "is_disabled": false, + "email": "jc@jc21.com", + "name": "Jamie Curnow", + "nickname": "James", + "avatar": "//www.gravatar.com/avatar/6193176330f8d38747f038c170ddb193?default=mm", + "roles": ["admin"] + } + } + }, + "schema": { + "$ref": "../../../components/user-object.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/users/userID/login/post.json b/backend/schema/paths/users/userID/login/post.json new file mode 100644 index 0000000..46001d2 --- /dev/null +++ b/backend/schema/paths/users/userID/login/post.json @@ -0,0 +1,72 @@ +{ + "operationId": "loginAsUser", + "summary": "Login as this user", + "tags": ["users"], + "security": [ + { + "bearerAuth": ["admin"] + } + ], + "parameters": [ + { + "in": "path", + "name": "userID", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "description": "User ID", + "example": 2 + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "token": "eyJhbGciOiJSUzI1NiIsInR...16OjT8B3NLyXg", + "expires": "2020-01-31T10:56:23.239Z", + "user": { + "id": 1, + "created_on": "2020-01-30T10:43:44.000Z", + "modified_on": "2020-01-30T10:43:44.000Z", + "is_disabled": false, + "email": "user2@example.com", + "name": "John Doe", + "nickname": "Jonny", + "avatar": "//www.gravatar.com/avatar/3c8d73f45fd8763f827b964c76e6032a?default=mm", + "roles": [] + } + } + } + }, + "schema": { + "type": "object", + "description": "Login object", + "required": ["expires", "token", "user"], + "additionalProperties": false, + "properties": { + "token": { + "description": "JWT Token", + "type": "string", + "example": "eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCJ9.ey...xaHKYr3Kk6MvkUjcC4" + }, + "expires": { + "description": "Token Expiry Timestamp", + "type": "string", + "example": "2020-01-30T10:43:44.000Z" + }, + "user": { + "$ref": "../../../../components/user-object.json" + } + } + } + } + } + } + } +} diff --git a/backend/schema/paths/users/userID/permissions/put.json b/backend/schema/paths/users/userID/permissions/put.json new file mode 100644 index 0000000..764e746 --- /dev/null +++ b/backend/schema/paths/users/userID/permissions/put.json @@ -0,0 +1,60 @@ +{ + "operationId": "updateUserPermissions", + "summary": "Update a User's Permissions", + "tags": ["users"], + "security": [ + { + "bearerAuth": ["admin"] + } + ], + "parameters": [ + { + "in": "path", + "name": "userID", + "schema": { + "type": "integer", + "minimum": 1 + }, + "required": true, + "description": "User ID", + "example": 2 + } + ], + "requestBody": { + "description": "Permissions Payload", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "../../../../components/permission-object.json" + }, + "example": { + "visibility": "all", + "access_lists": "view", + "certificates": "hidden", + "dead_hosts": "hidden", + "proxy_hosts": "manage", + "redirection_hosts": "hidden", + "streams": "hidden" + } + } + } + }, + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": true + } + }, + "schema": { + "type": "boolean" + } + } + } + } + } +} diff --git a/backend/schema/paths/users/userID/put.json b/backend/schema/paths/users/userID/put.json new file mode 100644 index 0000000..eabaa3a --- /dev/null +++ b/backend/schema/paths/users/userID/put.json @@ -0,0 +1,88 @@ +{ + "operationId": "updateUser", + "summary": "Update a User", + "tags": ["users"], + "security": [ + { + "bearerAuth": ["admin"] + } + ], + "parameters": [ + { + "in": "path", + "name": "userID", + "schema": { + "oneOf": [ + { + "type": "string", + "pattern": "^me$" + }, + { + "type": "integer", + "minimum": 1 + } + ] + }, + "required": true, + "description": "User ID or 'me' for yourself", + "example": 2 + } + ], + "requestBody": { + "description": "User Payload", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false, + "minProperties": 1, + "properties": { + "name": { + "$ref": "../../../components/user-object.json#/properties/name" + }, + "nickname": { + "$ref": "../../../components/user-object.json#/properties/nickname" + }, + "email": { + "$ref": "../../../components/user-object.json#/properties/email" + }, + "roles": { + "$ref": "../../../components/user-object.json#/properties/roles" + }, + "is_disabled": { + "$ref": "../../../components/user-object.json#/properties/is_disabled" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "id": 2, + "created_on": "2020-01-30T09:36:08.000Z", + "modified_on": "2020-01-30T09:41:04.000Z", + "is_disabled": false, + "email": "jc@jc21.com", + "name": "Jamie Curnow", + "nickname": "James", + "avatar": "//www.gravatar.com/avatar/6193176330f8d38747f038c170ddb193?default=mm", + "roles": ["admin"] + } + } + }, + "schema": { + "$ref": "../../../components/user-object.json" + } + } + } + } + } +} diff --git a/backend/schema/paths/version/check/get.json b/backend/schema/paths/version/check/get.json new file mode 100644 index 0000000..cbc576a --- /dev/null +++ b/backend/schema/paths/version/check/get.json @@ -0,0 +1,26 @@ +{ + "operationId": "checkVersion", + "summary": "Returns any new version data from github", + "tags": ["public"], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "examples": { + "default": { + "value": { + "current": "v2.12.0", + "latest": "v2.13.4", + "update_available": true + } + } + }, + "schema": { + "$ref": "../../../components/check-version-object.json" + } + } + } + } + } +} diff --git a/backend/schema/swagger.json b/backend/schema/swagger.json new file mode 100644 index 0000000..4222f19 --- /dev/null +++ b/backend/schema/swagger.json @@ -0,0 +1,362 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "Nginx Proxy Manager API", + "version": "2.x.x", + "description": "This is the official API documentation for Nginx Proxy Manager.\n\nMost endpoints require authentication via Bearer Token (JWT). You can generate a token by logging in via the `POST /tokens` endpoint.\n\nFor more information, visit the [Nginx Proxy Manager Documentation](https://nginxproxymanager.com)." + }, + "servers": [ + { + "url": "http://127.0.0.1:81/api" + } + ], + "components": { + "securitySchemes": { + "$ref": "./components/security-schemes.json" + } + }, + "tags": [ + { + "name": "public", + "description": "Endpoints that do not require authentication" + }, + { + "name": "audit-log", + "description": "Endpoints related to Audit Logs" + }, + { + "name": "access-lists", + "description": "Endpoints related to Access Lists" + }, + { + "name": "certificates", + "description": "Endpoints related to Certificates" + }, + { + "name": "404-hosts", + "description": "Endpoints related to 404 Hosts" + }, + { + "name": "proxy-hosts", + "description": "Endpoints related to Proxy Hosts" + }, + { + "name": "redirection-hosts", + "description": "Endpoints related to Redirection Hosts" + }, + { + "name": "streams", + "description": "Endpoints related to Streams" + }, + { + "name": "reports", + "description": "Endpoints for viewing reports" + }, + { + "name": "settings", + "description": "Endpoints for managing application settings" + }, + { + "name": "tokens", + "description": "Endpoints for managing authentication tokens" + }, + { + "name": "users", + "description": "Endpoints for managing users" + } + ], + "paths": { + "/": { + "get": { + "$ref": "./paths/get.json" + } + }, + "/audit-log": { + "get": { + "$ref": "./paths/audit-log/get.json" + } + }, + "/audit-log/{id}": { + "get": { + "$ref": "./paths/audit-log/id/get.json" + } + }, + "/nginx/access-lists": { + "get": { + "$ref": "./paths/nginx/access-lists/get.json" + }, + "post": { + "$ref": "./paths/nginx/access-lists/post.json" + } + }, + "/nginx/access-lists/{listID}": { + "get": { + "$ref": "./paths/nginx/access-lists/listID/get.json" + }, + "put": { + "$ref": "./paths/nginx/access-lists/listID/put.json" + }, + "delete": { + "$ref": "./paths/nginx/access-lists/listID/delete.json" + } + }, + "/nginx/certificates": { + "get": { + "$ref": "./paths/nginx/certificates/get.json" + }, + "post": { + "$ref": "./paths/nginx/certificates/post.json" + } + }, + "/nginx/certificates/dns-providers": { + "get": { + "$ref": "./paths/nginx/certificates/dns-providers/get.json" + } + }, + "/nginx/certificates/validate": { + "post": { + "$ref": "./paths/nginx/certificates/validate/post.json" + } + }, + "/nginx/certificates/test-http": { + "post": { + "$ref": "./paths/nginx/certificates/test-http/post.json" + } + }, + "/nginx/certificates/{certID}": { + "get": { + "$ref": "./paths/nginx/certificates/certID/get.json" + }, + "delete": { + "$ref": "./paths/nginx/certificates/certID/delete.json" + } + }, + "/nginx/certificates/{certID}/download": { + "get": { + "$ref": "./paths/nginx/certificates/certID/download/get.json" + } + }, + "/nginx/certificates/{certID}/renew": { + "post": { + "$ref": "./paths/nginx/certificates/certID/renew/post.json" + } + }, + "/nginx/certificates/{certID}/upload": { + "post": { + "$ref": "./paths/nginx/certificates/certID/upload/post.json" + } + }, + "/nginx/proxy-hosts": { + "get": { + "$ref": "./paths/nginx/proxy-hosts/get.json" + }, + "post": { + "$ref": "./paths/nginx/proxy-hosts/post.json" + } + }, + "/nginx/proxy-hosts/{hostID}": { + "get": { + "$ref": "./paths/nginx/proxy-hosts/hostID/get.json" + }, + "put": { + "$ref": "./paths/nginx/proxy-hosts/hostID/put.json" + }, + "delete": { + "$ref": "./paths/nginx/proxy-hosts/hostID/delete.json" + } + }, + "/nginx/proxy-hosts/{hostID}/enable": { + "post": { + "$ref": "./paths/nginx/proxy-hosts/hostID/enable/post.json" + } + }, + "/nginx/proxy-hosts/{hostID}/disable": { + "post": { + "$ref": "./paths/nginx/proxy-hosts/hostID/disable/post.json" + } + }, + "/nginx/redirection-hosts": { + "get": { + "$ref": "./paths/nginx/redirection-hosts/get.json" + }, + "post": { + "$ref": "./paths/nginx/redirection-hosts/post.json" + } + }, + "/nginx/redirection-hosts/{hostID}": { + "get": { + "$ref": "./paths/nginx/redirection-hosts/hostID/get.json" + }, + "put": { + "$ref": "./paths/nginx/redirection-hosts/hostID/put.json" + }, + "delete": { + "$ref": "./paths/nginx/redirection-hosts/hostID/delete.json" + } + }, + "/nginx/redirection-hosts/{hostID}/enable": { + "post": { + "$ref": "./paths/nginx/redirection-hosts/hostID/enable/post.json" + } + }, + "/nginx/redirection-hosts/{hostID}/disable": { + "post": { + "$ref": "./paths/nginx/redirection-hosts/hostID/disable/post.json" + } + }, + "/nginx/dead-hosts": { + "get": { + "$ref": "./paths/nginx/dead-hosts/get.json" + }, + "post": { + "$ref": "./paths/nginx/dead-hosts/post.json" + } + }, + "/nginx/dead-hosts/{hostID}": { + "get": { + "$ref": "./paths/nginx/dead-hosts/hostID/get.json" + }, + "put": { + "$ref": "./paths/nginx/dead-hosts/hostID/put.json" + }, + "delete": { + "$ref": "./paths/nginx/dead-hosts/hostID/delete.json" + } + }, + "/nginx/dead-hosts/{hostID}/enable": { + "post": { + "$ref": "./paths/nginx/dead-hosts/hostID/enable/post.json" + } + }, + "/nginx/dead-hosts/{hostID}/disable": { + "post": { + "$ref": "./paths/nginx/dead-hosts/hostID/disable/post.json" + } + }, + "/nginx/streams": { + "get": { + "$ref": "./paths/nginx/streams/get.json" + }, + "post": { + "$ref": "./paths/nginx/streams/post.json" + } + }, + "/nginx/streams/{streamID}": { + "get": { + "$ref": "./paths/nginx/streams/streamID/get.json" + }, + "put": { + "$ref": "./paths/nginx/streams/streamID/put.json" + }, + "delete": { + "$ref": "./paths/nginx/streams/streamID/delete.json" + } + }, + "/nginx/streams/{streamID}/enable": { + "post": { + "$ref": "./paths/nginx/streams/streamID/enable/post.json" + } + }, + "/nginx/streams/{streamID}/disable": { + "post": { + "$ref": "./paths/nginx/streams/streamID/disable/post.json" + } + }, + "/reports/hosts": { + "get": { + "$ref": "./paths/reports/hosts/get.json" + } + }, + "/schema": { + "get": { + "$ref": "./paths/schema/get.json" + } + }, + "/settings": { + "get": { + "$ref": "./paths/settings/get.json" + } + }, + "/settings/{settingID}": { + "get": { + "$ref": "./paths/settings/settingID/get.json" + }, + "put": { + "$ref": "./paths/settings/settingID/put.json" + } + }, + "/tokens": { + "get": { + "$ref": "./paths/tokens/get.json" + }, + "post": { + "$ref": "./paths/tokens/post.json" + } + }, + "/tokens/2fa": { + "post": { + "$ref": "./paths/tokens/2fa/post.json" + } + }, + "/version/check": { + "get": { + "$ref": "./paths/version/check/get.json" + } + }, + "/users": { + "get": { + "$ref": "./paths/users/get.json" + }, + "post": { + "$ref": "./paths/users/post.json" + } + }, + "/users/{userID}": { + "get": { + "$ref": "./paths/users/userID/get.json" + }, + "put": { + "$ref": "./paths/users/userID/put.json" + }, + "delete": { + "$ref": "./paths/users/userID/delete.json" + } + }, + "/users/{userID}/2fa": { + "post": { + "$ref": "./paths/users/userID/2fa/post.json" + }, + "get": { + "$ref": "./paths/users/userID/2fa/get.json" + }, + "delete": { + "$ref": "./paths/users/userID/2fa/delete.json" + } + }, + "/users/{userID}/2fa/enable": { + "post": { + "$ref": "./paths/users/userID/2fa/enable/post.json" + } + }, + "/users/{userID}/2fa/backup-codes": { + "post": { + "$ref": "./paths/users/userID/2fa/backup-codes/post.json" + } + }, + "/users/{userID}/auth": { + "put": { + "$ref": "./paths/users/userID/auth/put.json" + } + }, + "/users/{userID}/permissions": { + "put": { + "$ref": "./paths/users/userID/permissions/put.json" + } + }, + "/users/{userID}/login": { + "post": { + "$ref": "./paths/users/userID/login/post.json" + } + } + } +} diff --git a/backend/scripts/install-certbot-plugins b/backend/scripts/install-certbot-plugins new file mode 100644 index 0000000..6acb022 --- /dev/null +++ b/backend/scripts/install-certbot-plugins @@ -0,0 +1,54 @@ +#!/usr/bin/node + +// Usage: +// Install all plugins defined in `../certbot/dns-plugins.json`: +// ./install-certbot-plugins +// Install one or more specific plugins: +// ./install-certbot-plugins route53 cloudflare +// +// Usage with a running docker container: +// docker exec npm_core /command/s6-setuidgid 1000:1000 bash -c "/app/scripts/install-certbot-plugins" +// + +import batchflow from "batchflow"; +import dnsPlugins from "../certbot/dns-plugins.json" with { type: "json" }; +import { installPlugin } from "../lib/certbot.js"; +import { certbot as logger } from "../logger.js"; + +let hasErrors = false; +const failingPlugins = []; + +let pluginKeys = Object.keys(dnsPlugins); +if (process.argv.length > 2) { + pluginKeys = process.argv.slice(2); +} + +batchflow(pluginKeys) + .sequential() + .each((i, pluginKey, next) => { + installPlugin(pluginKey) + .then(() => { + next(); + }) + .catch((err) => { + hasErrors = true; + failingPlugins.push(pluginKey); + next(err); + }); + }) + .error((err) => { + logger.error(err.message); + }) + .end(() => { + if (hasErrors) { + logger.error( + "Some plugins failed to install. Please check the logs above. Failing plugins: " + + "\n - " + + failingPlugins.join("\n - "), + ); + process.exit(1); + } else { + logger.complete("Plugins installed successfully"); + process.exit(0); + } + }); diff --git a/backend/scripts/regenerate-config b/backend/scripts/regenerate-config new file mode 100644 index 0000000..00f8411 --- /dev/null +++ b/backend/scripts/regenerate-config @@ -0,0 +1,76 @@ +#!/usr/bin/env node + +import * as process from "node:process"; // Use the node: protocol for built-ins +import internalNginx from "../internal/nginx.js"; +import { global as logger } from "../logger.js"; +import deadHostModel from "../models/dead_host.js"; +import proxyHostModel from "../models/proxy_host.js"; +import redirectionHostModel from "../models/redirection_host.js"; +import streamModel from "../models/stream.js"; + +const args = process.argv.slice(2); +const UNATTENDED = args.includes("-y") || args.includes("--yes"); +const DRY_RUN = args.includes("--dry-run"); + +if (args.includes("--help") || args.includes("-h")) { + console.log("\nThis will iterate over all Hosts and regnerate their Nginx configs.\n") + console.log("Usage: ./regenerate-config [-h|--help] [-y|--yes] [--dry-run]\n"); + process.exit(0); +} + +// ask for the user to confirm the action if not in unattended mode +if (!UNATTENDED && !DRY_RUN) { + const readline = await import("node:readline"); + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, + }); + + const question = (query) => + new Promise((resolve) => rl.question(query, resolve)); + + const answer = await question( + "This will iterate over all Hosts and regnerate their Nginx configs.\n\nAre you sure you want to proceed? (y/N) ", + ); + rl.close(); + + if (answer.toLowerCase() !== "y") { + console.log("Aborting."); + process.exit(0); + } +} + +const logIt = (msg, type = "info") => logger[type]( + `${DRY_RUN ? '[DRY RUN] ' : ''}${msg}`, +); + +// Let's do it. + +const processItems = async (model, type) => { + const rows = await model + .query() + .where("is_deleted", 0) + .andWhere("enabled", 1) + .groupBy("id") + .allowGraph(model.defaultAllowGraph) + .withGraphFetched(`[${model.defaultExpand.join(", ")}]`) + .orderBy(...model.defaultOrder); + + logIt(`[${type}] Found ${rows.length} rows to process...`); + for (const row of rows) { + if (!DRY_RUN) { + logIt(`[${type}] Regenerating config #${row.id}: ${row.domain_names ? row.domain_names.join(", ") : 'port ' + row.incoming_port}`); + await internalNginx.configure(proxyHostModel, "proxy_host", row); + } else { + logIt(`[${type}] Skipping generation of config #${row.id}: ${row.domain_names ? row.domain_names.join(", ") : 'port ' + row.incoming_port}`); + } + } +}; + +await processItems(proxyHostModel, "Proxy Host"); +await processItems(redirectionHostModel, "Redirection Host"); +await processItems(deadHostModel, "404 Host"); +await processItems(streamModel, "Stream"); + +logIt("Completed", "success"); +process.exit(0); diff --git a/backend/setup.js b/backend/setup.js new file mode 100644 index 0000000..84f4279 --- /dev/null +++ b/backend/setup.js @@ -0,0 +1,166 @@ +import { installPlugins } from "./lib/certbot.js"; +import utils from "./lib/utils.js"; +import { setup as logger } from "./logger.js"; +import authModel from "./models/auth.js"; +import certificateModel from "./models/certificate.js"; +import settingModel from "./models/setting.js"; +import userModel from "./models/user.js"; +import userPermissionModel from "./models/user_permission.js"; + +export const isSetup = async () => { + const row = await userModel.query().select("id").where("is_deleted", 0).first(); + return row?.id > 0; +} + +/** + * Creates a default admin users if one doesn't already exist in the database + * + * @returns {Promise} + */ +const setupDefaultUser = async () => { + const initialAdminEmail = process.env.INITIAL_ADMIN_EMAIL; + const initialAdminPassword = process.env.INITIAL_ADMIN_PASSWORD; + + // This will only create a new user when there are no active users in the database + // and the INITIAL_ADMIN_EMAIL and INITIAL_ADMIN_PASSWORD environment variables are set. + // Otherwise, users should be shown the setup wizard in the frontend. + // I'm keeping this legacy behavior in case some people are automating deployments. + + if (!initialAdminEmail || !initialAdminPassword) { + return Promise.resolve(); + } + + const userIsetup = await isSetup(); + if (!userIsetup) { + // Create a new user and set password + logger.info(`Creating a new user: ${initialAdminEmail} with password: ${initialAdminPassword}`); + + const data = { + is_deleted: 0, + email: initialAdminEmail, + name: "Administrator", + nickname: "Admin", + avatar: "", + roles: ["admin"], + }; + + const user = await userModel + .query() + .insertAndFetch(data); + + await authModel + .query() + .insert({ + user_id: user.id, + type: "password", + secret: initialAdminPassword, + meta: {}, + }); + + await userPermissionModel.query().insert({ + user_id: user.id, + visibility: "all", + proxy_hosts: "manage", + redirection_hosts: "manage", + dead_hosts: "manage", + streams: "manage", + access_lists: "manage", + certificates: "manage", + }); + logger.info("Initial admin setup completed"); + } +}; + +/** + * Creates default settings if they don't already exist in the database + * + * @returns {Promise} + */ +const setupDefaultSettings = async () => { + const row = await settingModel + .query() + .select("id") + .where({ id: "default-site" }) + .first(); + + if (!row?.id) { + await settingModel + .query() + .insert({ + id: "default-site", + name: "Default Site", + description: "What to show when Nginx is hit with an unknown Host", + value: "congratulations", + meta: {}, + }); + logger.info("Default settings added"); + } +}; + +/** + * Installs all Certbot plugins which are required for an installed certificate + * + * @returns {Promise} + */ +const setupCertbotPlugins = async () => { + const certificates = await certificateModel + .query() + .where("is_deleted", 0) + .andWhere("provider", "letsencrypt"); + + if (certificates?.length) { + const plugins = []; + const promises = []; + + certificates.map((certificate) => { + if (certificate.meta && certificate.meta.dns_challenge === true) { + if (plugins.indexOf(certificate.meta.dns_provider) === -1) { + plugins.push(certificate.meta.dns_provider); + } + + // Make sure credentials file exists + const credentials_loc = `/etc/letsencrypt/credentials/credentials-${certificate.id}`; + // Escape single quotes and backslashes + if (typeof certificate.meta.dns_provider_credentials === "string") { + const escapedCredentials = certificate.meta.dns_provider_credentials + .replaceAll("'", "\\'") + .replaceAll("\\", "\\\\"); + const credentials_cmd = `[ -f '${credentials_loc}' ] || { mkdir -p /etc/letsencrypt/credentials 2> /dev/null; echo '${escapedCredentials}' > '${credentials_loc}' && chmod 600 '${credentials_loc}'; }`; + promises.push(utils.exec(credentials_cmd)); + } + } + return true; + }); + + await installPlugins(plugins); + + if (promises.length) { + await Promise.all(promises); + logger.info(`Added Certbot plugins ${plugins.join(", ")}`); + } + } +}; + +/** + * Starts a timer to call run the logrotation binary every two days + * @returns {Promise} + */ +const setupLogrotation = () => { + const intervalTimeout = 1000 * 60 * 60 * 24 * 2; // 2 days + + const runLogrotate = async () => { + try { + await utils.exec("logrotate /etc/logrotate.d/nginx-proxy-manager"); + logger.info("Logrotate completed."); + } catch (e) { + logger.warn(e); + } + }; + + logger.info("Logrotate Timer initialized"); + setInterval(runLogrotate, intervalTimeout); + // And do this now as well + return runLogrotate(); +}; + +export default () => setupDefaultUser().then(setupDefaultSettings).then(setupCertbotPlugins).then(setupLogrotation); diff --git a/backend/templates/_access.conf b/backend/templates/_access.conf new file mode 100644 index 0000000..4f38854 --- /dev/null +++ b/backend/templates/_access.conf @@ -0,0 +1,25 @@ +{% if access_list_id > 0 %} + {% if access_list.items.length > 0 %} + # Authorization + auth_basic "Authorization required"; + auth_basic_user_file /data/access/{{ access_list_id }}; + + {% if access_list.pass_auth == 0 or access_list.pass_auth == false %} + proxy_set_header Authorization ""; + {% endif %} + + {% endif %} + + # Access Rules: {{ access_list.clients | size }} total + {% for client in access_list.clients %} + {{client | nginxAccessRule}} + {% endfor %} + deny all; + + # Access checks must... + {% if access_list.satisfy_any == 1 or access_list.satisfy_any == true %} + satisfy any; + {% else %} + satisfy all; + {% endif %} +{% endif %} diff --git a/backend/templates/_assets.conf b/backend/templates/_assets.conf new file mode 100644 index 0000000..dcb183c --- /dev/null +++ b/backend/templates/_assets.conf @@ -0,0 +1,4 @@ +{% if caching_enabled == 1 or caching_enabled == true -%} + # Asset Caching + include conf.d/include/assets.conf; +{% endif %} \ No newline at end of file diff --git a/backend/templates/_certificates.conf b/backend/templates/_certificates.conf new file mode 100644 index 0000000..efcca5c --- /dev/null +++ b/backend/templates/_certificates.conf @@ -0,0 +1,15 @@ +{% if certificate and certificate_id > 0 -%} +{% if certificate.provider == "letsencrypt" %} + # Let's Encrypt SSL + include conf.d/include/letsencrypt-acme-challenge.conf; + include conf.d/include/ssl-cache.conf; + include conf.d/include/ssl-ciphers.conf; + ssl_certificate /etc/letsencrypt/live/npm-{{ certificate_id }}/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/npm-{{ certificate_id }}/privkey.pem; +{% else %} + # Custom SSL + ssl_certificate /data/custom_ssl/npm-{{ certificate_id }}/fullchain.pem; + ssl_certificate_key /data/custom_ssl/npm-{{ certificate_id }}/privkey.pem; +{% endif %} +{% endif %} + diff --git a/backend/templates/_certificates_stream.conf b/backend/templates/_certificates_stream.conf new file mode 100644 index 0000000..ba7812f --- /dev/null +++ b/backend/templates/_certificates_stream.conf @@ -0,0 +1,13 @@ +{% if certificate and certificate_id > 0 %} +{% if certificate.provider == "letsencrypt" %} + # Let's Encrypt SSL + include conf.d/include/ssl-cache-stream.conf; + include conf.d/include/ssl-ciphers.conf; + ssl_certificate /etc/letsencrypt/live/npm-{{ certificate_id }}/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/npm-{{ certificate_id }}/privkey.pem; +{%- else %} + # Custom SSL + ssl_certificate /data/custom_ssl/npm-{{ certificate_id }}/fullchain.pem; + ssl_certificate_key /data/custom_ssl/npm-{{ certificate_id }}/privkey.pem; +{%- endif -%} +{%- endif -%} diff --git a/backend/templates/_exploits.conf b/backend/templates/_exploits.conf new file mode 100644 index 0000000..002970d --- /dev/null +++ b/backend/templates/_exploits.conf @@ -0,0 +1,4 @@ +{% if block_exploits == 1 or block_exploits == true %} + # Block Exploits + include conf.d/include/block-exploits.conf; +{% endif %} \ No newline at end of file diff --git a/backend/templates/_forced_ssl.conf b/backend/templates/_forced_ssl.conf new file mode 100644 index 0000000..886e866 --- /dev/null +++ b/backend/templates/_forced_ssl.conf @@ -0,0 +1,11 @@ +{% if certificate and certificate_id > 0 -%} +{% if ssl_forced == 1 or ssl_forced == true %} + # Force SSL + {% if trust_forwarded_proto == true %} + set $trust_forwarded_proto "T"; + {% else %} + set $trust_forwarded_proto "F"; + {% endif %} + include conf.d/include/force-ssl.conf; +{% endif %} +{% endif %} \ No newline at end of file diff --git a/backend/templates/_header_comment.conf b/backend/templates/_header_comment.conf new file mode 100644 index 0000000..8f996d3 --- /dev/null +++ b/backend/templates/_header_comment.conf @@ -0,0 +1,3 @@ +# ------------------------------------------------------------ +# {{ domain_names | join: ", " }} +# ------------------------------------------------------------ \ No newline at end of file diff --git a/backend/templates/_hsts.conf b/backend/templates/_hsts.conf new file mode 100644 index 0000000..26c83ee --- /dev/null +++ b/backend/templates/_hsts.conf @@ -0,0 +1,8 @@ +{% if certificate and certificate_id > 0 -%} +{% if ssl_forced == 1 or ssl_forced == true %} +{% if hsts_enabled == 1 or hsts_enabled == true %} + # HSTS (ngx_http_headers_module is required) (63072000 seconds = 2 years) + add_header Strict-Transport-Security $hsts_header always; +{% endif %} +{% endif %} +{% endif %} diff --git a/backend/templates/_hsts_map.conf b/backend/templates/_hsts_map.conf new file mode 100644 index 0000000..27dd1f8 --- /dev/null +++ b/backend/templates/_hsts_map.conf @@ -0,0 +1,3 @@ +map $scheme $hsts_header { + https "max-age=63072000;{% if hsts_subdomains == 1 or hsts_subdomains == true -%} includeSubDomains;{% endif %} preload"; +} \ No newline at end of file diff --git a/backend/templates/_listen.conf b/backend/templates/_listen.conf new file mode 100644 index 0000000..34a808e --- /dev/null +++ b/backend/templates/_listen.conf @@ -0,0 +1,20 @@ + listen 80; +{% if ipv6 -%} + listen [::]:80; +{% else -%} + #listen [::]:80; +{% endif %} +{% if certificate -%} + listen 443 ssl; +{% if ipv6 -%} + listen [::]:443 ssl; +{% else -%} + #listen [::]:443; +{% endif %} +{% endif %} + server_name {{ domain_names | join: " " }}; +{% if http2_support == 1 or http2_support == true %} + http2 on; +{% else -%} + http2 off; +{% endif %} \ No newline at end of file diff --git a/backend/templates/_location.conf b/backend/templates/_location.conf new file mode 100644 index 0000000..a2ecb16 --- /dev/null +++ b/backend/templates/_location.conf @@ -0,0 +1,24 @@ + location {{ path }} { + {{ advanced_config }} + + proxy_set_header Host $host; + proxy_set_header X-Forwarded-Scheme $scheme; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_set_header X-Real-IP $remote_addr; + + proxy_pass {{ forward_scheme }}://{{ forward_host }}:{{ forward_port }}{{ forward_path }}; + + {% include "_access.conf" %} + {% include "_assets.conf" %} + {% include "_exploits.conf" %} + {% include "_forced_ssl.conf" %} + {% include "_hsts.conf" %} + + {% if allow_websocket_upgrade == 1 or allow_websocket_upgrade == true %} + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $http_connection; + proxy_http_version 1.1; + {% endif %} + } + diff --git a/backend/templates/dead_host.conf b/backend/templates/dead_host.conf new file mode 100644 index 0000000..2e7d2a0 --- /dev/null +++ b/backend/templates/dead_host.conf @@ -0,0 +1,28 @@ +{% include "_header_comment.conf" %} + +{% if enabled %} + +{% include "_hsts_map.conf" %} + +server { +{% include "_listen.conf" %} +{% include "_certificates.conf" %} +{% include "_hsts.conf" %} +{% include "_forced_ssl.conf" %} + + access_log /data/logs/dead-host-{{ id }}_access.log standard; + error_log /data/logs/dead-host-{{ id }}_error.log warn; + +{{ advanced_config }} + +{% if use_default_location %} + location / { +{% include "_hsts.conf" %} + return 404; + } +{% endif %} + + # Custom + include /data/nginx/custom/server_dead[.]conf; +} +{% endif %} diff --git a/backend/templates/default.conf b/backend/templates/default.conf new file mode 100644 index 0000000..cc590f9 --- /dev/null +++ b/backend/templates/default.conf @@ -0,0 +1,46 @@ +# ------------------------------------------------------------ +# Default Site +# ------------------------------------------------------------ +{% if value == "congratulations" %} +# Skipping output, congratulations page configration is baked in. +{%- else %} +server { + listen 80 default; +{% if ipv6 -%} + listen [::]:80 default; +{% else -%} + #listen [::]:80 default; +{% endif %} + server_name default-host.localhost; + access_log /data/logs/default-host_access.log combined; + error_log /data/logs/default-host_error.log warn; +{% include "_exploits.conf" %} + + include conf.d/include/letsencrypt-acme-challenge.conf; + +{%- if value == "404" %} + location / { + return 404; + } +{% endif %} + +{%- if value == "444" %} + location / { + return 444; + } +{% endif %} + +{%- if value == "redirect" %} + location / { + return 301 {{ meta.redirect }}; + } +{%- endif %} + +{%- if value == "html" %} + root /data/nginx/default_www; + location / { + try_files $uri /index.html; + } +{%- endif %} +} +{% endif %} diff --git a/backend/templates/ip_ranges.conf b/backend/templates/ip_ranges.conf new file mode 100644 index 0000000..8ede2bd --- /dev/null +++ b/backend/templates/ip_ranges.conf @@ -0,0 +1,3 @@ +{% for range in ip_ranges %} +set_real_ip_from {{ range }}; +{% endfor %} \ No newline at end of file diff --git a/backend/templates/letsencrypt-request.conf b/backend/templates/letsencrypt-request.conf new file mode 100644 index 0000000..676c8a6 --- /dev/null +++ b/backend/templates/letsencrypt-request.conf @@ -0,0 +1,19 @@ +{% include "_header_comment.conf" %} + +server { + listen 80; +{% if ipv6 -%} + listen [::]:80; +{% endif %} + + server_name {{ domain_names | join: " " }}; + + access_log /data/logs/letsencrypt-requests_access.log standard; + error_log /data/logs/letsencrypt-requests_error.log warn; + + include conf.d/include/letsencrypt-acme-challenge.conf; + + location / { + return 404; + } +} diff --git a/backend/templates/proxy_host.conf b/backend/templates/proxy_host.conf new file mode 100644 index 0000000..d23ca46 --- /dev/null +++ b/backend/templates/proxy_host.conf @@ -0,0 +1,53 @@ +{% include "_header_comment.conf" %} + +{% if enabled %} + +{% include "_hsts_map.conf" %} + +server { + set $forward_scheme {{ forward_scheme }}; + set $server "{{ forward_host }}"; + set $port {{ forward_port }}; + +{% include "_listen.conf" %} +{% include "_certificates.conf" %} +{% include "_assets.conf" %} +{% include "_exploits.conf" %} +{% include "_hsts.conf" %} +{% include "_forced_ssl.conf" %} + +{% if allow_websocket_upgrade == 1 or allow_websocket_upgrade == true %} +proxy_set_header Upgrade $http_upgrade; +proxy_set_header Connection $http_connection; +proxy_http_version 1.1; +{% endif %} + + access_log /data/logs/proxy-host-{{ id }}_access.log proxy; + error_log /data/logs/proxy-host-{{ id }}_error.log warn; + +{{ advanced_config }} + +{{ locations }} + +{% if use_default_location %} + + location / { + +{% include "_access.conf" %} +{% include "_hsts.conf" %} + + {% if allow_websocket_upgrade == 1 or allow_websocket_upgrade == true %} + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $http_connection; + proxy_http_version 1.1; + {% endif %} + + # Proxy! + include conf.d/include/proxy.conf; + } +{% endif %} + + # Custom + include /data/nginx/custom/server_proxy[.]conf; +} +{% endif %} diff --git a/backend/templates/redirection_host.conf b/backend/templates/redirection_host.conf new file mode 100644 index 0000000..7dd3607 --- /dev/null +++ b/backend/templates/redirection_host.conf @@ -0,0 +1,35 @@ +{% include "_header_comment.conf" %} + +{% if enabled %} + +{% include "_hsts_map.conf" %} + +server { +{% include "_listen.conf" %} +{% include "_certificates.conf" %} +{% include "_assets.conf" %} +{% include "_exploits.conf" %} +{% include "_hsts.conf" %} +{% include "_forced_ssl.conf" %} + + access_log /data/logs/redirection-host-{{ id }}_access.log standard; + error_log /data/logs/redirection-host-{{ id }}_error.log warn; + +{{ advanced_config }} + +{% if use_default_location %} + location / { +{% include "_hsts.conf" %} + + {% if preserve_path == 1 or preserve_path == true %} + return {{ forward_http_code }} {{ forward_scheme }}://{{ forward_domain_name }}$request_uri; + {% else %} + return {{ forward_http_code }} {{ forward_scheme }}://{{ forward_domain_name }}; + {% endif %} + } +{% endif %} + + # Custom + include /data/nginx/custom/server_redirect[.]conf; +} +{% endif %} diff --git a/backend/templates/stream.conf b/backend/templates/stream.conf new file mode 100644 index 0000000..3a10387 --- /dev/null +++ b/backend/templates/stream.conf @@ -0,0 +1,39 @@ +# ------------------------------------------------------------ +# {{ incoming_port }} TCP: {{ tcp_forwarding }} UDP: {{ udp_forwarding }} +# ------------------------------------------------------------ + +{% if enabled %} +{% if tcp_forwarding == 1 or tcp_forwarding == true -%} +server { + listen {{ incoming_port }} {%- if certificate %} ssl {%- endif %}; + {% unless ipv6 -%} # {%- endunless -%} listen [::]:{{ incoming_port }} {%- if certificate %} ssl {%- endif %}; + + {%- include "_certificates_stream.conf" %} + + proxy_pass {{ forwarding_host }}:{{ forwarding_port }}; + + access_log /data/logs/stream-{{ id }}_access.log stream; + error_log /data/logs/stream-{{ id }}_error.log warn; + + # Custom + include /data/nginx/custom/server_stream[.]conf; + include /data/nginx/custom/server_stream_tcp[.]conf; +} +{% endif %} + +{% if udp_forwarding == 1 or udp_forwarding == true -%} +server { + listen {{ incoming_port }} udp; + {% unless ipv6 -%} # {%- endunless -%} listen [::]:{{ incoming_port }} udp; + + proxy_pass {{ forwarding_host }}:{{ forwarding_port }}; + + access_log /data/logs/stream-{{ id }}_access.log stream; + error_log /data/logs/stream-{{ id }}_error.log warn; + + # Custom + include /data/nginx/custom/server_stream[.]conf; + include /data/nginx/custom/server_stream_udp[.]conf; +} +{% endif %} +{% endif %} diff --git a/backend/validate-schema.js b/backend/validate-schema.js new file mode 100644 index 0000000..b187066 --- /dev/null +++ b/backend/validate-schema.js @@ -0,0 +1,19 @@ +#!/usr/bin/node + +import SwaggerParser from "@apidevtools/swagger-parser"; +import chalk from "chalk"; +import { getCompiledSchema } from "./schema/index.js"; + +const log = console.log; + +getCompiledSchema().then(async (swaggerJSON) => { + try { + const api = await SwaggerParser.validate(swaggerJSON); + console.log("API name: %s, Version: %s", api.info.title, api.info.version); + log(chalk.green("❯ Schema is valid")); + } catch (e) { + console.error(e); + log(chalk.red("❯", e.message), "\n"); + process.exit(1); + } +}); diff --git a/backend/yarn.lock b/backend/yarn.lock new file mode 100644 index 0000000..4fbf7ee --- /dev/null +++ b/backend/yarn.lock @@ -0,0 +1,3072 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@apidevtools/json-schema-ref-parser@14.0.1": + version "14.0.1" + resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-14.0.1.tgz#3bc445ed2eddf72bc2f9eb2e295c696bdc5be725" + integrity sha512-Oc96zvmxx1fqoSEdUmfmvvb59/KDOnUoJ7s2t7bISyAn0XEz57LCCw8k2Y4Pf3mwKaZLMciESALORLgfe2frCw== + dependencies: + "@types/json-schema" "^7.0.15" + js-yaml "^4.1.0" + +"@apidevtools/json-schema-ref-parser@^15.3.1": + version "15.3.1" + resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-15.3.1.tgz#93f70004a085f62319705e32f25af748752ea5a4" + integrity sha512-FIweGOR9zrNuskfDXn8dfsA4eJEe8LmmGsGSDikEZvgYm36SO36yMhasXSOX7/OTGZ3b7I9iPhOxB24D8xL5uQ== + dependencies: + js-yaml "^4.1.1" + +"@apidevtools/openapi-schemas@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@apidevtools/openapi-schemas/-/openapi-schemas-2.1.0.tgz#9fa08017fb59d80538812f03fc7cac5992caaa17" + integrity sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ== + +"@apidevtools/swagger-methods@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@apidevtools/swagger-methods/-/swagger-methods-3.0.2.tgz#b789a362e055b0340d04712eafe7027ddc1ac267" + integrity sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg== + +"@apidevtools/swagger-parser@^12.1.0": + version "12.1.0" + resolved "https://registry.yarnpkg.com/@apidevtools/swagger-parser/-/swagger-parser-12.1.0.tgz#ef73e5f9e32c2becef6d95b90fb4481b0fec8fe4" + integrity sha512-e5mJoswsnAX0jG+J09xHFYQXb/bUc5S3pLpMxUuRUA2H8T2kni3yEoyz2R3Dltw5f4A6j6rPNMpWTK+iVDFlng== + dependencies: + "@apidevtools/json-schema-ref-parser" "14.0.1" + "@apidevtools/openapi-schemas" "^2.1.0" + "@apidevtools/swagger-methods" "^3.0.2" + ajv "^8.17.1" + ajv-draft-04 "^1.0.0" + call-me-maybe "^1.0.2" + +"@biomejs/biome@^2.4.5": + version "2.4.5" + resolved "https://registry.yarnpkg.com/@biomejs/biome/-/biome-2.4.5.tgz#90e75c1b6c60eb5bf8e8bfb193a1fbe9dc868f16" + integrity sha512-OWNCyMS0Q011R6YifXNOg6qsOg64IVc7XX6SqGsrGszPbkVCoaO7Sr/lISFnXZ9hjQhDewwZ40789QmrG0GYgQ== + optionalDependencies: + "@biomejs/cli-darwin-arm64" "2.4.5" + "@biomejs/cli-darwin-x64" "2.4.5" + "@biomejs/cli-linux-arm64" "2.4.5" + "@biomejs/cli-linux-arm64-musl" "2.4.5" + "@biomejs/cli-linux-x64" "2.4.5" + "@biomejs/cli-linux-x64-musl" "2.4.5" + "@biomejs/cli-win32-arm64" "2.4.5" + "@biomejs/cli-win32-x64" "2.4.5" + +"@biomejs/cli-darwin-arm64@2.4.5": + version "2.4.5" + resolved "https://registry.yarnpkg.com/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.4.5.tgz#a62472ab3529a3905b16e1f3fdbbc74f2e5f0023" + integrity sha512-lGS4Nd5O3KQJ6TeWv10mElnx1phERhBxqGP/IKq0SvZl78kcWDFMaTtVK+w3v3lusRFxJY78n07PbKplirsU5g== + +"@biomejs/cli-darwin-x64@2.4.5": + version "2.4.5" + resolved "https://registry.yarnpkg.com/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.4.5.tgz#e8bb001fcf6a8c751b0971cccf53993e9ba2e6e9" + integrity sha512-6MoH4tyISIBNkZ2Q5T1R7dLd5BsITb2yhhhrU9jHZxnNSNMWl+s2Mxu7NBF8Y3a7JJcqq9nsk8i637z4gqkJxQ== + +"@biomejs/cli-linux-arm64-musl@2.4.5": + version "2.4.5" + resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.4.5.tgz#b7ef7902237f16113061659a4c54aff5ad4513d5" + integrity sha512-iqLDgpzobG7gpBF0fwEVS/LT8kmN7+S0E2YKFDtqliJfzNLnAiV2Nnyb+ehCDCJgAZBASkYHR2o60VQWikpqIg== + +"@biomejs/cli-linux-arm64@2.4.5": + version "2.4.5" + resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.4.5.tgz#f110af748965cb1b57624dbbbd7acba729da8780" + integrity sha512-U1GAG6FTjhAO04MyH4xn23wRNBkT6H7NentHh+8UxD6ShXKBm5SY4RedKJzkUThANxb9rUKIPc7B8ew9Xo/cWg== + +"@biomejs/cli-linux-x64-musl@2.4.5": + version "2.4.5" + resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.4.5.tgz#c3493eba094216e735538c55354dbc8867b51909" + integrity sha512-NlKa7GpbQmNhZf9kakQeddqZyT7itN7jjWdakELeXyTU3pg/83fTysRRDPJD0akTfKDl6vZYNT9Zqn4MYZVBOA== + +"@biomejs/cli-linux-x64@2.4.5": + version "2.4.5" + resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-x64/-/cli-linux-x64-2.4.5.tgz#15805550db4e45ffbd6c42d140d0cb5c6dbe07af" + integrity sha512-NdODlSugMzTlENPTa4z0xB82dTUlCpsrOxc43///aNkTLblIYH4XpYflBbf5ySlQuP8AA4AZd1qXhV07IdrHdQ== + +"@biomejs/cli-win32-arm64@2.4.5": + version "2.4.5" + resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.4.5.tgz#8dae57dc8ffc1e82e00a59e623b5023c09726a4d" + integrity sha512-EBfrTqRIWOFSd7CQb/0ttjHMR88zm3hGravnDwUA9wHAaCAYsULKDebWcN5RmrEo1KBtl/gDVJMrFjNR0pdGUw== + +"@biomejs/cli-win32-x64@2.4.5": + version "2.4.5" + resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-x64/-/cli-win32-x64-2.4.5.tgz#0b4d3355e0d6856cff8ed722e05ec7b0652e43ab" + integrity sha512-Pmhv9zT95YzECfjEHNl3mN9Vhusw9VA5KHY0ZvlGsxsjwS5cb7vpRnHzJIv0vG7jB0JI7xEaMH9ddfZm/RozBw== + +"@gar/promisify@^1.0.1": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@noble/hashes@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-2.0.1.tgz#fc1a928061d1232b0a52bb754393c37a5216c89e" + integrity sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw== + +"@npmcli/fs@^1.0.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" + integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== + dependencies: + "@gar/promisify" "^1.0.1" + semver "^7.3.5" + +"@npmcli/move-file@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" + integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@otplib/core@13.3.0": + version "13.3.0" + resolved "https://registry.yarnpkg.com/@otplib/core/-/core-13.3.0.tgz#7f037af6cc5907c2cff9cf6092952088a0ce5a6e" + integrity sha512-pnQDOuCmFVeF/XnboJq9TOJgLoo2idNPJKMymOF8vGqJJ+ReKRYM9bUGjNPRWC0tHjMwu1TXbnzyBp494JgRag== + +"@otplib/hotp@13.3.0": + version "13.3.0" + resolved "https://registry.yarnpkg.com/@otplib/hotp/-/hotp-13.3.0.tgz#135e45c6350ae60bbc1170a1801a6100e49794b8" + integrity sha512-XJMZGz2bg4QJwK7ulvl1GUI2VMn/flaIk/E/BTKAejHsX2kUtPF1bRhlZ2+elq8uU5Fs9Z9FHcQK2CPZNQbbUQ== + dependencies: + "@otplib/core" "13.3.0" + "@otplib/uri" "13.3.0" + +"@otplib/plugin-base32-scure@13.3.0": + version "13.3.0" + resolved "https://registry.yarnpkg.com/@otplib/plugin-base32-scure/-/plugin-base32-scure-13.3.0.tgz#3362fc5dd568e9cecac913fd0fa169148c469142" + integrity sha512-/jYbL5S6GB0Ie3XGEWtLIr9s5ZICl/BfmNL7+8/W7usZaUU4GiyLd2S+JGsNCslPyqNekSudD864nDAvRI0s8w== + dependencies: + "@otplib/core" "13.3.0" + "@scure/base" "^2.0.0" + +"@otplib/plugin-crypto-noble@13.3.0": + version "13.3.0" + resolved "https://registry.yarnpkg.com/@otplib/plugin-crypto-noble/-/plugin-crypto-noble-13.3.0.tgz#edfd6c8c54730cfdfc52c6a3fcd797e204fdd0e2" + integrity sha512-wmV+jBVncepgwv99G7Plrdzd0tHfbpXk2U+OD7MO7DzpDqOYEgOPi+IIneksJSTL8QvWdfi+uQEuhnER4fKouA== + dependencies: + "@noble/hashes" "^2.0.1" + "@otplib/core" "13.3.0" + +"@otplib/totp@13.3.0": + version "13.3.0" + resolved "https://registry.yarnpkg.com/@otplib/totp/-/totp-13.3.0.tgz#1d1f61cfd1acd773e1051e6b918227ae34545808" + integrity sha512-XfjGNoN8d9S3Ove2j7AwkVV7+QDFsV7Lm7YwSiezNaHffkWtJ60aJYpmf+01dARdPST71U2ptueMsRJso4sq4A== + dependencies: + "@otplib/core" "13.3.0" + "@otplib/hotp" "13.3.0" + "@otplib/uri" "13.3.0" + +"@otplib/uri@13.3.0": + version "13.3.0" + resolved "https://registry.yarnpkg.com/@otplib/uri/-/uri-13.3.0.tgz#7474d6dc0fdf8ab2d0cf2b79e2001446c4e7b6b3" + integrity sha512-3oh6nBXy+cm3UX9cxEAGZiDrfxHU2gfelYFV+XNCx+8dq39VaQVymwlU2yjPZiMAi/3agaUeEftf2RwM5F+Cyg== + dependencies: + "@otplib/core" "13.3.0" + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + +"@scure/base@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-2.0.0.tgz#ba6371fddf92c2727e88ad6ab485db6e624f9a98" + integrity sha512-3E1kpuZginKkek01ovG8krQ0Z44E3DHPjc5S2rjJw9lZn3KSQOs8S7wqikF/AH7iRanHypj85uGyxk0XAyC37w== + +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + +"@tootallnate/quickjs-emscripten@^0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz#db4ecfd499a9765ab24002c3b696d02e6d32a12c" + integrity sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA== + +"@types/json-schema@^7.0.15": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + +accepts@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-2.0.0.tgz#bbcf4ba5075467f3f2131eab3cffc73c2f5d7895" + integrity sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng== + dependencies: + mime-types "^3.0.0" + negotiator "^1.0.0" + +agent-base@6, agent-base@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +agent-base@^7.1.0, agent-base@^7.1.2: + version "7.1.4" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.4.tgz#e3cd76d4c548ee895d3c3fd8dc1f6c5b9032e7a8" + integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ== + +agentkeepalive@^4.1.3: + version "4.6.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.6.0.tgz#35f73e94b3f40bf65f105219c623ad19c136ea6a" + integrity sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ== + dependencies: + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-draft-04@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz#3b64761b268ba0b9e668f0b41ba53fce0ad77fc8" + integrity sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw== + +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + +ajv@^8.0.0, ajv@^8.17.1, ajv@^8.18.0: + version "8.18.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.18.0.tgz#8864186b6738d003eb3a933172bb3833e10cefbc" + integrity sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A== + dependencies: + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.2.2" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1" + integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^6.1.0: + version "6.2.3" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041" + integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +"aproba@^1.0.3 || ^2.0.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.1.0.tgz#75500a190313d95c64e871e7e4284c6ac219f0b1" + integrity sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew== + +archiver-utils@^5.0.0, archiver-utils@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-5.0.2.tgz#63bc719d951803efc72cf961a56ef810760dd14d" + integrity sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA== + dependencies: + glob "^10.0.0" + graceful-fs "^4.2.0" + is-stream "^2.0.1" + lazystream "^1.0.0" + lodash "^4.17.15" + normalize-path "^3.0.0" + readable-stream "^4.0.0" + +archiver@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-7.0.1.tgz#c9d91c350362040b8927379c7aa69c0655122f61" + integrity sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ== + dependencies: + archiver-utils "^5.0.2" + async "^3.2.4" + buffer-crc32 "^1.0.0" + readable-stream "^4.0.0" + readdir-glob "^1.1.2" + tar-stream "^3.0.0" + zip-stream "^6.0.1" + +are-we-there-yet@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" + integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +asn1@^0.2.4: + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +ast-types@^0.13.4: + version "0.13.4" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782" + integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w== + dependencies: + tslib "^2.0.1" + +async@^3.2.4: + version "3.2.6" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" + integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== + +aws-ssl-profiles@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz#157dd77e9f19b1d123678e93f120e6f193022641" + integrity sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g== + +b4a@^1.6.4: + version "1.8.0" + resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.8.0.tgz#1ca3ba0edc9469aaabef5647e769a83d50180b1a" + integrity sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +balanced-match@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-4.0.3.tgz#6337a2f23e0604a30481423432f99eac603599f9" + integrity sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g== + +bare-events@^2.7.0: + version "2.8.2" + resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.8.2.tgz#7b3e10bd8e1fc80daf38bb516921678f566ab89f" + integrity sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ== + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +basic-ftp@^5.0.2: + version "5.2.0" + resolved "https://registry.yarnpkg.com/basic-ftp/-/basic-ftp-5.2.0.tgz#7c2dff63c918bde60e6bad1f2ff93dcf5137a40a" + integrity sha512-VoMINM2rqJwJgfdHq6RiUudKt2BV+FY5ZFezP/ypmwayk68+NzzAQy4XXLlqsGD4MCzq3DrmNFD/uUmBJuGoXw== + +batchflow@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/batchflow/-/batchflow-0.4.0.tgz#7d419df79b6b7587b06f9ea34f96ccef6f74e5b5" + integrity sha512-XwQQoCGPUjdLWzmpAvRNZc91wnBYuKLmj52d9LLZ1Ww06ow5RBqBt8kUmU9/3ZvPq88j7Elh3V4cEhgNKXbIlQ== + +bcrypt@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/bcrypt/-/bcrypt-6.0.0.tgz#86643fddde9bcd0ad91400b063003fa4b0312835" + integrity sha512-cU8v/EGSrnH+HnxV2z0J7/blxH8gq7Xh2JFT6Aroax7UohdmiJJlxApMxtKfuI7z68NvvVcmR78k2LbT6efhRg== + dependencies: + node-addon-api "^8.3.0" + node-gyp-build "^4.8.4" + +better-sqlite3@^12.6.2: + version "12.6.2" + resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-12.6.2.tgz#770649f28a62e543a360f3dfa1afe4cc944b1937" + integrity sha512-8VYKM3MjCa9WcaSAI3hzwhmyHVlH8tiGFwf0RlTsZPWJ1I5MkzjiudCo4KC4DxOaL/53A5B1sI/IbldNFDbsKA== + dependencies: + bindings "^1.5.0" + prebuild-install "^7.1.1" + +binary-extensions@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bl@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +blueimp-md5@^2.16.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/blueimp-md5/-/blueimp-md5-2.19.0.tgz#b53feea5498dcb53dc6ec4b823adb84b729c4af0" + integrity sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w== + +body-parser@^2.2.1, body-parser@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-2.2.2.tgz#1a32cdb966beaf68de50a9dfbe5b58f83cb8890c" + integrity sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA== + dependencies: + bytes "^3.1.2" + content-type "^1.0.5" + debug "^4.4.3" + http-errors "^2.0.0" + iconv-lite "^0.7.0" + on-finished "^2.4.1" + qs "^6.14.1" + raw-body "^3.0.1" + type-is "^2.0.1" + +brace-expansion@^1.1.7: + version "1.1.12" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843" + integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.2.tgz#54fc53237a613d854c7bd37463aad17df87214e7" + integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ== + dependencies: + balanced-match "^1.0.0" + +brace-expansion@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-5.0.2.tgz#b6c16d0791087af6c2bc463f52a8142046c06b6f" + integrity sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw== + dependencies: + balanced-match "^4.0.2" + +braces@~3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + +buffer-crc32@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-1.0.0.tgz#a10993b9055081d55304bd9feb4a072de179f405" + integrity sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w== + +buffer-equal-constant-time@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== + +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +busboy@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" + integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== + dependencies: + streamsearch "^1.1.0" + +bytes@3.1.2, bytes@^3.1.2, bytes@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cacache@^15.2.0: + version "15.3.0" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" + integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== + dependencies: + "@npmcli/fs" "^1.0.0" + "@npmcli/move-file" "^1.0.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.0.2" + unique-filename "^1.1.1" + +call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + +call-bound@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" + +call-me-maybe@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.2.tgz#03f964f19522ba643b1b0693acb9152fe2074baa" + integrity sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ== + +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +chalk@5.6.2: + version "5.6.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.6.2.tgz#b1238b6e23ea337af71c7f8a295db5af0c158aea" + integrity sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA== + +chalk@^2.3.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chokidar@^3.5.2: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +colorette@2.0.19: + version "2.0.19" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" + integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== + +commander@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== + +compress-commons@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-6.0.2.tgz#26d31251a66b9d6ba23a84064ecd3a6a71d2609e" + integrity sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg== + dependencies: + crc-32 "^1.2.0" + crc32-stream "^6.0.0" + is-stream "^2.0.1" + normalize-path "^3.0.0" + readable-stream "^4.0.0" + +compressible@~2.0.18: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.8.1.tgz#4a45d909ac16509195a9a28bd91094889c180d79" + integrity sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w== + dependencies: + bytes "3.1.2" + compressible "~2.0.18" + debug "2.6.9" + negotiator "~0.6.4" + on-headers "~1.1.0" + safe-buffer "5.2.1" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +console-control-strings@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== + +content-disposition@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-1.0.1.tgz#a8b7bbeb2904befdfb6787e5c0c086959f605f9b" + integrity sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q== + +content-type@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +cookie-signature@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.2.2.tgz#57c7fc3cc293acab9fec54d73e15690ebe4a1793" + integrity sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg== + +cookie@^0.7.1: + version "0.7.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" + integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +crc-32@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + +crc32-stream@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-6.0.0.tgz#8529a3868f8b27abb915f6c3617c0fadedbf9430" + integrity sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g== + dependencies: + crc-32 "^1.2.0" + readable-stream "^4.0.0" + +cross-spawn@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +data-uri-to-buffer@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz#8a58bb67384b261a38ef18bea1810cb01badd28b" + integrity sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw== + +db-errors@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/db-errors/-/db-errors-0.2.3.tgz#a6a38952e00b20e790f2695a6446b3c65497ffa2" + integrity sha512-OOgqgDuCavHXjYSJoV2yGhv6SeG8nk42aoCSoyXLZUH7VwFG27rxbavU1z+VrZbZjphw5UkDQwUlD21MwZpUng== + +debug@2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4, debug@^4, debug@^4.3.3, debug@^4.3.4, debug@^4.4.0, debug@^4.4.3: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== + dependencies: + ms "^2.1.3" + +debug@4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +degenerator@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-5.0.1.tgz#9403bf297c6dad9a1ece409b37db27954f91f2f5" + integrity sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ== + dependencies: + ast-types "^0.13.4" + escodegen "^2.1.0" + esprima "^4.0.1" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== + +denque@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" + integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== + +depd@^2.0.0, depd@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +detect-libc@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.1.2.tgz#689c5dcdc1900ef5583a4cb9f6d7b473742074ad" + integrity sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ== + +dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +ecdsa-sig-formatter@1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" + integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== + dependencies: + safe-buffer "^5.0.1" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +email-validator@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/email-validator/-/email-validator-2.0.4.tgz#b8dfaa5d0dae28f1b03c95881d904d4e40bfe7ed" + integrity sha512-gYCwo7kh5S3IDyZPLZf6hSS0MnZT8QmJFqYvbqlDZSbwdZlY6QZWxJ4i/6UhITOJ4XzyI647Bm2MXKCLqnJ4nQ== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +encodeurl@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== + +encoding@^0.1.12: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.1.0, end-of-stream@^1.4.1: + version "1.4.5" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.5.tgz#7344d711dea40e0b74abc2ed49778743ccedb08c" + integrity sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg== + dependencies: + once "^1.4.0" + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + +error-ex@^1.3.1: + version "1.3.4" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.4.tgz#b3a8d8bb6f92eecc1629e3e27d3c8607a8a32414" + integrity sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ== + dependencies: + is-arrayish "^0.2.1" + +es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + +escalade@^3.1.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + +escape-html@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escodegen@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" + integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionalDependencies: + source-map "~0.6.1" + +esm@^3.2.25: + version "3.2.25" + resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" + integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== + +esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + +events-universal@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/events-universal/-/events-universal-1.0.1.tgz#b56a84fd611b6610e0a2d0f09f80fdf931e2dfe6" + integrity sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw== + dependencies: + bare-events "^2.7.0" + +events@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +expand-template@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== + +express-fileupload@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/express-fileupload/-/express-fileupload-1.5.2.tgz#4da70ba6f2ffd4c736eab0776445865a9dbd9bfa" + integrity sha512-wxUJn2vTHvj/kZCVmc5/bJO15C7aSMyHeuXYY3geKpeKibaAoQGcEv5+sM6nHS2T7VF+QHS4hTWPiY2mKofEdg== + dependencies: + busboy "^1.6.0" + +express@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/express/-/express-5.2.1.tgz#8f21d15b6d327f92b4794ecf8cb08a72f956ac04" + integrity sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw== + dependencies: + accepts "^2.0.0" + body-parser "^2.2.1" + content-disposition "^1.0.0" + content-type "^1.0.5" + cookie "^0.7.1" + cookie-signature "^1.2.1" + debug "^4.4.0" + depd "^2.0.0" + encodeurl "^2.0.0" + escape-html "^1.0.3" + etag "^1.8.1" + finalhandler "^2.1.0" + fresh "^2.0.0" + http-errors "^2.0.0" + merge-descriptors "^2.0.0" + mime-types "^3.0.0" + on-finished "^2.4.1" + once "^1.4.0" + parseurl "^1.3.3" + proxy-addr "^2.0.7" + qs "^6.14.0" + range-parser "^1.2.1" + router "^2.2.0" + send "^1.1.0" + serve-static "^2.2.0" + statuses "^2.0.1" + type-is "^2.0.1" + vary "^1.1.2" + +fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-fifo@^1.2.0, fast-fifo@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" + integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== + +fast-uri@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.1.0.tgz#66eecff6c764c0df9b762e62ca7edcfb53b4edfa" + integrity sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA== + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA== + dependencies: + escape-string-regexp "^1.0.5" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-2.1.1.tgz#a2c517a6559852bcdb06d1f8bd7f51b68fad8099" + integrity sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA== + dependencies: + debug "^4.4.0" + encodeurl "^2.0.0" + escape-html "^1.0.3" + on-finished "^2.4.1" + parseurl "^1.3.3" + statuses "^2.0.1" + +find-up@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== + dependencies: + locate-path "^2.0.0" + +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +foreground-child@^3.1.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" + integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== + dependencies: + cross-spawn "^7.0.6" + signal-exit "^4.0.1" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-2.0.0.tgz#8dd7df6a1b3a1b3a5cf186c05a5dd267622635a4" + integrity sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A== + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +gauge@^4.0.3: + version "4.0.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" + integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + +generate-function@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f" + integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ== + dependencies: + is-property "^1.0.2" + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.2.5, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + +get-uri@^6.0.1: + version "6.0.5" + resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-6.0.5.tgz#714892aa4a871db671abc5395e5e9447bc306a16" + integrity sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg== + dependencies: + basic-ftp "^5.0.2" + data-uri-to-buffer "^6.0.2" + debug "^4.3.4" + +getopts@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/getopts/-/getopts-2.3.0.tgz#71e5593284807e03e2427449d4f6712a268666f4" + integrity sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA== + +github-from-package@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== + +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@^10.0.0: + version "10.5.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.5.0.tgz#8ec0355919cd3338c28428a23d4f24ecc5fe738c" + integrity sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" + +glob@^7.1.3, glob@^7.1.4: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + +graceful-fs@^4.1.2, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.6: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +gravatar@^1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/gravatar/-/gravatar-1.8.2.tgz#f298642b1562ed685af2ae938dbe31ec0c542cc1" + integrity sha512-GdRwLM3oYpFQKy47MKuluw9hZ2gaCtiKPbDGdcDEuYDKlc8eNnW27KYL9LVbIDzEsx88WtDWQm2ClBcsgBnj6w== + dependencies: + blueimp-md5 "^2.16.0" + email-validator "^2.0.4" + querystring "0.2.0" + yargs "^15.4.1" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== + +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +http-cache-semantics@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz#205f4db64f8562b76a4ff9235aa5279839a09dd5" + integrity sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ== + +http-errors@^2.0.0, http-errors@^2.0.1, http-errors@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.1.tgz#36d2f65bc909c8790018dd36fb4d93da6caae06b" + integrity sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ== + dependencies: + depd "~2.0.0" + inherits "~2.0.4" + setprototypeof "~1.2.0" + statuses "~2.0.2" + toidentifier "~1.0.1" + +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + +http-proxy-agent@^7.0.0, http-proxy-agent@^7.0.1: + version "7.0.2" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" + integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== + dependencies: + agent-base "^7.1.0" + debug "^4.3.4" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +https-proxy-agent@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" + integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== + dependencies: + agent-base "^7.1.2" + debug "4" + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +iconv-lite@^0.7.0, iconv-lite@^0.7.2, iconv-lite@~0.7.0: + version "0.7.2" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.7.2.tgz#d0bdeac3f12b4835b7359c2ad89c422a4d1cc72e" + integrity sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ieee754@^1.1.13, ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore-by-default@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" + integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@~2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== + +ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +interpret@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" + integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== + +ip-address@^10.0.1: + version "10.1.0" + resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-10.1.0.tgz#d8dcffb34d0e02eb241427444a6e23f5b0595aa4" + integrity sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q== + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-core-module@^2.16.1: + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== + dependencies: + hasown "^2.0.2" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-promise@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-4.0.0.tgz#42ff9f84206c1991d26debf520dd5c01042dd2f3" + integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ== + +is-property@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + integrity sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g== + +is-stream@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-stream@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-4.0.1.tgz#375cf891e16d2e4baec250b85926cffc14720d9b" + integrity sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +jackspeak@^3.1.2: + version "3.4.3" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +js-yaml@^4.1.0, js-yaml@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b" + integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== + dependencies: + argparse "^2.0.1" + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +jsonwebtoken@^9.0.3: + version "9.0.3" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz#6cd57ab01e9b0ac07cb847d53d3c9b6ee31f7ae2" + integrity sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g== + dependencies: + jws "^4.0.1" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" + ms "^2.1.1" + semver "^7.5.4" + +jwa@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-2.0.1.tgz#bf8176d1ad0cd72e0f3f58338595a13e110bc804" + integrity sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg== + dependencies: + buffer-equal-constant-time "^1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jws@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/jws/-/jws-4.0.1.tgz#07edc1be8fac20e677b283ece261498bd38f0690" + integrity sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA== + dependencies: + jwa "^2.0.1" + safe-buffer "^5.0.1" + +knex@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/knex/-/knex-3.1.0.tgz#b6ddd5b5ad26a6315234a5b09ec38dc4a370bd8c" + integrity sha512-GLoII6hR0c4ti243gMs5/1Rb3B+AjwMOfjYm97pu0FOQa7JH56hgBxYf5WK2525ceSbBY1cjeZ9yk99GPMB6Kw== + dependencies: + colorette "2.0.19" + commander "^10.0.0" + debug "4.3.4" + escalade "^3.1.1" + esm "^3.2.25" + get-package-type "^0.1.0" + getopts "2.3.0" + interpret "^2.2.0" + lodash "^4.17.21" + pg-connection-string "2.6.2" + rechoir "^0.8.0" + resolve-from "^5.0.0" + tarn "^3.0.2" + tildify "2.0.0" + +lazystream@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.1.tgz#494c831062f1f9408251ec44db1cba29242a2638" + integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw== + dependencies: + readable-stream "^2.0.5" + +liquidjs@10.24.0: + version "10.24.0" + resolved "https://registry.yarnpkg.com/liquidjs/-/liquidjs-10.24.0.tgz#1aa832189b48b4102049dfa7a8eea40281fa9389" + integrity sha512-TAUNAdgwaAXjjcUFuYVJm9kOVH7zc0mTKxsG9t9Lu4qdWjB2BEblyVIYpjWcmJLMGgiYqnGNJjpNMHx0gp/46A== + dependencies: + commander "^10.0.0" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash.includes@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" + integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== + +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== + +lodash.isinteger@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== + +lodash.isnumber@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" + integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== + +lodash.once@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== + +lodash@^4.17.15, lodash@^4.17.21, lodash@^4.17.23: + version "4.17.23" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.23.tgz#f113b0378386103be4f6893388c73d0bde7f2c5a" + integrity sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w== + +long@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/long/-/long-5.3.2.tgz#1d84463095999262d7d7b7f8bfd4a8cc55167f83" + integrity sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA== + +lru-cache@^10.2.0: + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +lru-cache@^7.14.1: + version "7.18.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" + integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== + +lru.min@^1.1.0, lru.min@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/lru.min/-/lru.min-1.1.4.tgz#6ea1737a8c1ba2300cc87ad46910a4bdffa0117b" + integrity sha512-DqC6n3QQ77zdFpCMASA1a3Jlb64Hv2N2DciFGkO/4L9+q/IpIAuRlKOvCXabtRW6cQf8usbmM6BE/TOPysCdIA== + +make-fetch-happen@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" + integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== + dependencies: + agentkeepalive "^4.1.3" + cacache "^15.2.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^6.0.0" + minipass "^3.1.3" + minipass-collect "^1.0.2" + minipass-fetch "^1.3.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.2" + promise-retry "^2.0.1" + socks-proxy-agent "^6.0.0" + ssri "^8.0.0" + +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + +media-typer@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-1.1.0.tgz#6ab74b8f2d3320f2064b2a87a38e7931ff3a5561" + integrity sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw== + +merge-descriptors@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-2.0.0.tgz#ea922f660635a2249ee565e0449f951e6b603808" + integrity sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g== + +"mime-db@>= 1.43.0 < 2", mime-db@^1.54.0: + version "1.54.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" + integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== + +mime-types@^3.0.0, mime-types@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-3.0.2.tgz#39002d4182575d5af036ffa118100f2524b2e2ab" + integrity sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A== + dependencies: + mime-db "^1.54.0" + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +minimatch@^10.2.1: + version "10.2.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.2.tgz#361603ee323cfb83496fea2ae17cc44ea4e1f99f" + integrity sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw== + dependencies: + brace-expansion "^5.0.2" + +minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.1.0: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.4: + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.0, minimist@^1.2.3: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-fetch@^1.3.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" + integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== + dependencies: + minipass "^3.1.0" + minipass-sized "^1.0.3" + minizlib "^2.0.0" + optionalDependencies: + encoding "^0.1.12" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: + version "7.1.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.3.tgz#79389b4eb1bb2d003a9bba87d492f2bd37bdc65b" + integrity sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A== + +minizlib@^2.0.0, minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +moment@^2.30.1: + version "2.30.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" + integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.0.0, ms@^2.1.1, ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +mysql2@^3.18.2: + version "3.18.2" + resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.18.2.tgz#11d30fbc03a456d076760bd60e6ebf17abc6323d" + integrity sha512-UfEShBFAZZEAKjySnTUuE7BgqkYT4mx+RjoJ5aqtmwSSvNcJ/QxQPXz/y3jSxNiVRedPfgccmuBtiPCSiEEytw== + dependencies: + aws-ssl-profiles "^1.1.2" + denque "^2.1.0" + generate-function "^2.3.1" + iconv-lite "^0.7.2" + long "^5.3.2" + lru.min "^1.1.4" + named-placeholders "^1.1.6" + sql-escaper "^1.3.3" + +named-placeholders@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/named-placeholders/-/named-placeholders-1.1.6.tgz#c50c6920b43f258f59c16add1e56654f5cc02bb5" + integrity sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w== + dependencies: + lru.min "^1.1.0" + +napi-build-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-2.0.0.tgz#13c22c0187fcfccce1461844136372a47ddc027e" + integrity sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA== + +negotiator@^0.6.2, negotiator@~0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7" + integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== + +negotiator@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-1.0.0.tgz#b6c91bb47172d69f93cfd7c357bbb529019b5f6a" + integrity sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg== + +netmask@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7" + integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg== + +node-abi@^3.3.0: + version "3.87.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.87.0.tgz#423e28fea5c2f195fddd98acded9938c001ae6dd" + integrity sha512-+CGM1L1CgmtheLcBuleyYOn7NWPVu0s0EJH2C4puxgEZb9h8QpR9G2dBfZJOAUhi7VQxuBPMd0hiISWcTyiYyQ== + dependencies: + semver "^7.3.5" + +node-addon-api@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.1.tgz#1aba6693b0f255258a049d621329329322aad558" + integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== + +node-addon-api@^8.3.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-8.5.0.tgz#c91b2d7682fa457d2e1c388150f0dff9aafb8f3f" + integrity sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A== + +node-gyp-build@^4.8.4: + version "4.8.4" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.4.tgz#8a70ee85464ae52327772a90d66c6077a900cfc8" + integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ== + +node-gyp@8.x: + version "8.4.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" + integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^9.1.0" + nopt "^5.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" + +node-rsa@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/node-rsa/-/node-rsa-1.1.1.tgz#efd9ad382097782f506153398496f79e4464434d" + integrity sha512-Jd4cvbJMryN21r5HgxQOpMEqv+ooke/korixNNK3mGqfGJmy0M77WDDzo/05969+OkMy3XW1UuZsSmW9KQm7Fw== + dependencies: + asn1 "^0.2.4" + +nodemon@^3.1.14: + version "3.1.14" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.1.14.tgz#8487ca379c515301d221ec007f27f24ecafa2b51" + integrity sha512-jakjZi93UtB3jHMWsXL68FXSAosbLfY0In5gtKq3niLSkrWznrVBzXFNOEMJUfc9+Ke7SHWoAZsiMkNP3vq6Jw== + dependencies: + chokidar "^3.5.2" + debug "^4" + ignore-by-default "^1.0.1" + minimatch "^10.2.1" + pstree.remy "^1.1.8" + semver "^7.5.3" + simple-update-notifier "^2.0.0" + supports-color "^5.5.0" + touch "^3.1.0" + undefsafe "^2.0.5" + +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== + dependencies: + abbrev "1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npmlog@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" + integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== + dependencies: + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.3" + set-blocking "^2.0.0" + +object-inspect@^1.13.3: + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== + +objection@3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/objection/-/objection-3.1.5.tgz#53c32f6b6cba2958bc28cf723de96c2676da8286" + integrity sha512-Hx/ipAwXSuRBbOMWFKtRsAN0yITafqXtWB4OT4Z9wED7ty1h7bOnBdhLtcNus23GwLJqcMsRWdodL2p5GwlnfQ== + dependencies: + ajv "^8.17.1" + ajv-formats "^2.1.1" + db-errors "^0.2.3" + +on-finished@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +on-headers@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.1.0.tgz#59da4f91c45f5f989c6e4bcedc5a3b0aed70ff65" + integrity sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +otplib@^13.3.0: + version "13.3.0" + resolved "https://registry.yarnpkg.com/otplib/-/otplib-13.3.0.tgz#2ead040ab29d1a829d1d7c510b059a3e4c76b2b0" + integrity sha512-VYMKyyDG8yt2q+z58sz54/EIyTh7+tyMrjeemR44iVh5+dkKtIs57irTqxjH+IkAL1uMmG1JIFhG5CxTpqdU5g== + dependencies: + "@otplib/core" "13.3.0" + "@otplib/hotp" "13.3.0" + "@otplib/plugin-base32-scure" "13.3.0" + "@otplib/plugin-crypto-noble" "13.3.0" + "@otplib/totp" "13.3.0" + "@otplib/uri" "13.3.0" + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== + dependencies: + p-limit "^1.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +pac-proxy-agent@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz#9cfaf33ff25da36f6147a20844230ec92c06e5df" + integrity sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA== + dependencies: + "@tootallnate/quickjs-emscripten" "^0.23.0" + agent-base "^7.1.2" + debug "^4.3.4" + get-uri "^6.0.1" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.6" + pac-resolver "^7.0.1" + socks-proxy-agent "^8.0.5" + +pac-resolver@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-7.0.1.tgz#54675558ea368b64d210fd9c92a640b5f3b8abb6" + integrity sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg== + dependencies: + degenerator "^5.0.0" + netmask "^2.0.2" + +package-json-from-dist@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parseurl@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-scurry@^1.11.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== + dependencies: + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +path-to-regexp@^8.0.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-8.3.0.tgz#aa818a6981f99321003a08987d3cec9c3474cd1f" + integrity sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA== + +path@^0.12.7: + version "0.12.7" + resolved "https://registry.yarnpkg.com/path/-/path-0.12.7.tgz#d4dc2a506c4ce2197eb481ebfcd5b36c0140b10f" + integrity sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q== + dependencies: + process "^0.11.1" + util "^0.10.3" + +pg-cloudflare@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/pg-cloudflare/-/pg-cloudflare-1.3.0.tgz#386035d4bfcf1a7045b026f8b21acf5353f14d65" + integrity sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ== + +pg-connection-string@2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.6.2.tgz#713d82053de4e2bd166fab70cd4f26ad36aab475" + integrity sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA== + +pg-connection-string@^2.11.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.11.0.tgz#5dca53ff595df33ba9db812e181b19909866d10b" + integrity sha512-kecgoJwhOpxYU21rZjULrmrBJ698U2RxXofKVzOn5UDj61BPj/qMb7diYUR1nLScCDbrztQFl1TaQZT0t1EtzQ== + +pg-int8@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" + integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== + +pg-pool@^3.12.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.12.0.tgz#798c84ec7d42ba03fff056ebe575daa6e14feab8" + integrity sha512-eIJ0DES8BLaziFHW7VgJEBPi5hg3Nyng5iKpYtj3wbcAUV9A1wLgWiY7ajf/f/oO1wfxt83phXPY8Emztg7ITg== + +pg-protocol@^1.12.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.12.0.tgz#e9827f3e1dae6cdcb78d009cba5bb699d88ae998" + integrity sha512-uOANXNRACNdElMXJ0tPz6RBM0XQ61nONGAwlt8da5zs/iUOOCLBQOHSXnrC6fMsvtjxbOJrZZl5IScGv+7mpbg== + +pg-types@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3" + integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA== + dependencies: + pg-int8 "1.0.1" + postgres-array "~2.0.0" + postgres-bytea "~1.0.0" + postgres-date "~1.0.4" + postgres-interval "^1.1.0" + +pg@^8.19.0: + version "8.19.0" + resolved "https://registry.yarnpkg.com/pg/-/pg-8.19.0.tgz#2cb45322471c1ed05786ee7ec09bd91abdfe3eeb" + integrity sha512-QIcLGi508BAHkQ3pJNptsFz5WQMlpGbuBGBaIaXsWK8mel2kQ/rThYI+DbgjUvZrIr7MiuEuc9LcChJoEZK1xQ== + dependencies: + pg-connection-string "^2.11.0" + pg-pool "^3.12.0" + pg-protocol "^1.12.0" + pg-types "2.2.0" + pgpass "1.0.5" + optionalDependencies: + pg-cloudflare "^1.3.0" + +pgpass@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.5.tgz#9b873e4a564bb10fa7a7dbd55312728d422a223d" + integrity sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug== + dependencies: + split2 "^4.1.0" + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== + +pkg-conf@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-2.1.0.tgz#2126514ca6f2abfebd168596df18ba57867f0058" + integrity sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g== + dependencies: + find-up "^2.0.0" + load-json-file "^4.0.0" + +postgres-array@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e" + integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA== + +postgres-bytea@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.1.tgz#c40b3da0222c500ff1e51c5d7014b60b79697c7a" + integrity sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ== + +postgres-date@~1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8" + integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q== + +postgres-interval@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695" + integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ== + dependencies: + xtend "^4.0.0" + +prebuild-install@^7.1.1: + version "7.1.3" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.3.tgz#d630abad2b147443f20a212917beae68b8092eec" + integrity sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug== + dependencies: + detect-libc "^2.0.0" + expand-template "^2.0.3" + github-from-package "0.0.0" + minimist "^1.2.3" + mkdirp-classic "^0.5.3" + napi-build-utils "^2.0.0" + node-abi "^3.3.0" + pump "^3.0.0" + rc "^1.2.7" + simple-get "^4.0.0" + tar-fs "^2.0.0" + tunnel-agent "^0.6.0" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.1, process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +proxy-addr@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +proxy-agent@^6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-6.5.0.tgz#9e49acba8e4ee234aacb539f89ed9c23d02f232d" + integrity sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A== + dependencies: + agent-base "^7.1.2" + debug "^4.3.4" + http-proxy-agent "^7.0.1" + https-proxy-agent "^7.0.6" + lru-cache "^7.14.1" + pac-proxy-agent "^7.1.0" + proxy-from-env "^1.1.0" + socks-proxy-agent "^8.0.5" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +pstree.remy@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" + integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== + +pump@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.3.tgz#151d979f1a29668dc0025ec589a455b53282268d" + integrity sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +qs@^6.14.0, qs@^6.14.1: + version "6.15.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.15.0.tgz#db8fd5d1b1d2d6b5b33adaf87429805f1909e7b3" + integrity sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ== + dependencies: + side-channel "^1.1.0" + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g== + +range-parser@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-3.0.2.tgz#3e3ada5ae5568f9095d84376fd3a49b8fb000a51" + integrity sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA== + dependencies: + bytes "~3.1.2" + http-errors "~2.0.1" + iconv-lite "~0.7.0" + unpipe "~1.0.0" + +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +readable-stream@^2.0.5: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^4.0.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.7.0.tgz#cedbd8a1146c13dfff8dab14068028d58c15ac91" + integrity sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg== + dependencies: + abort-controller "^3.0.0" + buffer "^6.0.3" + events "^3.3.0" + process "^0.11.10" + string_decoder "^1.3.0" + +readdir-glob@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.3.tgz#c3d831f51f5e7bfa62fa2ffbe4b508c640f09584" + integrity sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA== + dependencies: + minimatch "^5.1.0" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +rechoir@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" + integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== + dependencies: + resolve "^1.20.0" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve@^1.20.0: + version "1.22.11" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.11.tgz#aad857ce1ffb8bfa9b0b1ac29f1156383f68c262" + integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ== + dependencies: + is-core-module "^2.16.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +router@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/router/-/router-2.2.0.tgz#019be620b711c87641167cc79b99090f00b146ef" + integrity sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ== + dependencies: + debug "^4.4.0" + depd "^2.0.0" + is-promise "^4.0.0" + parseurl "^1.3.3" + path-to-regexp "^8.0.0" + +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +"safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +semver@^7.3.5, semver@^7.5.3, semver@^7.5.4: + version "7.7.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.4.tgz#28464e36060e991fa7a11d0279d2d3f3b57a7e8a" + integrity sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA== + +send@^1.1.0, send@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/send/-/send-1.2.1.tgz#9eab743b874f3550f40a26867bf286ad60d3f3ed" + integrity sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ== + dependencies: + debug "^4.4.3" + encodeurl "^2.0.0" + escape-html "^1.0.3" + etag "^1.8.1" + fresh "^2.0.0" + http-errors "^2.0.1" + mime-types "^3.0.2" + ms "^2.1.3" + on-finished "^2.4.1" + range-parser "^1.2.1" + statuses "^2.0.2" + +serve-static@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-2.2.1.tgz#7f186a4a4e5f5b663ad7a4294ff1bf37cf0e98a9" + integrity sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw== + dependencies: + encodeurl "^2.0.0" + escape-html "^1.0.3" + parseurl "^1.3.3" + send "^1.2.0" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +setprototypeof@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + +side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" + +signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +signale@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/signale/-/signale-1.4.0.tgz#c4be58302fb0262ac00fc3d886a7c113759042f1" + integrity sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w== + dependencies: + chalk "^2.3.2" + figures "^2.0.0" + pkg-conf "^2.1.0" + +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" + integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== + dependencies: + decompress-response "^6.0.0" + once "^1.3.1" + simple-concat "^1.0.0" + +simple-update-notifier@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb" + integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w== + dependencies: + semver "^7.5.3" + +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +socks-proxy-agent@^6.0.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" + integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks-proxy-agent@^8.0.5: + version "8.0.5" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz#b9cdb4e7e998509d7659d689ce7697ac21645bee" + integrity sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw== + dependencies: + agent-base "^7.1.2" + debug "^4.3.4" + socks "^2.8.3" + +socks@^2.6.2, socks@^2.8.3: + version "2.8.7" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.7.tgz#e2fb1d9a603add75050a2067db8c381a0b5669ea" + integrity sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A== + dependencies: + ip-address "^10.0.1" + smart-buffer "^4.2.0" + +source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +split2@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" + integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== + +sql-escaper@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/sql-escaper/-/sql-escaper-1.3.3.tgz#65faf89f048d26bb9a75566b82b5990ddf8a5b7f" + integrity sha512-BsTCV265VpTp8tm1wyIm1xqQCS+Q9NHx2Sr+WcnUrgLrQ6yiDIvHYJV5gHxsj1lMBy2zm5twLaZao8Jd+S8JJw== + +sqlite3@^5.1.7: + version "5.1.7" + resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-5.1.7.tgz#59ca1053c1ab38647396586edad019b1551041b7" + integrity sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog== + dependencies: + bindings "^1.5.0" + node-addon-api "^7.0.0" + prebuild-install "^7.1.1" + tar "^6.1.11" + optionalDependencies: + node-gyp "8.x" + +ssri@^8.0.0, ssri@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" + integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== + dependencies: + minipass "^3.1.1" + +statuses@^2.0.1, statuses@^2.0.2, statuses@~2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" + integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== + +streamsearch@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" + integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== + +streamx@^2.15.0: + version "2.23.0" + resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.23.0.tgz#7d0f3d00d4a6c5de5728aecd6422b4008d66fd0b" + integrity sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg== + dependencies: + events-universal "^1.0.0" + fast-fifo "^1.3.2" + text-decoder "^1.1.0" + +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string_decoder@^1.1.1, string_decoder@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.1.2" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.2.tgz#132875abde678c7ea8d691533f2e7e22bb744dba" + integrity sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA== + dependencies: + ansi-regex "^6.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +supports-color@^5.3.0, supports-color@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +tar-fs@^2.0.0: + version "2.1.4" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.4.tgz#800824dbf4ef06ded9afea4acafe71c67c76b930" + integrity sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + +tar-stream@^2.1.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +tar-stream@^3.0.0: + version "3.1.7" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.7.tgz#24b3fb5eabada19fe7338ed6d26e5f7c482e792b" + integrity sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ== + dependencies: + b4a "^1.6.4" + fast-fifo "^1.2.0" + streamx "^2.15.0" + +tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: + version "6.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" + integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^5.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +tarn@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/tarn/-/tarn-3.0.2.tgz#73b6140fbb881b71559c4f8bfde3d9a4b3d27693" + integrity sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ== + +temp-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-3.0.0.tgz#7f147b42ee41234cc6ba3138cd8e8aa2302acffa" + integrity sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw== + +temp-write@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/temp-write/-/temp-write-6.0.1.tgz#b1ed81e80e120ba4957db3e01e010669d7c15870" + integrity sha512-6bj9LlNld+knzEOQvnZK6YxiPF+foOUjvG/WoWj1/Mt9c6f2kQCPsh8KZ+NyTk0AejubTQSPpx2alcswE1bF8g== + dependencies: + graceful-fs "^4.2.11" + is-stream "^4.0.1" + temp-dir "^3.0.0" + +text-decoder@^1.1.0: + version "1.2.7" + resolved "https://registry.yarnpkg.com/text-decoder/-/text-decoder-1.2.7.tgz#5d073a9a74b9c0a9d28dfadcab96b604af57d8ba" + integrity sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ== + dependencies: + b4a "^1.6.4" + +tildify@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/tildify/-/tildify-2.0.0.tgz#f205f3674d677ce698b7067a99e949ce03b4754a" + integrity sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +touch@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.1.tgz#097a23d7b161476435e5c1344a95c0f75b4a5694" + integrity sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA== + +tslib@^2.0.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +type-is@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-2.0.1.tgz#64f6cf03f92fce4015c2b224793f6bdd4b068c97" + integrity sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw== + dependencies: + content-type "^1.0.5" + media-typer "^1.1.0" + mime-types "^3.0.0" + +undefsafe@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" + integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +util@^0.10.3: + version "0.10.4" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" + integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== + dependencies: + inherits "2.0.3" + +vary@^1.1.2, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +which-module@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" + integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== + +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +xtend@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^15.4.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + +zip-stream@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-6.0.1.tgz#e141b930ed60ccaf5d7fa9c8260e0d1748a2bbfb" + integrity sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA== + dependencies: + archiver-utils "^5.0.0" + compress-commons "^6.0.2" + readable-stream "^4.0.0" diff --git a/docker/.dive-ci b/docker/.dive-ci new file mode 100644 index 0000000..7a408bd --- /dev/null +++ b/docker/.dive-ci @@ -0,0 +1,14 @@ +rules: + # If the efficiency is measured below X%, mark as failed. + # Expressed as a ratio between 0-1. + lowestEfficiency: 0.99 + + # If the amount of wasted space is at least X or larger than X, mark as failed. + # Expressed in B, KB, MB, and GB. + highestWastedBytes: 15MB + + # If the amount of wasted space makes up for X% or more of the image, mark as failed. + # Note: the base image layer is NOT included in the total image size. + # Expressed as a ratio between 0-1; fails if the threshold is met or crossed. + highestUserWastedPercent: 0.02 + diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..18d2971 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,73 @@ +# This is a Dockerfile intended to be built using `docker buildx` +# for multi-arch support. Building with `docker build` may have unexpected results. + +# This file assumes that the frontend has been built using ./scripts/frontend-build + +FROM nginxproxymanager/testca AS testca +FROM nginxproxymanager/nginx-full:certbot-node + +ARG TARGETPLATFORM +ARG BUILD_VERSION +ARG BUILD_COMMIT +ARG BUILD_DATE + +# See: https://github.com/just-containers/s6-overlay/blob/master/README.md +ENV SUPPRESS_NO_CONFIG_WARNING=1 \ + S6_BEHAVIOUR_IF_STAGE2_FAILS=1 \ + S6_CMD_WAIT_FOR_SERVICES_MAXTIME=0 \ + S6_FIX_ATTRS_HIDDEN=1 \ + S6_KILL_FINISH_MAXTIME=10000 \ + S6_VERBOSITY=1 \ + NODE_ENV=production \ + NPM_BUILD_VERSION="${BUILD_VERSION}" \ + NPM_BUILD_COMMIT="${BUILD_COMMIT}" \ + NPM_BUILD_DATE="${BUILD_DATE}" \ + NODE_OPTIONS="--openssl-legacy-provider" + +RUN echo "fs.file-max = 65535" > /etc/sysctl.conf \ + && apt-get update \ + && apt-get install -y --no-install-recommends jq logrotate wireguard-tools iptables qrencode \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +# s6 overlay +COPY docker/scripts/install-s6 /tmp/install-s6 +RUN /tmp/install-s6 "${TARGETPLATFORM}" && rm -f /tmp/install-s6 + +EXPOSE 80 81 443 51820/udp + +COPY backend /app +COPY frontend/dist /app/frontend + +WORKDIR /app +RUN yarn install \ + && yarn cache clean + +# add late to limit cache-busting by modifications +COPY docker/rootfs / +COPY --from=testca /home/step/certs/root_ca.crt /etc/ssl/certs/NginxProxyManager.crt + +# Remove frontend service not required for prod, dev nginx config as well +RUN rm -rf /etc/s6-overlay/s6-rc.d/user/contents.d/frontend /etc/nginx/conf.d/dev.conf \ + && chmod 644 /etc/logrotate.d/nginx-proxy-manager + +VOLUME [ "/data", "/etc/wireguard" ] + +# WireGuard environment defaults +ENV WG_ENABLED=true \ + WG_HOST= \ + WG_PORT=51820 \ + WG_DEFAULT_ADDRESS=10.8.0.0/24 \ + WG_DNS=1.1.1.1,8.8.8.8 \ + WG_MTU=1420 \ + WG_PERSISTENT_KEEPALIVE=25 \ + WG_ALLOWED_IPS=0.0.0.0/0,::/0 + +ENTRYPOINT [ "/init" ] + +LABEL org.label-schema.schema-version="1.0" \ + org.label-schema.license="MIT" \ + org.label-schema.name="npm-wg" \ + org.label-schema.description="Nginx Proxy Manager + WireGuard VPN Manager" \ + org.label-schema.url="https://github.com/npm-wg/npm-wg" \ + org.label-schema.cmd="docker run --rm -ti --cap-add=NET_ADMIN --cap-add=SYS_MODULE npm-wg:latest" diff --git a/docker/ci.env b/docker/ci.env new file mode 100644 index 0000000..11e2b2f --- /dev/null +++ b/docker/ci.env @@ -0,0 +1,8 @@ +AUTHENTIK_SECRET_KEY=gl8woZe8L6IIX8SC0c5Ocsj0xPkX5uJo5DVZCFl+L/QGbzuplfutYuua2ODNLEiDD3aFd9H2ylJmrke0 +AUTHENTIK_REDIS__HOST=authentik-redis +AUTHENTIK_POSTGRESQL__HOST=pgdb.internal +AUTHENTIK_POSTGRESQL__USER=authentik +AUTHENTIK_POSTGRESQL__NAME=authentik +AUTHENTIK_POSTGRESQL__PASSWORD=07EKS5NLI6Tpv68tbdvrxfvj +AUTHENTIK_BOOTSTRAP_PASSWORD=admin +AUTHENTIK_BOOTSTRAP_EMAIL=admin@example.com diff --git a/docker/ci/postgres/authentik.sql.gz b/docker/ci/postgres/authentik.sql.gz new file mode 100644 index 0000000000000000000000000000000000000000..49665d4e66a29e2859dddc8c457431aa50a1bc18 GIT binary patch literal 1036690 zcmV)#K##v4iwFqE5;SK317US^Xk~76X=^TXacltW{b_UD$c``ye^y8If2hajd2hSJ zT^9GHPn_poS&J=evn6>QPt;A4$r7z9vP`nHc;fu`7n$72Op>+Ab7Rg-TPzYlCXfIU z$aOdze28#3h;Tfg{r=nj<>B7-;oxBJdhgZV)!_im;~VV9-t9m0Z7EA{;JSi7FxX+~^0cj1G3_x%qbvv+!Zcv+`%b$AU` zK%spznxXh+@UOvaZcRKJ;9piRW$s52ugdPi^b@=|n;rafGRE|EJ?_VEZ zoOe@6+U4NzXz#=6b(vBFu_zA;NjY5)v4ZCn=^cJP-2ZS*6{e5?S8TnSJFP+!?&8xq ze5gVH{@XXZ_F_0B{|(*+Q9KUu)%(+dgJNW%2oIe3bd~^6kOTOMoq-z$(*ouWhmjZf z15tk|44xlg%R|YJq4;t(cE+M4yb%8^<6Dn|*?2@~_eTExH)@G7it!X`K8n354(2h~ zqwvq<+a$1W8LvHOf=8Y|ibLc_$c~|~QG_E>CxF z_|HX?2>+QCe}jQVckU3aU3ne-DQL99-P{ zIQ+ZNvP^?gN1fV5PKbQU)VTJIr^BSO4tCLe0;+(l365sS#-u_1V1FMW+Xk+I_4p=m z0PqH*S(718 z?DgK|b<+8Z$(!SIXp}RcNJ>fHonH*jj?X{toqjkhUhI7?z1ZIaO(fu%ta)OaVX$=S zPojVJo(>8BHx!Ycnd^;9=XkNyRX-CUZQ4NGOhq zN6#k#la1G`vfTw{QnN!0A%-&`fgXH;X!PEL6p#EI{0w|t*TxBo;?aEOEQB;gK7?8T zk00XnRaTGDd=BkQ|6y4Y!Dvv!F(QHY;CmGKR>QfI43&jO%?(~Nu_#+;HiP(ZL0P0o zqZ<^l%O&ypJYs$VyN0j~a)BV2V2JtIVjE4t156SM|M8z3FH)u7=?i)&NM9F`l7ghc ziIP8?QRY$snex&fd<}AfDe`=#tPN8DNMkGa3_#UWGq0k zlSUk*u4M?%ze5wx;eHRX9YBuw$oe+-u^$GL2~7yA-}Cyp=*|N*VOH@TTO%8XvFDNs zVrCH$4#8{2F-hWT04Rps&YH)NM=|Y+5^yk-k4K~Iv3IaHd=Ix9~mvDG}Vpv zjoysef=LWPyb5%0^{%T1)4w;S1eeL@xWCxg^6bms;nliO(k%g%5Ef=Yvt@| z(z>EDQ7{i}h}C=_+nWt2n8kH#>Q<6H==gmSPI6*{R%=OETHRh6qFL5*>V&psLk$MD zVoe-wpU|!#l7!wSew;$2My6;sW>K|*@-Th6M9&IQR+z>P%mBJH8nTFH*Q>aMPG^Dn zM&(FL=ypZ~F$le%N!FJn!j)KqAGuUBY6hx>>{|#^L60Y_+_DH}N`SnWxRRZh%UZDQ z60xk%Xj||-c{MlfZfZO|t%pf!l9|^iwXY3^m;5rj&4!U%GeF9YVx{i1rK+o_a)a6y zm7BrJ*3_NH_Y)dG(&=wb*%SItHty9i#@^kRl*U&XUl~&ybRc4iV*7>|AK{V70tF+p z6{CEi2Merwuq=tFTMAsn-qY4v!nV`cJ)IBUo-=JPx7(p|a*hr7(vF(0UFKWxsU0kB z+OPKF|H*x8GS<0$lVBJ73t9xHqRSfuo8b2Bfy2<2%%PS0C$xq*xWyYB6rttKKfGwU2}NTj)h2@;++*T{6@p*u-JQFI@K4r|Sn zWUwczCc&627HC%pQhcA~soC_m7Xsx45NJ&nfCsU96Q+hJ4OlN4kyYJyn5)fX0l@db z^B0+QTX=LVYnu@ncNyc6LnGgw#dS|waaRA3MRvE-w1pA6O-ENZYZXN~-S*Mp zm)K+Uiwdk%p=Cw46}hcjXsb*>mn*cI(6$illqz& zW!)_t)K;Wi=kKZIom6ULTQ|CjTiN5TxR0Z=e#<)GI-zZ;bAy4cXf=o1Csyw5t;JxK z_KPgVXdlQ~$AUQ~^Gn*z6RfphR(~5-^J}fN2p?y0P+kUpiyvpm+fW+MD{ZS=Qf`-7 zGFe_IPj{fOfPfqR$7M!ixbj-e&fs4h&O$H3BPam-(PrlSn#E-8n*QX=oi~Klw$R24 zAN#LNBUSU!B(cDO<&EJ@lV%%G&o*NSVb#W(liliDYB5??WodcK7--i}YO~t`;(R5j zG!i(>IY_@pOSM9h4K$&%*hmv=+t$*pp9pk86}ZD>V;23hnRYJ~kT*8@!Ec=8R0#H> ztQmW;f9tlp^gIS{2F;G+B}1cUr2U_<3s_V+yOcfIXH+e!uU3@By_72WLD~asDxPJO zlPN~a&X7AykIGM)mTVZObn50z3N>{+55g0Aj=D_R_0QYiyosGPh%9_Zc;XCM?n3B{ZMS_gwpV%wwJ zY#Pfhd@s5g6)mzr(ig^y;4P-|CFNO6#mU0si2l0~-7d&yN}U}1u&_$@UzQCj>5cuQ zIXezE%4T~O3S(Q2?LhV|30HmA>Y&oHYCD+DpnjG&@yIGV(gSf!cY+?t8HsGm^U2{b zZFzHL0s2zo4W;H=R;@tE$2gVkhE=Rw)N(0`8(Dna3^7<6n#{=w98N3#jy=C0}HvJrG3vw#eavNUC3HK>SqS(Vt_YRy_1 z)g_xP?Vd=Id(h63;YhtU%gBoge1o#0^fNgninoAsUPus0QHu$Io*4z5x3`(2p9=D& zoO&4!ON16<5ZwDLh@b~|0{a$+5e~_TMjM`8?kY4BMg~{^-eyX?d?}tp?FUv705T5b z);{-afli*5Y?s@)g+m|55YcY8ZCVOmrF{t5mW7wnqA} zS;?ml%MU7y+63HOFPx7kgz0H!rMY|Fj=)9RBI9W_x#!zWH#79fFRpvYGehC;E#hu& zUQ(8&+O12fn;p+=VPJ#fn4R1{&G==#T3hz+yi%8UI+MUgtNUzjy%tmPEI%UG5KJGF zf0I;fBVy$jSIq<4Iz~v8=98E^nu|Pox+u-)-uk^<@ z8ltQ8{_RrATN`uxrI*<%fzr7CWRae-f6bR|54xmilx2XV9=M~&v?7Rb?mJlqrGD`|}j010${JRZtHi}!ogG7F= znyh24=YAZLvApJ>t*&Sb9E0Ck<0U1X?`zB+wjpm$p$kZTN(4Ka&t^EZ$xTMQ)4CG4 zNpRl_E_$3=!KCSGvM31qg#x8 zFXmP^xpe3T-QkfpvM?E?y!ZKM$|T@qKF+g8WHkVH06KyE`C#8!+#%u{&zgRGTu`btBS+PdD=8+sm`t~pEF@R;k#3uUfn7F1~WNJq9K ziIPz(qNM)|5-%D1h~3_`qBu&ie6hsGjG9VWE0&?Ps})HdS;bn}&6ZknQrM!M0neQ- z+a+wH2dFswt?Zph8)KP+F|j?TLuQj;JZ3G1Sh&H~&_0`-_GA}T>z>oMEvJ>VpJCQ9 zjhU8G8^>>*+w}36td-}Kmt6|j=kx&fdfaT<4tbL~xTW@_zQa|N1)JShII~#M_^EJs!M*O>uXs6EE^RlQ@U-wQ4s61qJtjaH{I&A5$Q+u}2 zPq!4@KU+)k1yGmPd?G)ji08k#sli&BX1P8&pKcfj!FYm45PjX!3r*7(`R^1`lO1z2 zEw)TedfXDh#NEO%zRU5m$=2KK{MmB+Zg6UCDd9ZLblbwRQzY5_HLQ@-q-2FG@0n7n zFCOYK_souB8)Hel!^t*fsg&mp`&k34!mrW7q$V5Kj<8%kHY{~4x%RIibyAa+?5g#` zmmWs9b*rKrZ@7IobF{|d)hO9hdO&^L))tVq(UAe@qUP3jY{xy1p0q1k+T7;ZwgS7O-8CIn5#l>2kGmjY zMALb8H%;rw+>Qki7XRxSlxZF(M?x%c=vaQZ^iq8_qk-0^T-%D)8BA;?DCctg)FF6Q zv3cqGS{ritEm?cL*sa-oi&4{h^t-0Wr-w0>w}}8QS>`(-Ya)46n6RTM23fF9@hG9J z?l(Go-P5_1h9<1)TM&hDoDe(UJM4Hg4?Xq_pywxpclHE%(`e-RMXJEfPh7IZEdd(QBbIn4*OFt%$VdV? zw!b=a6wNLEB#jqEb8^iy?|TxrQfJj(ehS#5rr4)f0T6dos_e2ZsisIPdZjA0(f9k? zD7}qzGiOjNQh^?)QdE&U06Dj+tfwKWHQ!vTY`O1fV{)5)Nw-9Pk-jDMU|S6M$|e2^ zN#&-;gF5m$e$h{s@l{%AMb}WKwPjyWVPl)d&*1qNv36<&n>^>awZugxSIXk}_9cxy90*Wi=ntu+o8b+XyNcC9e6v^wI%*iAU$| zzTU+ZNOyD{9U6(Qq9dlpY6mz`GEl zt;MOg;2L_5_MV~#Z#tirnrivume@jEN28Cjo<6(wV$(@_d*MB@jc!X^@0!ex3U8(n zwiSnWFt?SEyq6@NIyxtng#T*VwFO&g7P?G~o*Y2L@pwy_1fyQ7m_kBs8-aMOv<1h_ zSLrlLVM=ygDKlZBt4EVS20$GzN)cBNBfuKid^5uh?b!0z!%#O1mNGzcYC( zAQqNCx324u`8GUFqr3&Z46-A73ms$9lX005nmZtJyKQcfJ@!lv>8G7Za&L?u#3Kv4 zkpe!a{ z7LA^)0ym^Bb6e_#yXZ3!hskBR* zo9#{MKU;Ebwc<9~H#7=cSxDRRN%is;^hw-XUbq8dOYM_lZEPxA<>RO{vfMlib@}#O zpVk)wZKR^x*zDB19^FGF6)IcY#oC{RO*YoHhEV!*yOq(D1w`}IV=9fRK8bzx**CcA zwm@2FeQ(t2cC}_B+QODIW|b~?W{25I3AHcc(LS!mrk(sgcmj(r4i86@J7i z4VOa9eecH{`($ef|MD8zT_mwcd$)x`GQY(dpjm4lnG`U^csW7R^|XnKmv-rFsZ;7Id>eT~XB}3N zYl-3(1X(Jre}|Kg7;v^XviBZ>la1nR0V#X>t~gA9R4d;j-UGb6wXYKz>JQxl?goS= zjpkEe6ykf{l9L3WWywRScWXI&HSippZjxfJe91qLcry(Y;vP>Xqgy|?_nUA_DS25x z)}+6 zqPNj2cGO@6i5B!WFT$d%{{3P5ftuOXd`X&?c>m_Ds}yRKEDz!)2(*TbDdlBas>JA8 znr54By}jrSI`xi%R}ds|MNi{2cqOmk&Ut#e-hrR?+Ar4@beT`$CE;nSjnQ88HavJo z4OWn7L2vUSEXwNd!CTe=Mp3Z9YQt#K2HmyrF27rmomYvB0%JU#1t9>8DrYEjR}f~) z^U|xsxE&V2K<#|UT?b=4UO|wwH+mA+%q#inXF%Gkx1_MM)fn4w+tsrAyY1|JiKUFYR_I#9w7C^l zZ3UJV_%QuB?`-EjtFO{VSk)h}YP}YTZ`GZ)7QIP#+FtNl1i7)*X)WcgsJI;6>{zt6 zn(UWYlorJZqNH+Y6F{Ig52|nA1qIwp8!S|X+yRpx%MW~X-z0)&9zDZ^yS#=hIP%6M zbSy`L`M~;=98gG_H$>TCeVie90-02V3$*mstObR;Cgp+ulH)qJt1x-7-RtA29Gh8; z#<;YOG;=s@$upqj%$_-`6vhiXg7otQk!h*kCyap(Ep*#ACBNtu;R#aIg0ZS@7VWrh zecbHEfF2BOa34T#?o(=8Ui;6iUViq&*op1xH!SIjxIO>TRg>QRPSaHv#@T-RCA&je z#h5yoT7!L6%gBBu3a3cUX6~ zOE|x*E3L}z*Ra8?A+{2wtTDjr4tTO)j<@B8o`uL8P|JJ^iV@rEtePw?+)iuoD$%s| z23~AAh2&PDcUPWoEasfpPIg0&BHjSOoM_0Rd7~Q!)9hMd?y1AAi=rt6ouuKOkMKAO z{K+Fv-PwmDtTzMYx6PV#5B}S>>#G#I)eJP5&1THWY1yn^a*7A2t2gQGL1#DcvP~EN zC$U{#J=U$}PY|qC8QOMa#^U}LipJ7Y_o_aQzT0*$*j|y|ePJ@4l^g)VyH}>YW8 z*_%95nxk^nnPsJ1C55fzJUUu&9quGOCzAfzdf(YBe5*ZZM{gD1gh3onNL1t^Z$ebO z)e;!+MVHc%MEoLM-QuP(;z_A)8a!dH%}gq4v>DTQivE_t+}3+tt|WfFzBl=^xl`_Y zmfh{gTEch!0OUFc0~nQFx7BRnhMB&sJ*mw+{jD?1I>tdftG*&{wj8RqRHAp7>Ud)> zZXUM3T!gxcO|>zz2IHdS$v@kU)M^E9HA*9^Bbt;9#!BZH&j!&HO(x{7gu1&G1{P>Z z^FyjTTs){#h{$QJJP0TB+?e|{9r9q8{XYTd$^mG+rT}#Df~zJmO7y5!XsTRmDuO6@ ztpKX?Ya*YkdLygNOknj`z3xcX?-ZXP+^93P?O1~?fnO-lNG}7!)z`^eLl%wgb!1&N z>9Ja%i5TP7LGgQR5hOpo%NjUc>vDlkmeycnyfRW%6Srw?o&0Xw{JMnm-^37QEUCYS zA(EPG!VuTLRHu`R4cgx133|Ftet#9)oBa3c1QpZV;*zD$wY zu9__9jWcpj85VW2w8;j10@vKh@3viYmvDX|*W4yM!x7wH!w^YL`fr448}#h(n=F$i zS12RUobY2a07^#uA*tw7HKSmr{+d_w|n z>rzrP?yfX?jZy13WJve!vX0G?o5R1!xZ{ZE;3A`l{a2B746=6b^h!s^N*z>YAZR@2 z?KJ!~hEvyKUp3X+oLN0(uUTXA$vR7>M1IAtvKhWTxmTp?pPyH3lQ~<6BRlkF+^R#L*L$o%tG&u(KC;Gs_1wAfulGKLGl6F zft@UUj%;!{BJXT#@^Lgp52b9=383Pbocm*Y9rIMGm;faZIkjNX+A=Z|dc{wZ z0mvm{>?c(L8}Xu;ODannDivBxS9`SchO{?3((GxqIIBf>V9i3_%qfKn*L{;Mw3Qfn z0bVyBIxi-eCk>}P|IUlkYUYm{H7Hhrx$TfQ(3$ea-g>5{uJ-_*n147%Hfvx#wq&0X zc>D?N*m=&gD+A`NVpp4M&zC>Di7n3M%$Y@M^I-zF)I|n?AV{01bCpCRAlNL6W3^zc zrG`t%IgbLehmFgaU1D$fTFAbow|KDE-L!9zfe@Cg?TJam9Y-SzyJQU1CJVwR+|?lT zz;+rCt$gKPs|1#7KS)<*ar$SY%~md`bQ&*t$#s!5Oy&-a)4-CQ5%oW!Kb@%OPI*FR zWn(h9%{c?)8OR@p&sy@f5k+HWsReD4{*jcCW#L`Z*vUlz6S7Wg-UFhos09_V(x$8H z-{yTsqqJ_nv4Tj}WtU0ilALk7;>i-#&UB!R!#_-lP+zxvvnsAv%v*```OIuStncFd zNdtLC<43qed)Q`ay(4poN#@gJn=Tn&XRfzf$4C;Ric6VA`AR49oIGw^!Y#$FJD6!JYI%{R z*O9{`ecFz|ScUf1%qWSLN6tLtFAD!Q<8%oKfsXEQC|k@*=wrz0~69 z({=>LDzyKo6&-|3uDKc^GR#CL6S<>}75K^(N99?v86x|iI%YS+5hX_Kv$-^?4Awjn zc8RuTN@=l{jM5D0KuIir^PR8TD8irBHYc! zq_v7}Fz94*^)yjsR+Z%MMzuHjoBJS2d&E0Ur>Uo@7IFs{x#MZzP8_aoqdOF%Fk&J) z*hTY6(i4oJjy^a|S_*eNMH8N`lUM{HUkAgR*tsLi2Iwq0H+FG@ASNA|=ilt+X zA|yK#j~;)*Da@PB$UTcbd#a+wMY8UtHK?kBE^$U`RhLFAdi8T^SVb;$+DlD;7jt0b z7IM;;-FQ(PgpV6Buv!_V{(*fq)3bbv@>%Z>_ z5T?R72s0bHBkQM_8|9MCRt_CuScfuZHSVK{<2ec)2&j`Gkbo}nE;b6SQJU=qb^Cw> zV>G+%Y2Gyt$|IYP{B&-bTKL504vtrEolQ86j!LiHgY@EXo9-m95Xow{VGpcwp3EHD z)xBe%VLxkN^1F~RuqbTQ7MNAuoGG;Mx9t(P#4I^#pN)(6RQwG5WkGo9qpL-=GpS$| z*Eh+`Cj{Dcs#^eE61!rdayV+= z5hMoE=mtgXa)DAjXV30|jaw7`MuAjpbP>X&WqS$nD1GKW7FChOhVZQr`A(Gl*_=w3 z3dvNM{^09TI+xDeX_3y%J>#_iB~321h`o5i*2Wx!EYx97g_7Mm84J}DUn=|C{L*qy z#`k}JX?{4Pa1Wn`+7tV#>nl`GF^#QBU# zJeZN2zxcZpZw72wToPBpu zx&#F}yn1I=gX!NtFE*~VkdT*9k4=rd)QiXzAW75~53jnM`3!~4UdD??(HvrJ=J6hj z$$PPpojT$Ox4b}wOdIGvx7f4kwdHHEVOTDG2tw0MRh{kw5J9WTe2(;&rfJ$5N|?1 z6hBTOnuADWv({BBEDz|XOZ2;?J@m{_yEKNfn3mToxrBaaLHx$0NlWQ>A4(8yT+ZpcPqFC~%nD7nC2y2hb@L9W#@W;Q zoTMh1sf|)w+i)PtFSpk=@_Js*04Y0;6+7FO%C4f;4Qg9fbOt+HRDB-zPiPEDNU&MO zPs(_*@w1L``|dub{q#-7bO{~G$PU`<*p=A5$FY0REs4Eb3S7+g)Am}z&eJ$Qops)> zdu=bf+r@Hnl#O`Tj=HX0@>}w<9c*ph)Ao|WlY84_?DT2OgI)A5X&s!ZE^i!cg4?wX z4pUn*jaC^vp=HqBmYcNzT0|zaWOwJPXR~(A$8^oeb=(=^F%}CnN8|dfW#S#8xco>( zBF`nvk#N1)rlu1c-APq;94BMlmSnJ}#ORSIU22hU$?jM>n@zZTAy8fbf!1UJ_+(Fc zzsm@`Xw-gm2fYdSd*Jzt%&8ix{EXbd+}U zwo#PTZ6zH(iaqYXxY$ZnT2_Etlis>Tx7w6_e_*?7dQsRLw_|#1=VcszEU=K)qXzA%<0(Y##BCo83ga(ef$_;af&jy9Q>P z-4Qvtma7VtrUC~#hc@WZUagR1>rdz`He$uvcD8~JBqCi<5y&}_QSxVVtzRl6Z*qD- zCAW!?%^f}`CsQrFdC;DCq&#m1jgR9c1E*(13!bqHSX4#3R6f}yRV}K&Zj=SSltTDH zaoyjh^`cx>rXDSOTJCV@#cW@01rGbeqAeX^%st37(OkyC)vLt6EK#i7aN&HiL6^=h zZ`})i+M2sE3cZS`X~owf?okYO8<88VH#a2GU38E05bDUhhAF}2^p_v_?@{%2H^b%= zzaC6&Gz07{gQrOa8P&^cwoMz!3+?P<_{SRX7WLg@>m~?pxjS_ua+!6|a)fq9pthD~ z6~ij{UD>44+HHEjMrX;T8zd_$kNRKfu~ex`$uD}0ps*N4x0{w%QPQ?H7IO`Rz?PQ8 zww$X`UnG-R7>-C5!J+=2?t zAP@BD2BF4s58sP!Mn#J(kR(Eny8zyzieFNn#T1<^i;n2O8`JQjh)lJUgDw_U%>E0< zK{35?dX+)HQ@9rkbz6=pLG~>PX?@n(q|(A~av=lM&+;Z7S$8m1+U^uvm&6!Xh%Ml*7Zk@bH*tYSoCOiRSING`VT40+=+PFYc)JSD zgqFe8zqe@}FY$;cQTw@81b_^&xV6u{8={k|C0plqZsE`;H%~r63$+x!N-Ghv0O@*T zb~H&F;&Bv3&E3k2w?`WfOSVb+uzC5X56frjqc$-&7yRaFdYB%7R+>cTZTnliMKZ2d zlYYLlbaNw&{33gtlAfaQHw|(3G%qdDQvKE?+szLfwlJ~L;lfUypJte_Uacqa`n-~t zcSDoFM(gn9+?p+>?)eSn&U`w3O#V%Bn~e#VUt~48>bfI*5_5-6kr$7qp3ieg$#?Xy zyt`@PVM+NXbBJ{BHn>9iEB&#p=IE+H|JEs`gpJAe(#vexzBH6RS*#!JU-xBOg|7G+ zWxJ4)pId7Xe&PMw!omI{MSYVF<*+G>3rZ|ud~>eAbTM>psWkGzqE$&lc^&p&P^0VmU8o;@Oy^V~7t z1oG#DeP?k;Wp6xdHbN63c_&?z$f;&RXA~t{w{O6c+yoPD>c+fFxuRI3dZUj_M>iEo z$F=*E8_JQ~rMz%Ksn(1fRY$I*nCxOQ-CDAcT-8UqZ3+gGC3Z1|Ni14Wq1_`L*^VSi zMy-gF{x3+pWb7k$d)JEMD8=%{5+5^aDrK!$hSsiDBz0sJYh^cEYRPT4c`xHom+cs~ z)eltM{#G_Wq)oESxtiFX)8V#BFdnm3BrMTvYiOlS&pNV;t98}s+m>TX+K)Qxm_%$xQ()4M`_hYmLggLbSX7| zk=1-@Pf=;bb!Z;VlDDjWNoJnupw)6tZmK%ab9p{q&*gZeVD>COON9f8`SG>^WOk7IpLM-s%9AhkTD!`Nb88E&p}u(6;*T zmcskza!ED;O4FKcUe;tb?wJBL7%b%u{ zJod;@59{nWl7xGP+2*X4a=l^CYhYFQb=sNKW+OWZmaEBzWsfD-{&i$eYO|7!wca?> z!vLSa!YI!hZspCLtFd@hO171rfFHND2qbxQJOMhcx%C~}anCa=?GV#k2~9YAGa%=g zVczbO}Asxh3kOc9#K-^tP_)of`kQt8o4u8HsoHd;Fa@Rm23gD^Y;U%qr>Y}qzf42Z+H827 zV3C?^R`wgco?)5FtZHJv)?nNMd@tM10eLBreg;R;X7|Rn71|vUujzD(5Z^(0++`0V zn*Ou9Z(2|0wlRpl_+QtcQu8=D17d-b$nq1am+ZqCO|(80+h#=1U}Q^yJD2aL4%4%W z%}aOf+K~Nk(emp>Z_WN&44l@Z-wjDVJ(a1vc?EFEBI5~Jk;$XNgdI&W$bxlvM+s$h zAJXCXp3=oMbYWFTQz!To?xw-imYohq2ET~waWKhlw;XPi3f-E!Ny;4At@pZezqUB5 z#XZ8h?Y1n=6)mIrPM%*b}Fw8{4`VxP&MEe_Z*%Uy1Kj-J!d>`mq75nRQ9UcX+y zI>grxC&Ui;5j!5uLytYH==sUOpFKg|G#Yt+kxp=P7?&)qOMpi7tR>!Ix8zhZGV(y~ z0jSPHMRSWk<>N)soZL&z`<}$K)N!?!p91!%Dfa2j0>m|yD!aUUs;Sb79;!-h^!@%e zO0P-X+<6*{RHDZT8&%{EK+eT2>uQc_-8a`ZPtcpRF}mH}rCTn)NNHhn;JYpIJ&)s$C=@fYuK zFY;dA3@Q~~)(qh3;W7Dli-A3()ch>GYX8(8+~>FN+>o=-*c0eo5OxsUdbn+hp1*7> zy7guwav3yO(-=Q+BKcAc$a#E8#GC9U;@#MSBG0D7HKUFlnI*`4b8$Y|#9r1_U?lgC zwnC@UX<5+7PZtQ|HlD?!8;nR>k}}t^R*a=R%j!QQYo#OlwiRqJN?r4L>!o7{6A#bb zCCKmMBOJ$21ZPPs_MKVa`AeP7$BqbA(FvABSJ8=#yDce0R@|Deyx}@MC_N7BfOo@0 zTf0-w!8Q6Gtv*E$-gG`KHPIj}x68@`c*_Q04S@1G(d~&c7#|JKH9*ml;VipOxZ3XMK5*HkQ zU!^lC1u@wTs?5}iu3$~V8~}B^C`DXHuvzDR`F3->dG=?kt;Z;L(Kft6A=y*ak|HIO zAU=-i?w@V!7-2KE*5-K%H`ZN^4X-2ZRfT269HHri{lHZo^X_UF3-$8anufbzXsxt0QLURWMZ@0}|vPZJXr3SQB;Rv}gr-&@k?T_JjV@Ur;Xfh5$$p5F@d0Z5ebFI4J=zMSeu&ij79SO$7 zt6b*MKql%SMk@w2Uw%8C)&?7yrl5<{LX@<8^J*f96mp5;ygF6r_ZE%fRu|F9s!wKXefB!8 zx|NX@THnL94jWsuL2YS+9JAbxCg>sMjuj;vYlJ0sw1pNKy@Bp9v$ zST#11B`;Wo6~#=9=jmN{TP^Y~l9+i<$DIw|agMTHzAaiSx?EG_XIO2?o!83i@5WQF zH4i=Z3NdoUZulM~^h8*kQ9^%*AH z54npT)49HuRgu2OtHsv(vbt@o#iF;}ceNM4(LSrA=;g#o*Y+l=UfNHz#cryr0^7+g zI%~0tbW0SsB+gQa{kx!ioPo13lf7#a+-?+S3tHI|gT?U(q+0oI_a5NoO^Kb*P=Dws za5o?{Yc!t%qmTpe7P%wMXW^>|m4pvZ>5aMNuP0sT=UU3fzu1zEzRWDwM6(HgNO}tL zwDlHhFMd0{Wk(%WkZVD2JAy3A>)%hdA1|6+ftVz8Nw3hn$?I zdzDySO9O4&-M1INQD@&#^a|o6>pg2(R=N+&oWb*F9*|UjOAK0T9YwDoPTE5~nX~4V{wvI?v{!IRk!R~aw&lpH<@I;u*$Em;ntQF-wFqmo ztGwC@EiEr%`gz_t*nL)jrA@KAhhWuvEpp$wn{6$Avu?J%=(UJ*qwC~a%3M*2IeOZ$ zd~VeiSYmlx6eEbG$^lRS;oLl^zJV7MaC0rOP&IPLOnxjsbkcn@3z~WK%ogtA9weBGTpw~2wo8CQ9(|H$$+J5gS zyNg-PusYdVgRND|$bKbir%2A`ZV_IpHr@S1SICze6z@zChU;HvD>8W6WGgng0Qfu%q z(X{pkUOYjv$*o53EYEuY0@xwj+ z;c*oBlSiJ?vyXmQcdp8Boi%A7{Pz@Yuu}9^bJb+doH5&{W%Gr}NhP4P-lVrTo!!98 zHjVtB6nGT{S+}x3Q4m*UYWoozO9sDCl$M@9SoL@G-Ba|7?Um`>J0??P$ss4adwSZt zI!*$e5GGgVfz@#+?_Zo>U0?1ULo0IF9hK@g(j`$gkRpsgwD#=)nsWbS@cen1h5z%f zf$-;_y~#7BIVxA3SyswbQrL=)q@x|z;abvjGwGiv=}nsz*lM5J(SOA^VGzd?5-qvN zn-E2BwFd@#(aChA7{5s8x440fcv7kx2v3-6G?t1YZN@;Jst0B;_yqkhS02A!Z=C$u z?Ck(O%kTDSEx|p1*mAwY28?R2+k&=qV^3f9p4fh#{uUo*9pfOLRbP=ePY}qqRHSzh z>v&@?ZeCTeT>QG4eYLT(21BFd$v;mK$JGkoY79qKUoFC+Yz^dH!|maPr@)b5u-o%ggh+YSTMICl_nvdAKt| zcJsR3>cE#hA-7BL&P|{x1gR5=`*Cy=aL!B1I@)CUcX^NKvfJvGlF}NiJm;kHI(ds_ zq;FR*x@xnaf6mA~ZP3)o)FzwpiJWyO&)av_T_XC0oOPS@3`cN(9it?*>AyXzZNRj{ zld{a4Tx5;xn<=~~uMhyoP1jVComC@pf}9uP9A?wItU86YPGhgSt|!upY9)FO-ZGay z=366p8>(h=YvS459dq z1tTYpaEt}bW|K6BSaRpV42M&X-rpLnrwz+uSXUEnEh1qtv5okH&-0T;8<3+s(toz% zs;Z^+U%5okz=|S*w2}(fDzKFHI`irDG5L2pLaUY6f7ilI7~GF&-@L+w6r4&dB{~p{ zH%b28ise!6Vv972efWv1kAP@XUOL$ns9f+L6;KDxz(ckERo|t zXB06<3z`eflI57RYkK6~lQ^fh$uRlJT7=8&coJCTG5{RM9Qe zI~+c;zS-mwC69E2kq2!|(g6s)TjC%H`R@}T>`-;+yrQQvPg16mo^Lim7UtVrMrJ~< zNoq0xSx1chq$*%3UKDdlW$8twLW^o_kCxt$4rd3pJ-sexHR%q%S;(6@m2u(PZ?c`X z7Dq3@?>55g#l-WZA-Ct>d2w3J{Bh&P#VRznBk~41S>EVf&s5g+9>6#AkNC*uAgsrh zY&C*DU_v{5o;&Tzm^tg|)#fVrRnDYh3v@ZtW|7)X_`ofBkpUzK;pXWqDA5ZDMav>t zHB@V<<5JSjUED<-$s*5|fu)r%6L;?m#;YKH0fb|BDRL2Tp2;(40~|hU$?!%LjhW9Dv`L~!l1rAgcTJNg*CkBI>ackah_<2@R>w-K zuC9gK@gt2AyM4$?f?1c1Ce=%HePvWz&lfH365MHU2*IsLDIqus9vq4U8nn0-S_lx_ z-C88LYq8>#U@cy(#htbks8QkZ`>*%qeRv;c)?Tyjx^wSYbJsm{_Bnelr$14O=zA(N z#7WcK)_~O`{+hf6_1HT;5#!sI=|~|eO}Z7L{>7G~pEtUoFOGXH{qd0D{8^`ETFP9# zpS&Yq1AFtd18c|2g)qwo)eMoZ0$13eoYW6kLh6m<=S2eFQ+Ig03kqoJsoY@wcArCXQoXX{R;kGZpEwgK_5jy zeTr~tDF!uS-157V8v=u$hPmJ@Qzq@w+o&_GVh+(a_b*&4uC){dW73>;IR9hp<&;e= zMdg&(ZvSKK&5KHmuQ3g=rmL6e{}}t5YH*Kp-W_A_ zVtioL&Bpt*OX<+)KgQm(vqz==jCU{;7twYkY7R1v<5by98KN8gUmj17>%JnQfMS0ys< zhWoi+fO*f`_sU-W%l&Dk_LQ=L`pmmFtY~qQM8UB1mD_43TO~Z<$j*_Sr7bPrgjE~n z62)IYixg)!%;i+>NV7?Eat-`kk@FuPP5Vn%fpcygHg2*eH{J2N#k)D(A=&lS1L}c8 zi%{eh8P@;gg8nf$=%PQ2!)q!fz$~0lwUXuKMu22!tWN(cu?>fuZ^)|orW-ENFTbrx zvi4%BqBR}&f`%Ku3(l6uPFJ%%?~neIvb6IiX*aSVBT(9{+Ln35APD)5;oJDHlRU;9 zfx(tuY%@)>|IW?a{KvA%tB1Wc*xlcIUk0HnRY&nlma4$NT^un2AGK$n7LbxYegE`t z!H2;R3rC-9`(CPF5-E>wIXUg@iyG{jezjwF^(GhaHCS2Le6 zIvd|?$C&Y$ZoqNGWH#&d3&ASO`#u zlvkb*!T)bpz!;e=IA5sy-{qjYhLugwG0qOS(Me3#am&=0hu!GRA){33Wec(e>3$`) zY1|_(gz1}--E|dyd2ViI7t&(zN>qnzPWk)-N)*>2TY@LtA-m2?A(kSapsruxRX(?X zs`zgRL?HsN;uK}Sn?>oanaKzj{Ws!SM-ai^Qm1o|ya8k^#v6brxSK5}ThLSs9G{#Rg6BV2 z@r3C{$5GcU(K}t+q|nI-uf&>8v!e1pV^mQP4FPIuDP9)?gpk(Dzq2bUW_rqPx|1;Ay&?=*EB1-{gp6^AY&QG}3wty4V2%`~T>6~;#dHInEG|ze#pLc!To#2W!cawi>54aMysHZ4e zX(VXMIkO-(6t%*CpOk1G<>nsJv@gM_rj6=PS_BCnfWLqxY>?E z(A+(jpt4gBg6-F04vkJKbn9?E+2FJnw`fVoH19~Q%s$%~(>t@9FiAR9@D=6=Odc_# zP-w3Z;(hxF&vx7uR9b+Yo@3gpReMYz0nKZuAt=JVCK6#;(Qt0&iZ;(y9etlD=7Q(; zO*%hOz(vxnQaV4A%LUK@TKh4QXd(n-@%^0NA$=lxNunkiWEO4UVXj$YX+q7@=*m=v z)R*(IJ_7kT!cXSdVgfo=P7LvCS53)5jb1c0X5c!a{FOF5@R}KU@=6mPsKNbS+=)4j zipp?WbTBUZEze2Q`R<0;v*KYEwMJG}T4e_LB(?FC5F+WFcCzf5)VLS2B$PcZLlwF{ zv{7;g+2C_b8dLl9Ky^PB$Ye9Ewy<6W6d;_&Lq%l1b6?2(8RZ?Msif(e^tS@ zMqH@&mkyt~>qyGW)J^DbVVREdy>?#w1uXy`b=7^E2g-G3jv5c~2|D(P!UDuG@BwpU z3LC6Uc6t>54eZ&_QR3eNK!JF*8dK49l=K6GD7~QEXnv()0@j=$PTP6%MT^OiST5s9 zo1BqqN_M>2hF3le?MojKNO;Yw2!zZcPL^nTPeX851}hZAB&HY97RyoY`xe&Z zl~F2bu$>5lLuQ(Yw$c<`kpvTOe;{*fqTwkvPp>`)Yy8!$gx|EbGYkBy*#K=8_GzD@ zIY=$_HEVx`M`19QU#(o*k$<`vziW5xbi3fYnI!0AV`_$oE^)>F&gn&hxLGNsL~w|< z(~wMWpz2IU=1=mhCzDM#lG=?S54nS;7_-#IMK8&)D$?ZH{Q|TlZ8PffloB`M8$Ch! z#mEdtAv#1CrI_L&uXb~Yp=vC6+L56)1g@F^{^iIZ5~{D7z%S&)Al$$2*y;s>!gtG^ z9wJf^zDcmLhEGM^Ob>BmvxTn{Z2ZDuGuZK>kl5;{DbahuidyuJ^KzAnp5qzI!|gLI z$&fe8`ru{bHjUOq6F-f>82%>>XnlC>EMO_Iidk6NRF|@$Fo-#x!c>ZKtWb+N9t35h z>_}v0)`?~49cvHm<+(qqhi;O*H7Z4L0vKct(qe6WRbl(t+RT2FUnPx2UQ&%MwAhn> zN#wNd<~xzo%38Zy|B8Ciqsa2uS)0^l2eE=IN2#2>r4YR;Z@(0nm7!BDdMhzYI8yrc z^bUxoEOL4Y94E^596twzpmF9ualU+=L1Vtt9-clUB%sKDPi&IcBP7!(3-W?Y*HxD} zl%8MD$&}xvI1#0XGBH(m=}5%tq5SL|T(FryJ>hTWvyvo_k#1+HVA)^gN%mQaa^n8P zN=f6z1W<-TM$64ZMs}rzu_w|moLN4Mjek@b$Ow{fU45u3e8{oS&rgBlOfs9fA8%5* zxXt&t$BgSy(={;s4>-boJFk~PH7HX`&L?Sr_&fr`lU_I*pNZ3@V$8@}+_#e+w{q%? z%An3#N(V*g5sGlg*Yf1tWRd7eC!0X$+&_^H%m@e#R}~C^tL<|KVEz%tD@9)KHD)5b znBJqhY#0=NbR%rrKf1zamcE!@WRIKy8i3c&1V4t|TME%OP-i#$r|$YIQ+J=f!gDhl zE*LgW**b4(P;e~pWK64SM%q}vHr$Ur1XRj@txN0kcFYvM=5b;50-;%3btsn&p06v< zHoah1&vZi!pS^Ht$>TK1;}!6wDgWZfi7|95b@_xCHe>sUjVh2sFtzV!vxn%4B3kw4 z-B?vra*GX=L^VF<+NN5kz&Y+)2^nkGYgJKqG(4`kbIle=OcuD7jP;B~{Q5)9)OAOS z(+9*W%=i`r%?}~$@yn==g#4Z~5+_A^uX2Hbic~DQ%3IthRoqwS9alI>eLG{FPha8c zh+-DVl#y!0Bng=xQ&8>%$nD8=&UA^-gmhe(SUi1PEykD=@Q(^EL?z91y9^gO^I01M zy=W}5T%l`E$O*SssKrLRGDxpxt{acFIr!zs_0aRMBJhzqy+a4ZKm^-th6YU>QRR$L zs!?Le_q2Bu3HxZAlkgMki)IU`Ft-!89>S+SgOOGttp?P65SbWPKw{3Mk}`Xc%6qh# z6I<@T#>XnqHKjw6CxJHGtxiVzvGNKl@(B=CTs+&K2L8@|yC$j^{W9R6y)4KeHG0ND zY@+$6G>vNXH0R)c+x=B)jK6K{sGOC|>xvrcs>!G5>dVl#Mr`26tL!iLsEUStFpXC~ zXMH%%UGrmud#D6Mv~@`{whO`=?`Kf~&(i5x+jo_v^BbP%I_fp?M(gw@Tt7W!`w^`y8su_8V2#iH$Ml}@Xo!)E9!9rG5Jb{y?fNpoiYf7HzWU5;%mC3NZnTI| zVQ4scrOK&E>C)m4dUdI}%;-F==MU4fYNv&x7y2s-W7Gl^^dY4xC&CC)OkYjqpDy}_ zYq%Yeeq5;!d9G5uxSyGM<5=RyGr14sBLad#UGUuam9J=0KWc zN2G>ndupreOLq|7$IG34a>t$y6=)-_g>9w=&qMA^#L0u-fl|{aSNZO{wpR+$*a07D0glDt^`#FZZ%U1N~L} z!W#4T7^amKxog+sbzJAQRJk)bIyO0}MN0LZc@)tLoa7<^y*(hYdITdD@7;tNg+uN7 zia<;v)l7dQ<#i%ioqn4#Drdb=+rX_u?xk&QW9a^pwarz+f!Ez%^#_jAq|hh?$t{A> zJ~S15isXje0S53L7`_8pqAJpH`Jk2t>`8@etE)Vmr81FI)XBsnpDDU@tW{cY7_%lt zHU$$!X4V%7L|eLf7A9v^GB+|+Wc5HS@&@0R>Q_7Ni<^L76DA{;Sd+$uxdPU zuZKLNYLjsRbNX2x-wd_;v8NQFf=auJ!V@EnBA%ICCTI` zN^HpF_eX%1_p-csEEp`ZEZur;hgC|i4v||DuO~x%Vx4ylPu|eOr>p<^<2~la{)S;s z!)^^sDiL@v_vOY)yCuCOg8Zc^8>2qdfd^53c6MS%X6P?2xFL%(>144AzS-HXu)|f( zs(?@9+b8%hBu2%f&JY-i?EvZ^@(#uyC3c;y-m)7Cg<6V7%cU(zjP()vOLdfAlxthp zU%?tV4T9#~yPgzenq`;^zUS{C>b7lI?);8eoe|0&&QTg94sreJ;?p^0gkQYs&(^X3 z3%8)#7yH!CK~_q0>Q}SUAU9C~wOysvx91N~(nWoG?dJqfjgYcovG#5~&-BEZdc<8h zer&slU!Pw7A<=5hXh!o(?Hd7^IDUh4{G#Ux1U8N>AV#Of{Aca~wPQNH4O(?gZOx+= zt2kp>5*9_h*aS|^Cl~2_*_OCr%Cx`;-@i?bjt5n$6A+bYo6g<#-h|eG9u32$w;uu) zolksY?I)iEntGi2#O9jiSXT+?qO^fBOd0hu%5ukMBnYC);ozurX)8@5k7TCp>?DxS z&T!qI=QC-)-^G;5Zz#WJz&rA*32E_0H^@JkYq$f24M9)lz@aVPiL+hJi=wmt!bh0P zjvr5xoV2lZ*DHUQ|k>Y|j%Z z!Pm9gY-_eJK&FC?8dkkarS(z*%X)d0hSa@E&}WTiMM}%1ZWjUW+6t_v8b&kB2wqE= z7_X26nHakUpkN9L&}`ZT$YS0CunWU9ldroAY!~*VGxG|7bu!}A$=TIPCg1SlluV`! zxoX2vP_EcZ6K&!Cqi1T~(y68)P#n!apoITL;!{rtWbvIB@vk{5+t&mNQtT$t8_{Kg zG|fJ$)=}1ydQ{>B*gm8RBp;9su~Bz>3&}ImBkT~!z5)A_^W2LOi^{Xe_?^bqXVQz= zd_H5<*a(yuJv^Jx-|k%AbGZor6hhwL=GRYE+{7Uf#mxNT{16T~a0>RNv2HzQ4|uVV z3#e-+kc+viO5w`}_mI4}Q#{xnLDNnWpR#$UMJXis=HC8ai zWG=4^W&JH@+8%LA6J;TKtfQN~CnrHGh-3PFuu~25)iG-*(B^f?f|esUR0y(t<-^>v z|8{qm%Zwhm;*>G=dnsylo?T=< z(L4mrt)V;@)Z%3QZ=E95-q#s8P(Dfj(gatO1KC9S%ZsX(C1lOYyq~Mv+k$s^%J-z2 zU(&*{$hY08CTj}PB~eH6?SFYMlGK(I60vIIBpHlN12X)vqCqiOpXElNh*=jgf9$+_ zr(Ta_tjPyI=4)4C%Ab02{)`n??+GeR_Bh8IEc(=h5vqjmJtDqAR5{g*5^0o0L?_&X z)&s{(-r0?Meg7D^X~JSZ+8DeSIMXlDyt8c1R-D;aAPp9I+}7Qeur15NxHP8+HkT^$ zAa&0dAgRy)=0YIXU;G-BJHMT}NtWj{>GHj;D2FU}a<>_6>CzHo!}ZN&*W3!cmk8$; z&36%;4(VJbe2MFXu;pgTSZxYw_!LqSyQ2h{>+@&j@a1OcqY*PV*UzaX9yccVDXpV1(`vM8EaFLT!I^ZKz`H&T_$Cf>M9PqfcP=ilZF7t>DW z7jS75Jo~ypOVql{y4r13Vs*^4HKg?}-?1!jlaNDkCo|SMBz~Xj>wfsp%czVhduthM z3*|{;&D8?7DC~y+mxB=q2Z4plOQX_Q7 zH#*UTtMR~8q*>n8NaPonYKl{WRJ8gs;ivp@b%D#y9S<_K1Q~+G3lLG2*%JcOt9wMe z%}l?VKG{0?9XK*8(nY5CvsJ!&EznGkDku2JxEfF3H@q8Z-;(c5hTp#+MDS8Rcv_2b z#J??;U!015fFLz$hwdzu8|c35;j> zZ2XDbpa;n&>5C#fN*}7sXb~a~mkFhe4GV*e4!^DqDa=n*DM|wtgot$w=gJ0e<4Ioq zY$efX`oSCNYX5B}C>Xb9TubL7^s0IfBSOf88*%q@Xr0j_?v~8rv;^hXM!E)N5Ke`{ zPv|xLlr?`*p#-?tz!DW$$peFu$l8N-CWiynqR5=@BTQlGih2LqAePJN3l( zsVE!>Z!m5?dG4TZJ;Yi%4+V7gO{2^^-r4Vv1mmJ?0>Ucq_B1k09VT3=MT)iMX6tpS zneaq2V?8l*ZJk5qx^2zAoGQH*neHjW7;hMpWA%M*>sndSmm2;~HR_cMr{SPkw^E9n zOp^<@C7}oqK`xsHjdo8^PUQ%dx~ojF3qu{4&YNCuf?fYBxCrLv zCK;`B(o6B~%`=Ug7Xg$mmqmDpFSWwME=7ElbEm{i0&|`l&iK{?1?5Efo+$9pQW!N4 z1%GWtK6m8{^jp5d`=Ap^r_MHkZ1)_0aEb93dh^cjin;R+Wih6%{1d_|(`WzXc5a&j zK5EHiH~2NY5C&FNx1@>eN08+A9PxV2gT!m@?ZDv5ZWiH)hwBB0K?~xFozJovTs~t( zgY`qTVTR9+jQEh*_D+@A>*KodwXgSe5;~{T0E=N{shRE!tUTBsa}ymx25DhOfax29 z+2iUY;`yNYgMis*VU}}Vc}`juEH}pvkWP51BD^)u%uQUhigekZtV*|7{9BfrL7N?x z4bgLF%eqelvo)ZI{eneLhR0g1$M|nm{+C%v8uyHoH#bd(VAzc$p4@g3dYofl&a!4! zRgx|GKv!a_)>c_0FRaKupw?5lwySYDi`anxZ z_X9yij5U!a4)@_E?-%K7O@o49$-8*CMY<=Gl>y>YWiauw`N@GnT?Yzw9qPOD!FP+KT~nm98x6!PZV>SIc9n=bMW!mw3}0TK9|O0 zg}A;My}<>za1M8od8NWhRgPW?ynZPzz_fh9Y0hzAI1JTXkY38+tQ!z}dHEAW|Q# zM`qG_$#j9#H6picTIyeIE2PT!6n}!i*VHSdsjNktJdR1QZ8)vps}CH=|2a-Ds5D^i zl9f=>_^p1AnOpqBVD3y{;z>x1O*WxIb2BiZIV${M6(Bgh?Wn$xb#(YEk{T96V*H+C&T zQV%W%65&3e#3^pWOX1D${(I> zFkeaGX|V-IQ`f{Kh}Di>8a$83faH!Qu9_aQ{?=+axKf^?SE>93+9CVugVw8s*FVZ^ z3eUYOY)(J_Hky4rxPfB+@SHjEy}Wj1w9lIE?{vr;D+uz;jGk~RnL6GI_%LYKQ@ORy zyd1-%kNgC3X0|4mHwR~T9wb|#M6|40afi=jU8DTk1r|TpJB3X`Fu9+;n;>G>I0ZVa zrz{-mUCTB*bpz2r6|ON>KTy`q_sbt!xLfMD{lQ^;tBV7)bxDQDzo+SLi(aiEGVV=#fBvV2 zJ@@`;vjOe@sH;0I>@|fuVF~V;!xS^4VQxehO{8uG#_*0vgt z?F`zMq{FNbNtnr64ep5KmSxtryyP}atNZ!)AKO+67wv;2?*wrKxp@Bu|NVV32Tg3# zm)S$*{|o;WUzJsId!vv?uE__pWPXE=MS40Q#>hv$#-7>`{)i&q_eDDiJ z)-VUcsnM;jwV7T$y{>0?0wRegPRp|3&R-$q1R=fTFyOf=p4n_^>0a{xcT&Q-@99XQzqaVgn5OcruAlbdz70rY375>*rK3JL_ci;@zqr z(!EFv(4}h5Njfc5lvEQ-Fb4I&#btPlINlt>^LrN`TlyI_|35L|=k-(iOm&_2(7;)}A}+WQz2_fnI6U6QG8>aj?h?kGH8odKzhs+nYs2Q9?4 zHOERcZScho4GR*((#dUx7I1u1)l_0~fDeqK3z6(~5!Lj`VJ&cYQ1OoH5$Q=h(7}+y zE0w#dB2iSv%f!bhe*FGovQts(uI;+QSkE=)Qpr+r4vag>>Cv7sHAErwO$A3`DZASS zZX20#mIy@zq?9=UkBtJfxq8d7MVJ&iMbfJDU*js=B%kLfxG_KR+w5txQ1KfY;TPX? zDF`TE6;kd%s^Ly`nb8_7R@-$aL)ujBh=c&$AUvl#tWPXjNAs0L<4K`AM+ApHqpaqkTyBk8 zo=|0qOVk(QqjM@bayO`ER%00tM1jb+?1WW3zsD|>?()Qrw{O=Q%6l~IFG;5Z=?_VN zq4ia$otlMjzS*r^WYsbDP_jZER@>Pn%|scfw0$o5X1j@V6u{);*u_s)#~Z~m2H+sW zxF6C4nXiQbb`on4j$H`Wf)yNN)XhjpG>s4(K`lX}PGSCUYi` zIwNrT&9-`=&kGtNHo&v>h^LbDyi3H^UY(CMK{tM!`)sHB607h-3bM)j#e0wE1}2L> zgjXy{Y6R)`RVFV4MI&|Eh6?KDh}o(rc6tqxr;JO#tbjkX!s1z7TKMPDsv|^u=!-FW zyouIQ3x7n5JDCzNOruK_;^&lQNm8zc3efG;nIZFLSQ^Rn()72r@fBmB;_TI=qA@)C zq!&2O*t0_ZYzx=GfYz~#y6+wjCT}o>T+Vd>RT&wvC*?7k?}PMLLeICDj)HtkP=s|a zQ$ht~pUoJ%M$1#sGp+gYEJMoqAd!>?27+`&VrO%Z$@Eoq!?+9#)$tEoLRqF0OK3T9 zLSBN`xU}pf07>+hgD3*{l;tclby#EAOj1KSU5Xc<9^3*%0IA7%2FjJ@rh!A65geLP z_DLIqB2^8jwQh6*Kf|g_+_usI&sTQnC}JMa9~miUL?O-dD87j1-eVT!uQrwBE6rB8 z(ksc)GjEoW1cMLgv&b4Ioi}ojE-=T;8@v)0Ft_$t{AW3Ii61bzZKMtdk%=`ZCm4^XDvJlU7vWVh7%iBv3qBq z4u%Sey+_rcjD)JaWLAxi>Z8X5Zmeruykw8!+75+rCbq`f);kA3MeR52?CSQR}@ zvR-l0OuiPlB)EZfd&Bkv@ed&$1bvxi8H1Dnl=v~3fzdKo{0}p-5iSmPn^#Ef*yO$^ zSD?E5@#gaf44z%vB=WqgFUUHIf7iPG-tb`{|gB}@LUdxNXXs|L? z1dl?cXAOnbqJT4c9NcHTAtKYjQC?}b*;r0m-hG|`Yk*1ZL%UH@whjKW#RkWt*G@f1Kyf>8z%`?lWmivIG@Glu zFl|stqYfSR`vqh7at&p>#w>vILoAG&4l*kpcDnM8(==;9%O}%~9rgw_UYM?xK zk1n?JM7Vj0JYnuVL|(XC9IZx14(PW|C+xKp{421)q-&DyUI-Y{>vC4)T_C1|84y-v z!|+FhY$`OX?X;4cH~E!LajDmB~+~ zpooq@8StqRE>v4yj~1jskaZ1zrfN~+XM@HCRAQWk0b@CZO@1kU+Kavp@7Dvm6h684 z^4rIyS|G$`38v?$IO^;03W`tfi^pKM_s!U#4({%E5y;XR!0IXcnjwg z7VVMErLDyqWhQ2~QtBd55Hm$UWbI%(7ndlVU$R}8NJRr{ANI8hds0F8WrpLc8IS~{ zs!SOTw(`|LXh4~4Z;c>T4`hiZ+0?~rAVg2xGh-8TMYnXQ(qzUUqe{ z9b{tAZ5X0?bAB98Yh-{a8m7E^+FvH_hA$IN25RWmSzPd&Ig`dpHzBR$gzM$*~ZfS!dkEGj%+ihMR|>RR!6 zE^5l}P-HSWi%4qK=uMZB8NdF$!lC`S5wtjTm#nF;SmscOvdTlK+lr5}<-wDgx2tS| ztc?t$*|A6z@r@Xc7B|E+6eTp)CLS%*!Lu6qj8r6DWus68h`RUlIaio~bgJ8ZU?6TM zki~`~ypw88;Est4M&g7ykI9%asIZpkLsli$5*;CWs={iurds_j>_*U50wH<%8q%^v zk(M`70yjejRRuvGD#>b0bA##}sl{scjC=zw&U1M)7McC`@ScCaSe5v^9oe+_cUFh) zld0-ZomS2}%r;Hbzak|zVdJu3QW=7WkL%`sua;hr74hb0?M!WdLK3nO9M_RG5+DU6 z1xDqmP?F1-w+4`25|IZQVi*yqJ#cz%Su~xMRp)Lshws(47W9@bDyDw z?MQjmj^A)zm`D>0#<*B85yzi!F?o(l)PYWM;G zMq=1xR84sW5B+S$BQ$f(tntAnAIf2+z!Zu>qGKtb?|pzl3Sbv9W@O~!#o>lPO=IFD zx!~<@>{a{G68D9S-aH8o9iktq=WU%yjawgFC;MT@$&pZscwWwo+o2#{w25sT? zYR#<%R}67+q}?--%zSB%%>cR};DeyD`UTyg&pJ@)sQWQvL{98h3PUVEN@}jEL=BhZ zbQ)xh^Ni0Fj7gnz-`p2Ct|1!r0ZwRw#yIEj06Gvdym`zH4lpnptd9`D(xsghGAHN& z%`2sbpj4d(n7EUrIFRq4r>QCr4 z%)gk+oBa!D0Hfc{%q&H1ZlLc6)mTYOnIgE^tGuWtZ4;XM62;99-Bu@c0$j)Q5!AT_D?Vc-t-{x`j>2mSe-Iz0uXtF0$m)IK--EworC` zBSo@KV7ezBhIqd~WZ?%-fJNH0IYO22jCs_Nt!a_C>?#q5Q9AIjFWrbkE&(fL7qA$> z1<4z#PXw(p5wvSGokre+zi9?sr%?Q%$Murh1OacErK}VZI1#2{&9AZoOb@#_0@mva zs3Y=u`9Bp>`BD(IIXKhkkYu)(QI%CtN1z+;`?Y^)p*7w@>b?DX?%vFPtp3StI|#O? zo6V)c-0Dc(|IiXo!;#ghsYY#+%(qhAoIXQ96ptaeXSXnpc0clq2o{K_9tAC9VCW*3O zuKCtU7?xK=+L#x2NzD=dDpD5F4sj&j0C-+fv$LKrVdmD`km%)UOhK{EK{fSi>^##E3dtD*DLZ;INudCYL+$|bH=@pOY_Y}^Y=a0 z3fkrm5%E8ek=lvy;vnm27gc*E7b8qo&g-KKUCi7sbLK!&bB8Et3Wuv7nv|7Y1uOSW znq1jUB<9?#R-LghBK&!aVdT+A?RYQliKV&IeAtsI9N(!~)nkMo z?jfP`DD>gL-HC{CS=XAA%~elO3G>u6w^Q$iDm#uRG(=t+8&YV|&q&s!KfIjO9l+Jq zW+nvU`^kA6g9zNLOu5+S_Gs-)Nt=0f(w9$^k;36|$rfLRZux({`}uZr>Sb-j7Fh)9W~CCBbtd>!I+Exib%-d8X?F_+p9H#4vp; zYjE_hAxo9&NN=Q;iV<#e4r#y#L)5Klczk*LN{vygTxsDJdqlNoxT^GZ z*AB7rXli}?*JROIyD5s{3p1^~^Kbc|{w>cLNKE@hr$+Q|o=1xsoy_SQgZzYBYYPfE znHOB$(>YAG_8C7MT^qV2IrWSdlu4eA^`jVPA5Rw8%H{CuhqZ3ILv_u8DbXE71O_&& z>aIdgcD_6`zIyma+zDIdOVksCx2_HhCUCa!K`66Pv;h^IIt<@97K{*Jpl?H{H&a1L zjo|dQpMIUR4*jqXmjOO~!sC9ogW5^QL?HXw)FDLkdqhg}sPwc47N14%C^2774ghp1 zS12)-Kxl%QZrQwGk%WljMRAAWC0ZpTk7}@WQU7fr7WlsFpp1HcC%pkh2y7!XTQ>U{ z#W=Z;OQ#i~a4R@&A|Xl#cs$sY_t8r`?2S5xJfVt_#i>6CJchAs$|1-Y?QnWGM;EKR zmGyY*F>bC zzg6XShWKhbx0|{-Kwof|Wa4Wi?Cvw%BW();PkyE_yq>+C*#7sXeYgu+oX+bsL5rgB zRyMr;X!~f8V?f>b8*gYift#lNvnwd)JLvO^M_YgJ|9oNV<(gMYZ;%hwd?Xa%XOI7r zefOR}=eWdVUf$iqZ@sL3bo-}XqvBlpjA&}hr1<&st6RG-ZdYv6cGi<0;%8z6+w%r* zF^nulRSwjMcpL`VhC-2*t1eNKjUg>Y_y0_~_8nwV2Mh;%eD?TamN1T14Bt12IxPzo z$xCLd-dk~REl4uXHaN~6Y_yaqyfcktQ0no-cpm)o2@FvTdlmfGm5BCU+7DXor@w!* z+yNHO1-Zy&^Dye7xqLIvktoCG&!4qh!ugt?M+z@>L~Gv&H+H=K7%U>x?jG~rt??+ItqlI1>yI||$XOyUe7F`W7OH&O1i>&MdC zwt0dxuOfq)b5{nLJ`I+(l=pp$4T=~|e=1{Hm?FFDEIxh@rPbi6n)g9Ee5$UDih5rd zx?yHZX22iEdAV#uojRc^iwZ*kx@RV3*F`!RA{IZIdlOvysS^Hu_U~x>`Crk%Y6;OV zi(O)%S<=M_zjGGvKELie`D9=h=9rI+rJf1N~H#?Rq16ntJVu6Nwu zRHxurfSPg#`-g|1eQpe}oSL`5SU{qiT>Kth@$hQjsOpK^u|r-`)yMsef638Nv6Cxt zPoB|SS+H$CLL6lUP`x90H}Gp)vAVQm+mKB%nuXlxbVlYReZS9)O}ONzeWHV79*XwY zr!YsN7LD*2f?DZNu1uSN2qh8bN(8osh{Q~&ukj>Jm`6w4>oPiq>aS(?nZPI-d!Syt zfJb5Eyvxi!gS|1QpR3W=l1O;_6nh&&V|EK8>(DzdGJM*!*@@(YJh zw@Xx_i~ln*O{P?|cBMy~B}170ONMgp>yX|&U-jzq>gO*tugLtKlPcp8wFXv9s{;%_ zI7S+9g7HO08q9`>zCV27l7xNn_pu#pEpKyf(&pJ|Cxxfe8jp=IFuyao zti1jd(5oJAYR4p6h;FHr_!ORnleu7?(XHq0p7?%GH94l5T&S6(B|MJVk@uRkg8r`4 ztdztS``n2D9QONUYW|64UL<2RO{$Vi5b{ddV81DPLG8_BY%XBRR#>i2(I$`!cg@G3Z6K9VE)UPhYtSDY5zzjp8_ zxmMY&^cD&t5dU|Fvzuc6+?8ckg}2>IEMET4)_!UA^Z8~d?`+vm6Fh1`x;@$Q=0}IR zq3p7UG*M$aO{8Kkv@+JFW`ZX@=p|Q*Jx-Uk+_GeUcZ1&;I#n8n1<~^{zvJSF75dSi z7XEI)g--A`J3%Oq)%Emk1Lf=csy_;;(|)B5OMUvOzFu8MKZFOzsg3htC1|)+NS~b` zNAXnDGl%}^9@3M@m)px$XmRubFG&-otFQ7eXxKhY=SfVbDqSQ<6rdU6wOk}myD51k zl59z>0ma-bw6bK@OfpZS8xlmmTK`s+2sa`5Ct)xFarigWP5cZs6Kwcr^#OG>4$sKG zdid+`kUGCJ|B)5T&UoBj^hduMP^9+FtbK`vw-R5kw#ZrET}?zl-b{!?FZ(1XJEo4B z$3BnRhQZUy9(Nu3*=MiI&~7b#|M%#aOWVxtErG7qEidvmBheQ{{MLE2c_q1L_Yq}1 z81|FwCijm`%%{-f@wCb>?{|tl=8&Jq{O`SFiT$(odHjsJK*`sp!)`V+2XB5lq znQNn)K;Mnb;i3sWV2k;iUnTM@NYd5LJ{sWk)=@+IDwt<1bkuVhQ&>D;2U$+4lllxNT|T zlz*UJXImqjwz_el`r<1InN^A5;_rvpJX(lqBrJE#;bN0}Rd`;K<2p6Q^n_q%kmRHO zAHR!R`Kf8iKd3unA))eGCi4` zsOfBtyKqjB=Q}}=Cg$xeyBaJr2LA9+_!1WtG7#M+T((a{`N%LXDeI*CMh(9gUJbA> zpCk%*dD?7b{K0HmE!4#Z0G?&F&UMJDq)o?yEbkTOia23)x*De_e+s=X2~p)59y2z( zGF^)0ud}vSiPQn${rv*>d#=q6KwDd#tSSclX47~!8YHhH6ZNweBH1I~S0k$niViL2 zAnz!+2eo`6aWV>mp_Ae^bpYw|*~ivT*8(xPp6_lWcIV;ZKcRW@Pr8M>wWF# zHr)B|_~;NpZXqta1UmEy#HyVJ7iYEQuG4Lk4HLzwdt#tur)Q*2;Plv30RP;|98Q%Cmkl35LMtwZXgkw7a8CQM@QRfd7%0%Uf z*Vvs#yNFG@?ELQ3fHf{Y7qd|>NvA$Ml(|hCWVL(u(hf2@6ITdIEj=q&&JJ+Ot`nrm zsMslsZ9z_>w`+RGYD5%EM4FEehWmygQY3osQJ*d-Nj+AnORT!`Pw$c(emyC77KJ9u z`7OMl7AM%)@0M(hP>?lzlYTae>{A+f1bq5ZS_sUd>esp!X<(Ap8y3qKdxX zP5f{Zkrvu=Q;d*H+<7e4@fx2u6lX8=iLf~<&S@+^nKYP&QK*s7VG^1)B*KQzI8@I; zrVM=#kvC z6Z7=cX4T-+PFm?QtBB-od_X)Spk>?CemWVV5*YKY-QesUBCOF(w%-s{f&Ttw5R&Y8 zUtDozm7g^FOrDpN+KFrkr{!G2`S)F+z-C2?%6(i_JOznP;71oipM#%#j||N0rOm92 zWch4t1??HrHp!((ZWSNAi>9ekz^VSedYAdaf8vacctrXC08>D$zroMP1rydKQ6YQy z^r39a5Me2@FhsiR4hiQ9In+-!7GpiP(cUbVEu6!60kRmwIUbFwO-+NK-ZseA0Yioe z1#}WZYZnr2OM)1VWlMZUBfmF?QA?Y`x5aphAWhN9fpV5;3}sD%#8(p`O)*@^{bUPc zNU6w?R;IT2sM)0x|TB395U*SOpD}y z){yuu1c9_^k}I@(RMKupx=}ydU!;0Ah|tE8BO-`c$*#R2Ih1s0xt1^#G+V`zh%B3# zWmRi-a86`(J2HiR^eMHh6_pks3@xs&4}=z8^R zATim|m+U|+HfdD%DCS=+WZ#m-Lq49=HU!cg9Hq~HRZfM;C^R+=kdanf6T~4o_!4?o zQz64u(oj__Q!*ixaAdTTpL0PZN4I_@oA%-z1L zS<#>i-ys)jAj2Xj4U>b1b&Z@Q<)ER16h}k0p<6B@`@)j*BJ)Eq(sJCMu@f0%E7~UltE|X0J74TXk8mjBcqG1mO zB!F6D4EYPWpaqLqHVs3xEmR(=eKq&!G4rLJyjJ!qPHlzbA3dK!?iAZ$c#!|U=R{I} zMmr_gr5Zfl!?Z2)YA-Y~v3%Q44+C3<<8-aqRvBiOxnX|kyyJ%WO6D}5(?97>C&sSZ z$`|U1KOL% zL9yM?dMu4&5+PkA+oDQu52qG(9Dq$f?MORl=Ix-{VY-ECh{&l7GQva1XIwCTTN@%3 z3qxCybeSA5C`phV0?ygl`yf0q$Ic~s^)9gA+@Fi{K(;w97$Q7|D3lP0qhD8N)fAZz){L(%a4zFX&xcl_;Y(Er~ z;M}?i-+%aUy#HvJH&?TRi7#Fpo}7O7&JXABRZ&oskGHcPg6Uh21#O2Y>xN8+PWC6k zM7o$V-3~bk#$IYCNpDDJIY!Adg-ACO(lO>iF%U`y=JAN6Yqb9>?K{lZe5Uu(I<)7j z?k*-*ppsGQM(pyx+}Xi_i2SR$_d$_P@0ANt{rvO8>;y|Ucs~0P{k)gr{jbV|sM8)~ z#E;Wp9?{7r_+MNB?>z6tO5-?W{Xb?dm&D7rzCs{LSqtolV-%L{sAElCkr@zVF?= zesgv4CD>D^k|kXo#KG0UdtZ5c2rnNZ|9Gn39>)99>zXcQUWqs*;**F=DtjcBE~)0< zf7T;pAMp1W%~Yq2YW*F{)=vfm*$y%^=10?;Oo!edjIt6^!n5~{CxNB z_y7reB)?QeMM#bgH4R53Y1B~C$ql6t zv=0p|0)j#=WW^de^mk`JA)HK?H|WXoOAYcauCgrLy^Qjyp$&F4MIlL-lLukhHv5{_ zS9Y|WK1WF`!*3D<7biVzlI?m~HSUWqjHF$FXh#(xffhx0g3bt@B=RI{@C4a+^0l`B z!pB)0l#iN%V3!O-Z-9SZQQVu-Z>#5yl+VLTu1E(0=@UCTXZB3cFNy3+ani36?Fq=y z=%TG?Lu_a|Q8bNAk3qbOG~2XHmz>5}^5$1~;tnHk3{lQtzo_WWko@n};p^k`!T#ap z_3_d1{@(Q=ef!NnJ3c=8@N<8E@8^8HcYpk9Z+v{YcmC<#7I*O{;p*JKIW)dLi1u-O zcz^Kz%iELS>+#K?=RdUMZgsu8)PY>%)h$?|b*>2k##*j)KqMe0VF;w?Ff@_aDC>{y5to zXH;)0RFBRl*6S~^ElqrD`tkOge|&g8vHi>0*XiW@m(Q1zv&-ZA!@VyDAK$+}IoO-r zIG-`|Ce)B)-C%4zZCFF2t%ISxX%Der;ud(^zM!I+re!u@Pi|ik9@cMi@ z{`8=Kn5bXgUS3}A?@z}cu%?`Tx_JX~_@dw6zt;9YzIgAe{^>-$IeY)Z{(5?_WrwUgGRmmym#q@+DGX+`tjys@AB&V z-C=0`xSrh~Os%)-kFS>puh91&*UBgHt9f!TK6#Do_wSBm<>Sq+duD#~!|Bh<{o7BT zI=>pfI(#Jxuid?);N6ks@4t60u3dbMoyiRly&a$abiQcT*_)f=>nrWd@@DU14cg+1 za(?ycyRM#yt{&s_&u>13=ePdHw~wJ9qT7qRo0|_`MQLCB;d&Pk)qGd=S7$#^=)FF_ zonF3C$3Wo#?dxwQ^3hl4vwW%lygT%5bU!loUIaJTY*`agb zJieE|+<*N%ySWzP@apTG`>=dGt|@@BuPo>E@e1KAzgn?d8~!USEFy{Qm6j>g@WA&12EK{CH|p8l z*S9yHjf-HtM~U0^W)oF_4x9``0b0iccGa-AHlMe@x65w%wCy6^Qx%@PH8y(r#N4mOuWPi4F>HJIVUXF$1`HM??dj945lYaK|JNT%B^Xt10 z_wMXey0e9^(#6I7_^pCpyi;C%J{0uz!bNbstNy$^1+E-#^5fOR=eM8Dx%(hr z{J_Ge7xt@91`3q;)0KJiC>?@E-H7M!Ki=QXFD}7bK>>Tt*~5nm9RlEw{@cqr8V8p8 z);zQ3XBR)BaS+=`ySw^%@cs2%-oKrAcfiH|!}n9)y8d~18S0OQF7JI1qc7JeHXg6; zK5Fj#-6!ej{rIaQ?K{%#;qAw_v$?ltem2hU-q^+uvf25K`T6$4&%-lCxO{i~!wJOG zlf$pC6v)Z^srdbaa3UO?o_skvcyn++4*lcTkDtHaKpH*%qQ5$h;;V1|-u_Q8OY@a} z|91Y>m{^A=ADr?2rTTtbjw}x<<;Kc-R1E| z_&PW_{8DtwZ%_81JKk${HGMjoZ+=@>)2E~P=C^eEYh(i_hb`z(4e~H+u(nN8X34z55#o z^d^t*KEFNry7&FrKU)Tq)Kge&s&ZLXCC#RaTdv@tw3FeFISJyuvi2OXie>lBA`TQV5 z%N<-9d$GNHZGCY4H=!<^Md;$2|J^tW!s#37^ik5}(@Q*2_K^8-L_wPSG>{%bf$A>+PkM;Mv^9N%ZPY!>6^YQ1m!BjXzW(~~`N!+% z^`(DwKemrQyZb+tkKa8}@;`t1I(=t-urCiF_QmqsQ26oV1%w9YUryiL1qfd__6bXL+Qk^}J$|}7xt1nxg&*VZ(rfc%a{o5Ae~jPX&Wz6&;pORG09x%F?Y_Pb z;<4r&oE?6D9qfNPkuJY}xjPa*zd_fZAM}Us=dX{I-S3~IKzX-&hU6DNK7RT1V*DaF zzxoLJ5Z@g5U*5erli%DpyEpO8D?CA6N$?g8_gMI#SPx+*MRh6TI z>zjw`y@@Mqv1}@{8RV%`_;+u(bea> z(~D0Bd*hQ(z5Y2poV@*VVxAvblTU|`d_c!^8U1umKg#yS&HKafY;N6$GRhUymx*s?SGw)&7b>_e7x1X>+_G!JNxYG$(?khynS)> zcs~i>p?6>2W6c!y@4p_+y%%4V$H&i-C*1!eI{f}{PkMF#V8%!9zWJ}^Pj9~Cy|eHY z!q;yn!p-5eYCU{;^J-TSy~zxp+U;KqtQ{kl97IQo2T=?^#aPu7)oeK~uj z2Kej+owO@zxn7~A47og#eKZFG~y{FYSz22 zd#Cqrrb2kQKe_*Y4*wUPeZSVvzkj-Zcz^rgzqiph|8n~C&6Re%e}t8H_&$;Iz4^gA zvG$KXN#f7%>Y?yPys?ijo%6#3H4Kys;Q}e29$tK%t8Y#&zxgLOd+#np|Ij)Wgb$AS z;dpA?ACP^Z7w@kgrlEX!b9wUiTD^aKk3NR`#?Q|`-+li1L;ZRF7+lEvK3Ml<^#1MT zk00(A<#zwAEjrVS$MA*zkDq5V|NY*px$*PIJjRn358n9IS79$acYdmt{@s?p zkk$Qi^x?oc#gg{%g?s$<#iJwbAAOjAd9$Z@H@Qv-$qfUGRGU$D6AUumAt-eOZs= zIMU#A4lw^Aw>~Vo8g7+EN+P8O=E3)U-=3OHkP>CfhkT!l@4s(QvYnT+N>ww}yARty zXJzUjgK-DNh}h)gJv%mV=3d8W_C}j=vdCz&nOyX{CXCQK7Y}qfY0=blz}KS2i$_vP z7rkD4wIbvGT<>J_t^GJj18z?4g>fhyRkMFO&rZXA!2?a38Ka!mY9!V6Y~FMHA}|_g zgl;|7M^g?QR<>z*X0k3!R64dq#-95Aa9YjsrPiS{^3}KUg`AP>knXN&Pw{%-AhUXG z@YuYU9?x-SHpyjbxn;^j^;Ua)8pnEDvu)|5O>6s6+&utSpVBGj3qONg+5C2p@0RLmGKQeM)^3fpDLYR$nZ%|Z zpP{LtFpH*ww9|-KDXg zRtni%8CjjG-^`v!x6h6fV%B2=(J;7|oYg11ZWWrDd?H`AMuSAvN_W6*uWe)F!~%S| zStu~BQ)97h{5-04`c5=Zm8XE#&DdB(I2eQ9L(5KQ@5Gyvbdv?U!0!>LFYIX~B_ zPg{$6ygWsNw3j8tBOM4f^UcM|&N=y1WvF#3%W73iVJFcTR0!iqzQiSPnbm!1--+Q~ z);cHS1KT}$gMB95!Sgw8t~}=b)mRbadgJ=e5;PiNs&$WjTmds!TyXGd` z@oLY9ooswvX~djnuCpw7^}UDfoR&;lO>0~~o>%Aek?l+|OSs$pD6wdDvddL`2|;8^WHLXNORnc>BwHB_)P>n-HN07_ zGRWGZJk9PH_>=8ju~;$P(M+#+eCy2z^<*bz*xgM$o|tsBV>jR4rbNOkc2=9!-fe-A zL$yIE?se>!q0Rl^C8%5feruBkpDV0)ZQ#ScUigb?U@h!sNGGGqssW8W7 z3MR5~o@)z^UlyM!Ts|^97JKa<+xg7PozH`~?tC^%Ll>LFHn@!|J5`0CaJoag^qqZ* zbV9%gO^6;w!7gJuovgmxWgJx|iBmPDA1m_z*E^rbO1gn6vlly`hg$k}_0T2 zr+Tk;J~K1;w|nCA?52=e!U)||GCk}UVb0-lfV1kbooQ8)iQw(j=umw5cBR=kWI}k$ zpyJwckLIf{cWHt>nl#|TE4-SeTjQ(JiqaW_e5#htz>TZ4UTCg!3iQqyD=twEf|;#laUbhT^^SM!=)*teY}G4@*hT%8zMa~to0;osBt zpv9aW(zAA~WG#=WM0tKf`*zysA9pw>sMhD@N@?A5+a+B$j@{g-H@5mEwpx@1RS0hu z$!)q^9mQF_TF$QPyZp9Vi05W_CTd2JL&e4rANtau3dwG z^{an8Y)UkC-ubC~@f=I4lbpYs=8_wp?oaWkYi26O$+Y!JoE+(T>QrnW<;!(%u-v2i zbmGDYx#ek7D)7!ER_&yWaeNueR94oKPs)QywUPF`Cf=URKuE?3adIcyGV!PwB~Ix)?Sd!}l~aud9-#u#-=gN&UhdR`yO=dsjcQ`;=;c+jv)8o52&5#Dn-oBjE6IbD z7bgSU9zQfdep29+r{~W8rSz2NvwbC@=2ERyu2tY#8lFxaI*Ei{kS-LsGAB1S*O89v zyUo@CJUB5v^oILbf4FMeZntq-*u1&7D+{J3>BgzhL_Tp)W9q8CuO+yzZjN~?-LNXl z<}z0*cYve(@wQ_hZ2QzxEBPZ@Y3F*&+Okfme%zzEr?uOaQx8{}zO$*BIWC9G$}&A` z6$YhstUlZTR~ry*ZMNVk`|4vfNKVhQY0Ss~4Tj65saM#vxyl?}&2n0*&^zX;bKY9bsmt>z zb1OEqW#$*hw1&`8%Y$6RsJn|ZQub|>%BG<{p38|GvmFkm9pB>txxxv-_|wYaW<|oT0aY?B51k2XyC(-cmHv3yHivg3?R0F&KO&F!nRIWDC!cd~$5*6z|o!o`^#P7Vr-tafNv`Wjhv zhSKfsN*ApeSr@D_w`d9UBwg7BzXAc#a^sckO=Xauj{xtlU~1>~4I_`8n&(PqJAm411Vw&xW5yTcxNRw-3lclpR4 z#EPsF?+6GuJZ+)*i#F9ru|X(tgkU3J+b5Eo>i&O+#DSY>E3ZRU;WKtwH;cO^2iqvc3VjdE&bgVWZ+R5!g%OcqL+n5@sbIw>{^PPJC3sU|3|J)7q=<}X#X z+NjoMi&`S54l6X-^7E;~dQWS_F4%ru&$lW}kj5Z)+*C!ICHsfQ*)Jcz`e&~mU*~tb zrg}WN9eWcidh>WE)~d#)%r6}l<87<1qegk2kNJAzw8pbtW$RT?qE;&AnFdB(h|*#~ zj@9C}C`zro>UZ72w1TH`2+|I`?ZvIBmEo&KzqD&?=O=5`vD(HUKCQP}sOh!G5Q9!= z90O)*ok7{*-Fjf4z3{Y^o{)EI8n;;l3-7KXW$6+2WblLf@$ z>@Y{>tVxRLn3u53_~uxftd>nup0Dd>cBgf7+0&f1lQFNGTPD=hRvYb>*;d@OU+!7D zR$*FF3xh?TwT{_tnU6}R)5eRH+rx%anp)$yT`e7&r^z;XNX1eybWYM)b5l$7!JxMH z{q(4HSWmpgJZ5gaQm?JY*)-3F&WMrDv5}bWVx!f#n99#;=R>b@&T9TzR9$D=-=}aF z#J=H{C@E(xoNvv>+~00oUewQponF$MO`@FlNBU$IOAYr8luGHf@qX-&cDu>K+ca`m zU48YZvvaZAM-HD1(&aJMcil|Vv*@tjJB$+9wAZg?DptufnwkE>%R6amN>Z z5T+ZnL9RE7;w$I65}RG-Vgp z)lzcbt88;${g&TZFjw0Y$D@j1iOMw7+-N%vI=f#)nL_Ds>edgHjG1Iruw;9d==U_X zKh0+=|HvVR1LEChhn~wwc9yn|^}kvCr*PHooZ`V!iEh5bJ93W71!j zvJL0FcTsh5ROhF?_tkGAue~2{)<d^T~U7wPP9?gJ;P-{iUn2lYhUUDFWn;aIaN}UY*n{jhJvU9tp)*GCv<>91~b!V${ z+c#S6L_Y4|-rhJ@OtQ;YR@>dSh>ywkC<#27*HJQ6nKXLqO8tW8gi)KMYJPUMRgJd0 zD5ekFL~AiWG~4qn_`$h_;7L|!S0MZ>13zTzt>)rXBHs3Rn&`9Ya@xum`ZAjxW50qM zE0g#sG)oPSy-B`&DkS#Fsu7zQ9w@E;s8t3`?&#@gR0eu-vu|d~@#SD0+xJFAJ(*h% zlBBpJadYO0LEbIvnXWAkbCn}1$=Y#}U(I!=Wo0UeoyWz)w9*}S>qFn)Rz~?e>w#P>hHTb1PvsJw<(#QibBdXz zcE})2EADefPOrw(c+Q3amNN?#<+|hMG2XA057r{Tw!ZrF_~I}cpz6S_^;&Lr-_+O5 z^66AxwsAJ@?)J%8H&@DRtJ`k6l`9+N5gufZ*%Z#}qqE6R5I%MM{A9kg6ZuKU$(zKB z;q_>6sEkoJmu`?r50~3&qFEoYOoI$-WTu;gec|M<*0C%E^c*;9lk*%sm+t1R?qEFj zkJ%WQz?>7S70QdcSFerIiE_hlb#bGVGu3o|Z6foyag20ak2lp8$Yy)n8Se@1=mR@G z6O$Y&G(eM9aW|gX?kfG-ygeJY)aJfe?*jz=M529Qo%&9YDj%=bv;h7?ZLKfr1*@;e zaktZ6XX%I?>WA7$jK`hEIo77q(KJlCo0eds z=DgNlRu>K3TP>%?44?Yl80!wV*iVf&hhp~ZEOUEL-S|B)u=AeQP1Rdx=c}KrEb_Jb zvN~LlwU%wyxwfF3CNe_wbnUP~Y240q^-Ufe?967isMv?r={)YCd?wRP)N~Gb&?mzR z2P0zV!U(;`-Y&$^;nRUHT2hoMTVUkiAwCNf7+G1 zEDH-%LD87x!jtVj$iDQaxRbjn!2njJR4X60A* z!f~p&+KN+a+n}jTugAL^)15X4S}B`$E7Mw~KN>Y+C2y`yIj#-MmTsmCb)&gn=s=6n zWQF&7eN*TQGe1_n3M-vU!}(m_EK_>0`<}p)`X*zP3TmDf&Dm5tIbEBS+Szq>SOkAk zAGR8Mz8>&ItFjp62BT7TNk+MHyWj%jW{^iaQ#=AIhwD!A3_%j#+H)53W0kr$9(e4l zzaF0IsdKS3Ja*k$rnO)AmBeXV?WL1moUf_6JJwcem2I}Ud~IBAtx&JJID=DNFVE9< zcMU;cp<8xGhrw>JE#^qC(6rD#SB%XIxly%SJao>3ZnrU*W~-CNJ~0?>dT!B7ijFXQ zIoHe74xp=#gtW#Gebze3ZlyyH>iWRr&0g7blBk=X#C@^XV>Hq1(Da%vj&xdSW=Exc z(r+c#d3`ko4-R!kKg}xSUgUD^ZN$^evxUDAyA6!+pFhj`!9b2-R*JG&kn_6?4$%O~$#lwD)j≪Cwl>{u-W+ZXj+GmViWP*O53uS;S8;Hx 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

sak!o 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%0Ax=PGj2Zro7i&*t6RvEe=yUTe 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∨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�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 z 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 QEdOKsfLFvygj7dcSY!pHR3)j%%Oz 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 z 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

Eyt?81ewjFG$R&MDx=tzwW7TPF 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 z zhyH0fzs*c^)Fw$(L1+8_tK~9(v|Qo;Xt~O_ceFwEKII^F{r}Z+`9E52sDYaKbv-0jAgg65#JuTL2kNF`?=1X=`jxdfA5+S~W`Ob=f#1QK1#vd)0YSS5~FZKSv zTJHWoE%$wbuu5|#;1L+sGbkc(Wz+Ga<;woka$f(mTz8iFJKu(Du<72m^S9rc^ zOz+Z@TqXAm%S!#IjJ{PuaQUSYZV6=SnX}PXRJ=4}z9y3&U58uK9GVBSuz($cw7Z7K zH7qtMal<1QILr!QnTkdn@WEp3;a7f-k44utK}|)S6y9rYg|J{#LDI+7-yzqIzgN9@7NsRqi2Ptz6>VKv1<_hA-!2{f zKFj&v>o=;nepg>r;>igACKCLzU6x&xcFbV#vvo^@A&~BD>i6$%Uk|CTKfJq>8DMW% z5`Ur`{j=PvCeDXIrL=GNvQc&nH&n9Rm6f2f3-eU$a&4sut^mRvK0#o}(;wyq!_e)? z33A4q@A8z~lh)ml>#VwO9sFy^1P$7+k+3p(&O*}5#6orJ5{ZOU)@bT0nnJfaq_Od* zI@0Ok&n$12zp3nSrcP;Y3gZHv9FQj~CKx0EvGXozn(B*2l;M!V&GFDIs=r2Zka|T$ zb6jujsMobrrEc^d)sCP0;{|d?rjrFc%R!KQ?6I{nNK{THL*i&dE}SaVDzCR2+O)4Q z0Z4?8ShxD`0v-7}le#kBWnqsmqzT$c3>FvMyR4|DR_o zJ(0Fc#e4BG5W|khW+;~*p+2qt%*^JS8K$)xVzp^Rob$$|e*oJiF_pI2IPHEokvr|P z;F1VUa;ouIp);-BSqDtE0QA9m-q|aJZ_{|@-=!zbgGmhHDP^r_b?XDjGu-pIAWO@; z>#`$EXi&u?U+{P-P9mo&mBiYgwxUiPUzEr)0a4KCpMS(>Mmj~@*RW*;?%(fJW4DoYnXg~IemdWzGsCGUfvsdp P-}nSOS@|ZyqyYa1mI3F} literal 0 HcmV?d00001 diff --git a/docker/dev/Dockerfile b/docker/dev/Dockerfile new file mode 100644 index 0000000..f0f5ec6 --- /dev/null +++ b/docker/dev/Dockerfile @@ -0,0 +1,38 @@ +FROM nginxproxymanager/testca AS testca +FROM nginxproxymanager/nginx-full:certbot-node +LABEL maintainer="Jamie Curnow " + +SHELL ["/bin/bash", "-o", "pipefail", "-c"] + +ENV SUPPRESS_NO_CONFIG_WARNING=1 \ + S6_BEHAVIOUR_IF_STAGE2_FAILS=1 \ + S6_CMD_WAIT_FOR_SERVICES_MAXTIME=0 \ + S6_FIX_ATTRS_HIDDEN=1 \ + S6_KILL_FINISH_MAXTIME=10000 \ + S6_VERBOSITY=2 \ + NODE_OPTIONS="--openssl-legacy-provider" + +RUN echo "fs.file-max = 65535" > /etc/sysctl.conf \ + && apt-get update \ + && apt-get install -y jq python3-pip logrotate moreutils \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +# Task +WORKDIR /usr +RUN curl -sL https://taskfile.dev/install.sh | sh +WORKDIR /root + +COPY rootfs / +COPY scripts/install-s6 /tmp/install-s6 +RUN rm -f /etc/nginx/conf.d/production.conf \ + && chmod 644 /etc/logrotate.d/nginx-proxy-manager \ + && /tmp/install-s6 "${TARGETPLATFORM}" \ + && rm -f /tmp/install-s6 \ + && chmod 644 -R /root/.cache + +# Certs for testing purposes +COPY --from=testca /home/step/certs/root_ca.crt /etc/ssl/certs/NginxProxyManager.crt + +EXPOSE 80 81 443 +ENTRYPOINT [ "/init" ] diff --git a/docker/dev/dnsrouter-config.json b/docker/dev/dnsrouter-config.json new file mode 100644 index 0000000..a4e538d --- /dev/null +++ b/docker/dev/dnsrouter-config.json @@ -0,0 +1,28 @@ +{ + "log": { + "format": "nice", + "level": "debug" + }, + "servers": [ + { + "host": "0.0.0.0", + "port": 53, + "upstreams": [ + { + "regex": "website[0-9]+.example\\.com", + "upstream": "127.0.0.11" + }, + { + "regex": ".*\\.example\\.com", + "upstream": "1.1.1.1" + }, + { + "regex": "local", + "nxdomain": true + } + ], + "internal": null, + "default_upstream": "127.0.0.11" + } + ] +} diff --git a/docker/dev/letsencrypt.ini b/docker/dev/letsencrypt.ini new file mode 100644 index 0000000..93647b6 --- /dev/null +++ b/docker/dev/letsencrypt.ini @@ -0,0 +1,7 @@ +text = True +non-interactive = True +webroot-path = /data/letsencrypt-acme-challenge +key-type = ecdsa +elliptic-curve = secp384r1 +preferred-chain = ISRG Root X1 +server = diff --git a/docker/dev/pdns-db.sql b/docker/dev/pdns-db.sql new file mode 100644 index 0000000..c182cf7 --- /dev/null +++ b/docker/dev/pdns-db.sql @@ -0,0 +1,255 @@ +/* + +How this was generated: +1. bring up an empty pdns stack +2. use api to create a zone ... + +curl -X POST \ + 'http://npm.dev:8081/api/v1/servers/localhost/zones' \ + --header 'X-API-Key: npm' \ + --header 'Content-Type: application/json' \ + --data-raw '{ + "name": "example.com.", + "kind": "Native", + "masters": [], + "nameservers": [ + "ns1.pdns.", + "ns2.pdns." + ] +}' + +3. Dump sql: + +docker exec -ti npm.pdns.db mysqldump -u pdns -p pdns + +*/ + +---------------------------------------------------------------------- + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `comments` +-- + +DROP TABLE IF EXISTS `comments`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `comments` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `domain_id` int(11) NOT NULL, + `name` varchar(255) NOT NULL, + `type` varchar(10) NOT NULL, + `modified_at` int(11) NOT NULL, + `account` varchar(40) CHARACTER SET utf8mb3 DEFAULT NULL, + `comment` text CHARACTER SET utf8mb3 NOT NULL, + PRIMARY KEY (`id`), + KEY `comments_name_type_idx` (`name`,`type`), + KEY `comments_order_idx` (`domain_id`,`modified_at`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `comments` +-- + +LOCK TABLES `comments` WRITE; +/*!40000 ALTER TABLE `comments` DISABLE KEYS */; +/*!40000 ALTER TABLE `comments` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `cryptokeys` +-- + +DROP TABLE IF EXISTS `cryptokeys`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `cryptokeys` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `domain_id` int(11) NOT NULL, + `flags` int(11) NOT NULL, + `active` tinyint(1) DEFAULT NULL, + `published` tinyint(1) DEFAULT 1, + `content` text DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `domainidindex` (`domain_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `cryptokeys` +-- + +LOCK TABLES `cryptokeys` WRITE; +/*!40000 ALTER TABLE `cryptokeys` DISABLE KEYS */; +/*!40000 ALTER TABLE `cryptokeys` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `domainmetadata` +-- + +DROP TABLE IF EXISTS `domainmetadata`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `domainmetadata` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `domain_id` int(11) NOT NULL, + `kind` varchar(32) DEFAULT NULL, + `content` text DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `domainmetadata_idx` (`domain_id`,`kind`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `domainmetadata` +-- + +LOCK TABLES `domainmetadata` WRITE; +/*!40000 ALTER TABLE `domainmetadata` DISABLE KEYS */; +INSERT INTO `domainmetadata` VALUES +(1,1,'SOA-EDIT-API','DEFAULT'); +/*!40000 ALTER TABLE `domainmetadata` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `domains` +-- + +DROP TABLE IF EXISTS `domains`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `domains` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `master` varchar(128) DEFAULT NULL, + `last_check` int(11) DEFAULT NULL, + `type` varchar(8) NOT NULL, + `notified_serial` int(10) unsigned DEFAULT NULL, + `account` varchar(40) CHARACTER SET utf8mb3 DEFAULT NULL, + `options` varchar(64000) DEFAULT NULL, + `catalog` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `name_index` (`name`), + KEY `catalog_idx` (`catalog`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `domains` +-- + +LOCK TABLES `domains` WRITE; +/*!40000 ALTER TABLE `domains` DISABLE KEYS */; +INSERT INTO `domains` VALUES +(1,'example.com','',NULL,'NATIVE',NULL,'',NULL,NULL); +/*!40000 ALTER TABLE `domains` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `records` +-- + +DROP TABLE IF EXISTS `records`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `records` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `domain_id` int(11) DEFAULT NULL, + `name` varchar(255) DEFAULT NULL, + `type` varchar(10) DEFAULT NULL, + `content` varchar(64000) DEFAULT NULL, + `ttl` int(11) DEFAULT NULL, + `prio` int(11) DEFAULT NULL, + `disabled` tinyint(1) DEFAULT 0, + `ordername` varchar(255) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL, + `auth` tinyint(1) DEFAULT 1, + PRIMARY KEY (`id`), + KEY `nametype_index` (`name`,`type`), + KEY `domain_id` (`domain_id`), + KEY `ordername` (`ordername`) +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `records` +-- + +LOCK TABLES `records` WRITE; +/*!40000 ALTER TABLE `records` DISABLE KEYS */; +INSERT INTO `records` VALUES +(1,1,'example.com','NS','ns1.pdns',1500,0,0,NULL,1), +(2,1,'example.com','NS','ns2.pdns',1500,0,0,NULL,1), +(3,1,'example.com','SOA','a.misconfigured.dns.server.invalid hostmaster.example.com 2023030501 10800 3600 604800 3600',1500,0,0,NULL,1); +/*!40000 ALTER TABLE `records` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `supermasters` +-- + +DROP TABLE IF EXISTS `supermasters`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `supermasters` ( + `ip` varchar(64) NOT NULL, + `nameserver` varchar(255) NOT NULL, + `account` varchar(40) CHARACTER SET utf8mb3 NOT NULL, + PRIMARY KEY (`ip`,`nameserver`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `supermasters` +-- + +LOCK TABLES `supermasters` WRITE; +/*!40000 ALTER TABLE `supermasters` DISABLE KEYS */; +/*!40000 ALTER TABLE `supermasters` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `tsigkeys` +-- + +DROP TABLE IF EXISTS `tsigkeys`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `tsigkeys` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(255) DEFAULT NULL, + `algorithm` varchar(50) DEFAULT NULL, + `secret` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `namealgoindex` (`name`,`algorithm`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `tsigkeys` +-- + +LOCK TABLES `tsigkeys` WRITE; +/*!40000 ALTER TABLE `tsigkeys` DISABLE KEYS */; +/*!40000 ALTER TABLE `tsigkeys` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; diff --git a/docker/dev/squid.conf b/docker/dev/squid.conf new file mode 100644 index 0000000..cdd749f --- /dev/null +++ b/docker/dev/squid.conf @@ -0,0 +1,92 @@ +# WELCOME TO SQUID 6.6 +# ---------------------------- +# +# This is the documentation for the Squid configuration file. +# This documentation can also be found online at: +# http://www.squid-cache.org/Doc/config/ +# +# You may wish to look at the Squid home page and wiki for the +# FAQ and other documentation: +# http://www.squid-cache.org/ +# https://wiki.squid-cache.org/SquidFaq +# https://wiki.squid-cache.org/ConfigExamples +# + +# Example rule allowing access from your local networks. +# Adapt to list your (internal) IP networks from where browsing +# should be allowed +acl localnet src 0.0.0.1-0.255.255.255 # RFC 1122 "this" network (LAN) +acl localnet src 10.0.0.0/8 # RFC 1918 local private network (LAN) +acl localnet src 100.64.0.0/10 # RFC 6598 shared address space (CGN) +acl localnet src 169.254.0.0/16 # RFC 3927 link-local (directly plugged) machines +acl localnet src 172.0.0.0/8 +acl localnet src 192.168.0.0/16 # RFC 1918 local private network (LAN) +acl localnet src fc00::/7 # RFC 4193 local private network range +acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines + +acl SSL_ports port 443 +acl Safe_ports port 80 # http +acl Safe_ports port 81 +acl Safe_ports port 443 # https + +# +# Recommended minimum Access Permission configuration: +# +# Deny requests to certain unsafe ports +http_access deny !Safe_ports + +# Deny CONNECT to other than secure SSL ports +http_access deny CONNECT !SSL_ports + +# Only allow cachemgr access from localhost +http_access allow localhost manager +http_access deny manager + +# This default configuration only allows localhost requests because a more +# permissive Squid installation could introduce new attack vectors into the +# network by proxying external TCP connections to unprotected services. +http_access allow localhost + +# The two deny rules below are unnecessary in this default configuration +# because they are followed by a "deny all" rule. However, they may become +# critically important when you start allowing external requests below them. + +# Protect web applications running on the same server as Squid. They often +# assume that only local users can access them at "localhost" ports. +http_access deny to_localhost + +# Protect cloud servers that provide local users with sensitive info about +# their server via certain well-known link-local (a.k.a. APIPA) addresses. +http_access deny to_linklocal + +# +# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS +# +include /etc/squid/conf.d/*.conf + +# For example, to allow access from your local networks, you may uncomment the +# following rule (and/or add rules that match your definition of "local"): +# http_access allow localnet + +# And finally deny all other access to this proxy +http_access deny all + +# Squid normally listens to port 3128 +http_port 3128 + +# Leave coredumps in the first cache dir +coredump_dir /var/spool/squid + +# +# Add any of your own refresh_pattern entries above these. +# +refresh_pattern ^ftp: 1440 20% 10080 +refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 +refresh_pattern \/(Packages|Sources)(|\.bz2|\.gz|\.xz)$ 0 0% 0 refresh-ims +refresh_pattern \/Release(|\.gpg)$ 0 0% 0 refresh-ims +refresh_pattern \/InRelease$ 0 0% 0 refresh-ims +refresh_pattern \/(Translation-.*)(|\.bz2|\.gz|\.xz)$ 0 0% 0 refresh-ims +# example pattern for deb packages +#refresh_pattern (\.deb|\.udeb)$ 129600 100% 129600 +refresh_pattern . 0 20% 4320 + diff --git a/docker/docker-compose.ci.mysql.yml b/docker/docker-compose.ci.mysql.yml new file mode 100644 index 0000000..108a1dc --- /dev/null +++ b/docker/docker-compose.ci.mysql.yml @@ -0,0 +1,28 @@ +# WARNING: This is a CI docker-compose file used for building and testing of the entire app, it should not be used for production. +services: + + fullstack: + environment: + DB_MYSQL_HOST: 'db-mysql' + DB_MYSQL_PORT: '3306' + DB_MYSQL_USER: 'npm' + DB_MYSQL_PASSWORD: 'npmpass' + DB_MYSQL_NAME: 'npm' + depends_on: + - db-mysql + + db-mysql: + image: jc21/mariadb-aria + environment: + MYSQL_ROOT_PASSWORD: 'npm' + MYSQL_DATABASE: 'npm' + MYSQL_USER: 'npm' + MYSQL_PASSWORD: 'npmpass' + MARIADB_AUTO_UPGRADE: '1' + volumes: + - mysql_vol:/var/lib/mysql + networks: + - fulltest + +volumes: + mysql_vol: diff --git a/docker/docker-compose.ci.postgres.yml b/docker/docker-compose.ci.postgres.yml new file mode 100644 index 0000000..b8c4244 --- /dev/null +++ b/docker/docker-compose.ci.postgres.yml @@ -0,0 +1,87 @@ +# WARNING: This is a CI docker-compose file used for building and testing of the entire app, it should not be used for production. +services: + cypress: + environment: + CYPRESS_stack: "postgres" + + fullstack: + environment: + DB_POSTGRES_HOST: "pgdb.internal" + DB_POSTGRES_PORT: "5432" + DB_POSTGRES_USER: "npm" + DB_POSTGRES_PASSWORD: "npmpass" + DB_POSTGRES_NAME: "npm" + depends_on: + - db-postgres + - authentik + - authentik-worker + - authentik-ldap + + db-postgres: + image: postgres:17 + environment: + POSTGRES_USER: "npm" + POSTGRES_PASSWORD: "npmpass" + POSTGRES_DB: "npm" + volumes: + - psql_vol:/var/lib/postgresql/data + - ./ci/postgres:/docker-entrypoint-initdb.d + networks: + fulltest: + aliases: + - pgdb.internal + + authentik-redis: + image: "redis:alpine" + command: --save 60 1 --loglevel warning + restart: unless-stopped + healthcheck: + test: ["CMD-SHELL", "redis-cli ping | grep PONG"] + start_period: 20s + interval: 30s + retries: 5 + timeout: 3s + volumes: + - redis_vol:/data + networks: + - fulltest + + authentik: + image: ghcr.io/goauthentik/server:2024.10.1 + restart: unless-stopped + command: server + env_file: + - ci.env + depends_on: + - authentik-redis + - db-postgres + networks: + - fulltest + + authentik-worker: + image: ghcr.io/goauthentik/server:2024.10.1 + restart: unless-stopped + command: worker + env_file: + - ci.env + depends_on: + - authentik-redis + - db-postgres + networks: + - fulltest + + authentik-ldap: + image: ghcr.io/goauthentik/ldap:2024.10.1 + environment: + AUTHENTIK_HOST: "http://authentik:9000" + AUTHENTIK_INSECURE: "true" + AUTHENTIK_TOKEN: "wKYZuRcI0ETtb8vWzMCr04oNbhrQUUICy89hSpDln1OEKLjiNEuQ51044Vkp" + restart: unless-stopped + depends_on: + - authentik + networks: + - fulltest + +volumes: + psql_vol: + redis_vol: diff --git a/docker/docker-compose.ci.sqlite.yml b/docker/docker-compose.ci.sqlite.yml new file mode 100644 index 0000000..1c5be48 --- /dev/null +++ b/docker/docker-compose.ci.sqlite.yml @@ -0,0 +1,9 @@ +# WARNING: This is a CI docker-compose file used for building and testing of the entire app, it should not be used for production. +services: + + fullstack: + environment: + DB_SQLITE_FILE: '/data/mydb.sqlite' + PUID: 1000 + PGID: 1000 + DISABLE_IPV6: 'true' diff --git a/docker/docker-compose.ci.yml b/docker/docker-compose.ci.yml new file mode 100644 index 0000000..1bf6dad --- /dev/null +++ b/docker/docker-compose.ci.yml @@ -0,0 +1,133 @@ +# WARNING: This is a CI docker-compose file used for building +# and testing of the entire app, it should not be used for production. +# 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" + 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" + 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" + healthcheck: + test: ["CMD", "/usr/bin/check-health"] + interval: 10s + timeout: 3s + expose: + - "80/tcp" + - "81/tcp" + - "443/tcp" + - "1500/tcp" + - "1501/tcp" + - "1502/tcp" + - "1503/tcp" + networks: + fulltest: + aliases: + - website1.example.com + - website2.example.com + - website3.example.com + + stepca: + image: jc21/testca + volumes: + - "./dev/resolv.conf:/etc/resolv.conf:ro" + - "/etc/localtime:/etc/localtime:ro" + networks: + fulltest: + aliases: + - ca.internal + + pdns: + image: pschiffe/pdns-mysql:4.8 + volumes: + - "/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_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_gmysql_host: pdns-db + PDNS_gmysql_port: 3306 + PDNS_gmysql_user: pdns + PDNS_gmysql_password: pdns + PDNS_gmysql_dbname: pdns + depends_on: + - pdns-db + networks: + fulltest: + aliases: + - ns1.pdns + - ns2.pdns + + pdns-db: + image: mariadb + environment: + 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" + networks: + - fulltest + + dnsrouter: + image: jc21/dnsrouter + volumes: + - ./dev/dnsrouter-config.json.tmp:/dnsrouter-config.json:ro + networks: + - fulltest + + cypress: + image: "${IMAGE}-cypress:ci-${BUILD_NUMBER}" + build: + context: ../ + dockerfile: test/cypress/Dockerfile + environment: + 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" + command: cypress run --browser chrome --config-file=cypress/config/ci.mjs + networks: + - fulltest + + 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" + networks: + - fulltest + +volumes: + cypress_logs: + npm_data_ci: + npm_le_ci: + pdns_mysql_vol: + +networks: + fulltest: + name: "npm-${BRANCH_LOWER}-ci-${BUILD_NUMBER}" diff --git a/docker/docker-compose.dev.yml b/docker/docker-compose.dev.yml new file mode 100644 index 0000000..4d519f8 --- /dev/null +++ b/docker/docker-compose.dev.yml @@ -0,0 +1,272 @@ +# WARNING: This is a DEVELOPMENT docker-compose file, it should not be used for production. +services: + fullstack: + image: npm2dev:core + container_name: npm2dev.core + build: + context: ./ + dockerfile: ./dev/Dockerfile + ports: + - 3080:80 + - 3081:81 + - 3443:443 + networks: + nginx_proxy_manager: + aliases: + - website1.example.com + - website2.example.com + - website3.example.com + environment: + TZ: "${TZ:-Australia/Brisbane}" + PUID: 1000 + PGID: 1000 + FORCE_COLOR: 1 + # specifically for dev: + DEBUG: "true" + DEVELOPMENT: "true" + LE_STAGING: "true" + # db: + # DB_MYSQL_HOST: 'db' + # DB_MYSQL_PORT: '3306' + # DB_MYSQL_USER: 'npm' + # DB_MYSQL_PASSWORD: 'npm' + # DB_MYSQL_NAME: 'npm' + # db-postgres: + DB_POSTGRES_HOST: "pgdb.internal" + DB_POSTGRES_PORT: "5432" + DB_POSTGRES_USER: "npm" + DB_POSTGRES_PASSWORD: "npmpass" + DB_POSTGRES_NAME: "npm" + # DB_SQLITE_FILE: "/data/database.sqlite" + # DISABLE_IPV6: "true" + # Required for DNS Certificate provisioning testing: + LE_SERVER: "https://ca.internal/acme/acme/directory" + REQUESTS_CA_BUNDLE: "/etc/ssl/certs/NginxProxyManager.crt" + volumes: + - npm_data:/data + - le_data:/etc/letsencrypt + - "./dev/resolv.conf:/etc/resolv.conf:ro" + - ../backend:/app + - ../frontend:/frontend + - "/etc/localtime:/etc/localtime:ro" + healthcheck: + test: ["CMD", "/usr/bin/check-health"] + interval: 10s + timeout: 3s + depends_on: + - db + - db-postgres + - authentik + - authentik-worker + - authentik-ldap + working_dir: /app + + db: + image: jc21/mariadb-aria + container_name: npm2dev.db + ports: + - 33306:3306 + networks: + - nginx_proxy_manager + environment: + TZ: "${TZ:-Australia/Brisbane}" + MYSQL_ROOT_PASSWORD: "npm" + MYSQL_DATABASE: "npm" + MYSQL_USER: "npm" + MYSQL_PASSWORD: "npm" + volumes: + - db_data:/var/lib/mysql + - "/etc/localtime:/etc/localtime:ro" + + db-postgres: + image: postgres:17 + container_name: npm2dev.db-postgres + environment: + POSTGRES_USER: "npm" + POSTGRES_PASSWORD: "npmpass" + POSTGRES_DB: "npm" + volumes: + - psql_data:/var/lib/postgresql/data + - ./ci/postgres:/docker-entrypoint-initdb.d + networks: + nginx_proxy_manager: + aliases: + - pgdb.internal + + stepca: + image: jc21/testca + container_name: npm2dev.stepca + volumes: + - "./dev/resolv.conf:/etc/resolv.conf:ro" + - "/etc/localtime:/etc/localtime:ro" + networks: + nginx_proxy_manager: + aliases: + - ca.internal + + dnsrouter: + image: jc21/dnsrouter + container_name: npm2dev.dnsrouter + volumes: + - ./dev/dnsrouter-config.json.tmp:/dnsrouter-config.json:ro + networks: + - nginx_proxy_manager + + swagger: + image: swaggerapi/swagger-ui:latest + container_name: npm2dev.swagger + ports: + - 3082:80 + environment: + URL: "http://npm:81/api/schema" + PORT: "80" + depends_on: + - fullstack + + squid: + image: ubuntu/squid + container_name: npm2dev.squid + volumes: + - "./dev/squid.conf:/etc/squid/squid.conf:ro" + - "./dev/resolv.conf:/etc/resolv.conf:ro" + - "/etc/localtime:/etc/localtime:ro" + networks: + - nginx_proxy_manager + ports: + - 8128:3128 + + pdns: + image: pschiffe/pdns-mysql:4.8 + container_name: npm2dev.pdns + volumes: + - "/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_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_gmysql_host: pdns-db + PDNS_gmysql_port: 3306 + PDNS_gmysql_user: pdns + PDNS_gmysql_password: pdns + PDNS_gmysql_dbname: pdns + depends_on: + - pdns-db + networks: + nginx_proxy_manager: + aliases: + - ns1.pdns + - ns2.pdns + + pdns-db: + image: mariadb + container_name: npm2dev.pdns-db + environment: + MYSQL_ROOT_PASSWORD: "pdns" + MYSQL_DATABASE: "pdns" + MYSQL_USER: "pdns" + MYSQL_PASSWORD: "pdns" + volumes: + - "pdns_mysql:/var/lib/mysql" + - "/etc/localtime:/etc/localtime:ro" + - "./dev/pdns-db.sql:/docker-entrypoint-initdb.d/01_init.sql:ro" + networks: + - nginx_proxy_manager + + cypress: + image: npm2dev:cypress + container_name: npm2dev.cypress + build: + context: ../ + dockerfile: test/cypress/Dockerfile + environment: + HTTP_PROXY: "squid:3128" + HTTPS_PROXY: "squid:3128" + volumes: + - "../test/results:/results" + - "./dev/resolv.conf:/etc/resolv.conf:ro" + - "/etc/localtime:/etc/localtime:ro" + command: cypress run --browser chrome --config-file=cypress/config/ci.mjs + networks: + - nginx_proxy_manager + + authentik-redis: + image: "redis:alpine" + container_name: npm2dev.authentik-redis + command: --save 60 1 --loglevel warning + networks: + - nginx_proxy_manager + restart: unless-stopped + healthcheck: + test: ["CMD-SHELL", "redis-cli ping | grep PONG"] + start_period: 20s + interval: 30s + retries: 5 + timeout: 3s + volumes: + - redis_data:/data + + authentik: + image: ghcr.io/goauthentik/server:2024.10.1 + container_name: npm2dev.authentik + restart: unless-stopped + command: server + networks: + - nginx_proxy_manager + env_file: + - ci.env + ports: + - 9000:9000 + depends_on: + - authentik-redis + - db-postgres + + authentik-worker: + image: ghcr.io/goauthentik/server:2024.10.1 + container_name: npm2dev.authentik-worker + restart: unless-stopped + command: worker + networks: + - nginx_proxy_manager + env_file: + - ci.env + depends_on: + - authentik-redis + - db-postgres + + authentik-ldap: + image: ghcr.io/goauthentik/ldap:2024.10.1 + container_name: npm2dev.authentik-ldap + networks: + - nginx_proxy_manager + environment: + AUTHENTIK_HOST: "http://authentik:9000" + AUTHENTIK_INSECURE: "true" + AUTHENTIK_TOKEN: "wKYZuRcI0ETtb8vWzMCr04oNbhrQUUICy89hSpDln1OEKLjiNEuQ51044Vkp" + restart: unless-stopped + depends_on: + - authentik + +volumes: + npm_data: + name: npm2dev_core_data + le_data: + name: npm2dev_le_data + db_data: + name: npm2dev_db_data + pdns_mysql: + name: npnpm2dev_pdns_mysql + psql_data: + name: npm2dev_psql_data + redis_data: + name: npm2dev_redis_data + +networks: + nginx_proxy_manager: + name: npm2dev_network diff --git a/docker/rootfs/etc/letsencrypt.ini b/docker/rootfs/etc/letsencrypt.ini new file mode 100644 index 0000000..aae53b9 --- /dev/null +++ b/docker/rootfs/etc/letsencrypt.ini @@ -0,0 +1,6 @@ +text = True +non-interactive = True +webroot-path = /data/letsencrypt-acme-challenge +key-type = ecdsa +elliptic-curve = secp384r1 +preferred-chain = ISRG Root X1 diff --git a/docker/rootfs/etc/logrotate.d/nginx-proxy-manager b/docker/rootfs/etc/logrotate.d/nginx-proxy-manager new file mode 100644 index 0000000..de97729 --- /dev/null +++ b/docker/rootfs/etc/logrotate.d/nginx-proxy-manager @@ -0,0 +1,27 @@ +/data/logs/*_access.log /data/logs/*/access.log { + su npm npm + create 0644 + weekly + rotate 4 + missingok + notifempty + compress + sharedscripts + postrotate + kill -USR1 `cat /run/nginx/nginx.pid 2>/dev/null` 2>/dev/null || true + endscript +} + +/data/logs/*_error.log /data/logs/*/error.log { + su npm npm + create 0644 + weekly + rotate 10 + missingok + notifempty + compress + sharedscripts + postrotate + kill -USR1 `cat /run/nginx/nginx.pid 2>/dev/null` 2>/dev/null || true + endscript +} diff --git a/docker/rootfs/etc/nginx/conf.d/default.conf b/docker/rootfs/etc/nginx/conf.d/default.conf new file mode 100644 index 0000000..b3f61eb --- /dev/null +++ b/docker/rootfs/etc/nginx/conf.d/default.conf @@ -0,0 +1,39 @@ +# "You are not configured" page, which is the default if another default doesn't exist +server { + listen 80; + listen [::]:80; + + set $forward_scheme "http"; + set $server "127.0.0.1"; + set $port "80"; + + server_name localhost-nginx-proxy-manager; + access_log /data/logs/fallback_http_access.log standard; + error_log /data/logs/fallback_http_error.log warn; + include conf.d/include/assets.conf; + include conf.d/include/block-exploits.conf; + include conf.d/include/letsencrypt-acme-challenge.conf; + + location / { + index index.html; + root /var/www/html; + } +} + +# First 443 Host, which is the default if another default doesn't exist +server { + listen 443 ssl; + listen [::]:443 ssl; + + set $forward_scheme "https"; + set $server "127.0.0.1"; + set $port "443"; + + server_name localhost; + access_log /data/logs/fallback_http_access.log standard; + error_log /dev/null crit; + include conf.d/include/ssl-ciphers.conf; + ssl_reject_handshake on; + + return 444; +} diff --git a/docker/rootfs/etc/nginx/conf.d/dev.conf b/docker/rootfs/etc/nginx/conf.d/dev.conf new file mode 100644 index 0000000..67efc0f --- /dev/null +++ b/docker/rootfs/etc/nginx/conf.d/dev.conf @@ -0,0 +1,37 @@ +server { + listen 81 default; + listen [::]:81 default; + + server_name nginxproxymanager-dev; + root /app/frontend/dist; + access_log /dev/null; + + location /api { + return 302 /api/; + } + + location /api/ { + add_header X-Served-By $host; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-Scheme $scheme; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_pass http://127.0.0.1:3000/; + + proxy_read_timeout 15m; + proxy_send_timeout 15m; + } + + location / { + add_header X-Served-By $host; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; + proxy_set_header X-Forwarded-Scheme $scheme; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_pass http://127.0.0.1:5173; + } +} diff --git a/docker/rootfs/etc/nginx/conf.d/include/.gitignore b/docker/rootfs/etc/nginx/conf.d/include/.gitignore new file mode 100644 index 0000000..5291fe1 --- /dev/null +++ b/docker/rootfs/etc/nginx/conf.d/include/.gitignore @@ -0,0 +1 @@ +resolvers.conf diff --git a/docker/rootfs/etc/nginx/conf.d/include/assets.conf b/docker/rootfs/etc/nginx/conf.d/include/assets.conf new file mode 100644 index 0000000..5a90beb --- /dev/null +++ b/docker/rootfs/etc/nginx/conf.d/include/assets.conf @@ -0,0 +1,31 @@ +location ~* ^.*\.(css|js|jpe?g|gif|png|webp|woff|woff2|eot|ttf|svg|ico|css\.map|js\.map)$ { + if_modified_since off; + + # use the public cache + proxy_cache public-cache; + proxy_cache_key $host$request_uri; + + # ignore these headers for media + proxy_ignore_headers Set-Cookie Cache-Control Expires X-Accel-Expires; + + # cache 200s and also 404s (not ideal but there are a few 404 images for some reason) + proxy_cache_valid any 30m; + proxy_cache_valid 404 1m; + + # strip this header to avoid If-Modified-Since requests + proxy_hide_header Last-Modified; + proxy_hide_header Cache-Control; + proxy_hide_header Vary; + + proxy_cache_bypass 0; + proxy_no_cache 0; + + proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504 http_404; + proxy_connect_timeout 5s; + proxy_read_timeout 45s; + + expires @30m; + access_log off; + + include conf.d/include/proxy.conf; +} diff --git a/docker/rootfs/etc/nginx/conf.d/include/block-exploits.conf b/docker/rootfs/etc/nginx/conf.d/include/block-exploits.conf new file mode 100644 index 0000000..093bda2 --- /dev/null +++ b/docker/rootfs/etc/nginx/conf.d/include/block-exploits.conf @@ -0,0 +1,136 @@ +## Block SQL injections +set $block_sql_injections 0; + +if ($query_string ~ "union.*select.*\(") { + set $block_sql_injections 1; +} + +if ($query_string ~ "union.*all.*select.*") { + set $block_sql_injections 1; +} + +if ($query_string ~ "concat.*\(") { + set $block_sql_injections 1; +} + +if ($block_sql_injections = 1) { + return 403; +} + +## Block file injections +set $block_file_injections 0; + +if ($query_string ~ "[a-zA-Z0-9_]=http://") { + set $block_file_injections 1; +} + +if ($query_string ~ "[a-zA-Z0-9_]=(\.\.//?)+") { + set $block_file_injections 1; +} + +if ($query_string ~ "[a-zA-Z0-9_]=/([a-z0-9_.]//?)+") { + set $block_file_injections 1; +} + +if ($block_file_injections = 1) { + return 403; +} + +## Block common exploits +set $block_common_exploits 0; + +if ($query_string ~ "(<|%3C).*script.*(>|%3E)") { + set $block_common_exploits 1; +} + +if ($query_string ~ "GLOBALS(=|\[|\%[0-9A-Z]{0,2})") { + set $block_common_exploits 1; +} + +if ($query_string ~ "_REQUEST(=|\[|\%[0-9A-Z]{0,2})") { + set $block_common_exploits 1; +} + +if ($query_string ~ "proc/self/environ") { + set $block_common_exploits 1; +} + +if ($query_string ~ "mosConfig_[a-zA-Z_]{1,21}(=|\%3D)") { + set $block_common_exploits 1; +} + +if ($query_string ~ "base64_(en|de)code\(.*\)") { + set $block_common_exploits 1; +} + +if ($block_common_exploits = 1) { + return 403; +} + +## Block spam +set $block_spam 0; + +if ($query_string ~ "\b(ultram|unicauca|valium|viagra|vicodin|xanax|ypxaieo)\b") { + set $block_spam 1; +} + +if ($query_string ~ "\b(erections|hoodia|huronriveracres|impotence|levitra|libido)\b") { + set $block_spam 1; +} + +if ($query_string ~ "\b(ambien|blue\spill|cialis|cocaine|ejaculation|erectile)\b") { + set $block_spam 1; +} + +if ($query_string ~ "\b(lipitor|phentermin|pro[sz]ac|sandyauer|tramadol|troyhamby)\b") { + set $block_spam 1; +} + +if ($block_spam = 1) { + return 403; +} + +## Block user agents +set $block_user_agents 0; + +# Disable Akeeba Remote Control 2.5 and earlier +if ($http_user_agent ~ "Indy Library") { + set $block_user_agents 1; +} + +# Common bandwidth hoggers and hacking tools. +if ($http_user_agent ~ "libwww-perl") { + set $block_user_agents 1; +} + +if ($http_user_agent ~ "GetRight") { + set $block_user_agents 1; +} + +if ($http_user_agent ~ "GetWeb!") { + set $block_user_agents 1; +} + +if ($http_user_agent ~ "Go!Zilla") { + set $block_user_agents 1; +} + +if ($http_user_agent ~ "Download Demon") { + set $block_user_agents 1; +} + +if ($http_user_agent ~ "Go-Ahead-Got-It") { + set $block_user_agents 1; +} + +if ($http_user_agent ~ "TurnitinBot") { + set $block_user_agents 1; +} + +if ($http_user_agent ~ "GrabNet") { + set $block_user_agents 1; +} + +if ($block_user_agents = 1) { + return 403; +} diff --git a/docker/rootfs/etc/nginx/conf.d/include/force-ssl.conf b/docker/rootfs/etc/nginx/conf.d/include/force-ssl.conf new file mode 100644 index 0000000..8e58c64 --- /dev/null +++ b/docker/rootfs/etc/nginx/conf.d/include/force-ssl.conf @@ -0,0 +1,32 @@ +set $test ""; +if ($scheme = "http") { + set $test "H"; +} +if ($request_uri = /.well-known/acme-challenge/test-challenge) { + set $test "${test}T"; +} + +# Check if the ssl staff has been handled +set $test_ssl_handled ""; +if ($trust_forwarded_proto = "") { + set $trust_forwarded_proto "F"; +} +if ($trust_forwarded_proto = "T") { + set $test_ssl_handled "${test_ssl_handled}T"; +} +if ($http_x_forwarded_proto = "https") { + set $test_ssl_handled "${test_ssl_handled}S"; +} +if ($http_x_forwarded_scheme = "https") { + set $test_ssl_handled "${test_ssl_handled}S"; +} +if ($test_ssl_handled = "TSS") { + set $test_ssl_handled "TS"; +} +if ($test_ssl_handled = "TS") { + set $test "${test}S"; +} + +if ($test = H) { + return 301 https://$host$request_uri; +} diff --git a/docker/rootfs/etc/nginx/conf.d/include/ip_ranges.conf b/docker/rootfs/etc/nginx/conf.d/include/ip_ranges.conf new file mode 100644 index 0000000..3424932 --- /dev/null +++ b/docker/rootfs/etc/nginx/conf.d/include/ip_ranges.conf @@ -0,0 +1,2 @@ +# This should be left blank is it is populated programatically +# by the application backend. diff --git a/docker/rootfs/etc/nginx/conf.d/include/letsencrypt-acme-challenge.conf b/docker/rootfs/etc/nginx/conf.d/include/letsencrypt-acme-challenge.conf new file mode 100644 index 0000000..ff2a782 --- /dev/null +++ b/docker/rootfs/etc/nginx/conf.d/include/letsencrypt-acme-challenge.conf @@ -0,0 +1,30 @@ +# Rule for legitimate ACME Challenge requests (like /.well-known/acme-challenge/xxxxxxxxx) +# We use ^~ here, so that we don't check other regexes (for speed-up). We actually MUST cancel +# other regex checks, because in our other config files have regex rule that denies access to files with dotted names. +location ^~ /.well-known/acme-challenge/ { + # Since this is for letsencrypt authentication of a domain and they do not give IP ranges of their infrastructure + # we need to open up access by turning off auth and IP ACL for this location. + auth_basic off; + auth_request off; + allow all; + + # Set correct content type. According to this: + # https://community.letsencrypt.org/t/using-the-webroot-domain-verification-method/1445/29 + # Current specification requires "text/plain" or no content header at all. + # It seems that "text/plain" is a safe option. + default_type "text/plain"; + + # This directory must be the same as in /etc/letsencrypt/cli.ini + # as "webroot-path" parameter. Also don't forget to set "authenticator" parameter + # there to "webroot". + # Do NOT use alias, use root! Target directory is located here: + # /var/www/common/letsencrypt/.well-known/acme-challenge/ + root /data/letsencrypt-acme-challenge; +} + +# Hide /acme-challenge subdirectory and return 404 on all requests. +# It is somewhat more secure than letting Nginx return 403. +# Ending slash is important! +location = /.well-known/acme-challenge/ { + return 404; +} diff --git a/docker/rootfs/etc/nginx/conf.d/include/log-proxy.conf b/docker/rootfs/etc/nginx/conf.d/include/log-proxy.conf new file mode 100644 index 0000000..448b052 --- /dev/null +++ b/docker/rootfs/etc/nginx/conf.d/include/log-proxy.conf @@ -0,0 +1,4 @@ +log_format proxy '[$time_local] $upstream_cache_status $upstream_status $status - $request_method $scheme $host "$request_uri" [Client $remote_addr] [Length $body_bytes_sent] [Gzip $gzip_ratio] [Sent-to $server] "$http_user_agent" "$http_referer"'; +log_format standard '[$time_local] $status - $request_method $scheme $host "$request_uri" [Client $remote_addr] [Length $body_bytes_sent] [Gzip $gzip_ratio] "$http_user_agent" "$http_referer"'; + +access_log /data/logs/fallback_http_access.log proxy; diff --git a/docker/rootfs/etc/nginx/conf.d/include/log-stream.conf b/docker/rootfs/etc/nginx/conf.d/include/log-stream.conf new file mode 100644 index 0000000..db3ad31 --- /dev/null +++ b/docker/rootfs/etc/nginx/conf.d/include/log-stream.conf @@ -0,0 +1,3 @@ +log_format stream '[$time_local] [Client $remote_addr:$remote_port] $protocol $status $bytes_sent $bytes_received $session_time [Sent-to $upstream_addr] [Sent $upstream_bytes_sent] [Received $upstream_bytes_received] [Time $upstream_connect_time] $ssl_protocol $ssl_cipher'; + +access_log /data/logs/fallback_stream_access.log stream; diff --git a/docker/rootfs/etc/nginx/conf.d/include/proxy.conf b/docker/rootfs/etc/nginx/conf.d/include/proxy.conf new file mode 100644 index 0000000..fe2c2f2 --- /dev/null +++ b/docker/rootfs/etc/nginx/conf.d/include/proxy.conf @@ -0,0 +1,8 @@ +add_header X-Served-By $host; +proxy_set_header Host $host; +proxy_set_header X-Forwarded-Scheme $x_forwarded_scheme; +proxy_set_header X-Forwarded-Proto $x_forwarded_proto; +proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; +proxy_set_header X-Real-IP $remote_addr; +proxy_pass $forward_scheme://$server:$port$request_uri; + diff --git a/docker/rootfs/etc/nginx/conf.d/include/ssl-cache-stream.conf b/docker/rootfs/etc/nginx/conf.d/include/ssl-cache-stream.conf new file mode 100644 index 0000000..433555d --- /dev/null +++ b/docker/rootfs/etc/nginx/conf.d/include/ssl-cache-stream.conf @@ -0,0 +1,2 @@ +ssl_session_timeout 5m; +ssl_session_cache shared:SSL_stream:50m; diff --git a/docker/rootfs/etc/nginx/conf.d/include/ssl-cache.conf b/docker/rootfs/etc/nginx/conf.d/include/ssl-cache.conf new file mode 100644 index 0000000..aa7ba2c --- /dev/null +++ b/docker/rootfs/etc/nginx/conf.d/include/ssl-cache.conf @@ -0,0 +1,2 @@ +ssl_session_timeout 5m; +ssl_session_cache shared:SSL:50m; diff --git a/docker/rootfs/etc/nginx/conf.d/include/ssl-ciphers.conf b/docker/rootfs/etc/nginx/conf.d/include/ssl-ciphers.conf new file mode 100644 index 0000000..b5dacfb --- /dev/null +++ b/docker/rootfs/etc/nginx/conf.d/include/ssl-ciphers.conf @@ -0,0 +1,4 @@ +# intermediate configuration. tweak to your needs. +ssl_protocols TLSv1.2 TLSv1.3; +ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384'; +ssl_prefer_server_ciphers off; diff --git a/docker/rootfs/etc/nginx/conf.d/production.conf b/docker/rootfs/etc/nginx/conf.d/production.conf new file mode 100644 index 0000000..877e51d --- /dev/null +++ b/docker/rootfs/etc/nginx/conf.d/production.conf @@ -0,0 +1,33 @@ +# Admin Interface +server { + listen 81 default; + listen [::]:81 default; + + server_name nginxproxymanager; + root /app/frontend; + access_log /dev/null; + + location /api { + return 302 /api/; + } + + location /api/ { + add_header X-Served-By $host; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-Scheme $scheme; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_pass http://127.0.0.1:3000/; + + proxy_read_timeout 15m; + proxy_send_timeout 15m; + } + + location / { + index index.html; + if ($request_uri ~ ^/(.*)\.html$) { + return 302 /$1; + } + try_files $uri $uri.html $uri/ /index.html; + } +} diff --git a/docker/rootfs/etc/nginx/mime.types b/docker/rootfs/etc/nginx/mime.types new file mode 100644 index 0000000..7c7cdef --- /dev/null +++ b/docker/rootfs/etc/nginx/mime.types @@ -0,0 +1,96 @@ +types { + text/html html htm shtml; + text/css css; + text/xml xml; + image/gif gif; + image/jpeg jpeg jpg; + application/javascript js; + application/atom+xml atom; + application/rss+xml rss; + + text/mathml mml; + text/plain txt; + text/vnd.sun.j2me.app-descriptor jad; + text/vnd.wap.wml wml; + text/x-component htc; + + image/png png; + image/svg+xml svg svgz; + image/tiff tif tiff; + image/vnd.wap.wbmp wbmp; + image/webp webp; + image/x-icon ico; + image/x-jng jng; + image/x-ms-bmp bmp; + + font/woff woff; + font/woff2 woff2; + + application/java-archive jar war ear; + application/json json; + application/mac-binhex40 hqx; + application/msword doc; + application/pdf pdf; + application/postscript ps eps ai; + application/rtf rtf; + application/vnd.apple.mpegurl m3u8; + application/vnd.google-earth.kml+xml kml; + application/vnd.google-earth.kmz kmz; + application/vnd.ms-excel xls; + application/vnd.ms-fontobject eot; + application/vnd.ms-powerpoint ppt; + application/vnd.oasis.opendocument.graphics odg; + application/vnd.oasis.opendocument.presentation odp; + application/vnd.oasis.opendocument.spreadsheet ods; + application/vnd.oasis.opendocument.text odt; + application/vnd.openxmlformats-officedocument.presentationml.presentation + pptx; + application/vnd.openxmlformats-officedocument.spreadsheetml.sheet + xlsx; + application/vnd.openxmlformats-officedocument.wordprocessingml.document + docx; + application/vnd.wap.wmlc wmlc; + application/x-7z-compressed 7z; + application/x-cocoa cco; + application/x-java-archive-diff jardiff; + application/x-java-jnlp-file jnlp; + application/x-makeself run; + application/x-perl pl pm; + application/x-pilot prc pdb; + application/x-rar-compressed rar; + application/x-redhat-package-manager rpm; + application/x-sea sea; + application/x-shockwave-flash swf; + application/x-stuffit sit; + application/x-tcl tcl tk; + application/x-x509-ca-cert der pem crt; + application/x-xpinstall xpi; + application/xhtml+xml xhtml; + application/xspf+xml xspf; + application/zip zip; + + application/octet-stream bin exe dll; + application/octet-stream deb; + application/octet-stream dmg; + application/octet-stream iso img; + application/octet-stream msi msp msm; + + audio/midi mid midi kar; + audio/mpeg mp3; + audio/ogg ogg; + audio/x-m4a m4a; + audio/x-realaudio ra; + + video/3gpp 3gpp 3gp; + video/mp2t ts; + video/mp4 mp4; + video/mpeg mpeg mpg; + video/quicktime mov; + video/webm webm; + video/x-flv flv; + video/x-m4v m4v; + video/x-mng mng; + video/x-ms-asf asx asf; + video/x-ms-wmv wmv; + video/x-msvideo avi; +} diff --git a/docker/rootfs/etc/nginx/nginx.conf b/docker/rootfs/etc/nginx/nginx.conf new file mode 100644 index 0000000..bdba3b3 --- /dev/null +++ b/docker/rootfs/etc/nginx/nginx.conf @@ -0,0 +1,111 @@ +# run nginx in foreground +daemon off; +pid /run/nginx/nginx.pid; +user npm; + +# Set number of worker processes automatically based on number of CPU cores. +worker_processes auto; + +# Enables the use of JIT for regular expressions to speed-up their processing. +pcre_jit on; + +error_log /data/logs/fallback_error.log warn; + +# Includes files with directives to load dynamic modules. +include /etc/nginx/modules/*.conf; + +# Custom +include /data/nginx/custom/root_top[.]conf; + +events { + include /data/nginx/custom/events[.]conf; +} + +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + sendfile on; + server_tokens off; + tcp_nopush on; + tcp_nodelay on; + client_body_temp_path /tmp/nginx/body 1 2; + keepalive_timeout 90s; + proxy_connect_timeout 90s; + proxy_send_timeout 90s; + proxy_read_timeout 90s; + ssl_prefer_server_ciphers on; + gzip on; + proxy_ignore_client_abort off; + client_max_body_size 2000m; + server_names_hash_bucket_size 1024; + proxy_http_version 1.1; + proxy_set_header X-Forwarded-Scheme $scheme; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Accept-Encoding ""; + proxy_cache off; + proxy_cache_path /var/lib/nginx/cache/public levels=1:2 keys_zone=public-cache:30m max_size=192m; + proxy_cache_path /var/lib/nginx/cache/private levels=1:2 keys_zone=private-cache:5m max_size=1024m; + + # Log format and fallback log file + include /etc/nginx/conf.d/include/log-proxy[.]conf; + + # Dynamically generated resolvers file + include /etc/nginx/conf.d/include/resolvers[.]conf; + + # Default upstream scheme + map $host $forward_scheme { + default http; + } + + # Handle upstream X-Forwarded-Proto and X-Forwarded-Scheme header + map $http_x_forwarded_proto $x_forwarded_proto { + "http" "http"; + "https" "https"; + default $scheme; + } + map $http_x_forwarded_scheme $x_forwarded_scheme { + "http" "http"; + "https" "https"; + default $scheme; + } + + # Real IP Determination + + # Local subnets: + set_real_ip_from 10.0.0.0/8; + set_real_ip_from 172.16.0.0/12; # Includes Docker subnet + set_real_ip_from 192.168.0.0/16; + # NPM generated CDN ip ranges: + include conf.d/include/ip_ranges[.]conf; + # always put the following 2 lines after ip subnets: + real_ip_header X-Real-IP; + real_ip_recursive on; + + # Custom + include /data/nginx/custom/http_top[.]conf; + + # Files generated by NPM + include /etc/nginx/conf.d/*.conf; + include /data/nginx/default_host/*.conf; + include /data/nginx/proxy_host/*.conf; + include /data/nginx/redirection_host/*.conf; + include /data/nginx/dead_host/*.conf; + include /data/nginx/temp/*.conf; + + # Custom + include /data/nginx/custom/http[.]conf; +} + +stream { + # Log format and fallback log file + include /etc/nginx/conf.d/include/log-stream[.]conf; + + # Files generated by NPM + include /data/nginx/stream/*.conf; + + # Custom + include /data/nginx/custom/stream[.]conf; +} + +# Custom +include /data/nginx/custom/root[.]conf; diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/backend/dependencies.d/prepare b/docker/rootfs/etc/s6-overlay/s6-rc.d/backend/dependencies.d/prepare new file mode 100644 index 0000000..e69de29 diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/backend/run b/docker/rootfs/etc/s6-overlay/s6-rc.d/backend/run new file mode 100644 index 0000000..37a95f7 --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/backend/run @@ -0,0 +1,21 @@ +#!/command/with-contenv bash +# shellcheck shell=bash + +set -e + +. /usr/bin/common.sh + +cd /app || exit 1 + +log_info 'Starting backend ...' + +if [ "${DEVELOPMENT:-}" = 'true' ]; then + s6-setuidgid "$PUID:$PGID" yarn install + exec s6-setuidgid "$PUID:$PGID" bash -c "export HOME=$NPMHOME;node --max_old_space_size=250 --abort_on_uncaught_exception node_modules/nodemon/bin/nodemon.js" +else + while : + do + s6-setuidgid "$PUID:$PGID" bash -c "export HOME=$NPMHOME;node --abort_on_uncaught_exception --max_old_space_size=250 index.js" + sleep 1 + done +fi diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/backend/type b/docker/rootfs/etc/s6-overlay/s6-rc.d/backend/type new file mode 100644 index 0000000..5883cff --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/backend/type @@ -0,0 +1 @@ +longrun diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/frontend/dependencies.d/prepare b/docker/rootfs/etc/s6-overlay/s6-rc.d/frontend/dependencies.d/prepare new file mode 100644 index 0000000..e69de29 diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/frontend/run b/docker/rootfs/etc/s6-overlay/s6-rc.d/frontend/run new file mode 100644 index 0000000..91ed3fa --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/frontend/run @@ -0,0 +1,21 @@ +#!/command/with-contenv bash +# shellcheck shell=bash + +set -e + +# This service is DEVELOPMENT only. + +if [ "$DEVELOPMENT" = 'true' ]; then + . /usr/bin/common.sh + cd /frontend || exit 1 + HOME=$NPMHOME + export HOME + mkdir -p /frontend/dist + chown -R "$PUID:$PGID" /frontend/dist + + log_info 'Starting frontend ...' + s6-setuidgid "$PUID:$PGID" yarn install + exec s6-setuidgid "$PUID:$PGID" yarn dev +else + exit 0 +fi diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/frontend/type b/docker/rootfs/etc/s6-overlay/s6-rc.d/frontend/type new file mode 100644 index 0000000..5883cff --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/frontend/type @@ -0,0 +1 @@ +longrun diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/dependencies.d/prepare b/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/dependencies.d/prepare new file mode 100644 index 0000000..e69de29 diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/run b/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/run new file mode 100644 index 0000000..3e8d8d0 --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/run @@ -0,0 +1,9 @@ +#!/command/with-contenv bash +# shellcheck shell=bash + +set -e + +. /usr/bin/common.sh + +log_info 'Starting nginx ...' +exec s6-setuidgid "$PUID:$PGID" nginx diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/type b/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/type new file mode 100644 index 0000000..5883cff --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/type @@ -0,0 +1 @@ +longrun diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/00-all.sh b/docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/00-all.sh new file mode 100644 index 0000000..d2e62f3 --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/00-all.sh @@ -0,0 +1,22 @@ +#!/command/with-contenv bash +# shellcheck shell=bash + +set -e + +. /usr/bin/common.sh + +if [ "$(id -u)" != "0" ]; then + log_fatal "This docker container must be run as root, do not specify a user.\nYou can specify PUID and PGID env vars to run processes as that user and group after initialization." +fi + +if [ "$DEBUG" = "true" ]; then + set -x +fi + +. /etc/s6-overlay/s6-rc.d/prepare/10-usergroup.sh +. /etc/s6-overlay/s6-rc.d/prepare/20-paths.sh +. /etc/s6-overlay/s6-rc.d/prepare/30-ownership.sh +. /etc/s6-overlay/s6-rc.d/prepare/40-dynamic.sh +. /etc/s6-overlay/s6-rc.d/prepare/50-ipv6.sh +. /etc/s6-overlay/s6-rc.d/prepare/60-secrets.sh +. /etc/s6-overlay/s6-rc.d/prepare/90-banner.sh diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/10-usergroup.sh b/docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/10-usergroup.sh new file mode 100644 index 0000000..ea10019 --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/10-usergroup.sh @@ -0,0 +1,40 @@ +#!/command/with-contenv bash +# shellcheck shell=bash + +set -e + +log_info "Configuring $NPMUSER user ..." + +if id -u "$NPMUSER" 2>/dev/null; then + # user already exists + usermod -u "$PUID" "$NPMUSER" +else + # Add user + useradd -o -u "$PUID" -U -d "$NPMHOME" -s /bin/false "$NPMUSER" +fi + +log_info "Configuring $NPMGROUP group ..." +if [ "$(get_group_id "$NPMGROUP")" = '' ]; then + # Add group. This will not set the id properly if it's already taken + groupadd -f -g "$PGID" "$NPMGROUP" +else + groupmod -o -g "$PGID" "$NPMGROUP" +fi + +# Set the group ID and check it +groupmod -o -g "$PGID" "$NPMGROUP" +if [ "$(get_group_id "$NPMGROUP")" != "$PGID" ]; then + echo "ERROR: Unable to set group id properly" + exit 1 +fi + +# Set the group against the user and check it +usermod -G "$PGID" "$NPMGROUP" +if [ "$(id -g "$NPMUSER")" != "$PGID" ] ; then + echo "ERROR: Unable to set group against the user properly" + exit 1 +fi + +# Home for user +mkdir -p "$NPMHOME" +chown -R "$PUID:$PGID" "$NPMHOME" diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/20-paths.sh b/docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/20-paths.sh new file mode 100644 index 0000000..2f59ef4 --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/20-paths.sh @@ -0,0 +1,41 @@ +#!/command/with-contenv bash +# shellcheck shell=bash + +set -e + +log_info 'Checking paths ...' + +# Ensure /data is mounted +if [ ! -d '/data' ]; then + log_fatal '/data is not mounted! Check your docker configuration.' +fi +# Ensure /etc/letsencrypt is mounted +if [ ! -d '/etc/letsencrypt' ]; then + log_fatal '/etc/letsencrypt is not mounted! Check your docker configuration.' +fi + +# Create required folders +mkdir -p \ + /data/nginx \ + /data/custom_ssl \ + /data/logs \ + /data/access \ + /data/nginx/default_host \ + /data/nginx/default_www \ + /data/nginx/proxy_host \ + /data/nginx/redirection_host \ + /data/nginx/stream \ + /data/nginx/dead_host \ + /data/nginx/temp \ + /data/letsencrypt-acme-challenge \ + /run/nginx \ + /tmp/nginx/body \ + /var/log/nginx \ + /var/lib/nginx/cache/public \ + /var/lib/nginx/cache/private \ + /var/cache/nginx/proxy_temp + +touch /var/log/nginx/error.log || true +chmod 777 /var/log/nginx/error.log || true +chmod -R 777 /var/cache/nginx || true +chmod 644 /etc/logrotate.d/nginx-proxy-manager diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/30-ownership.sh b/docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/30-ownership.sh new file mode 100644 index 0000000..fa94651 --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/30-ownership.sh @@ -0,0 +1,60 @@ +#!/command/with-contenv bash +# shellcheck shell=bash + +set -e + +log_info 'Setting ownership ...' + +# root +chown root /tmp/nginx + +locations=( + "/data" + "/etc/letsencrypt" + "/run/nginx" + "/tmp/nginx" + "/var/cache/nginx" + "/var/lib/logrotate" + "/var/lib/nginx" + "/var/log/nginx" + "/etc/nginx/nginx" + "/etc/nginx/nginx.conf" + "/etc/nginx/conf.d" +) + +chownit() { + local dir="$1" + local recursive="${2:-true}" + + local have + have="$(stat -c '%u:%g' "$dir")" + echo "- $dir ... " + + if [ "$have" != "$PUID:$PGID" ]; then + if [ "$recursive" = 'true' ] && [ -d "$dir" ]; then + chown -R "$PUID:$PGID" "$dir" + else + chown "$PUID:$PGID" "$dir" + fi + echo " DONE" + else + echo " SKIPPED" + fi +} + +for loc in "${locations[@]}"; do + chownit "$loc" +done + +if [ "$(is_true "${SKIP_CERTBOT_OWNERSHIP:-}")" = '1' ]; then + log_info 'Skipping ownership change of certbot directories' +else + log_info 'Changing ownership of certbot directories, this may take some time ...' + chownit "/opt/certbot" false + chownit "/opt/certbot/bin" false + + # Handle all site-packages directories efficiently + find /opt/certbot/lib -type d -name "site-packages" | while read -r SITE_PACKAGES_DIR; do + chownit "$SITE_PACKAGES_DIR" + done +fi diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/40-dynamic.sh b/docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/40-dynamic.sh new file mode 100644 index 0000000..6818653 --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/40-dynamic.sh @@ -0,0 +1,16 @@ +#!/command/with-contenv bash +# shellcheck shell=bash + +set -e + +log_info 'Dynamic resolvers ...' + +# Dynamically generate resolvers file, if resolver is IPv6, enclose in `[]` +# thanks @tfmm +if [ "$(is_true "${DISABLE_RESOLVER:-}")" = '0' ]; then + if [ "$(is_true "${DISABLE_IPV6:-}")" = '1' ]; then + echo resolver "$(awk 'BEGIN{ORS=" "} $1=="nameserver" { sub(/%.*$/,"",$2); print ($2 ~ ":")? "["$2"]": $2}' /etc/resolv.conf) ipv6=off valid=10s;" > /etc/nginx/conf.d/include/resolvers.conf + else + echo resolver "$(awk 'BEGIN{ORS=" "} $1=="nameserver" { sub(/%.*$/,"",$2); print ($2 ~ ":")? "["$2"]": $2}' /etc/resolv.conf) valid=10s;" > /etc/nginx/conf.d/include/resolvers.conf + fi +fi diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/50-ipv6.sh b/docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/50-ipv6.sh new file mode 100644 index 0000000..edc9649 --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/50-ipv6.sh @@ -0,0 +1,42 @@ +#!/command/with-contenv bash +# shellcheck shell=bash + +# This command reads the `DISABLE_IPV6` env var and will either enable +# or disable ipv6 in all nginx configs based on this setting. + +set -e + +log_info 'IPv6 ...' + +process_folder () { + FILES=$(find "$1" -type f -name "*.conf") + SED_REGEX= + + if [ "$(is_true "${DISABLE_IPV6:-}")" = '1' ]; then + # IPV6 is disabled + echo "Disabling IPV6 in hosts in: $1" + SED_REGEX='s/^([^#]*)listen \[::\]/\1#listen [::]/g' + else + # IPV6 is enabled + echo "Enabling IPV6 in hosts in: $1" + SED_REGEX='s/^(\s*)#listen \[::\]/\1listen [::]/g' + fi + + for FILE in $FILES + do + echo "- ${FILE}" + TMPFILE="${FILE}.tmp" + if sed -E "$SED_REGEX" "$FILE" > "$TMPFILE" && [ -s "$TMPFILE" ]; then + mv "$TMPFILE" "$FILE" + else + echo "WARNING: skipping ${FILE} — sed produced empty output" >&2 + rm -f "$TMPFILE" + fi + done + + # ensure the files are still owned by the npm user + chown -R "$PUID:$PGID" "$1" +} + +process_folder /etc/nginx/conf.d +process_folder /data/nginx diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/60-secrets.sh b/docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/60-secrets.sh new file mode 100644 index 0000000..faa22ac --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/60-secrets.sh @@ -0,0 +1,30 @@ +#!/command/with-contenv bash +# shellcheck shell=bash + +set -e + +# in s6, environmental variables are written as text files for s6 to monitor +# search through full-path filenames for files ending in "__FILE" +log_info 'Docker secrets ...' + +for FILENAME in $(find /var/run/s6/container_environment/ | grep "__FILE$"); do + echo "[secret-init] Evaluating ${FILENAME##*/} ..." + + # set SECRETFILE to the contents of the full-path textfile + SECRETFILE=$(cat "${FILENAME}") + # if SECRETFILE exists / is not null + if [[ -f "${SECRETFILE}" ]]; then + # strip the appended "__FILE" from environmental variable name ... + STRIPFILE=$(echo "${FILENAME}" | sed "s/__FILE//g") + # echo "[secret-init] Set STRIPFILE to ${STRIPFILE}" # DEBUG - rm for prod! + + # ... and set value to contents of secretfile + # since s6 uses text files, this is effectively "export ..." + printf $(cat "${SECRETFILE}") > "${STRIPFILE}" + # echo "[secret-init] Set ${STRIPFILE##*/} to $(cat ${STRIPFILE})" # DEBUG - rm for prod!" + echo "Success: ${STRIPFILE##*/} set from ${FILENAME##*/}" + + else + echo "Cannot find secret in ${FILENAME}" + fi +done diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/90-banner.sh b/docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/90-banner.sh new file mode 100644 index 0000000..48ba639 --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/90-banner.sh @@ -0,0 +1,18 @@ +#!/command/with-contenv bash +# shellcheck shell=bash + +set -e +set +x + +echo " +------------------------------------- + _ _ ____ __ __ +| \ | | _ \| \/ | +| \| | |_) | |\/| | +| |\ | __/| | | | +|_| \_|_| |_| |_| +------------------------------------- +User: $NPMUSER PUID:$PUID ID:$(id -u "$NPMUSER") GROUP:$(id -g "$NPMUSER") +Group: $NPMGROUP PGID:$PGID ID:$(get_group_id "$NPMGROUP") +------------------------------------- +" diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/dependencies.d/base b/docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/dependencies.d/base new file mode 100644 index 0000000..e69de29 diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/type b/docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/type new file mode 100644 index 0000000..bdd22a1 --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/type @@ -0,0 +1 @@ +oneshot diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/up b/docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/up new file mode 100644 index 0000000..896a01b --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/prepare/up @@ -0,0 +1,2 @@ +# shellcheck shell=bash +/etc/s6-overlay/s6-rc.d/prepare/00-all.sh diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/backend b/docker/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/backend new file mode 100644 index 0000000..e69de29 diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/frontend b/docker/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/frontend new file mode 100644 index 0000000..e69de29 diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/nginx b/docker/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/nginx new file mode 100644 index 0000000..e69de29 diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/prepare b/docker/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/prepare new file mode 100644 index 0000000..e69de29 diff --git a/docker/rootfs/root/.bashrc b/docker/rootfs/root/.bashrc new file mode 100644 index 0000000..1deb975 --- /dev/null +++ b/docker/rootfs/root/.bashrc @@ -0,0 +1,22 @@ +#!/bin/bash + +if [ -t 1 ]; then + export PS1="\e[1;34m[\e[1;33m\u@\e[1;32mdocker-\h\e[1;37m:\w\[\e[1;34m]\e[1;36m\\$ \e[0m" +fi + +# Aliases +alias l='ls -lAsh --color' +alias ls='ls -C1 --color' +alias cp='cp -ip' +alias rm='rm -i' +alias mv='mv -i' +alias h='cd ~;clear;' + +. /etc/os-release + +echo -e -n '\E[1;34m' +figlet -w 120 "NginxProxyManager" +echo -e "\E[1;36mVersion \E[1;32m${NPM_BUILD_VERSION:-2.0.0-dev} (${NPM_BUILD_COMMIT:-dev}) ${NPM_BUILD_DATE:-0000-00-00}\E[1;36m, OpenResty \E[1;32m${OPENRESTY_VERSION:-unknown}\E[1;36m, ${ID:-debian} \E[1;32m${VERSION:-unknown}\E[1;36m, Certbot \E[1;32m$(certbot --version)\E[0m" +echo -e -n '\E[1;34m' +cat /built-for-arch +echo -e '\E[0m' diff --git a/docker/rootfs/usr/bin/check-health b/docker/rootfs/usr/bin/check-health new file mode 100644 index 0000000..bcf5552 --- /dev/null +++ b/docker/rootfs/usr/bin/check-health @@ -0,0 +1,11 @@ +#!/bin/bash + +OK=$(curl --silent http://127.0.0.1:81/api/ | jq --raw-output '.status') + +if [ "$OK" == "OK" ]; then + echo "OK" + exit 0 +else + echo "NOT OK" + exit 1 +fi diff --git a/docker/rootfs/usr/bin/common.sh b/docker/rootfs/usr/bin/common.sh new file mode 100644 index 0000000..4652987 --- /dev/null +++ b/docker/rootfs/usr/bin/common.sh @@ -0,0 +1,68 @@ +#!/bin/bash + +set -e + +CYAN='\E[1;36m' +BLUE='\E[1;34m' +YELLOW='\E[1;33m' +RED='\E[1;31m' +RESET='\E[0m' +export CYAN BLUE YELLOW RED RESET + +PUID=${PUID:-0} +PGID=${PGID:-0} + +# If changing the username and group name below, +# ensure all references to this user is also changed. +# See docker/rootfs/etc/logrotate.d/nginx-proxy-manager +# and docker/rootfs/etc/nginx/nginx.conf +NPMUSER=npm +NPMGROUP=npm +NPMHOME=/tmp/npmuserhome +export NPMUSER NPMGROUP NPMHOME + +if [[ "$PUID" -ne '0' ]] && [ "$PGID" = '0' ]; then + # set group id to same as user id, + # the user probably forgot to specify the group id and + # it would be rediculous to intentionally use the root group + # for a non-root user + PGID=$PUID +fi + +export PUID PGID + +log_info () { + echo -e "${BLUE}❯ ${CYAN}$1${RESET}" +} + +log_error () { + echo -e "${RED}❯ $1${RESET}" +} + +# The `run` file will only execute 1 line so this helps keep things +# logically separated + +log_fatal () { + echo -e "${RED}--------------------------------------${RESET}" + echo -e "${RED}ERROR: $1${RESET}" + echo -e "${RED}--------------------------------------${RESET}" + /run/s6/basedir/bin/halt + exit 1 +} + +# param $1: group_name +get_group_id () { + if [ "${1:-}" != '' ]; then + getent group "$1" | cut -d: -f3 + fi +} + +# param $1: value +is_true () { + VAL=$(echo "${1:-}" | tr '[:upper:]' '[:lower:]') + if [ "$VAL" == 'true' ] || [ "$VAL" == 'on' ] || [ "$VAL" == '1' ] || [ "$VAL" == 'yes' ]; then + echo '1' + else + echo '0' + fi +} diff --git a/docker/rootfs/var/www/html/index.html b/docker/rootfs/var/www/html/index.html new file mode 100644 index 0000000..703db88 --- /dev/null +++ b/docker/rootfs/var/www/html/index.html @@ -0,0 +1,24 @@ + + + + + + + Default Site + + + + +

+ + diff --git a/docker/scripts/install-s6 b/docker/scripts/install-s6 new file mode 100644 index 0000000..a06dd78 --- /dev/null +++ b/docker/scripts/install-s6 @@ -0,0 +1,35 @@ +#!/bin/bash +set -e + +# Note: This script is designed to be run inside a Docker Build for a container + +CYAN='\E[1;36m' +YELLOW='\E[1;33m' +BLUE='\E[1;34m' +GREEN='\E[1;32m' +RESET='\E[0m' + +S6_OVERLAY_VERSION=3.2.1.0 +TARGETPLATFORM=${1:-linux/amd64} + +# Determine the correct binary file for the architecture given +case $TARGETPLATFORM in + linux/arm64) + S6_ARCH=aarch64 + ;; + + *) + S6_ARCH=x86_64 + ;; +esac + +echo -e "${BLUE}❯ ${CYAN}Installing S6-overlay v${S6_OVERLAY_VERSION} for ${YELLOW}${TARGETPLATFORM} (${S6_ARCH})${RESET}" + +curl -L -o '/tmp/s6-overlay-noarch.tar.xz' "https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-noarch.tar.xz" +curl -L -o "/tmp/s6-overlay-${S6_ARCH}.tar.xz" "https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-${S6_ARCH}.tar.xz" +tar -C / -Jxpf '/tmp/s6-overlay-noarch.tar.xz' +tar -C / -Jxpf "/tmp/s6-overlay-${S6_ARCH}.tar.xz" + +rm -rf "/tmp/s6-overlay-${S6_ARCH}.tar.xz" + +echo -e "${BLUE}❯ ${GREEN}S6-overlay install Complete${RESET}" diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000..b8acd7b --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,14 @@ +dist +node_modules +ts +.temp +.cache +.vitepress/cache + +.yarn/* +!.yarn/releases +!.yarn/plugins +!.yarn/sdks +!.yarn/versions +*.gz +*.tgz diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts new file mode 100644 index 0000000..52586bf --- /dev/null +++ b/docs/.vitepress/config.mts @@ -0,0 +1,61 @@ +import { defineConfig, type DefaultTheme } from 'vitepress'; + +// https://vitepress.dev/reference/site-config +export default defineConfig({ + title: "Nginx Proxy Manager", + description: "Expose your services easily and securely", + head: [ + ["link", { rel: "icon", href: "/icon.png" }], + ["meta", { name: "description", content: "Docker container and built in Web Application for managing Nginx proxy hosts with a simple, powerful interface, providing free SSL support via Let's Encrypt" }], + ["meta", { property: "og:title", content: "Nginx Proxy Manager" }], + ["meta", { property: "og:description", content: "Docker container and built in Web Application for managing Nginx proxy hosts with a simple, powerful interface, providing free SSL support via Let's Encrypt"}], + ["meta", { property: "og:type", content: "website" }], + ["meta", { property: "og:url", content: "https://nginxproxymanager.com/" }], + ["meta", { property: "og:image", content: "https://nginxproxymanager.com/icon.png" }], + ["meta", { name: "twitter:card", content: "summary"}], + ["meta", { name: "twitter:title", content: "Nginx Proxy Manager"}], + ["meta", { name: "twitter:description", content: "Docker container and built in Web Application for managing Nginx proxy hosts with a simple, powerful interface, providing free SSL support via Let's Encrypt"}], + ["meta", { name: "twitter:image", content: "https://nginxproxymanager.com/icon.png"}], + ["meta", { name: "twitter:alt", content: "Nginx Proxy Manager"}], + // GA + ['script', { async: 'true', src: 'https://www.googletagmanager.com/gtag/js?id=G-TXT8F5WY5B'}], + ['script', {}, "window.dataLayer = window.dataLayer || [];\nfunction gtag(){dataLayer.push(arguments);}\ngtag('js', new Date());\ngtag('config', 'G-TXT8F5WY5B');"], + ], + sitemap: { + hostname: 'https://nginxproxymanager.com' + }, + metaChunk: true, + srcDir: './src', + outDir: './dist', + themeConfig: { + // https://vitepress.dev/reference/default-theme-config + logo: { src: '/logo.svg', width: 24, height: 24 }, + nav: [ + { text: 'Setup', link: '/setup/' }, + ], + sidebar: [ + { + items: [ + // { text: 'Home', link: '/' }, + { text: 'Guide', link: '/guide/' }, + { text: 'Screenshots', link: '/screenshots/' }, + { text: 'Setup Instructions', link: '/setup/' }, + { text: 'Advanced Configuration', link: '/advanced-config/' }, + { text: 'Upgrading', link: '/upgrading/' }, + { text: 'Frequently Asked Questions', link: '/faq/' }, + { text: 'Third Party', link: '/third-party/' }, + ] + } + ], + socialLinks: [ + { icon: 'github', link: 'https://github.com/NginxProxyManager/nginx-proxy-manager' } + ], + search: { + provider: 'local' + }, + footer: { + message: 'Released under the MIT License.', + copyright: 'Copyright © 2016-present jc21.com' + } + } +}); diff --git a/docs/.vitepress/theme/custom.css b/docs/.vitepress/theme/custom.css new file mode 100644 index 0000000..2e3cda7 --- /dev/null +++ b/docs/.vitepress/theme/custom.css @@ -0,0 +1,28 @@ +:root { + --vp-home-hero-name-color: transparent; + --vp-home-hero-name-background: -webkit-linear-gradient(120deg, #f15833 30%, #FAA42F); + + --vp-home-hero-image-background-image: linear-gradient(-45deg, #aaaaaa 50%, #777777 50%); + --vp-home-hero-image-filter: blur(44px); + + --vp-c-brand-1: #f15833; + --vp-c-brand-2: #FAA42F; + --vp-c-brand-3: #f15833; +} + + @media (min-width: 640px) { + :root { + --vp-home-hero-image-filter: blur(56px); + } +} + + @media (min-width: 960px) { + :root { + --vp-home-hero-image-filter: blur(68px); + } +} + +.inline-img img { + display: inline; + margin-right: 8px; +} diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts new file mode 100644 index 0000000..42fe9a9 --- /dev/null +++ b/docs/.vitepress/theme/index.ts @@ -0,0 +1,4 @@ +import DefaultTheme from 'vitepress/theme' +import './custom.css' + +export default DefaultTheme diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 0000000..2155a55 --- /dev/null +++ b/docs/package.json @@ -0,0 +1,12 @@ +{ + "scripts": { + "dev": "vitepress dev --host", + "build": "vitepress build", + "preview": "vitepress preview", + "set-version": "./scripts/set-version.sh" + }, + "devDependencies": { + "vitepress": "^1.6.4" + }, + "dependencies": {} +} diff --git a/docs/scripts/set-version.sh b/docs/scripts/set-version.sh new file mode 100644 index 0000000..b7cd3d7 --- /dev/null +++ b/docs/scripts/set-version.sh @@ -0,0 +1,17 @@ +#!/bin/bash +set -euf + +# this script accepts a version number as an argument +# and replaces {{VERSION}} in src/*.md with the provided version number. + +if [ "$#" -ne 1 ]; then + echo "Usage: $0 " + exit 1 +fi + +DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +cd "$DIR/.." || exit 1 + +VERSION="$1" +# find all .md files in src/ and replace {{VERSION}} with the provided version number +find src/ -type f -name "*.md" -exec sed -i "s/{{VERSION}}/$VERSION/g" {} \; diff --git a/docs/src/advanced-config/index.md b/docs/src/advanced-config/index.md new file mode 100644 index 0000000..3ab04ce --- /dev/null +++ b/docs/src/advanced-config/index.md @@ -0,0 +1,250 @@ +--- +outline: deep +--- + +# Advanced Configuration + +## Running processes as a user/group + +By default, the services (nginx etc) will run as `root` user inside the docker container. +You can change this behaviour by setting the following environment variables. +Not only will they run the services as this user/group, they will change the ownership +on the `data` and `letsencrypt` folders at startup. + +```yml +services: + app: + image: 'jc21/nginx-proxy-manager:{{VERSION}}' + environment: + PUID: 1000 + PGID: 1000 + # ... +``` + +This may have the side effect of a failed container start due to permission denied trying +to open port 80 on some systems. The only course to fix that is to remove the variables +and run as the default root user. + +## Best Practice: Use a Docker network + +For those who have a few of their upstream services running in Docker on the same Docker +host as NPM, here's a trick to secure things a bit better. By creating a custom Docker network, +you don't need to publish ports for your upstream services to all of the Docker host's interfaces. + +Create a network, ie "scoobydoo": + +```bash +docker network create scoobydoo +``` + +Then add the following to the `docker-compose.yml` file for both NPM and any other +services running on this Docker host: + +```yml +networks: + default: + external: true + name: scoobydoo +``` + +Let's look at a Portainer example: + +```yml +services: + + portainer: + image: portainer/portainer + privileged: true + volumes: + - './data:/data' + - '/var/run/docker.sock:/var/run/docker.sock' + restart: unless-stopped + +networks: + default: + external: true + name: scoobydoo +``` + +Now in the NPM UI you can create a proxy host with `portainer` as the hostname, +and port `9000` as the port. Even though this port isn't listed in the docker-compose +file, it's "exposed" by the Portainer Docker image for you and not available on +the Docker host outside of this Docker network. The service name is used as the +hostname, so make sure your service names are unique when using the same network. + +## Docker Healthcheck + +The `Dockerfile` that builds this project does not include a `HEALTHCHECK` but you can opt in to this +feature by adding the following to the service in your `docker-compose.yml` file: + +```yml +healthcheck: + test: ["CMD", "/usr/bin/check-health"] + interval: 10s + timeout: 3s +``` + +## Docker File Secrets + +This image supports the use of Docker secrets to import from files and keep sensitive usernames or passwords from being passed or preserved in plaintext. + +You can set any environment variable from a file by appending `__FILE` (double-underscore FILE) to the environmental variable name. + +```yml +secrets: + # Secrets are single-line text files where the sole content is the secret + # Paths in this example assume that secrets are kept in local folder called ".secrets" + DB_ROOT_PWD: + file: .secrets/db_root_pwd.txt + MYSQL_PWD: + file: .secrets/mysql_pwd.txt + +services: + app: + image: 'jc21/nginx-proxy-manager:{{VERSION}}' + restart: unless-stopped + ports: + # Public HTTP Port: + - '80:80' + # Public HTTPS Port: + - '443:443' + # Admin Web Port: + - '81:81' + environment: + # These are the settings to access your db + DB_MYSQL_HOST: "db" + DB_MYSQL_PORT: 3306 + DB_MYSQL_USER: "npm" + # DB_MYSQL_PASSWORD: "npm" # use secret instead + DB_MYSQL_PASSWORD__FILE: /run/secrets/MYSQL_PWD + DB_MYSQL_NAME: "npm" + # If you would rather use Sqlite, remove all DB_MYSQL_* lines above + # Uncomment this if IPv6 is not enabled on your host + # DISABLE_IPV6: 'true' + volumes: + - ./data:/data + - ./letsencrypt:/etc/letsencrypt + secrets: + - MYSQL_PWD + depends_on: + - db + + db: + image: 'linuxserver/mariadb' + restart: unless-stopped + environment: + MYSQL_ROOT_PASSWORD__FILE: /run/secrets/DB_ROOT_PWD + MYSQL_DATABASE: 'npm' + MYSQL_USER: 'npm' + MYSQL_PASSWORD__FILE: /run/secrets/MYSQL_PWD + TZ: 'Australia/Brisbane' + volumes: + - ./mariadb:/config + secrets: + - DB_ROOT_PWD + - MYSQL_PWD +``` + + +## Disabling IPv6 + +On some Docker hosts IPv6 may not be enabled. In these cases, the following message may be seen in the log: + +> Address family not supported by protocol + +The easy fix is to add a Docker environment variable to the Nginx Proxy Manager stack: + +```yml + environment: + DISABLE_IPV6: 'true' +``` + +## Disabling IP Ranges Fetch + +By default, NPM fetches IP ranges from CloudFront and Cloudflare during application startup. In environments with limited internet access or to speed up container startup, this fetch can be disabled: + +```yml + environment: + IP_RANGES_FETCH_ENABLED: 'false' +``` + +## Custom Nginx Configurations + +If you are a more advanced user, you might be itching for extra Nginx customizability. + +NPM has the ability to include different custom configuration snippets in different places. + +You can add your custom configuration snippet files at `/data/nginx/custom` as follow: + + - `/data/nginx/custom/root_top.conf`: Included at the top of nginx.conf + - `/data/nginx/custom/root.conf`: Included at the very end of nginx.conf + - `/data/nginx/custom/http_top.conf`: Included at the top of the main http block + - `/data/nginx/custom/http.conf`: Included at the end of the main http block + - `/data/nginx/custom/events.conf`: Included at the end of the events block + - `/data/nginx/custom/stream.conf`: Included at the end of the main stream block + - `/data/nginx/custom/server_proxy.conf`: Included at the end of every proxy server block + - `/data/nginx/custom/server_redirect.conf`: Included at the end of every redirection server block + - `/data/nginx/custom/server_stream.conf`: Included at the end of every stream server block + - `/data/nginx/custom/server_stream_tcp.conf`: Included at the end of every TCP stream server block + - `/data/nginx/custom/server_stream_udp.conf`: Included at the end of every UDP stream server block + - `/data/nginx/custom/server_dead.conf`: Included at the end of every 404 server block + +Every file is optional. + + +## X-FRAME-OPTIONS Header + +You can configure the [`X-FRAME-OPTIONS`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options) header +value by specifying it as a Docker environment variable. The default if not specified is `deny`. + +```yml + ... + environment: + X_FRAME_OPTIONS: "sameorigin" + ... +``` + +## Customising logrotate settings + +By default, NPM rotates the access- and error logs weekly and keeps 4 and 10 log files respectively. +Depending on the usage, this can lead to large log files, especially access logs. +You can customise the logrotate configuration through a mount (if your custom config is `logrotate.custom`): + +```yml + volumes: + ... + - ./logrotate.custom:/etc/logrotate.d/nginx-proxy-manager +``` + +For reference, the default configuration can be found [here](https://github.com/NginxProxyManager/nginx-proxy-manager/blob/develop/docker/rootfs/etc/logrotate.d/nginx-proxy-manager). + +## Enabling the geoip2 module + +To enable the geoip2 module, you can create the custom configuration file `/data/nginx/custom/root_top.conf` and include the following snippet: + +``` +load_module /usr/lib/nginx/modules/ngx_http_geoip2_module.so; +load_module /usr/lib/nginx/modules/ngx_stream_geoip2_module.so; +``` + +## Auto Initial User Creation + +Setting these environment variables will create the default user on startup, skipping the UI first user setup screen: + +```yml + environment: + INITIAL_ADMIN_EMAIL: my@example.com + INITIAL_ADMIN_PASSWORD: mypassword1 +``` + +## Disable Nginx Resolver + +On startup, we generate a resolvers directive for Nginx unless this is defined: + +```yml + environment: + DISABLE_RESOLVER: true +``` + +In this configuration, all DNS queries performed by Nginx will fall to the `/etc/hosts` file +and then the `/etc/resolv.conf`. diff --git a/docs/src/faq/index.md b/docs/src/faq/index.md new file mode 100644 index 0000000..b366856 --- /dev/null +++ b/docs/src/faq/index.md @@ -0,0 +1,32 @@ +--- +outline: deep +--- + +# FAQ + +## Do I have to use Docker? + +Yes, that's how this project is packaged. + +This makes it easier to support the project when we have control over the version of Nginx other packages +use by the project. + +## Can I run it on a Raspberry Pi? + +Yes! The docker image is multi-arch and is built for a variety of architectures. If yours is +[not listed](https://hub.docker.com/r/jc21/nginx-proxy-manager/tags) please open a +[GitHub issue](https://github.com/NginxProxyManager/nginx-proxy-manager/issues/new?assignees=&labels=enhancement&template=feature_request.md&title=). + +## I can't get my service to proxy properly? + +Your best bet is to ask the [Reddit community for support](https://www.reddit.com/r/nginxproxymanager/). There's safety in numbers. + +## When adding username and password access control to a proxy host, I can no longer login into the app. + +Having an Access Control List (ACL) with username and password requires the browser to always send this username +and password in the `Authorization` header on each request. If your proxied app also requires authentication (like +Nginx Proxy Manager itself), most likely the app will also use the `Authorization` header to transmit this information, +as this is the standardized header meant for this kind of information. However having multiples of the same headers +is not allowed in the [internet standard](https://www.rfc-editor.org/rfc/rfc7230#section-3.2.2) and almost all apps +do not support multiple values in the `Authorization` header. Hence one of the two logins will be broken. This can +only be fixed by either removing one of the logins or by changing the app to use other non-standard headers for authorization. diff --git a/docs/src/guide/index.md b/docs/src/guide/index.md new file mode 100644 index 0000000..6e2d1fe --- /dev/null +++ b/docs/src/guide/index.md @@ -0,0 +1,117 @@ +--- +outline: deep +--- + +# Guide + +::: raw +

+ + + + + + +

+::: + +This project comes as a pre-built docker image that enables you to easily forward to your websites +running at home or otherwise, including free SSL, without having to know too much about Nginx or Letsencrypt. + +- [Quick Setup](#quick-setup) +- [Full Setup](/setup/) +- [Screenshots](/screenshots/) + +## Project Goal + +I created this project to fill a personal need to provide users with an easy way to accomplish reverse +proxying hosts with SSL termination and it had to be so easy that a monkey could do it. This goal hasn't changed. +While there might be advanced options they are optional and the project should be as simple as possible +so that the barrier for entry here is low. + +::: raw +Buy Me A Coffee +::: + +## Features + +- Beautiful and Secure Admin Interface based on [Tabler](https://tabler.io/) +- Easily create forwarding domains, redirections, streams and 404 hosts without knowing anything about Nginx +- Free SSL using Let's Encrypt or provide your own custom SSL certificates +- Access Lists and basic HTTP Authentication for your hosts +- Advanced Nginx configuration available for super users +- User management, permissions and audit log + + +## Hosting your home network + +I won't go in to too much detail here but here are the basics for someone new to this self-hosted world. + +1. Your home router will have a Port Forwarding section somewhere. Log in and find it +2. Add port forwarding for port 80 and 443 to the server hosting this project +3. Configure your domain name details to point to your home, either with a static ip or a service like DuckDNS or [Amazon Route53](https://github.com/jc21/route53-ddns) +4. Use the Nginx Proxy Manager as your gateway to forward to your other web based services + +## Quick Setup + +1. Install Docker and Docker-Compose + +- [Docker Install documentation](https://docs.docker.com/get-docker/) +- [Docker-Compose Install documentation](https://docs.docker.com/compose/install/) + +2. Create a docker-compose.yml file similar to this: + +```yml +services: + app: + image: 'jc21/nginx-proxy-manager:{{VERSION}}' + restart: unless-stopped + environment: + TZ: "Australia/Brisbane" + ports: + - '80:80' + - '81:81' + - '443:443' + volumes: + - ./data:/data + - ./letsencrypt:/etc/letsencrypt +``` + +This is the bare minimum configuration required. See the [documentation](https://nginxproxymanager.com/setup/) for more. + +3. Bring up your stack by running + +```bash +docker compose up -d +``` + +4. Log in to the Admin UI + +When your docker container is running, connect to it on port `81` for the admin interface. + +[http://127.0.0.1:81](http://127.0.0.1:81) + +This startup can take a minute depending on your hardware. + + +## Contributing + +All are welcome to create pull requests for this project, against the `develop` branch. Official releases are created from the `master` branch. + +CI is used in this project. All PR's must pass before being considered. After passing, +docker builds for PR's are available on dockerhub for manual verifications. + +Documentation within the `develop` branch is available for preview at +[https://develop.nginxproxymanager.com](https://develop.nginxproxymanager.com) + + +### Contributors + +Special thanks to [all of our contributors](https://github.com/NginxProxyManager/nginx-proxy-manager/graphs/contributors). + + +## Getting Support + +1. [Found a bug?](https://github.com/NginxProxyManager/nginx-proxy-manager/issues) +2. [Discussions](https://github.com/NginxProxyManager/nginx-proxy-manager/discussions) +3. [Reddit](https://reddit.com/r/nginxproxymanager) diff --git a/docs/src/index.md b/docs/src/index.md new file mode 100644 index 0000000..74a263b --- /dev/null +++ b/docs/src/index.md @@ -0,0 +1,32 @@ +--- +# https://vitepress.dev/reference/default-theme-home-page +layout: home + +hero: + name: "Nginx Proxy Manager" + tagline: Expose your services easily and securely + image: + src: /logo.svg + alt: NPM Logo + actions: + - theme: brand + text: Get Started + link: /guide/ + - theme: alt + text: GitHub + link: https://github.com/NginxProxyManager/nginx-proxy-manager + +features: + - title: Get Connected + details: Expose web services on your network · Free SSL with Let's Encrypt · Designed with security in mind · Perfect for home networks + - title: Proxy Hosts + details: Expose your private network Web services and get connected anywhere. + - title: Beautiful UI + details: Based on Tabler, the interface is a pleasure to use. Configuring a server has never been so fun. + - title: Free SSL + details: Built in Let’s Encrypt support allows you to secure your Web services at no cost to you. The certificates even renew themselves! + - title: Docker FTW + details: Built as a Docker Image, Nginx Proxy Manager only requires a database. + - title: Multiple Users + details: Configure other users to either view or manage their own hosts. Full access permissions are available. +--- diff --git a/docs/src/public/github.png b/docs/src/public/github.png new file mode 100644 index 0000000000000000000000000000000000000000..1480f031b9de1d364a81d5285e9e61377b96e5bc GIT binary patch literal 13552 zcmVegb={yHkkW}4T*CQ2PZbhIEfQt<8T-f zh#A1d{LOus5FFnZ#+D_^x~0`hd+!|GUG@IIs;ODc&UVkPWXX}_`ScrUHPhGhcD;J_ z-uJ#ok8L>*tGlzP#2QHuL{O|TIJFzGjv+`OCV`BOal+UjNGpIu;=a>hGJgT)pA187 z381!mpbRH&P7*@;bj?FIS62>iP#0#pX((yCSTnMozzMwtNFr!vz+-S(KyUQx=cD9H z65bTTi4##9J;nZP;MHmvTfGt!%a_2b){?IcfMOtG#z~@28Yqvp4=%9lRI@s4C`jp-rhH`9>2gH6B5zH7ZJDX+9&4@6BIB zz$VT7;?8fsgASfN4z5vP=N%Ayy~V#SdN})-+U`HsekNMB^KcpEuvqV;|Ek?BQ27;( z9q94SJ?+#yjypO(=}B?HR7Ia!R{DXwCvj3=0Vnq6QSc;U=G6ec>*5W^cb`iZkK%2j3y)SJ{UfdMz11r- zt4=vNhlTzA!z;3x=bh5uHMS@lpr$mcN;k(7OuXSSFs=iT?K~G9bg=I@m`33oc)VUu zihtE(B11V1@)${rf65@zV}xh}d6dQdl*bLmcd$eu#V?vFtIe65c;iWH@>tWI3t1yB z$I7iZS`TIo&O5<04B$PTXQG1+_6-NaD69nVBLF`G)3G+5;LoxICUAHcfWHP%1n_Tq z5+DyJL*k4i!x2UNyRl-_w1#39b7UKo^AxTHu*n*z4m#*yUhod!Z8FEY0>Fn;KA&{P z;@<)MKL8c`t^l|S#M{X%Bf>VvkC_vF1B1VFsZDe4-Lxpfqg|;7THVK=w1B5wtn2Y(qwP5R6YlVg)2# z3D9i`+nDUcRsdHYU}M-p2S*h4*(jKC84H0>*m3n60M-IF29TSvA!8jRzf$DscoOv4 zN;NKX>#~4R0OM6uz;Ae~4XFtafsr(z%`pC<+s9yb^_KZ2RRYDh1%ZA(fYSl|AmK$1@N_Aw4yxv4btik5S=h%Lq-{d^U;G7AjB<| zL5sHm}UyaKv?;{aDv-41N z(7|5J%Z(-mYSKqc3d<^Emo1$dy;Q^@APqgSDG9*12|2t0KH|zI#_qMi#2y6}j35xN zu0{HNxt#X`f`$$ldX%6x*?7Xm0G3c5?*qfI6mJD^3Vf_WggbbIz~lBT=fcD1!N@yr z!5THn@+Vo*TTrEcaSQ$su(a#TI;)8ep6-~_C}`kxN#gER6C*e0E8`2TF%Zqcef-*{Ap_iEvIrZ0 zrm=e+!_VUdnQm+X;S0=IDoqlR89OH`yk~7(tF4{rlwX|4fbCxG8&<1@s# z9vN%^;dw2WM(~&r5%eaXQ6?*}0@z^XpSoQZDe5v4By}t({HeKAf7D) z>}0ltq(oSSG%+tH-Jg}wNIM`>jf;T^gl-^G7pSlgtO9^+^5QR?N0Ejz0Q?HTmjD#z zalIXMa73WhD41xykw5#)96?AkP~O<`o{0tA31Hv=-55?xJ?{6>#1~0~*Vhfgv`xAS zz(sTHdA?hUTztT;rGpL*VF;^|3Sr#*+Z^j}S?lGRh`k-2b)vz|0N&iP$)_N24SQ_G zQ`@-#Objh}K7+kgd1)5Rd4fQ|mm<|su*(+G$V!5Qd1pmKP-bpse^? z!;wy1B6ZNg;S74{iF0;mz3hViY%k}$ERW2<@C z2(p}kAL=0jYFGn_e*^GBvxoGIF%YPfHE(&m%Gn@%dN6?6;W1YQQAWeh5SHb#=qY%-XEek_6jL^m z+&h{<*LYx=1+n!QW*LKuOCes@^8Q8u=K^@X5cskntlYY>hAod*F)<#CTuwlf#`@7Q z8md(F%C0V6n)gLj34U<6z#GPMREZ_!eT4~3(EagRUMd&jSh4b)ZuUPvlF7bxEVmHl zAP--~Zf>a<7cZNd;M^6EONxAzR%-Ci06qfa7o>skvmhf@J^pCmxoO?WmwqMEjxOU9UR%1&OR7dB9H+>6;Z6liAWOL zte~B#-&fzrAaI>u z?e-xTOQ@9fXZ(!l2{QEg)&i@nln5lSZA$ZS%|mYx!xN0gc6B~Bp^NeexrRXz!ejX< zPsh(|3Xguy@-GA+0s&RiG+b8XOQM|U7=#Xve9TBYvdJ?T5&`+(z25Q1oM=e{{|rVS zv{vM4B*!QK5jMt2^YkD*n3NB^7C*kokY4Wd^N~Od@6pKaS##k%NJ-($>Dy>aB z_gn>0zi7GmR{?n4JibgC*ya1LO8i{bUpx_mWFJt;LGRuLxvIf>nssYT_2YA#PQ$+f zSe$<9wm8n#Jpg~^HhL7mKTUf`M+QFb9?(`iKOx23j8(SB#%!3U@wHFl&b-zYp(PEr zX6$qxrD+88?R_*5%TuoXYXJ6z%KqCa$1yW!?;O|kF9428cz-@dLAm?%?3B-6?I;3C z_^N5anDSY&C2^QRULw~EmT7uY|5VHNe>Y>#eM{AU-dVnx27%qNg8D7s-2~nNa71FnVM$MJfmrYtL-nn!OuASX$gZV z?_c0ZYiUSR!`k19(r#A;d(%7&g27TZfd6AZdWuFV?7<2^6LZEL)WFd`euP)3ML}Ux6b%k+ew@2mgcg?%@C2^=#}HodP+lUAg<2u%O1jL zxB4mVhZ@!Xtfn$@TZqh%NHvupYfAxA);05->3{IW)fnBY+wJ8`3( z2?#H6F@%}$>o1-l=$!-}cAsWiJP`A9w%%es+%B++dU4#s9+NFWIgV#3IulT3h<5>G z4A|{6PikT&H50((7_0U6iBN7HS;taH&UrawE?xuX)6F-k4P-F2BzN7=Gy2edYCn4V zvpT9Ms8F|UaetVi%k}d-*!WtCD?MNAZ*1XUF9^g7h?qm&!&SY2VqGA`W!f;jj)u!adRfnM9w;mj zT&{hP#>;OVJF0-86MG+)HGNwSbWZL>pC$(?dSZK7gp*NwF8ASy*SU4*w-3_QpXOpx zY50n(ooTrC{f=^fB4EqrmpYI0P=uM{zB$k3(Ej2Ir~C0+3HyJlSS*_5xoNcYI|-kw zed*Zlb;ng+Jvj`&Rwk>HAnoY96+%oIM?2U)0?vCEsf_{X{*W=Igk3%qrZWPK;XzKN z`47=zM<7JqdANKhv7LqC09U*X;;WNEQYKcX^p(+;p7E9STNaxjpLK3 z@D60DX?f)giJ>ekOt!> zzY?%nr$ZHnVD}a?0UgBadzq_VPQv}pkS3v6DwX!k_atJVGNJs+1mFcuJjIUAo6NwZ zY6LM+Ia>}*o+a)rgQu9#FI>tn@pxaHVGzjq4Xr+YBfsY-9wQG={tHi(f5t=O|4xDT zKd$_F#$jtpp{goanCZm{^l}W~6jU(^g$M!~LWIU3Al7+Isb!dqSN%&(_1gDLEk`r5 zGHW;*v~$lEZ0WDb$rBd7B<%4aL%TBiG3xp-h{|SPLhtG>(RWO5+hVQ56oD&=KNv`w z!Qdv5b_M}1%5P@k?;ql~^@gUj>cPNBLUnQjtK2fM6{S+Cl$N1Lgs@S?nc^vtb>l2m zkbuA|!npBy>!Z&VBAFTSXC$w`MQU!~BAcUTyc;C6T^H1s0A?w0y?bbz4o@iSNf3KD znqQ3N_-!yMh@lXw0Zhg#FsW9csuq}Sg`{etHDh}uLf~iMDZrnM-Y5+Ds(#&10QevK z6B+J>hN>y3NFAv>rq`tK5}pi}I+9u|ewE5qIXq#W>K`8DD>p{_8}r^mce)iHn`}vo(nEPc{YH)X+`P!FM8%ocVw6Zvxr-i@c!3a;H)xN`T9I@ zR?22yZTY{M?fzhnLw>7`3;k3=yI1QNdZz1ta`i#Hme;yxbFSd#3-;&WN%QrcO+PPk z0iykbs4pgTnbIDuRZhdJ7rfo;*hA#5n;GWa?%8d{ryX$$sf*+% z2X^s=H2#Fag{4yI;r%&_&@nTVZk|McKK&Ep91t?da9vs{T-6k#f`*AWYix-87Bo~i=^s{g1vv* zdJ2}P5kg9a@J-fZhEXt7)=85FH8mpnY=*k>*&`wUaJ*ZqU!U;VD_qon^8q+d8V8~^ zAU&TzVtUcsQwwr5=hvj1wZZY(eUProu#MNX`8-Z9B3TdTm~68BmRjuwNpn0jSV?pq-CR8J=OeScK^;G0jFmgGd2^h@r74e!ue=Rp?{ z%K8q1g*J95Ua*40MJu4QT|$Ia__EGg-1GR@DzoVEdcE@G${L1tPwX-Vpxyz3y% zY)>Ro-Rm5Mb~v1t6A!fMC2}BfNt>$4BwSo97WZZQmMTf5M@2OPg$kUt!NvY`Q36>X ziK4O}19KLPF<{%&#Y;Y+l{aCJSY?R3DI|4x+9#O92?>fLP@LR-S`!Kx-$yp7&s^hJmn-kBEXrIRjxQ%m_${iY(k5&S*N$KpVMhzcn(Gq z()ja9W}!YJna8aT0w`b|MZDkVGpC7bARU8E5m=ibfdEZ~ag0i(il`QLYpqkY@{d3~ z>J+vQB-S}5>b@!;HRDjAIL`;KYFjNlf8<^DaT4BHDwUGRWob%UqRp|IHnMG$2u2%$ zcBp<@7lI}NG6@c{93Asatp}D$ z3ac}7E9TO*X-=VsIaW`2zK10%mSWM;MOJmHTB*9j9d^cHb;5fq=h)}!>0+>b-!~2a z>ogKRyAS(pcT#{R=J5DF>=&fG-^wSL3u!e5?J6Qi+US|i_ulom%uP~k@B7U)K+PzX zO7~8yh|R|HipAm=ip64T(_~NdOXv{=y0ZpaA1y+Sfr8UZ(9WV0*z|VL!{B&>U^QgY zh?0mV5wCv~a$q6E(iNb5cbzf-HzS+waMY5|Wa}Le6hUwGSPx6sYUf}&_30v*h9Wrz zh=mOAnGAU%S(33=Ms`_0;+`Cb!xN+p`_NDh+#vNxz%zqCs@g!}^x)NokCA~|b}ZC_ zmBug#s+9q@ONd6)ltiS7J%P$VZi_OVaJ)Q@%4Mw%&A`9_26ql(Y-Eh}yxL(NQuycD zN>mu1#|6H^HR)-^o$YsPixF25d$rR^c!nFOjio{8G7lSE?*BXc8Py(4865knLVZul zaeg$%e&2BSuC?j%eC|7(QTSGh9_AJ8b}W@je_1RR!vw=9+!C!fjaE*RcRg!MZk<}G zh855)s*u)-HI@yRf^eB}@8eCx(FU^14VrEc??!R80_!dG^u5k%F*Jlu4QX(r(P4;C zXGzvQ1fCS@^w!`wE9DU+a1w03Fx2o)2K?U?mRM)S8~3Imh40xxUmdMrxJ<`G(0X!g z5mN(kho>w_-fJ9B^J!e@dr)`vgQ6M`N3%Q`Qp|C|M|B`eN{U;F`DMmyAX^(k_Xe53 z(n|LX?Wu*e@C$$Qix0oM-7n^FK(W|qiFr69P2zn%NNpQed!VWd>_PQgX*H8KUejb0 z&a@u92FHU|i&5CZrs)CfxP!SopcM3Q%Tm#>8HMREwRhB;AN7cQAy3hlsY{`rbf)znw8LzhS15yRH?AVo@`&vWo*F26BZiFYT}Y%7&7Z4pT*R{(-TRv z-IZ>=*qpl9cl~0waxn!4H6wcB5rjWWx#@>a-FIK2+@Eu6v{`{FFJesOB_;!bAkiSq z8{DFxb1(@h9dvL=A;~Bd+C**VhID(ITBuN>`l!aHA5LQTx(d7u!Ox4N^ySqq@bR@a z$G^ixpWiv7rry{Y#WnH+?e+e^dMOZg|4urAB=3MVe1`61z980cVon<^&RV4cU^98 z2k-6wXb93gOwZ*>lx%d*NVyy8f=~6T!wg|^XN2&VF%~W~>P305AjE1GzvBUt@iSGm z@L^pImiztj$5>$&Awg;l)4gdb$iVB%Lv%@SsGy15#UbTA9v&<;hz zdlXhI_IUL&pMru>P|^>m0OxZR560^W@ixj3L6VO$*pf*83507A-~!7$9wW`;RuAp{ z@bF4VoIgvuj)6?KKs?3RF*$~=?i%{K3dm*xD5Vi=wby%~7&^*b9Y;R=ftmKeu%SJz z5K14rbKRK8W$SIOYRVb!K@j4=qqSR5JpDjjr?43RGoJVAJ3TSWIfT*bDn(ceYDnLJ1j z*6tLDHqbF7a65eL23sKsSS20Cn|Xp>X_g7R$I7JCDG_8-nm>1ps~G|lCX^rp!y%HG zELX98_b_&kj6-P!&#!@|%b|r;aI(E5o5WKxLR+_ePp%7F`uZ`N&s+8(;>1Zi?+7~^ zTVev_48pf_GFUcP8@>7agZJRBk#z+S-x!DC*q-q{AK$WT6Yluc?Wl#}4T8L7Q{`}X zr4k9_DF{I%M5kWtAYiVW+PUdZ0X&yYM0Z{wj2I7YtlqhLFu-x6Swr}_N_68RO#!&? zSP#I%Yk3@lybBLDdO{}P4{Ws?<7x&z+M3L4XcG)ij-XQUu&C>JcwJ9`Xkxk_G~D05 z(}odUc{^}?DxB_Ww2+K zLZ0+4C(6HfaCB$!zQ^vp{p8hW?o=^v6oM8We!pT%P`bc1LCrWmm$@&0Rw|WRdla1I zghF!8=Q51C&$N;LdXo$MYPZiVDa^mi9AojVE$@Hb=`1w5nUgCIHov>?Hf?vlE2Dnt zJZe^7;Mx|xbyn?8JudZe_k5()U)lQMbMu_KMrb86S{X=mFQ z2j3%PbL8ua)e!h?WSv2niRXgw78g&D?YaUuzT<}h%W#;*{xdFl;FHx-ERUXy%C2(| zmyd#w6_703r#Fy{sYqhecov%{GN@{S3@Zr3sG5Ds7deHW&$TlMuykmNiMWiIbx*gK zzseefCNT5zT#&n@QmY`2BSP3XVzL6@=n zoRhS>Aw_QfLyk6no!ibVr+-x}7LQN6fJEtS+b~LTy1h&5{FDxpr2H56P`uqeNbXoB zny(?L3>Ebv-t%mz+5!mLgIH*6n+yz%*;YAwLcur0%GuX-qPr;#i>UUlLsGtiiA|8S zuSSQc#2X~NIvw=z4kMU{>aJ3$)JXY$rC2PU=LY-TP1}((7|pHBKk9@~zSQ*I$xUj) z4PC;YyPAJ?1FKnk@gC)4S$rdO^@U8taP;xjb=&ZIf}LZ#_22=gY&)=1!yy?pV~6A z(n_$6tihK`rBZ7{omQAK>aUbaCDSL=cn-gG_x#i}iTE@{R#jR`-0h77b;cr*V=?qkqI1kkql{ zzWUzIs$~9PKP;l{TV zE9@v1i$Sqi{E4fU{F_p#^s|I7(CGhQlF-k0Gwj-yZC13=HQ4C}QxZPm_FXYYTeWMQ z5bAmWU!LJv&JE#a?JJv>tOe&qUh0+zNxw^Dh{hagZJRTs?@!oHxuwN~8|+s(Df$Q7 z2*h00G~?gs`f4WiY>1pE(~O1A0JUP56T)dMAHLMm)vOs0JI~Ne!XGM?N*9z$rBr#r zdeviHq!d#^qen|x5c^QzM_t>vX3@tdAn;r;{tXpMoJSjXyI^<&8oXmDVnyJ9T2~v^ z0DK_En5j^DC)xYSGmb>9%*Q%=@m!L$g*^Ia(-5lp`c)--dmU7}g@^oggh z&C8&yY8VS6^aXu7=IA)Z>guK?M5W4=cM#Fr7m8(wCzPEpg?Csx4$|Fpvs^f%R4V;d z%65$bz0v)LGW1 zNk-u!H^47)?ln1AKMA3WE!^v7_J^JKkfeB&arH!(xmN#;8M-y-+CXcZ=PfB7)e6^a z_V*kO|AlR&-}{=DiS4>dSy=64;~7XMtPV3+5&54CwAfq~`cC&HUt!l)5+{K0x3;Qz zm+AI|Jp7prLd_V?W(7Q-uxn?ipIBd^;gOgMIl&6dUG)ZT6xl_>g#G>Haaxea8P@^w zqm1x^gqr^bR+1;asK?@SBUOPM2$-^hIAX|1!`B*!xmDSCWr_lKt9_~9kNl2Ta~cr+gUNT|Y_KzM`Z`0{Sqw{ux;4GQQH zW7{V_>34Z&Wd{OyIa6%KIQ--ku((tz)mnmmNoaJ9I@t}LD--tlM>h)_Pomk|Fb3tE zl)&UG-2m@#F@-_5j7;k~{kV(n?~l?_!?0cN+Tu;MQ9*`VG92f;k_9eU8o9y#+bs=h z8feTA?{yiE+nqPiYH&X2jO6W2O>xe4OPmh@Gl+SgbpgRQHK{i3NQvH=-_zz&sT3uA z){3J_rP4Qw#iEH1-CZmedrGBJs??$vvd%0}K30YS_r)GU(kE1ezJu!G4sWyWq`*z4 z+Q9aNQ~*bI1yyb;nzA>-_X(AX=8X?mux(4tsygNK!m73nfz2J^K0y1ZkdH;k<1A#@ zcv3MbOdfChL)NX`+nZ_+gnKYQVt+Euz(@o=rHoO9ny<&mC@X;CABN(|`> zEI6iz3JbD4x^+^k@tDepu(dkMgB4SKiQb&_zOFcau;6uHkd?XnN2B38s;YL!!e9*+ zddrL)+aJ}qdY$m8FPexDR}^RZe9H6$Qu^X>(rjEaPqm?iEiL0;kjD5X;A)5T)Zwg@a1i)Wj+P=vCqA$}X!cfM!?Bj08=^J;d8^kX%2BBKj`o6m-Ffpct zSw2YVs;b?{u7YVBCb1GHM9cVGzuqW*tSO#g@#6Z;;ETyVjP&o*fuTmjx~!pOGwJOW zstyFat^ut*=;@)Z-6u(Y zt=I3naEaeD-YpiKRMX|JgivQUmJ}i*%+iIbdqRX$(L?NUTGyjP5uZtUuv+oGmi&Dq zKYnt;wjXe_{F_`*FLpt!uge7lP^cuh0rveD{6QZ zq@A@}+faQk$cPt>jl{VBo(XFV(indgjA0d?S6Ru=&Q>urE7E{Qb4g|lbuHtnpC_r4 zwHRfnQ7w4b@vMb5m`O?H(hT%;=kUm;9r)#a>(HA|r!Q!zZCy0*qX79oR)~{SgOwoh zXHgtp8L9}MS@*GoO*-h{@IadKk_fdng+JdVV3~9OlJG2N!Qfo7)-~pf!MMRtkUg(` zPT%&aL(P;L%|&$3bCOl4ZhT}@FfnNxlgc!_3y;KYTz93DW(9*48u|iGmJv5(l7-BC zB?$p}cn2Lj=pYrXPxfUlQu+0k_jQY0^%b)Wh{x|B;h2tx98A4}_>5NS`KS5*Vb@q%?j=Fk*vzr1$9dvNSqn!_Y zuM0-J1IE|qMAqNMwn1pXhzBL)_6&sJCn`EN5zjww-jGN@>j>3ogpG~@8*!8bx8E=p zO$RKj3nUS(iO`M@0oz+IQ z8Q7VZ{42p2T0chdWK?G!););Zq`=8pU;IfW;;D5zr!XE$ba&+iGk>#ItNp$47OaP1 zITMjJ2HmvaW*^zb8u29uwtH>|9UMNO^5xG&yos86IkZ656%qB2owZkj@C7h_&l-pf z1CxUFPLK4IY5szbW~KbJ8Mr&jWo(@+V?3My^u)5>{F)D*u>95U7$_XyAL>cOq6%G( z5DkrSG**U>nBWIIp6TWBY(K@qBVUDR_UTQkBBz-qq~OgNq8&k9@6jvArmBL9Gjj$3(rg18`MEsRtvi zPhHj3g)+y&T0J6%X#PPh?msHqd!KZ?;9R04hl%LpsU3HDIuoHBZFJDpKTNo) zw07tQ<1HlU=fV>knEAa{7hvX+=?Pa!_QGi$ht5i&gAQil$$1JhvC)-rzQ7g4G!1?` z`kvwV@0UC7`L~>W)CR}zo|EJ5#<+9_=xA4n@*2k_XhyU0QtYbHuI>E#JLq6;97vL$Z=Nn2&{UU4FlDMm~0~-`$S?>z?eg?I;YDHfg#=)~zgizM} zOJ=@+2C6)OWq(1>Z&EG*MG*p0sKkQzj7yA^ z?Zi&L;Ayt922-~PkR=ZrqEUTEbtfJRhbfq1Dp$vONzZcbFAR{m>jDzVbHsBMGGhPIV2-8zvqvh9@h>IR`15+*1>{KLv7{oj>s zA`hR;5&}+iHSn?synu$rx6}IF>%X!aSXd!(rR*dZJLup^hR5IwD7si)mVR3hNx8m;Z?(SAxi!JV6q`12lD8(12K(V52vEuG-FaHnlo|$CM zNY32c$w_XW`6X6eRSp%22nhfHpeo2qYrY?$|0M+Y_gwR@Gx+@gvXfAe005ekk)JK# z-p?tl8ZF z>ZweBzXJABP>}&|!y>_f*p@z86#)P;@Cwor+J3)JdVI63^}J7CjGpooN$J7m8nRS~ za5D)o)M1e@)DeickQl1iB6ASlz3KXq6Y;&XGcA;YGTqu*dFqEbCXP5FB~3Aen`>@+ zrh_@ZW$A8IaKU6%Yr$l}gw(cTZSO#%y6bRW^r_DGtZmU0=C^%mBJcmp!g0UO!1Cj0 zbiU$fI;2`^B>%Y)*A~7!>mqw9w7b3N&LubAFDCV{$2KQ>f9CV}LS{e25E&HtWKr@a^0Pz#L@6}wcte>%$|SlhY!cTed?>xQlFf^88z zLkA_H#(V|%3A$mP+lk{t^yCpB{D51)8{#vun^@6Ds!7)0ploWIFm`A&^bceS)~RM) zD;xkodWQK9e-CVeEmDc-kjMqF%4T%7klZV6qaq30DXg-tW<{_4d&u&n@{Pp=NpNazIQ z^gxvFCmIJ~SLho+6j50IkElK3yESk%^ZBKr?EqIGn$z`_3Kn2e)Q^C={|3rtUn|q{ zZVZ=r#s)i_DO@+PAE(Mx<-p)waAm8fSEHCzgfcdHBE;y!)5a52J{QC#l?zZ2ClAId zFDy?&4(Qkyz<~-tQJ+71$bWdqsAtpdProDp*5MkkHuV^0$=hOQaDIdA zF&?9_H=C9p{&1-!wnv@OrRf2CR7@*C&mgWOSI~HSP_O#KpAXqx*Qn6n6(beL%3zO| z4f@aD7BNY*T0>Qgplk zi<>9z2Q@aYPNu91deS%uOf(`IrxE$X`N=uni@=+g9GU8uc z=p96Z!0ZOQAB=sv1T$*YHMk0COaY9$xFmDsn5!C|AqF1FR2LAo)DbGs!s>T@9a66ZU!t zm@N8Y6|k|0UobQXTe^9bYvibw;ai zgTD;1$T#2Ee#3t{wb1?KEJ2U|8iTFF&cjWI#_ktYS zl>O&UQ$@!jp<{2l_aR(lUoafZ+|o}`8wM_dDA1d(7p1ZgHjmle&8aY7G5p}&D94pB zzB0^(*;pJS#hy0~f!==3`??DzP!s}95d;19(|)<&Nhd|W z_qe`9-K*2~Q_4Z4&*Au!E;x1;eiTkj2J5kKoRZdT5JJr?4yV1wEZJs)H}rTKc#MXY zPg^kgk?&dDKCVBaCJz+16O(X)sx*BwVH^7gJ{LldLA{U;0dn}$;p^9c=AleS5I4Dh zZcem=0kUxv=BX7l&Eb-djQWcG7*aNh=)^M$LIlsrChzljmHn}(Ha;A?9aLs- zxKb&o8<>X{CUiAvZP-~bW=C6esZq;YjXeDdZ3L1Z8TDXV#PN8j067AYGqfjPS{mL|8Y1oB=>RAm4TdvhJOPw1)+D4Y+nZ2!QHTz z#gYH|3wlR0-?JHOvpxSr{Q6q6oz2}u_23U8XrP)QhX{poIXLtEMtsi0>k!B0yzdqJ z-4vVKk#qBm|LtoZVM}sFdbsoDtDOb!2>tsz`~Wks`3PWV&F93fDL9>PK5PbiGOuV_ z2BvaW182>EHeZ;Kqzv*E=E}A8l=G|xvB)rBn(Mur~ z&tuonpIXMBK=)X(|D4P%<%gV`uXl~~$63umUGSbr#tD&*e3IXGvbi>ms9yh7wFYMN z0(nXALNgQHd)=XtlEz|>wx$8=(;dD$vr4+#V6#~hwr+a-j6$l!bbn-@-;V<3%pCPI zdi9rtlTE>N=fci6!dS>=4U@ZPu@BfA7uQF3@vmM`t)}BfJxh4{?8*Z@ZMYd7vKr`4^xcKh*1CZG3rGq>L zR-&w&Iax-QC0WMHYCKviWJGAyt=p(!)LLGqnh@ zaLm&;%gS*Dw#i@uD8e=D#@<(&wURE$^{0hDmEF@32y7jjrReGvB+V;~%JF zCzOmYyP8{-6NY9(rNdyu0DNcs(X2hpHZP0df@LF;AYVD{=lIWeN=GQYx@qHQkT-N{ z=)QK?8&oV`-~Wrw&b&=ewV2r)Zm<3ZsNRMf38VPJbk?s@DxM#doO*1Ptri3rf$L)8 z^b*L_?TA$nOe#1v64Oz@7AKv8i%7}MW z8l7!M-51QL)B?OB-(%pR8SAZ9V?CQXw*|4fWg<)nwS?aKMCT~z3~wNBXsojnonUy; zFgkO(%l_9jr&u zFtzRDY`E$SW@RGR4r*?4a8Ds|mRA>LpNC*gNG!v}8?hR;g8cSV?Xw1 zFel1_e{Z$yvQ3{}q$hSApL;V&(Wk^u0g?%RQLdQmC4C<1FU*m#bT$I@xiJPmD4qESRBArQ25hW9I(el?44xS2W z6#_4WM%Yq@Rn6E35SEpzafh*w8q~e#BRO`y%QlbW=vfI#Rg)p|lD`FyyH_ejORtg4CmMv0C0s7o|%21I$EqXRQ-yRxB;TytW;2SN|Ml`(8REu?OsLB z5jWsjTpapio6JE~SkEMGygn3MWECuu*q~+9XVePA&y@x@(|}h#9|%u+%Dyfp0ILv%?Wm z>PWE0b;V+wTzmxjQ1}aC{Cz2L!rLC%^9ENL-Ymhm+SH_vj`%>LKk)26HTCs2`sOFV zQ#d58-7>%RMfvPINfRk5W|!6 z1LQYKz{!RC?aP{-s0mv`@IWRuTm3f}NOL~Li1Fl^%^S{)ts8$uZ!oM8M!=pYU$!R@ z<#=uEy;TuTjt0Z-zVO>*uJ_>nl6oUPL<)hlF?5pMQ>Vc3-J_Gp13cLFZ}e}Rs-=L* zgwt6tPqr748Q5oP=BC~F|2bjqN+LplTAb=0O=;viQGDjJmVFIcFza#uKb>A!??|!m zha0h|;omb}jMcnQ=hkV9)H;{A{Ee1uUwiw^^(;8kunxOMK!M*~d_!snjpW4pm@K-y zcnhPv>d(BDn%p8G<^#Pcoaf)DQH<+AxtF6WgZah>A+#j@meP%jP)X6xlP#j|-0#Z< zyB4~j8${l;dx~!|XpB*81Nwfe#~!V;)Iv>u$DexDbZ8qAJ={78z_Wn*!AuI%%@@Kw za}R_N&KP(z8n(giYkL>vj&9Z9rHL>j#5kp<(QjDyEhlAUyO{y44^xUFbUxqvrty~> zpjB#i9Y{f!^3L&Bi@kzg4D`O9{5>*sD~-y;+;EtP?zs7AQmb?UZF{KlL)A4Y`m&sl zc*jQcK*2JSgT@SJCl*N?koDe=+-U{LQy2MPd|^n?Dz*=YvpJ&DLXywO-#M&~?l`iMV5=xD(&?)f+dG>E5Y(cIf#}WV`~T~=pGPjyc^??&^Wv-3!Z2B^pK^|p3~F*eJP>Rrn~4a!{#3ZhM8C^gd;y_9=PuC9z97dcuy6* z6~`l0iFzzFrC0ld zcfs+wMoE}QP z74pP@sY$wFvB3}R0t@=g7hQnpx19*3tskicVW(IN6S8w6a)}k6RFh2@j+tvF;MTmO zsEWVK4og7fXIE*@d~t&8W{k9|hcr@ZP+xpOr|dB=L7O$Xbb&SFf38%WYmbSLwaDDo&Jd-MsTQ6( zAb8`ZPtjDe$jwz$H!(%Psd%5HsNVuxEHBn3ia${$+}<`^5irj^rq*~^a-9YPckWWhz(k3Q`bzJ z)7jKC!DLJS9FbwS9PPi^V5j-_tw-$@LF$VsFmW1hVLGfqg$=&geul7WA~LM>l*}<1 zY3E_H@Ny(d3Vk zCR5eCQ)5j{Sva)uc=GTvsSY&N;rKF*_}TK}PZZbVz1t!#HGRWKaPf~mfgguC^GGH{ zw=sjUC4V4Sa4(@*5O4I?U(0qbVmFG?I@*8DEReN2AH&joME8+&I2$^P$Cl$a^?P*U5a-eP`}y!HSb)uXq(reVPR;Q1NnZPUzPqh_xjw2X z`m?L04t+Kp%!B1n%3tecbhQe;GY3mi%m-+KBXmV{9=^Z*?=ipChArmlZ2`X6tNmt) zh|q*x4HmCsm;B|ly?{sVWAuA97YmeqyFZpqocyf(t9`isy7ZL~ZDi1epKM{rqR}kV z=&n`Mb|+d%VwY8Q%Y;XiH^%?8APSeNfr#MWRr7s`-V)}04`byYMN=fxaKt|YBvz*3 zn;;1dLbhc7#Hakynm`ME^j?(?c4+H`9@3m!ov$@1Xv3`2sD*qIYzVJV2>n}5g zao8uCHIW<_dvJ9SYd}<2sc8F>KncYQR^>&xIGw=_4F6UGGBf*G|G+#l4;y?9R-*JV zL1N%+ZSL9rBwQ?fMzc-lDfT_eF6$SF{Sp_mRWG16U#m}4GQFw_nG413PguTxUVI04 zbSHaX3oTF3+9clM%fEJOPZxT;NPjdRjs>r06&o9G*6hY{N9wKVtp$#XM*z0`Ic-|{ zQ|FRVk>~iZKEV+h3mr{C-6M@3*>0#l%H||&w%D5uR1A>Zrg%=jRi}dPu~-4domhKh zW)a>rqG?mYCostlxOU)31tCT?nH0SiuLEUjSa^Xr9C{W#hYn87v8Jo%xO?!llgo|P zO)nKsmqNt69(Lgo2sV=x!sxZZLB#cEG{0C>hX%CiXnts)0NX9%hf9#g4V^*vn7VS& zM74c`ScU~Xkgcn1)hDvamW!Ywe)2FeLc5QjFr00A$h3N1`S7TEQ~1HuHmo{hRtie- zHIuiNOi4nJ4ixYaL2pO|rg^b^S7KQqp2Fx|B*wEN4b8?#soLKt+PV;8A?W~~rzQG) zbZd^A>phz4jPxc#&v?@x|I{t;7tqdw>Xb)8G_@goyXa;ufUTVFahDusk&p`c81Hhs#tij6CH5yTP+=)Hda zLeY#0Jx+fcF>b~;Z&-QwhHe_W42RSm0 z3|((RXz{SriR%ONRDCI*nFUXs%$yHZORJ~`w)8vFvtSBg2pt#dR6JAnEC?ZOKB24n zIx+Uedk$-eMF_=rMAE5hw&%Kas><~XZya^;3MVy_Ktpx4y5P)YFVN0J+NMt0FLZdP zn@w1qb9!pZFz|y4MWnAxP7vvS@|O&xk}5&gVNrt#N7Z1o+Lq3;$1I&Ls4pZyroS>@ zkxm~2e9(<44x_QKHdiI);n%o(ixz{jJu&n;k;bkPb5>CHBv!v$HBs{@FR<8ksjl0U zvSnMz0dyIt!R$ud+`YyQoWEG|{khaSNj&xY8W5nU#yFJoAgaralH8~f_BbdS#73`3BODH**QHk zr@uQw3idZ$4fSF6U88v5wH}wnsWg>5>OWhZeWO z+hC8=WUfOSh_9^L^+b10WZvp{v-ijKkxF8v5YHy;jH<3WqE$L_Ir)@Poq#3o?rE5L zRX)B{V$Tb#9?_cok~0evvVAUkz=r=fV$5h$uF9oh{Hfmb#SBuelN5gixqHkFJ6wgc zfC^dnt+r#GYATf0wPhanmncv7J6fJ97y8~&Qa=OsTwcijOZr#66HVU~&B|@{BTGQN z`&q-0ez>VVG@i~{%v93u20mz~ZbrAxbN#b0==K@gqQtdq{U7a&MSOI~1;;ziMK`jn z)D$Qu;T!hORol0#Tz-0$2XaCL2J=WF7$u9E*%*@!=l&r$kS`(mlMP%$5fM-SiHNJh z-Z@fO!HgVwYbkg;Z8KDJcz4&CH(#e4(d{&+?=o|=*){X^6nN6m#Pqt~$A`q))a8eh zTIa(Y;#8)d-O`?5E^uUL-*I7vrLga;F7}SLF|U_Tbm=`jv(nZSRqZHD^7)fj9b#N6NC%Ht#K%!7WY+t4g;4H_ zn$Y*Y(=L75{(53Gm~!H4d8DJjr_;r=i^M@Q;RM`{PR#3Pea|zNN7~vR+ccJ*gRD*K zg{C3SDlEj2|(J~y)fcl)f!D7Po#P{>1VYM$fbG5$tD3P3gLCwTd zjcIbxGf!~?RlbvKO8;`R8~Ta{#F{R=;CTy9A(e^^SB@ut?r{4YruD2HZXGum-$gh1 z`jXbG&^SXJCm*9aQu3+M+TedY)Le)d_?X?FR`^=^{JOj4o{~-l*v8@PGCU<@_G_CX zw^6F_v~lrcyc!RSd`*1mS}Lf=8a`H-jnCU3pcNsM@P84N4Q4S95jXv{PwPmlX7@Vb#+LJn!@dB#M>Ta;Y1MN zMqunr5BX&O*d)aC@pvJsNRiW#0n$q_i5uE?Or>H9*AI!JJmWd~xCxN@S#D(+cFXGq zHtAO^S-_dUq1ArleYj2P_dx0m?O+soT68rp_KDCfK75_BPRsF}^0rzSa2*UotsK!` z)I1t#S1-nBx2g=?y0fKKg*uM<@&@z|M@gU8I&GST`%6{iTq#mLd+To>aD|?W(@TW4 zX?L~KTXNxz@tx@-0Ee>iN0#(ovNS`|&=6>9d(FLrUU8kqE;xxC7`cAp?GzZbfV3Gg9yq7#K57r!t)z(Ajhp3mI){Qvsh9K9f_XOf)nV=fy7#{)6 zS6~|O@<+-FFw*CXQXj}>Br!HH(<0K4YUT@nWvkCVK;P%l`T8WUOHG+2qtm-NIvA65 zog}qf*H{#ukhBei4Fz#l*O_qW?SEyhBUY78B%9EL9z@J1*QC#-lwJD}CJeHfpJ-8q z$y=ykY%>rBS6|m(%q~r2) zi;&&oyWr|fQ`2y>kHHHKUP%T|grP0$_wi&7orC8f<+-<7H{pfmEro46r@-EEZFiPL^ZmJB zDP*+#hSO=>W+QRh3-ud+_o2223#x`c4|(j*AD(A^sQpAQXf@O7+O@0IN%E=pJ85&w zM6;Tc)U!bli(^fD>KBmE3BnmA8m^x>cV0njVlxrPREa!v&mUJejqT2*ArtyCZ}e>( zAc`rUoWZxg_a6J3KkNI$hgB3ga35kRxJt#3rsVbUgp^B2Ec(xieb;jsGDwiiovI77 zr!fVSe745BvkyDmN^)il8R~HF*uxh+&0ayJi-~1)`qEmKZvN+sa#t9CVpo=ZwH0l! zUBT22A*yDm)`F^Yb1m*`6Rr_W*JyhGp|{* z-$76IpEDAlag0qX!;m56z?L#EG2;qVv9&5YRev#1Ut!nx!0ug&h3<#71c$cU5auxT31-}i<&3e}H4oMhOWq;M!Z+f~^S;04a(Am_BfDyJ9`ifR z8Oy0IYlG~T3t_qz>K7e%(3k7=ix1k#6ALeOC4z_APp}L$CYp|BPB{%+vZo&IZJC#H zG08&Vv1;bGhZ936)MwfY@iD%-I<2?gwP&?uOKF+84^5fALk$X|7X*^y*HAwa7jvl7 z{K*xdTP2Jd-t^!;z>=E!!3Gm0i~KrU-?h?gCqC}Zq8f3LDO%43++9S_ozdR#GRRUa zj!4M#sq!mxM2;s@4V{U#`*^v3bkg|?AunwDlbK;T5v#X7Ma#kyv9ygb8P^6K{6}PU zoJQDCo|EOmzc&p$vHN%k*m6CFL?UTb-PSD3P7TFXS~@z~`TQ!AGuCIC+z33U1~nSf zNVD3%K_MQdRv!2}sWF%Gt+FHz3l|i_47b8BjH4MYomZixf9|eZY@SRRaVGv5w{5hO zUG2bO{VdmMIWSpdELFs9mg&IX|CqA8ARPk}4R7xs`8cO2q2*HW{+E|Y(u^{U8qaH{ z8Vz1jnX3o6rm-C2SNKcw)r}Qj?F4^iN^N|#Ph39i@>7d1h>FYecn9+D9B6g$Ni!_~Y zc6?bs)-s+G;G}O+6WyLuofu><8g%Kpm7^bo!3^mH(9Jlr`J5C&TY(s@LJLfU;Dr>7 zL`+34*WVw4S#i%=EbqS0z!i-aQ;24ymHm)uA)n?v@CQ#BO!oOB9Tmd05?m1?YY$*q zI2Pv~$~ykE#DrIC^^k9IQs`z#wa_f@OJ08~9-pvqZqCD>q=%t8A5}-b{G6NA@KmQSHta8L=!B z|FO4{;3x!D4NWWzNZ9SPeXuIamg~q<11j6yvyhRS5ql=aJl<|dC_x~PAOdUN%#eUL z{u%WW-7ROSD1Sj%$iq5J=i&25w>ZQvM2lB>GInz9*CDir za3I{PW`g82T=`SK6$JzdQ%5ME$5znNOSZ--Q~{TwgoZ;~CyO(glx8p5fi8T$vQKEW zRJqdtEF&$yEDyg#o>!N%;G#Wu+1#vym-I$-&EgkIPO4h;-)%$S<=44wbs>AzQ?{(v&lAb3ylcs zh)86(6nkM;Jwp_j3!bEbVaFuKAyb|9|n{ZUh7w#Ig*IOhJ2AcIl zh^7{*I`hUHbS9K834f6g=B#V*tsbAl zm1knL3b|wT;Wnu2a||gGG|U*&ddi1cD4xTXEkp=oxgjb*IOPZxzx7P0rjpp;>{%u9 zv2GLQuF)u7{sb$Z7HNWOT-0m#r$es@K;R&m)8F7cye3i(PJ{l!|1-m3CV%$pq#r(*#fYd`egJtQal zl%}1sJb!kWLY&NP9c{ijvkab#V9cSPZ^#?;oFDzC1nt z3w;fxNZQJD-Fu%(tXsi#GZ^e~x693vYSiOioNv=T(Fgstl1XJsC!napJD;_UCdbmt zApc7sJ)^1NwZ!YS&h|V5=q&4tMV=RT=BgM(Tg4aefRS7zAl!=6D%mTfk%Fkmv_jo}T2z--}je{ue&{>0>-Sa+Q0()cq#x8D%j4o~^lB;%cejMfoYW z23y@Tn`Axb*sxj1*7o#`rjD6{4&vZUy>U<6X@LtoIO=P;B%@n{cW-VcrukW>29?GE zBbY56J@t2WqEi!4|0Tn$Y`QD=ohJYYM^sB@v;b!{FvS?S8W1&BGP&cl1v_UXgW>V3 zB_Y6da}NHDufnijGWramvGAi|UR+!E>^jnApAQe86@HY590J9(qB#M*b^_(}B2LC| zIr&@?f%`P$Di|#qbkAXCsy%hftZ+XY9xY{`5j?BbJzgcg!#gl*5X89; zSHhVU&D(bEz!WdH2fK|feYpKTsAAVN{WqAx{&8v-UGtsk_4XO9c?2>WP1hJ^)7O>p z33|>GLg=L8hlRmFY^X(IV;2P9;%81_zc5))J5T{t^&OwtG_7Me)eG$d7RbH0CF@!s z9Qpg;E?RS#-nQJaUw`Hf@2bux$e^qy5h>JqVpeclsvc=6fgV zQF{QT?soe^<*`j&&hHE;I^-FK?%sT@_s`MuM_OGwZ_{QB5Wm2K0E2q<*x&ci9dLdI zRcoU2a~DkK>;k(MwF1rp5Zeon zF{3|Y965$?sf$A2OB8Ad?SDw0obI;zP$_*n;x00t&l1HjMwf~~ncOB41a~faTxV4i zaFLz#%v*ObGR@x<*+;&k1g(cQYzI45i^-W!rTWVq`2YyTkW$|^`L?}je0{5y6~=ArOunJ{hXn# z{Mav89Ek0Qe(sSoi<_7bYP1)7W_ zEu&8a*K%^~g`naQ6{Yb2XalyzMqRj920SDF!jaXA0 z*kUUKjVp(-;5c#Uw5;i`gd8>3r(OFmDzv=|s4&m(maK-}Y&~+ieb`maSFO}#g`iCc z1P8dG543}M3q=1043e_uLTyvNt4tK}br$)J?r)@<5y|z=w9!2_BnP?=|0Fj~afdPP z+T5}l91>h8)cGPsWE8*$TR1`#D28^vXtbu&Grq(e>j~1ji&|v3G-Ml|3SgzY*F79$ z{i7ZHutXm^eD$WEQ3}&3MCzmm&vMW_e#sNlgpB>DmbyQR+us=Z4j9&U8%MR#1ks;w z6WtX{SE0o_TCiO6CwtR(1Ai%$Mp6w}N>M!%)*Nw5!4y6)m8i`ksIFH#i6<#=hj1uBh|Kr|Veurr7j$Ia!m!klicI{RihgcM+k_)Nm^ z&MDO`defHo$Qjrsfu`hc&P0ZF5Psv7pJ?#$BVV$Y+hFX^NJXKlXIq`?VJJm@@H~tI~V$B-4c|G5Ht^ccWG%ZaIua{x7 zOU7GNy=cJ345eg7rzdF9byVZdQU%ZX>fTefPSM^A>|m9 z0U3**uzAbzV4SLPtf%**W?h5XjRaV=RNiZk!G#aL=7>FPscvU%od{!FOj*9TvXAH< zj`Kbgs<|8x&*P;Lpe=*QCz#LHZn;+Z268okoxmo`IkfwjM5k%{HX_ zX4?ZBg8s~!U0^2h{vjuWzsJNjYZ!e%U#k2NU@_owUfj|Mx55-$BQ!aqULM3b(o#Ko8QQIY>|%^ zD3wv`vnupyY1d9vz|{BG*{-MKE{Sj7wqa(4@ncp%+%!?_jpgK3TK?t^o%JA8RAt@|E9Em}wsPzh(DiT_{80`YrhprvU5~7g7x*-{SI?4@0Z$>OZkzkMf1K z1C`DUmM$B=;6LBeF6l;uu+n9(OZrD+XSOzB`@k8n>{id(Wsmq2(X(9(la4iudp7In z))3}}ef-r3YWQxq8Y>1D2Oe-qK@ibj%J<|rn<89B6V%JUvHi3Phwd(rg2=HXZzX_i zXIYt}x88C(vQ z2CF)ZHseBp_|FhQN&xef&AIJO@Z93}z&bbHAQ}fYtYdLvB}(Re9~tu0)4j-%>NDw; zIXO)jxg{bEKK+(H%BNRJv2;R<4;V!;`R8P+RzJ1_((cwvi z72h~&yz{11J}#F;IYKuDN;qjxW}*Hw6#-E%&=45p;BC<}CiNRm4McBMx-F99R$r(5 zWZkc|rijMy$JI&5IXBV>L(Nn3GQr&EZ_a^_onvPwuP+})FBb5$kvgpgNAF*Z8o~6n z7;OD$Fzh7?oA}~z2-bK(tRtH`?o=6W@WVa>Sui1TF9UkCEZf%9K8J69i5uVjhr2N; zW<6;t8@77A3jPh-0c69ZQ`*fXz1Ys-M$+kpbv?=iRXA!8-u`17%~Gx4Zz9u5W;;Ct zeuzE0iSA!9**s0z?$7{2;J>T+R7^cf%H8ix2R+8!m4C}~J4o0)y47m@_nst?d#&!j z1vSR_;P=(oydcay!xS-m23B?je65l5iWaFA>P8+uLK!DRl3W?>XkUMH>9B(y5{5ja z9x+M#C0wLr91*aGR_j+?2XN%>fW@1sp0h+QJOa04k=*fWk%e5d3+>e@>Pu<^<80jT zn_Bz|h?@!k^D*a>z>qi@##bWbqTjp^J+bG$<|F&G*>7FN&J~I)Goi2Y?INa@_7q<^ z%wWJda3|`NAikb#{iV<1nNGa?sWbIn6ak@cLnymXFd_3&E2NE@5S6;Xi30NYqKej{gLiSgG)t(#IO&H>%+hUTp^<(0X;r7sNzXVM)VZ{Tewwqg!QzDjL6qM^Jien+YC^ zf6)Agi|Nwbuj*GAoy@M7R8PPWc}2?qPDG4lz?qvu_p%}Q3Ce)$V^fCH{&|P{vcDE4 zO?xKI#K$N|l;tI7ArBt+udJGvZzX{1O{N|B3zS~y>bIr|L$@95#^c&oGylrM^j$r$ zMo6ZHn)V-t7bf;bCVBzLE$r@@|75ju!F@mLzG-T_gZ!IiW!+NhP#m9PLM%5XSRT5I($%EgrIuFKu1Y6K^(-*yq^n_2c_R()u=i`#0pB*PaC154YtSsF`E;9_ z#9STg$?iJmp8@;|ov$i6`edFTgHf&+PyqL&K)ftZ;R@AldipvVn*DxN$MwN7Bv`8b z22$G9XL*Ubyw}OoS*o4+Mjv`Pk$we6CnbT>Z%R)P_R!!!y(K|~k!MF|aP};e8(%sg z>8$)S;s9ZnzcP64HHiAtQg|+-^p33&Hsh8J$tdSZrw#40ix1ImzhIVa&CUw1Zc3f8 z8B+WiK6}txV1N^oUF#%r>+?{GO{1@nF8l#srOsNZLTobKsAlZIvl>eZb2#GbTl5Y_ zAEKL10l7I#xDy6*p$FWq3voDtCR26p$1REKzbQu}B$ZsJ0^d;lz+=9WX0NCc<7z^ZmTTgshNDOh@!7s`(wh`O(@rTT!)2?KV@9dqGc?Y;;5W zz*qRI0&AGO@KHYel}G(%I2GK5M#Mt0o3Ye`FKuJ_F};6@-s5ru(lVwY2mBLJ|LVt? zpEaWmF*9P^1C1ef2*I~-@=?HnLZ7iY>L!ddTl~L2X<%Y#eyEXmoTaTKIsAM1cI~*} zD_U^k4gc-r3v**^ssmYTNFSw3zc7thL?_Ldh2te)1*55aKW421obeWU8#&*%)XU}-v2JWk;#Q0s3rm%y@2TP;dx z!>-ALUmKo$jvKX%W_JZ>ruzaRVk?&%RGgr9V0b&2n#*M}K)obF=65gA{X4JuJ}q}A zw;|eW3`c08HJ$dWTM9!EV*%EGAOHBtnv-%5Hkz*)R(mEnLo6wrRtN z{GCtE8Y-F~-+t-x%8xyHH1bM}S6b-P2a}#+_-Gv=@tu@9%_I-L*0uT-7Q8$Fu6Bot z8XTK6zuuJ>p9G+3J7?O`V&TtW2ETHQI%DgNDa&PRaUD}*vlxpo*P%NrH6$~9vaVB1 zNfKhBW?UiqSvx$72-F*e_~r_eFL@5L2tz*L6AO=B{Taed`qi3mt7nP~=v53C;(Utt z36TCiuLkGU!+NCd`qTa5R?7yVKjYj3R$qNCCC~70lbLINqjr8MJ64&zjRZ>jEKaYNM>#svjtcZ*`y`+OXPDtTn~N7`SO+hK3P4M za3>$mDj~mOm{bM__WcyDfJYA@X0$eDaZLV?Kq60qYpIXk;El_ypeSRurHAEA*2c55 zqdsMwWXI1(VewL&eX2^g<0vNUj9NqwV?p>l7yG;D@o4~D8u)tis8gd4gAOO3$+3!9 zOu>1-Hq8m9?LtH76n;5D5NbokV5eY%WCf28^xL+pJG=L2fLXW;On(eOiB#`a&t9Ha z4L&i(6n!=sNw)sP2-i_o`a5{Six#_{>G;#zAFcOQ5S`RGQTZoioUc3-DW}Q~d*gX! zLIad_zqa?9e_i!(v~AG)0ncG{f^N>w-M+b=iL&CwQ)xAcV*uySD`^5$a+0Rk@!y>H zkO!{(?|RsC+E^xW@pxdE4PCt#zw6Jli~ zQw@Zi98;H9oR5B ziLzIQLl8up6wr~5WdULtcLENLN)O6=7Zl{CM#b>l>6SoW29X> z9`dzsmK}4x7EvcE1RZkbmRE6x?+g5r zhMWtpzEo%>#1z#eBqhlPbv>RH;TY#<6u6=_2i*Jl)17tP!EyC0!1cq(L6F|@4pq0` zRnmOkq>VxYzUJ<`wM5T;gifFD+?830A`W5!*kd!HaJwS7@qQw3PTS3f5lMk7KfV>u z6m#JRH`(~BQ8+7hr0MVX>rQ6);b+QzBF9rzcPtYiRmOP6&F;MNA*$We>Zfz}_{d#T z7_=GE@b~tH>+Yf*y*HS*y~CW}98q23eTkxZ@BvqIQyjil>6SU^c5}v+Vcq5*0Jm%e zQVl}tAc9{R^h2qQz^765@2WqmOk=B644m8LX{{P2`z-0pFn8;Jzy?9tLQh^oogbyf zUnE$Lt%z;MGA$l;dWo_MpT5L3I>6cP_eC-q_wmdmFStDt;8E3Q1zxFe`8mde!NUKw z{h3(I4XOl;MBQFuI2Q>{vzfnF!Brjj$0-A>EKffI?6@D2bc^BO3$xor7;cZ5TC%pGJ(iqD3?9ed|6-EiT_SU+NJwXJL3a2-m zc>Qj;WtjV6)prs_s?KD#rFrJcE`3?9{8YPoK2>pvL6CsS0kyOAS50ZzpbH(}GD zKk?YwkAh1#^xV|3i^7&wBcbefF<2@L&{P=YMz;G{`xTvtN}LDBh?N{R zIN4w3bQGbP`W8i)H-(5b;GcLAA@w&+Dh-J_#e4m6Zx?hML_By8l8Rqqh{$^Uc_Zli;Q4fWt9ttHo zbe1!h9M*ElOfJivCgMn#BZP|eWIF$+Z|6f_-uJ`%{GRvQ@5B54en0;!m(fLWHg)`t z<-?gZZ%dOb;!7#EpWBoR73$P-;XHYvJZ^USe*atn3NIHThUhY29qrI&%gX2CK1(R* zz(L$?!4$-`T1`x>_r(nEYR7?7R5Xr#)rPFV5cyRIs~%TT5Y^l|`LUwuKb>P`B$?qy zCK3%q!(l$FlLH0ZU+zPnKO`-_;cE4p3*A7qXWJ~<->Xv<-FcXl#87Er?A&`TWy4RX z>7b?D+`!>Mc8%VwVIHbA#A@ZeU$Ne$9>t>wJ`QicbwnD!*1oEfhutNKJd4v$u`RZ@ z>g=dBK3RLaYeV>VJcJb)-xyH`#<32V`iVo=Y=3vugh-`bts@2+#(Iw_Cq#;;M(P12 zA~*Jagy~sred`;vhVmT`6Vl9ym4S7~_S9~d04cN5k74dali;+p-&p|C4|-6su+3t8 zdSkf`)$GdzRjC{T=hREuT1IcPF4=pt0(8X*A~-%d9mC#U+^)0J(Rk&}vS1hZh<7$Q zcPVGm34|D|5uxq{a2f{EoKiFjQ|_cTpm#ExW<_p5c))B2S^W904ADkkvZkJ1j9r3X^1_VP z0&m|(iz=ESYa`aY-&Jm>Y6Q7Gzum*I!9L1#P%pHp@W%RnY~W~6QY^o_I?qoAO8Bbd ztGGSgfPs~n^?>ho%K@w-KwWQ#k@A?7u(dB4r>>KNl^ev+N#C;X((;%2@{a$mnc8$% zIyvR6sm*84XmnqpO+^OmW{74yzE(Q^E!PfjR2Y(7yF79fPJW?ckbK&Vr3t1Bl=fAr zOE!jLQ#>j$6P_?}jY_XwapK;a zzBnqoPAs1cAvx~r`k^#&jQI1%{rfY{v2-s<1B!-v&OA>DzM|6a|ReshU&UqO}03I5f!l>aoqtN zeiL~2>Re6O@m)s@S6_cMW_NC@uqjN>?J8`HLx2k2X2a9 z=&SAMD{7Xb=lu-VFm%xo3R{cW7Y^A&(MmMPaq0!gT+{5JmGaxfrEe}Qh0v%L-GQn4 z%`C4cjr>&NmTuj#1=8^T-8AQPNU;aNHy+TIKV`)~;w2j+c_XvG?YT%2+=n)em!%O( zKrjZ*zcr^5_31)yR>0&*eQWw6XYla)PV(R|eR`)iOFvxqeB-eDugWXut3M3ZpOraN z!gFCjNQyDVjYx@!q>!=ENo1gbY|*x8E3}=}L3A+M9*f3cF%A~!gIF{=IxlAIe}MA| zF>$eJzXqs|zB>y5!Y&6BDM67`WMWc6Y+O7UNl8m2BjXY&(I8N2>4!}v=*3V|)4l-V zYp;bMkPHfD9Su`MsreMD%cvm<3`}Q?4C+}hQaCZzBX})92p~d+XSugEXjv0Z*>thL Q3#logo \ No newline at end of file diff --git a/docs/src/public/robots.txt b/docs/src/public/robots.txt new file mode 100644 index 0000000..eb05362 --- /dev/null +++ b/docs/src/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: diff --git a/docs/src/public/screenshots/dark/01_first-user.png b/docs/src/public/screenshots/dark/01_first-user.png new file mode 100644 index 0000000000000000000000000000000000000000..f585c8592c04dc9d0b574f4d64d61b691b2a9f07 GIT binary patch literal 34413 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 YR$IvD?ytsmP`N=}MeB0TrCWag2h!oaqW}N^ literal 0 HcmV?d00001 diff --git a/docs/src/public/screenshots/dark/02_login.png b/docs/src/public/screenshots/dark/02_login.png new file mode 100644 index 0000000000000000000000000000000000000000..0ce7fd40e9650fce1eda46303cede98b10ad6e32 GIT binary patch literal 30038 zcmc$_WmH>X(@_;W%{6sy0?w^(yyk`PPIx2)SXpKIE2@Ays|b_y>F2V7qc=S2*O z2JCeR07hnlo+t}d-jPWWF{Gqf>7~xe{l?^nr62j(8K0NdlG$2GG4_tpgPE?JQ(?dx zr`j2g#_Q=D%fvDn*5$jA^0I~Oumc~U6acXBEeGOr2dDz{5E3+e^Qj6rnJtS=U!(KO z_nEuSFTH1-bB@GRgU`=!0d|74n)!s0!NMzfL07(S<)TNil=zdHVZB_J zbtQ27RS1fa;y|$!9d|*?2%QfDH=~UxR4wT*6YbJn7mjZPXl~k8>;|yc-bd+k$x%{Q zzob~(Ri0eYx^EDD1{V>Oz_Q^2Xqho>G#FYb#!852KvPYQ?5T4FK1Bv5af-*z4lCgY zUcY`sB~!>eL`byV%myL8&+ckJ+zW!;2))qvd;``9YQl!1!|<{=|Bx(EKfifzgw@FR#B@*#Ji$ zO!annX-Yh_2($M4V*K$^hFW?DR}dk*2{OMbYHGvVn zzx;D-!?}!3Qej?G-x6tKEys=g^8-85yiCza5r468{gYL^@>O;V#UZ;s-wIYq#+<&` zh==qU9Bbl9R$`)JEr3^NH>}bg9`K864jlL@w(t!Rpgje3azcCkIfnYKRV~#O6ZOSs z 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

HBiJZ7w+b@Q6O?3Q^qc^ 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 Hl+XkKLK?0v literal 0 HcmV?d00001 diff --git a/docs/src/public/screenshots/dark/04_proxy-hosts.png b/docs/src/public/screenshots/dark/04_proxy-hosts.png new file mode 100644 index 0000000000000000000000000000000000000000..363c70831cba120758e2313696ba8f21cd6b61d5 GIT binary patch literal 65543 zcmb5Ubyyow_bwXTibE+LN^vV*+#$Gok>Wv%yB8={LUAt;+})uRX>kZv+$CsnheP}Q zzI*?;=XuV#c_x{anKgT_{m#4BmbD_)ROGNR$uI!`0Jc0xS_1&Uga81j-_VhsuV`m^ zr2zmhB*9WrYG88*0Kh9VNf%8|bKqsRAuI?Fh=;(G%P%3V0AQl22f(6%%rqEy3NaWG zeP39an?3NmqbfrfJ;Zy%jr56pO<0Q=_szO1+c6N_=5#yxSNJ_2@5a&sM+H2OI=BJj z^WFsVe5DBDU*74GQEvXENJ;H|7u zqAV8-S?68gLLA#uFL&O^YG4?dlM1HYqZSiqE9mhw?L< zYA8CP*ZJ>wg%Qoz0BY~w?AGa;%7zQSQvt^roLN$&a(@r}AHg+lgH7q0xzW_dc1JaNa2)Gp8Gax;lO^pSUJfij_Dj z^gi)c51h{Pwsj>y?u$Lp5{)uvT1DvN8F$lBTMeMF7vk|d{)qqrO+ISC(L zwD>Odw-`zWtUhN>1*+Mk&086kpX-fZ4}JysE~=(dLRXb(z9en+y@(kZ3X9e(i6fDB zp*2qmSl>!(hky#iuBq@)-+iZk8%!~y^_J8EQQc10pQK&$5*d*S65<9#zI+(|{`pfU z6=!>Ykl!B$X-ObC#m?+33$i!liSLv4$2mQlFwUFZiX`tqE3+~HqPY&`;`&yT&PX21#5*`FQGs=_af z{Xe+>&~LsIrw}{9P{nZgB=>3mlgE!k`8-589>>oRk7DZIIXP1~XQ76Y$|Q@pS0Q_9 zq}Hpq->E#q&#IlN-_>DR2s{L^)c&BzduT!r@R5A*AdE^AHTszTCnr+F~}A9km#6D`6C&O&JIed_j}IvMm&2 zDkvb>0{C|Q#3<(Elz;okf}X#H#{Yy1X#a9?c}exy9Y%pzWfS|9 zv`>v!i=0=QZ6cl#%Q8RLhE)(jS+3~YjSWpJGMg03M3xPu4`Rn>W4VQi6dPRBx7snm zX{ML2ur^Hb^$3!~7!m>y7oj&G8M0;^}=iZDG+v>V17%p1}hESXRAYRHN3#Dc_%MA<<)1+=Z`sKThEs1${A zg~CDMB(5Zbq)Fy0t>x0v()7~SGTD+St)0^3k|TAIqFc3#g!JU}3Nkr1edWqVX@|CX z=Y|DarxLAFy6Kd3>5&5VTpdkS4Qe&9(#dJcsg^y&3xPf2J@-A`DU%6C9xSp9zW8KS zmV(0~qda%88V@V)J2K(eIWl6h2p&hu)R&Mnv{f=_)xA)_p-#3-*ru}!)m=6fi+mTe# z-p&hFJ@om*rd=YqesH%~y@+$^_kx~9``~rz305Ia!pN{yGN&qMoAL{#5amt!3}pl5 z&Qyc6{Slg=YO+irj{lGxjqMj`pH6eudt#HoYaFYqstMfv{t?}k@nf;47cb1u0`_Z*cI?aj(e8TcVe|CK z5o3iqO+Kb9?-!p9i~U~D(vPit>4JhE&od{m^G$>n1hBIB->tahw#B&Xufh&aN2W)# z_YC&u;Z{e<>y4v_^okk80|vu_J1QTqTyr*-Hy;OjrfFx*bAFm+UuNrP3km1M)sWFr z)VU9vb7*p8&stS^I2C$EUC|$VP!m#Ts}_vWnsA#0AM>qP+mn0H`!d`m<>co~9e-Ov z`+{cua;I5rn|jmaV1?`(F&>E;)gRzE&s&jd`f8zHbT+c%C#I4gZT_6DX1teT&oLZ1 z#Bs(-BX(idV&kE&7d}@{bx7qYcV-pjvp5*6x%$EOqi^j39~eSj!?hj&)!t0})uY~9 z{Hr*sxM(6j&ssJoHutAe)Exeq=nRJk_+aVX{yXpYuEK1h0-b`7QXzpqqCQ~5FQ6`(vjrY!0{6W4DTpTB%o0W8ip`SOtRpNAGV^C{Rp&|YEK*U@0#c*b zUy9$K3v$16HQ$aX|6G2k-!X?V*XH_5fJq>t*I=FXq+~!gp-9;=;kSI$n?p_E!t!hw z8+MXo0!=MOZTNeK<_V{G!=b=EPYU8?ZmOqSvMEG`XTvd${0na(P+0TdFzjI6W=&!h^L!!ful{ODMt9czLU< zEO(~UEQ1OK|?Vr!aT-9z%~%-Ocp_4X<) z;m!otyCgEF1WMcZavZTx+ z|4<0Gu!5z%x3!}Wub8rDK$MQLZEAMu=eTrtzt3Dk@-!^(=s1KO-Gh63dj%v_)eWq@ zgJY$X42&$D`6X2P`};HVDmmWCs_I(GtDD3nW=6$lv+_zs#HMBDSDD#*f;I;l)8+Hp@^K8t53MTsbhR< z{@1jEo}M07K52SRF-}1_L-UXK_xFrkVx~6k!ZI2>qKbAd0TYw6idr9j{`?sf@%8cH zVR?0PU|^uNvv+-C=jXs^S9ed$*Yx6w`d2`X!I24eewoDdLJ?Wbk@2bD^DA}DU99{v z6mNL+OdS@M)~09YKcq0^jyg5B{kXolHZ*grsA>N6U9hWXAS#e+|>9>N4 zul-u*7iWsDZ{KP0R@b-Dar4dX{qk*R)DC4kJl|2&G=Y}XxHi5r_+Y>FXAxXTb9{W< zxtLuy8|zp_RSFCE{rk6!4cE{{EgZhbD9Fbp&uv<2fUH&T~Z^*w^3$W3O zc7X?u2wYy%#I+qe);}de|5~6upZ^ZydGQRugFgQNLH~RC-8YHbgWtCY2e&oW$j{~h zE@?nrwu=JL1D*gG$aAZJ2S9(1ZOG0ecL>q*Z5lN2MlMC{Kh+=DFl(U}iPp0i;4?Vl z#S%UTkTK4GYPqOz%Ropa;oqv!c|o4{5`v2VN}B?TBu4yI2T1%~;D;ps-^*l;(o?IX zNC0sVYIw}FmuXr5I3SKx!sn0cRE%ssy*wsBoKax@C5IuoyaFTuL4aBPx%MfOuIUs- zmI09IKoZ@)+^zQ}It*#}bLn(G>fZ;@!^59QvyK^QQklzbHr!F)MoA<$ATR5%y_C>F?v;X^MO zH9~=OAY9l`x83L`@b=M^1vO>P8x+7db{&=#GmfUYDpX9E>qunx(CGPEVWFsUTj16L zzIAtgVOu&M*Kfa-YzJGxjYmDZebN94WU$vk#RZ1%prQ8OfwNOYvHVv=fST`#7Zmfv zD+uV&!Oof@7+2h4Cpp}x@{8`Q$F^I0!o}e{oL6ju#(Jl(-4%gS^8Ff#G$cGd-?pOo z3SZe}#KuFg?Q7z*Nv2mqU_ql3PJ(@ED3WI0zRg%MUcSEy1Sh+BY6i>;_sgM#ip55i zi7ZJf4H4(<^u@a0AyP$EiUzbGgF(Z^PoV3tkC}b|K$OByGq@l!m@7$XwBT#Jmh_`8 z7*eSkoj+SXDK{o#9ZCuPsfuG~aI8#YZ~zn$op8*;Stbyf8TjLTlHiZ9@|iQB2^st@ z#@;!7VqNJ;9{~`=U{&G`DJ%yn%V?BLy?2-J(Gu<|+(rvyR%QXU9TMl{ua{Fon+|gG zihB7^HydAR*R5bp^d2Vzu|wNpm;X3aHWBi0$P>=-7Q4&CzSPtm3dmkq`r|Kym&qb~%TC&)4 zbJ8p?xCl>zEIjka@X$nWCHD19($|dZE~i`_{B(f=}}Cpm7Mu! z-1X0`{THu?IL>|`1wE8bxD9Kr&{qu6`!=+QHZ;E@ksl#ugLQ<~>!V+>UAJSZuz(N%{D5yFw^u(zRFLo3EkRY<(2P4f(SzG!fPrP{5bYAlzD z3=!iYgwZ-Q_mM9H6^BZC3#7|scJDiLy8H~;0)JrP0xm`53fu}CQ*s6@Tq;?tiwdQ^ zXSMuZfNdQ&HVU^k=HHi|@=Qrsj`XxGr0aFqjOkHbLn1uQl^B>LHD{>HuBQ@`QO@0@A}O%oH5q2ZN@ zf=G_v>>RN^if|uwB0LG5UCn1{*;>|w03YPtTCfblQn3l3^X|@?`~K{sXTq;RJ=hw7 z?zgWxKR{*2flG@_9H8UJ&i4Dq9Wu0%M>B?Y;Izrz@i^kMOT6oct2Q)pttsnt?o2pF zzFtc!k$^1gE79?rZFB~^I`Myv?@MwCsaGw|yO%-tq%ewZcIHrnbiQ1%A?Z8u6^=)T z{Rx?B3aKB*Iqy79e}*k^PE7}5Yp}7#d>rFHVoj~r-wI3cxyaWT!qRvuYI6UFAc=mM zi&oK6_$9lXtrEDkaW(H*1GR=3Ha&y3wqBXer-yjoQKrH%mhq%Ly7<O|_(@92$* z-;=7*5;G9n<4>>bW{oefE?N}R`TUIB0-ZXXcswJ28hi&n$e?pBeb;;jhXaIt3{h># z*e5Iu-0xUBw4r_nx;X6rA>m^+^?p33+_<{4BeAhKuxVt7>0;2Ep-7PTaN@il+F8A{ z@kzI*^nE~gON_76=3is5#qz z3cXow&CuPP(@_-rbh(tS;$)C=_UOUa9#}VavVV-#c1r=kc~d3Ct&-XrfuTI*k>8=) zrG5C*#3tck`+E3#SjiF6Uyd>{(gKw5@ft22VBderA2sYQ!zg2KEBf>>kQ*FQfAY!m z+z$`>0R?_^k}tc4;*wG%y$ZaTd376FZ#{Q&snJ&Gajz~!r98moZW=Y|GB{4vX1(x{ zk5o938%xEfVSu!*#sZ>J3_54`D_+tPvmjY=TCRAXT|1j_S$N3OXp+FOISf`NS2I`d z=(wmVroQ>$2`R0!L~8N()`cv4kaU2%ic}U9mke)azq2gu#0Cx|G{A6k?UxUh49*M;Stn@l7$sPk7IT^c>hGb>W8bImmA*UdqsbRE;YGcSV{byvpANECR0$Ve{=72m zX|EsUMMt2GKpZ7zL@CFH{gMbN0KfRwBDea@hONSZ4Nkll%X4D3*$w#va_I~ztf`5)=ckzjS(o%#F&Udv6ma3{t~-C|rZ zd30z>Atvo`6d;Ewf<7-e*v+NfF_{QMyj3Et7Ra1#4U# zAN1jmMOS8!7U9c#c|=602tDMnP2#5rM~u*(!2F$f(j3RU<1ru7$aA9zu4%u$pMGg& z44|6jR{~Dg_<%tea^9vji&cXZv@zfn5XepF2(yt;pqa)x zwvl zaxn@JA(DN8=1S6*_@Kjlf56XsTFI4H#6eT;m^9^Wy;OVY#(7Epqrvs>qD=sdM5V4l zJcj@%A5Q@n<&~A+iUhxpg3t}{v=2EpeE526#z%9`KHgz((lEX92-z+sL{h=@0 z*l*=}&H(9i+d$yar*ox`xD_v$%z|NvteZ$8j=SIVja^Y;HC$-3%xo?E!RH03li+7s z@y^pkR?_C&NVTf0x&QLr8ZFg!L{sCYEoFS}CFIofvhx9i1u{c>0HLE1mH%b*@KvTLihljs30?OhYkaZ5Gu7s!Fp*5GVVt|wT>VtN z%K{Ri8x>a=^Iu%VFVoc2AOzj@YUzba<{Rhx_llGa<4*|}RjaBnfZnb!qe3UI&*CI= z1!dqm;>@xjPc8TClVaxc_Qx&+FxPU@aLy+q_phoReH=6qL}B7S?m>yN$9w7sAcU^L zcB644T_BtM_rBo7`=PgTQMU*%Gs*8QLiZeE#{Rfu_!Tm8Q3qOU`wAQH+GxXcD#Yil zH_LJAYEs29^BK>!;t|rW~L# z#_tL5-QkclTU2p_VOXGqfy$xcTDfPcazS+1@j&K~uig}#!RL+k8>B<1D6od`_c@yw z&>U=Ele6_!)B7Plw37NEe4RC_SBmcN`!dSb#>B!K5?6itLXG| zF5f;%5OMTAAtDnZd>R3!003S%+#xU2Z(0oygGdmOz%kmzV@-%K7ss1`Pwx=nY)ouP zknmSmncs?v`YasZ=BeVHHo=FFk)b>U!V00ut15lLZu7&|)6+|2AhAexjZaD~2qgkx zaTG!4B8W`S$S48Xf`3kCmu4S;*fLCqPGf(+fgSRBPnn%-X^$a1ck@b@{#ZHgE%uf| zj9{YR^C$o~mEX2DZ51iV_Ovr`Ohvhz3~fEOk0Y7RcL?T=2VBxQz*o8%4ZPZ)|NQy* zmw4-&rc{&AN#i;aRz#LCQ|mOvDK3r$PgIR+)(VJcj0p-bZ0r1WU}5%*;w6#`9ZYlR zYex^!kLpCjuT-xgd1}QtT59I^^zn@Y`KTi8qdxH9eT-^n~ zMO?7&a zK9&*^$Z7J_^B2Gf%-9{|CL(vZ1(qs^Yz!t+hEycIoHvLM^Q=Uku+85t&2@5<S z33{50iKc$)LbB0h`ZtSm<~m5>A!FukUCx?v7zyC!(Fzjf&F8WftpQBJXWn&vM58_AwB8x)_KwJ)_OP9l%*8iqPHnd!$6utU zZn-CotTQ4<3>nrK%p*ggkReUMi~9l-`T`bH+V5?=4W*C^$_ThYhFw|J?pVxq2M>rr zzIK;SjYp%ugnj&K< zlYacab{0ihx*_uD+*k?8{4o~Zlg`$jCe;cBfVoVBYJB3YFvV=WSHuM$bs6g^umDgC z&)(V2&~d5bHKhovlZ^;*9~^PA%Fm$Ev`RGxBzS1%l;y(_XF>PrSXph;D+Q(p3 z&n7JB=62_RgMdM`D!1m`sUKMg8uVkD72|ePkF5`}2qwDVy&Mq6kWS z&H-rkJ$b-9L4#U2lV#U*-e>+2-xCgN&0FBt``k7n*jaEU_Mfz+xxp(>nHB0P{R&xiwfPzzzFFh|K0p9 zNwW??ImdIyc)K>Vswdh5JF1J?t8Jot9a8uMwXf&dlyo}UN8ywTlRm}oYVBI6=s-Mi zC<;v)9;!4R0mUl|n&KG5h4WQeR@8<@i_%XWg|?2y&1zc%NcZszs$yA?KUOa!2(Ru0 zfNyd?_*7rto}URXvAJSnJKO@Bqz*@ajc<$xJW#6o_tZXQR7pVVa@QiyyvrV95w4nQ z1^-w`-7$-$Aj4%ONOv!5bX{p#!xzMx8NP} z(GwGaPsSIsev%i_SFxU5M?^XgGb;gQoylEC07h8JJw+B~((N?^+6(0^zv>3}FafB? zN2;{KH4!d8&q-&N%8;o?+K#gAII==-H)i=UTo^+)Xe6uhm&^7>CntVd#;n9V1NPlz z1Z?9*;KLK=_6zSvCZWp()U=1iylmfq)6}9u6%hjU*`@4A+D(eh`)CL$Vwpm&37Fo+`htL9ReG{_XeXW60orv;Di>kjcy= z^9~GffQM6{+_Z&Uyr$UK|-Ax&^6+0qB?VT$-sLwB0P@BJ9Ntcz7hA@iEF zzgy*MN?)^iLAE5|T2#4}m$!kq^~hUMSDzz^1iI(a0d}PJ9vSID8k*O%J7inQwxpzR zOgBFE_$|!UzQ%zH4^I~p@nrVp1!@) z>zFD@X+S}nqD~Wl`g5Id>|{BUsz(+iy*@R;!)Rct6I-FR_oxOVh&r51y5Pp&l8~_>h}X7Q>0HkO;5KQnm%+? zO{|pAy+&mgxN0DUW5%+iEGS1Ig)*{3D9_V$55MDKH?VaP=$>pUj1lF!b{sZYkp{#T zH0NlDkK7wJ56ugFfb-rlNbFT^{3e~$910L2hGI-y@x8}ZnJPsZyErwMguH}6Imh4v z`9(X4d)At|ce>k19oyR%vgYPR%jjUwmf^9nu{5^4#vyYvE0n*mP9**L+JSHUywfkB zqnK81-jFHJ<{+rEu=z92snB{xb!qr<5$G_5-9mrpNWLedko~+xn$v>2GJVmSNC-W` zlS^>3pvp*z+#TTfo&a2$?RrxnFQ!gDfCV$*id!%_=XYO42v9(WaiI5|9s_+mytHI& zN|6QjoSo!yHde+4AI@V^7Ca5Si|_yeZr;)9QCJ#h+P}#!)B7)nv)$LO$7>q+>l{*z zC&^XPNzlLvjy?Rf&~Q42f_Lrd@JgGS(1S7 zB%xE46HxFc+(}WEfRh)k&0C7p;n>_l@#pP8e_E~yORT-J-5kqa|8;M52?JuUVx74w zrEC%?O`1DyXZ-VdzlH!!_C+LC+!g1g1h48Ccq&(A4tSDb2`n%M-UV^)^5cWs6H85Lw7|; zJ;?mG)gvqD9Vk=qqZb7lbffA30EF`>5S(HOd%@7*bj1#y$Yfsf-B%7Dfj)pa9;`hz z$wn&~YBlRu^7|Pt1aEvblpv!``)yS`1Lk*!VoTG$S3;kL@q<;Oo{K^mTy#Z_;F;t&BriabJ6P>*=3%Iova{FL#r6=AI=7Y!t+ zwP#*sn%eBIhAmF-z24jd))<9JQ%(uNsn={GlhFjuvckTEuxXJ@LTI+(YvoA{IDA54 zo|8tA)>i085Xj6&T6)RlZ)H^wXiM1v0^obYtJ5-l=)j-tq7e4qLP!NUd_D5Kq34+h zFi1?cpBh7~3NF2LKVPzx%m@vo27htRD|cNs)+X8K0VDxf(JID3a8TwEI(63nMa`NF z{QWVnmS>mdIYLW7#3X?ETs)bUjP0v^ut~5C*;T+=&5RX-Vueuw3hLNWtdiM}!P6cnOZ7Kmn{8 zlGLt&|4;tF-<*PfvHgEa;(zu3qx4VzpVI%t^#A4wJV&+v#rOZua?mLbEb#dW zfUfl4GQYWmCL&lp|MigmlAO&{WPzm{DovsRIJ&EI7LmJuaq-FtYuzc<|+-$nUin$O`O z1C6|>w&p%^ex7=T0ChDWqPSc?G_%i6aZ{iBf7xR}AZ$$6D5X|>y)${yJa|!*RT36Z%V}46EF7=H~hU^F((j%CZ-;( zDR=W#{(~sH37hgCIuokds_*E}z+}-x}b{ScBan zZ7RAf1A5o!ue6Z-W4zJi^DghQ)uZ?pGw9X5QDxEfbR3I&erC@oA8$E!{jJJdDG3B0K5QSF!KQEamo=W`?0x$2sv=u=D$(6wNWvsX5mNa{0k>G?2 zmga@xttm$bs4-XPKAM@eihh#WqF&NVtM3V~wP(mFr_1Y_9h3U6N|>ZWag&iWyhn zoLn>dqL&_`TH^Qqz@^uNxJ!$ekMENk_CMUaeekvUju1!)x=`CPaSe zc_Gpd?dwh_yEJmuBbu+dxjJ<%eUElEI^P~?B})mWD~k`0pqJnZL^xeuESjqO@kq2@ z6Rihzp+dV`exVPk^}VsY_K$^8hP{Dha;GoGP3>afAw2hA*Z%yT$f=};E3ANVWXLEn zgx%7H?QFDZTyx_^w+b;RLN)1yamRZHjTtJt){ACurK;^8M+{F!z>D7RAA5$`Aj=xo z5rXlNlYKuCV4^;Il_s{BSyH#KE2e#Q_E@ZE|9}A6iIa;UC=s$tiCn*Y()Hc4Rc8WU z=0Sc*39Gj_BY@9cZ$$S{VM`CveM{h#FI9(aa__|&2oI5D^rv;aBkLdiln?$OloacH zaSEV#9`3ug^>v){={7GzFSCj(z&WV)r}#nVVd*Q4?Qh(PRTtY7D7ep;OUq`Qj;gW( z-47rAjxOh5+TN-hI4H2xLhJ*-Z#4vMdEg9*pMHwo)YPE5sfX=(n~MyS&L)Wqd8E@#RXv92cw2mt|>@WSF_Q{Hx(SH zsAn@R(6+&=q&EL9FThsZM+65_IXURq10Sz;{i^%B@^Z>EpT+1S?hPd#BJ?0(nPtXh zJ@RuH+z2*mx$pfpV0X(`&gkxIxm8_TD9!ns9?tbITHsgNaw+vLyj&14wRB6d7Y35(W6c{%FCycHuBmaia>-}=9gI)kD4-R7g{ zAY9uc=XF=1&oXD+82I__3R-P`ma#)+?IMboE+wV=jzMF|V#=NRIzEY}&ry^YZa)K5 zJjOz>Z*D*1&8$XS#K;Fv?cg{eQ@oW*!usKSRGh;EaWu3FbbEPF?Rsk;mr1{*egMTf zqNzgq5v0{0II5zN^NEm9hm}#Y4Vo1(?46@+)nSW_1m@uS_`(yNZtH`>5hyAAgLl1` zL&1!qFDuR0gtSY^`MbjuAo6q9D>>Q4dwpSX$ZLBVT;Q4v^RbG9IqMI(vc_fI%;G>CQ>W}JxPe9=sLQM; zwYnbA#eG~ru`~VV=|1aeYPjW}r<-a~6o`qpQnb5k3tL1?6Fl)vYBy}ACVS0!ebirP zJ*t$Iw`V)Nt)h4&+DfKedmGsQ9ms4r*#3)eGNi)NnN35NVi>c1nyK!%gGO( zs;jdqOs!LPby`iWLxdquBNhhKZu1-1&KnzQGHk?fmDt7Udi&-TUW9-RGOdtG#*&9v znPK`m@F5D2`6;1*?<_R!!`;dY&P{U3kQXQ87rASA=+891ejUWAk|&=v71;R~eyYh< z_o_lQOeBrK)>W$0cfjYpVSw9+uekC0bn-Cg4z>}Z=4o9OAYg-hve0jG6mj?X0-SGu~~KPi@4ug zCo^(sSDg=4w4SPUoCkx|ZyV?xL|7Co6||>J6+$PaqEw=pe@5hts-B;XZ(k0Y*_Oeq7f#^~TX%Qk9%1@KVhkZs*S*1IId))mcaYFEoAuVS+GI-6)R zfiZKl2O1)th$#e^+x+W^X{bG$-BMN(*wy2|zT-S;?&E8%XT}puh^huEb6OShB14kl zN(T@{bYPOv?N(v2D^uG{_2N9sDaStL?~cHIROfQ0h=SK~7D!ATjJ1%=$eRF99#`Ol zvGbHm05WKCaj}Ewj6|@OXHQ^66VH#YW{b?w+nYR2<(|BlEg+|EPwNk>dk!6pSWlkW z62vyhuhIV9x|gDEgoB=% z2jpx2f!Wx{w0)RHfFv#mVedzQB`Dru82_AVCV0fBgr&Nf{h|}8@$8+{$!d1b4mbVu zzB6NAy5Z*n%MMB)IyQ=iz;O=gDCQ0l!=zPMN0Bqe^E?*lZ&{(ygQj!7=B~)}r+3l$ z<%r31!h_6+(HKDMu$Kz3fS(9UCmCfY+(dCXW}_DnZLA) zrwA9YX`-D85W*qX-u0AKV zEU1!=k$m4dY?m}6T9+hg{|2-p;;|z~W_cwE<5&h3*UZ0q4B87lsc?GGymflq4p=Zc zD(H$3!DU;mKFD;n+UB;l9?b+$sEKHgL&a_PYn40F(V$8|5eM`TNqs@mXthlW%z^Q( z&*mCIVF)FbI15NBGP`eAFNTm{1e*6wHuo=3V5Xj&OpwCv9c+&VDWT@CiwFI&ua==j zj*WJgWepHrs~8?BlBUZ>l^!FTH;~&HqakH7CB2=pO1xI^rL(kR<%Wt>0FG;^!23G=L zG`>%1VwXi9;w_QDm9%{YbShd`9o;|rP(Jb>O9f5AFbF32C7`-*P1wu-;QjvmagBZ~ z$rZUpn-9`MXDIz{XF+7m+#dIVq!Kuibh#Avc`Tox8094c0a)vAF}+n z5JYS@(hFCd|Dr^jO!JjA6$1)RYAI4KVV8^#H2e`X#Uu9}No5)>d6okkL~T^4QiX+^ zD^7O6PLBffH;@w@W7punwk6|immizQC9UGRWKkT{6%(}RnwBfZibaOCTFjzZoYxDK z9*6OC>zPH;p~B!hJ9e)*V$4N03ikK2I5%{nzZg30eM@8xl;1!O|F8=yDoqU5#ZVz?z@qrA+(Atnb(W3a&K8y5+qfx`sPQ2R9j1b-~ zOqPTr`gN4xbtT(2VLHAS%0;NlI9=x*Yr=CFPQ`*HBV+7-O+ABVj^(Od^23; zzXZSn&LoK$^~Fn*9>hR*&}qsOY|4tNDju|%Toh=b3hV2v6uBZa7!gLb8bY{vy4j6Z zx7QaV-Wi1P>y;b=(C+(+IWFjWMcJ9IugRq9)>up|=QcVAHeoIA^p87qzS}{6^ zLF@UZt2sdgSFoGrQn98d**3aY5GwQ^4aArjtjZW1fY=@+35X>#Xa(IVSlcCT zE%-ed=k=8M`}We|?B1XKtqx@CyCI@MxUJ)x;8gKCEx=}8^(ak z69tH4?pBiQBH=^z=|Yt-RWTJSkk`$O0KO<}tC5;OiVJmcz&q0|He0GCr5QBDhdGgJ zcnzHG=~D(8SpWk??XlV^k)T!|HlXzT>2)QqUsn>5^Z8tkKfG zN8QQ?xzWj?1$!ouaO4Li0_WNG)un=X${3G6ALZaH9?j%B7gd?C^0NVz%ao380&$_u z8BgVTJ@d&oJA%zrm{dy){{f&Bsia1LfAGsP`({q+AGTGF@Iw$iwNzVZ@d(azrQWh) zaGArSDG$Up3`s5`eKwPBmq$5>h|bj|mLY#YX#Jyp-8j!P@3~kAn@rGVA(A$o>W1-k zZDHBStgRLX(d%E4GZ+wDk%hk_Yb@=jpg>n@Ha>D}-w0A|k!sS}e*fn+AB$$x>JF9M z;e*;J&^2Wr!Pl`WG1S`t`Jd_tbL?qwWFs3F;L_KmOS16J9lMafd;q_Ia)%DjzYtGn z47wX`ZTu>Ua68b#@FSz(BhcYs;P(_Em0t$I#c4hHJ)4vcj^1-h7M>-wt1AF(kqq6f z5#qrG8&&f7u9|Z$+$e zUjXyE$kyA*K6R%K`^Y>L-)H8}9eZd_Cha`=mpveu7yN$8H@kcH48nEr;9qx4A;1p7 z)y>C@moE1mvD~sTKR#uWe}*%cV?YM1Id; z^C0)s>)z*?^+nJAFk2%2ph_-7M?#!L0~-PzD-?q#annm{V5^|PJ>OAau2(*o|7dVY ziCS2u4qKon$-F=J@qq)Y`_Fsp`d)hnphIRhlkdSNoF3-pcVNCc_32F3z-q!Dj$iIq z@kRrxoOm!k|DeddUp+|s1LFx(v^8QRO|hk~R5;pYaj(QaaPZSYiIg*m3n)$a`^hK{ zP{n64%WKa3!uaK#ZhinZ0~(>jR--F5CF3z-Z_PeEt-xqJMx!Zh7C`xq0gPM;9@cya zTr>pDtk|dJF<6+uz~;-AAFXCy$=I)-OjBk!O%AXmVBFI>`Ghx@!g9`^ydC$EdKcQA}<{A}%Ei2gOuFY7bD+CX{gr z04u6;sS~>uvA6w=-xgHY3+^v?YzF$rdpQ_c8h4;4nAtYgKRWrTbFu}w!~bJot!p@R z-ImtV#M-x#ah0k8sZnKpNJQ28&DEb>rktXzo7%|GeYvmOnRNaVkT>YPvg9geLYJgI z^rH?Nb$6?uqEr*{b(OYga_MplW}%K+xzY^`4f?T}L_C~7V60Z%)12t#w}!P$=^#uX zvD+tu$*EG=^z9c0n(;&mgWYm+Gu#adr?^KqgzokHJvPlGxK!Dh1O#eP0LYPU@ao?0 zH)VQev^!LzcY+ZM@c^6*fJ2;|6trHakf&@+tA(g*FQnpS`n3(it z=pB=r>#uUj+uG+IX1QBr+W`}`qtGD+$y`;?_9YoUX7rDzzD|7&d%oEoojVTXC>k)L z-;?c%?TD#%38Fn`U628>)QL-Zn>%=4mr8Azzj^G=6_4v}^Q^l(3&%7lgo}*XvXkC1 zsddf>2cHe&UbCPe>sO**RyO4xB+rQhnIZeeNHwlv#jyI}b@Th!KOWjgKd@17%}&Gr zbkFhGvm$S6a#)VLwOgUxXCIbG>%X#C86Dx*dX!_4H^p(j%-{T#%|!O1LGIN^EBMo6 z)JkGyj^J?;0_gKm)TTv$uDyB zyvk(EVW}6dgLaSpG`R2|gEHOiJRbw# z--=^V+6$38K4{E@246QX!!^2?XiaC?C;0T?t=zyWY3eV9;Y~ox?uQ;8q7aP9)hFUo zCbHJv*S3U}6`snxd*k*QJT7QW3HX*l%Q`-T*Tjx4Z$37|C?Qzy0T9i+#Nr}N?Xnm* zi$i5}UZ9a?eEvIIg89Xlq*c9aOCM6iYNiF^?2C0^8kD^uLmPfN%eTL>XmH_=Q|BwL zgj&dOPbkO!a`)|1n7ra9a{57}cDBY$ZnZgUmWKDmWpmI*b(UvkOKil4x(uPN6*(v> zT}>3r*lne|J6Dt;8X(l-jUp)iiHst;sH_D>Vwq-Tt#ag6`J6S6mqst-3I5^@#wX*^ z1*Sm%>J*;%2LcB1eLwpS4LL3KlFSEE&sO^s+U92HukGXOt;%vMtuA>}9n(A@fakBjO zMPGn|<+as}&qmEos{25Eym@|oWHXw_o`2ID73x)Uv$rO(ja!JRGXbl9J^P5yzLn1; z(pmC{^br!Np7|#&bcP_o0wa=pMZkVmu+G@c%{Ko0?#6WuV(Dxa$Q5mSr1`5xST=_8 zEk1w2J?Q7;;v>qD^nT9%s%BAOl-L!^u9eVP!Vp7iiZxMZ8#9mh*0&zaw!+$WRtHf4 z4k9n?g_k6_+M<9QfPl#W*?^;;!+Jqy2mAQvA zX13i{LeBRlcoeKeCD+=~2?J}ErPKQTtj->`T?7RMDXo00xYV$u!xySoZlKWS2Fsoz zjr^b5wdk(<7;PBNF=RD0k39JS1P5`Z_60wUE@@X!TQQ_>O;n}68jZdt_(`1ZKy(Xj zTQK@%^?t?Q6fD`|eY|m+>AQp<$RDsUJ=H4P3bmG??vgRrOG;y_Sd$U85k6bujL)x7gu25O?bjCbBa68N1r^G`j+pQiuR-+43d z+Wp`C{a^N9^aqr?@fr7-0RXXh)c;qmK`1y@?_Re4e-W(z-Rb-p_ zu!dh;Utj?(fJ6)573Y3=ga!z=wx3U;@64gvSN)phlI3bqZi_ zp#=cS6x6vW;VVL>{>TUx0PuO{devmt7G@FC2|#MHF4C{h7)BISbHD5lh~v4TK&~z} zxT6A!@m^y=S)(zbY=NT!DgddJ95Ae@n*jiv0G8q2tso#6^Nw>-g6?jmph&~L(RPMf zJvhSP%|C=ft+Tr&hx)=~L#;Q8yQPI%Uw2FGf389)krPQ3b8otG-0QrbDzEO9r&kr} z7`o`NRk}~yn*wtanm)qnNcr4`*~t6+Wp#7QnM_Y<5N`tQNF~R34G2l>?tI%Xx|ZR& zt112FQ~%)=@GvtqOZ#<7*PthLFgfTh!GIL_J|y@q{(uDa^S>_n$c5aNkR%BUb-Ho7 z_P<%HzO?Z^@pNddyY;#)%2hc#y5T`}A%~jcw6;Rna7X@21;uQ}=QD%3Gk!CbbHnm2 za{mnWQM}Os*>_FlFN#Ij%Gb6Y-DQMTP3^J_Hcp z_TvD4Ir)aqgO}CtvydKQ zz9b7>g>GJ=(=ZHLg$UR~6kXnGf|qht;LR+ZTXfMoT??Xo`@aWX&g{;pgBRQ%!g1JS z@Bl-`x)LsoYPP1&MQCrZ2LxS z&m9pcM)>lHS4b+xH$KFLsiNaLd`68uO|2i*K;>y^vvSQ_ z$Ul9iv%$j?&3kc?HGS@l-_fMJ@sN-hQ`|D!I2b#wQUARo{ty&ZaiDx5{FMiiC}jOA z#3{$Hs4e~SOlsYj& zy`lzBdSEhJF)dMPeriC=4MmBgZhYug9zSB{t1~w-+;_~QE?h=rgyKBihvnJ=w0&U* z^JW0lG{E$U(g;rG`5KG9%A_6SytIpnp( zcA3cA-!{b#rlWY&t6PS~`(Y2Er;4iXY*fFYp7J9~)O&LiEZU^uwX880+w|46i=1nC zt=th&w3X0(*Twvq_3fyrDAx8}EpU8#dIp*s=Ep!W1hE0QBHT&ERwcZw@dR^eE@gnn77f$oIMA8 z)CzH7n^nku^w91z%(5lxT#Gk>f5mmIU_%bxOo@odw}XbX;udip$f@)`<3Pc1ACU`$ z%R-Jtj6jLeMZrfG879|)SelfLED^iQCu&a7Z5~$$id0<@yBpAqSUW3--e9kNinbu~ z<_PY8>LsWI7Ina;B=qRXBnIeffo0K@; zXe#BU!|YiMLG&IJhV<6F+tgcClRI(0SF|dt)v_Fi?KSF-xa+7ut+e_P8}Mo0;qlQ9 zIp+Lybs4W|BFAU8?-&-xu>o8haAg5+5=1B-bbB=KLrGzYYm(n|8BE_;_osK}u4N+} z+L2-Q@e_g)GRLj-P_MSfN6w=3JTM>XCEZY@H>zB9&Q)gJ8fL6jwrNjEn+m(2AxWg8 zd?_&dx`Y|EG{g--M($lO)v4(Eli#C>1>?uZs@jb5evKLGmB_)3rubadL0yA-pVm`a z)5|1Ziwl`iBRu41pPyIj5Qkgn)OGfm;?Awn$+wu}F4HMS^DXwe`~nO9^prZ1?<#pz zYAtjz9Ty9pON0P`zACu7RwnH^n3f%$s=s#hbmT>*#N`|wR1coZJm=W@O}rO}OR|=b zUlWTAa=%!^ zE+qjdi4n#QXTl$N@=^gjIH|zUz2V&`ex^J9tHvuFheOBGbWY|W>o!I104n{OWS-%C z3<)B{RnjI4R;=p2^7-0HYCWTcfMxj!`q;O@`2zgDs_gx|>P*Oo3g=yn0Bs6{Z4~ST zm`q5H7+nkIuTujhvRTQEXtC>!)mR&2CN@q#&46v_*P0o?lS5iw<79HKz8Hz?iYt0F zvh}%of_~fBSfJfvTn#KsNX|u3n>KO$)C|SPC{Z*qX8Tb&3)XZPo~6jOrQLyOaTrG= z&=d)?w_SagXg1N^2o&+=xAq+l3xBih*?M3mR;@-KkG+hcvT`Fiy7T)}j3iN)b;wb$ z<{Y)wES>U6l=CJAfD{t!QZGY8$FgA(p?Ne_&}IxC3sjA!OKalR09QXoVL6lxQOs?e z?%eb{^MOFYqtT%k2ww{SLhcU;NTNWzzn{w)wO|P9e{{u{s-0^kunhtCrrCS=uI}in zuY`U=kRdh(22>kALNPU1;G%AQdT(WPiZUsTDufRAN~*3i9Q513U^(p8=kZ}dgb&h; zd-!@8K;q~!G_U-o$q*9*o>nWLL}T;l#6%b~B#(w_dug43))U6TF8o4ABOF@R&1Zv* z*qbQPuH%W=7{avo1Pm?8=vViQkjhN!f(SXRz9^ig!lpSSrdHRjvuU=d*}vm2m1G@f zpu$Ur!zD}HIQ0>;#-4dOTDKdjNia$`Tcrc3!gs}aB_U1&&+kb52!3dN1B+{C%sA|v zojQ#}^DJ&Xy8ab>jbNQ0w5|th>I8>oktvjSZ4&2Z*N#^DsKJaXHa_PGijz||L#5API=9++x1pSw}gUK*qlGEQoANX(Y0-5WG; zDf+X$Rwpzq^+-N_M;p8{tx+(GVXdVhAXe)zcj~Fb@Ei}iwNvHaI!ZQsai>)HXO?t^ z?xQ0taiEMst_~e$oeI4Y+C8|M1+_0-TeYeq>j>a3;)Yp zl!7vhzK!yh;^u4m<y`wF$h^#0gd)Xju3T#YTxh(=aYe>% z$4Mrc6>d0LmybmIuja|*$;$m_F}pj8svR}Wf;7V89+z3`xtAI?_=r97-0bl-k{#~1 zOy~Ok*WE!&;rEPb;L`UQJx*UAX>1?QW7|#u2_uhcC%nAB(`doDh!K|6yd9O(r{AP6 z&c?hWYa_q2 zJ~55|9>?+b(j-E}7Z0Hq7eS{IuV%2291|5f8b`I86$I=EN^IntCJ}G%5e#@P4-Fju z*jFsbGxmnU75YR#!*#vpwPVM9#Kv>wicm7HYabrf>9d5(uX( zp6mCbUUoR72rX*5DmX8}MJ$(p+UGxv91ObGQvFigMWS`mJhCB(c-S zkTy_-0lzk)am$}5I^v@1@C||cCq#ii73%p~CCJ4==ONd3;g#ml9Ag4ji>54L3YVpo zANQa8$!^&*J7JgvrKI&xafEB=N0#Y zK3%_lB`;f{^Su&*{k!nZpvh)Bcc@PL%n1F~sF!5RO~|X38h*E73AmIMX3;}CM_B%V zxQNU7!O+u^XYAmK73d+N#eMg@NpL6__4K|?0#D^xs_tKCC8uBZ+qZ2Hp{u=OPvP;C zcrng&Y+x83F}6jSr$+G%c7BW zWhzFW2ZO;Ei9fgA5#d4PrWb*PVKNSaTbv@(KB!GgU`?v%tyhu=9J++E6--k~r+IFA zSj!ZwKZ5H>R&4*GrnkEtd$Enx9$D_`ZMrS3f5quqcSAdj%zQdWJYuz9v1555?<%*) z=0CWGOf3j)IY!GQhrf# zWaFcBm7^=?<-T{!Ve5nK68uk}xcL4YyHrpct?+iWwl#NmXm=O?NEVcUS~~f=mR`h_ z=^Vb(EO#cJxhQag==WEXSCVPs{*8(?1Efs{}%77%Y7wR{l^S+H-yWsmV3+8k}vk1 zN%qcQgrpRrkBMP8ti$+YW+$gyE)!H!TP@e%XL$OqKyVso11Ji?yD-PCNe*Pw@+t zrB?DkaNAx2xe~3csuCZy<|!In4S1A@rqgq;B;UvlW%m!1@+k&6?%Wu4T*cYl7JPR) zLM|lDD&Jv*?aK)dLdMh0iM!Ww(xjW`km~DIsMwYB;Y#N;VcpzoGx!2$Yw{m-2Sh(c z7#+@ChG8F@+7J%(Qy%n6+#H5oOq{P1pD?EJ@MtuL94uF;iLB~gGG<>jp`sZ7faZdN zIU?~lRLHo)M&-7;&(WC zno@D`sdH1|pZgrP0!1}nb7H_*xAEV;Gp}qRe3Y0xtzDw=CsSwjD8_ zi}=gyv5wzJWaF8sr`JX9uZ1k+mzRS+PO?Fa*EIq;E(ECZ(up6piyIWS z8g2|8?R$*%h4Xdooc77%w~pXeDDXtdxHMO%UXrh5USgaGGi_9j4UZ_W&7XBBY!(^VK&i>*lFRYr>OcziCZl&U4FMBb3%@$_#SxP~$$bZ){rawfP+( zxg$=_#n`=)zsN)1vqFS@%kZ;v7VN87uX(a^CvH~JilZuPIshZ}#8{b{gj`8|Eh{)WBv z<=l_2vmsnQ!H83d_|yo7fK$n6%F|^DA7u9PV-rVBUF=+x=}KWtU?tukZ=%IHzomF> zGESk9FmWMj=S$Xai|iSSQ;y^u_FLxTF|u2;-7PPO&h(Sn>NRrGzy~CF4{^AGi_=*A zI5zKsVUIs+<~(ROJww}gw{M$yu5p#_oj<~sr}0tLVgBV_8xgs+mPlsmTH2th6|J`J zH$GFU0GJF|M-R-TXgw-wrhUC4_m;rLqjr4t_YOOs0(f)VE$do)Q}=55-R-xxJ{@iI zHt`w+emQ~w8t9Lr)UGG{%AF;4OK)Oamc09nz=@NXKsX5^krE-3 zVeHAQdld#AwM~9Lw?xY|WCg0w&ftPyDSVZVVV5_0JHjlowtsGwu|DO72iRnRxA3=! z?ebE!@L7QDBy(T5e69A&m#@I|d>dKFZZZ>`&=UdMsRF97%`C)APv2A+DzhO|SMZAt zH|jYw*JR6CIa`T9aPImBlTYK=y>wsSM8}!pVU6@VJ}QL9u;sAwc)n1yxE;PvnEwr^ zpjY40&mGFD%p)fJS=w>4mK|=rg-!y&K`P-xJNaLz&_)8a$Jkh{Yox}nrfflDHEIuY zBagzhV2cSGuniK(=T#Z@hqhfRlqZGE@<1jhfKxPVRbCZjr{NvR&gvX8+L}N*7NkrC zSsUX!CuMphXY?Uc3QS)wtLPla~8*p#&A;V<7qzW=9YXx2Z>WuFMd-j?oHYjA7%c4zC0pKcML40Yl=6fLM1cK^KBVJ)!E0)NL%f3Mtjt^hw+Gu#Lug9kFQ z16fcQ`B@kFWV+a-IEJmqJOha{O~qKEjJ*&wvx?SoLKh6pS3_J zha0fT4!_Ld7qWOQs^Ic=_UI8@KS|$2LxyIJDZO4hEV&sr@HnrZyCYJW5=EM@!#>)c zT@nQDNc~wrcdX7uPU7ym5csx0^MsKzdtlyl0f>mDJSg4nT0gmdkj*# zGK#ijxm_i!EP$Aw9J{XDVEy|A!8NJ_(^0>$}UC=Idi3ppy3z-qO*i`k06Nm4u zalPD zmKJ2!{$8Hpzknf%AtF?8YkI-uxg-LvQ(U>9Lu_}`d1l$~sa8{g2d%MvB4q&>N4dy4 za^A4uv&D|sndRp?70cC7={|p46CwTpKT%2UTMV z-S9wK4*Mxy0}`u60(J+TJOgGYnkTI9t_|8I*2~jjmL1V*)H6=OAu=Kq{~(8ZuqtN5 zH12w6T;LEC8f^-30p9>lFj68ks_ab}$%?_&|7aVz; z&~w8)p4U^9RJO?VHaFs?$65bucgc z9hshzmo}SmVGtyV4Bog2IMw`Qtvm1pk<$GYC4J`EM`LB0o>8Z%gj(SjDYGSJZzipG z6U&IW9%Bi7B4029XVwc@&v+dcYMO?j>m<~Bi7V%+Re1Jg^+;Hb2qG=w>T~N9LQaf= z`K22Jk0I_+e;0FWMY@{ZQtpn=lXcstSme;~IR*K6R=WB0!~$wag|jAE?eokd?86LB z6HZ(Z<|a4Xq3L}xk)B7zL_g?fj)eM8VVRzSej{9v-Np-6Lei?THFh|6o~B>9RG?Su z3T~0paZ%IOHf`kc#i~s4?BdG~8Vh2g4%ovt4qx>80a)S*Up zpu{jl;g#t3;!TfK-8qK~dL+>WY)mXe)w~}wrO!j@}Gb+e2Wi>esZ8He-q%T!%j6v&1 zzfX5~*})&l?W+K`|G?PrQ66P-9X5|vN)N@<0%IS9AAca9dJl*h25dfp zp9Xy$_G|+c6g|7XAzlid&Ub{aZhZ`CWTd+$ll|YDyqw#JOYss># zL1%vN)Z{XJTikd-K+rTz7X00)$0*V)NHZvt^cKhZk3ui*>Plu!Ylc}*t3T|DkSTL6 z^CU-n2?fFZ?UeH)n`)GFKw3&gDqz{~dEC}c#=eprGu1lStK{Eyx!~pXLb|KrIrVm% zD}2nxOGMc+#)m0PiN4_9I$2P+lB_!MGR4*HqA-mpwh7IU1c4drPWdzB-qt^&LCeHq z!RLW+bOu8--Jl1DL}weNxRB5pQxG&4@Z|f|{?JwXEm>{C#qoyPyi7OQ;pVSCVg(+P zUn_g|a}eRP<73H{$>cD}+%JKD`a?PHQ6Cf%$WZ|ZcOTS7;x5?)$|Dbgqg>HP}7J{Rs*AZ&!EQ zT@dQo3zgU6zphZx1b;#M&(+<|<9`Iw_@7C9$-aa0uA@J`I?E=z0Q((TSU5m z=u8^@6O&}zC+f(<##DN{$v69TaE)kU7>;~{+5&69aVv%;NSAU1N|-k zJJ8?qzXSa(|2xp%^8X0{RQLbA`Aqg`Dy9ep!gLkgw%eEA>nw_B z|G-ukDj%uO?`Mtn4`_J`Y$&EeL0LmBEs~z%zjkiFyGmAl^jHqnJ8Fu4?yvzO&vM&B zX+?dY%;0Y!RBKf6d@wL-L;PHj(b2CSd{cHqJ{;PjoH}TpKJ|l``%jCTE9tZ$=Oa7; zYk{IHI4%~L`XS~Ybn-C5)niz9Z3BE{JHf(%3Are=q5$<833REG7B7xC+USbC5%S)u zEePd1nL?dlf+B3Tuk&*{%Rj@F0}dNHhsLSPjC ztM@gX$u*SvjX&_8ka~^7?<1@Rv$zC6VEU`&KS)6i(!;|$31Kv{aGk6P%_U{Lo;l?f z0NK-t79G*MEGU0QL}hW3r^)vJdl1Rom zqmGI_TZh%LZ3L-N%mu@)-sO?QW~54Qex*z6)Wvje6z}FJ#K^v0AY?<^abL$fhOtRB zvSb|3cg85%fG>WPtCJT4324{$= zekYcNg^kQe(4}sC@U%RbvJ6voOiS|Q!pX55b?u%#s1(_#h=CwJZUnF$?Mu$_VSab_w$&1r>0iVpEuk4%Zc#9d(JAC|R4 zozuch6UD-u>;EB*Dc)BibtfC|{cdbi6KO)wdZ(q7*XXIfiLG>gRGy9vkvhYB|I_1N z_@4IB%G}*H*Eye=SH%jYo<8wFR7jo{QHLJ@?;1;#czutb> z1v^ph*8N(>G{x7&@7vZa&t}=zjNMnOkT>z+M*#18k*&Ap@IeB^uN?gq8J#F#twZWu z=-KJm<*?6>cX0d75V6;#a4#d22>7$W5N?DBwWnp=_!8$G4L(37s_aqtHA}p<6H$8o zY&=YmRe6nANStg~^U)5?CM~as+W-L~_?XjMAaJzJ;^gZT6~e^P)u4}ePA+zgX7k}c z9IXVavw;!ycDKE@og}EI7xr@f4V+8(fED&wx^B0`iM z)G!NNt|gh6L(TIqWu(0zexG$Y5G@aB^X`w{ERLKOg14SsydCi{93_ApuA@lsBRAp> zEB#q5g)J99XSH_U9u>dSxNJhjl)lNi6z}Sy=W_9xbF zO^{~Hw-vI;Mzh&WVFcNbH^TEBaBei21EHi571v?4n*n>3?{BtL32vYZzb(Z)0bA>%_gmb-X8iPDTjZH67m^k3?QS5 zltp`_{?#&tP1aR?kc(`~NqYVd9uSA>rTOLydQAOi;QBGA@H8g4KwT+9V?W!$%qI9q zN+kqEf{$`RxpwNg+VS%#ukVC&s|&1i6nA&z+(%^b!*fL01JJcfPXQ`x(ldd=QMk=h z^{cD%b09tOJ@gJ?a6D;E>v?^ATQgb5*B)sz%h(hJA;&#J36txMX)ySAVVIok(@1i%61pcGPoIJ*zfMX_~kZClmbw&noKr z{DzXu-=c}9@aLmH<;Qq)6zbIb0(EwT@ixbwSjjvcw`c`w6_AYi9DF{z*WB@LK;OVk ztyH1V=wjYEukrEf=UumL*ZXk5+wY+Y4x_+3O=K(rj-qp2t*W%;UK{;hL(#m&I?5)h z91lwxBgofb+NdKF@R)8bkN#2P_KoL_YvAaEH4uOwkynxGWl zpH0#mv?GlC50x`lij=;FW!BdBQNp9qaEsB#6WMH1T=f@TluZ~00x<(tH<52-#Zl8$ zf{oLFqI}Oblb>-XA`fvz7gTYe%yDfKLIokfY`onx0CJy#khWE8ASgtx-W9JgGT&e9uiZ40aU z&KVzI4MYQxs7LAWJg5WMrqmVpV~h*7W=+_&Q*d3=?b{mJhssu zIH7wm5jsbNV(j(dIv&VoM)(~dCAfZsIMB;BQ7u^AqG(SAA>d8JCB0oK zp_Slqn)I~tKX-v2(O&MI`>PphN!(@)SdL6kz~}B2`A#M-&;o|uc5TzayZ%r&$!*F? z(#OrW&1`U3^dgEe1G(jjStJjeeseVs2$08juc%rJb7XL5NtpJ_jhjG(L7yO z&P5&nV{8Dc+n2Z;e-$In{n6iL)aYuq)%lm?q@xa3b(*dSo>;lxmaVm)gn&(Zt(Ch= zi}i5jTsv_TkKd;790qY6I_qyqp9>bZuJv`3o{9WXo!Vy?{wF)P1>v^%fU~P7pqY4E zeHTOgRUU;#(A|g}bUfLWx?OMO6aSt+ z=v`gV#ju;Hye!uIY$5Hmp~PWwYkzU~Sn2aZXLjl??dQQV2iwxM;`|u@63w>S8ciML zm2D0FHw)YQF7#U5cn~~Xt2m50MN9WOnVjG4Ybj}I$H$3mD&(xEl1LeV!K$mBV{(+8! zuk>4!(XRN48C_yur3m=;>WxA*8>#lkEwibxRyKES`6aO8{KYT=CS)9u#3h z(SqI2+|Yl8I1UsjzF$zNZ?^(q^^M$mz?8mz7xrDaAE2@_@c5D9^|=vU@O`6pX@)rW z&OI|{@Quk95hBM!bWbMWYz!lSJhLrI@)@E0)*-D$5|=}Y5~;UKQQV-;k05I%SlzOl z+L(;@9m~XH7Y**~jTVBym5P#KbQzP!52Tdjl*ERG zD?43(2~>Z9nc$bjjcR^r3q9f_i@GgD^na$p!ycC^};CNp8TAXTl>H-FR&tqp*bDCu?+Yzu0Us zv#fbHpoJK0+$}wREXGVX0iJ2>i9qg!A*a&oE+$h<;EJLQ4o7F)GH>MCG^B+(1cq7-i7HWOp3>uazoPp9g1j?LAKxaO^a9ZA=|th*_)f#u?y zKn%&!-?7Y2)G`W%Nr?79T?A{+Z@cb6X!zgI0nK5401s{fJ9M9y4E`97=X-Q}+e+S) zJG}A~T7=*^%$sLL1R_fJC_yWO7a8?{?v3mj^@jOJtz}XX(*lQdB1dEM!X%x~GmQpi z!~}_9e))kljAxNfBClsRfSF_*U$KDKcGPDUExxkD763#wV7Nnu^vw7&h<|Y7p@Xh; zS>d5PbCxMgDS>N+Kss$EuDE>J=8zdlUDq~^12o#??J)_6{MAdLPMlP2wPg(5n5b7A~x{yOlljHdUJOOsy{L&X|KVa+RJ4& zTuggWo~guVV1k!kUw7$&W1cBGaKKLD6!9Ry&r#4e9Nre$Q9b_m&%`pLNPpcQuf-2u zC5R6|WkPf32S$a5*kQo%etG_Q@{9*#wg?+Z=M^$s-z<)G6<{a9d&v%?Ndn*J6wvB7 zdai_y;BsR`%!mb7t8NNWZrzCdup}0c9B`DX z8KqhXv>1o?>~SG_5kOxUsR;=NOv#yiRu9}{BOPJP4-sKhRmOJ1g6a_?oUUQw)?@QL zm9|><*!1Rtty1i116>RbcA}5?;eAa^xMM`XZ5E(-PT4*im<^mBNKPGpcrIf%@Fo69 zrPUlc#Oh2DI7I0rBtwVEMo6QLUc|VXSm)Va+RrIAdWMud*cbXzs(%`^9}2W6k1bow ztzH!l`#FD(;O~(~s*%E*goIF8!2{YqB9G+{ADZQ%9laNce5@F%HQpL;Ic=Rkg3@B; zpMY?N2SNPozPq8_Z~}TT)hlC>>S$u7I&3xrGFSS#JkrAaS4}EXN|s?eFy=E?piyEw z4ee>kQ)1V2F0Ls|I0HI__)hLAYJn@kjSXK9F47v|j;dQqcWmVNp-{1EazDbnx;^9=}d@ zjTJQLh!q#{eE^iml(&$17=5F;gW>XY1CP;=n_>8K^r!|lT9)2XYp$UPd0@~7TyWw~ z>WU5vYY|wQt+BNROpv~+%e-tuVXp(^-8j@}kB(@0`i-YwlPh+ppqd}tj028&qeq6q zE>r`yn0NSzx?C9Cm(HilzIwZKR0k+x>`0&A;q|Sc1xzd3`aSfPNqy&n^9nDL?u21oAH* zhFH?s^-E2&oWg;5(%+u~=QNWC2%wIxs%06*XrHv8JcSz{#ta=%aX5`q=Gs#}BZ-vn zAjyY)ldpY`_EoDCN7-Z=r(bZ)MyncVm zAzscQF#J(^=_Sw=f2hPm=_St*0{5-XewchH16YYqbjHRA6y(C$yVRjvUKmF$Uh^iw z`MKRINRAc_yq*`V9;Y~V^j-1ZfIM(JBzThyr``?&K?^WDxD|T@>xs9VQ{U%w1!h)U zdl>}PAUn?%iPU;9lTYfpw}vnRUFMFO;4Wr9sBH@*Q_(kL$(ax4N9oS#IwTC|f1`^7 z?^bf8`ubdk%Z9f>hSg4867X@V?TT9u6ulTCA1?xP!`OSE0qvmouSUHl2{pH&%Vwm> ze$pP$2_&mr#Mghx8HguCv5=fxsEhwTGH?2RbC004&9joIv?BrU8J7GxI1BAF_nFq2 zt$E3VEWR~@CoSiGqLYVFTz$X$g!#hWo$qC=3CBc>alIKyk(0#m)XzUx!a^8JSanTY zZERObO_MH$tTi@fjuOFN|NI&7V2TYETA17=K@G%&%`YZXc9%SxHsDw#b3PgU*>ynfexMTGSjX+ZD+TO-Z?NpkV?ptemMv>i4&9kE*i}1a$J8HP~#s`ih6y00hP9L z7Cv8eZnu$qW(BztxAGncv!}ATu?Dc6g5nbjo5Bl#`lMj>?0mbMwH`FcoFE&ue>xgO zf~!*fmgrVDnHbJjl2F%Gf6%4TQI**FCCKSSU8Lkz^WgI8hTp8G2!o-WXC-R-bS)cEwAZ-`Bk<_+iM#> zp0?znaM+Y~eyQcx|Ec2tAnvWg+KRe%QQWOaaT`Rxn{E1WkxWTz6F5{mp)(=B zV`TR_$m8^EsW}PLMX~#dXT;y%6|ksj@-Yt`B>9Cd|LJM_yOf*coQvsDJ~A6Bj0A~o z&P*{E1dSUMoU_%i+pqg;jECrB4>yDx`r_$pVTdHB`so%Xo7y?Oq3Xv*!gK!cDc6`? zo$21Gx~5xN9(ir@uQEA?16;+G4>BUMx%14!M=moHGVUqmT|2c{5O)u?w+>7yGk$Y0 zph%qD_sTT~Le+)mUZdsnm>&|qtoE~HKw2rM5yzmTkf15k!@x>7k8O&VKrNq9( zSl#V1!tulD3C9j0KU~1Mza?* zuzNyYz|J|ermN#)7C-UN0Dp7991VI?fUGNj;oPyEmi%i}O=f21QWD!h`E36*1+s<@ z6^8o^fi1iesIXd8sPA@J4$!Q>R9iY1>tT5Ud|CCAS1*9xD=RCD+lb`h7l0c5szPa1 ztWtsyhJgYl-wN&rry;{*Lua{bUfIWwFR-924Gg3Ixgy7hx_$B4uW>zTkkECLqTu2@ zA|(}>Y=~WZ@Ec1FQNS69_vyba3Aq(t74{kePn4~aL~weu3pRKy(J&BvXSDx2u~7%P zcOpNb>~Z+@vsh{qiSM6Sy~}+^?60`9F$O#ME;^j%}`IX zLFt-@Yb9xzAow+xDDca{?w%>h{$xuri=wLGh~pU+Sh#Z$6%|%oZH5OVU{rUsJcwY} zvV3d#Zh@QZJ>NHqj$E0xzC67dkrc|XA>y_Kf^+U5<7L*lCf^H=ZJ*D49e(wM1gY9f zpQSclR%!EkN3XukW;c>N6?^{t*rHkD=-8iMw&U#j-&lZuUayD*!|dFUR1yg7XS)aP z|2SR>a?J)V34=`s=hqe@Sm94_ACt91acYQvPzus(Sn&l15?hgA{7e^~snHKEV>EO~ zjv1Qd<*oakYJGCGMOGAZS^FZ2hCR#>SSQ50ArFEV?u-ynG;rTdXQ{!VDB?w+x5N@5 z8W*;h$FV5zA*3v-@goh_fV5^D5jqT9r@2h+*%eHziA3eLFUk2A$|Sn`V~tW^WA91J zN=Nu>LYMkc-D+4>ru^Jr>LC#LGOR!6Ul54D1X*}@Dv=spFG$v89qg&+6wPBag(4By z^h=aP%kQD1a?m)cpY3N3uH0C6#~t^HTlmX5z-q$HKi8v|zt^?88&j3slBM@zmH@c*E>> z8ju>p%h^HjGMSb2t4zQ9rvW`Dg2cUv(PvB$zM#Dlrq%B9O3k`6D zL}G-UoZCq-tu<+=%?p{3j_?hA!aL?%|6pKN{{|C;`Hgni<9teES^mFlUX8Td;1pG3 zYy7Swb4^W<6d&1wa&jCF`{E4;I4l1=k*)qCC{jpANcpT^ z%P{6#hZw0cNdEYI2-BN?OC%@6o}W7+8}6weo`pcH*Cl}Y!Dag-p-3pOBTR15A`SdX zq5%P(Z_%DF!deVHSOk|Af4`BvXqgAZ>A-C4zQv3y~9Gg=ID3(lwwh`%o#nK zdSt7Kp;>IgiV4-CtfWHKoEChI{u}Sd@A)93{XP?;L*3I>+KQ0I4w(jdL2&FwAvaDW zK~5?XS9T4{7VIU7FWI$hZ$$N@Z@pW#6dCoRh+)!H9_0^=bAXSiJlIv8sB(L4xH2}f z!7xWA*YYGSv`Gz;uxM?*$B!y}8kSfU4Wzu`mzw&(g5|k=?fcFDHLW5*Rws1gQ}hh~ zoa_scpZJ@|*K_WVFoRC9$>V=x!jh@tReycrxIWm&_g~}E!SCHU#1waslQl$VfOGUH zR3B}teYdP+dn2v%M%3TVh*V)57gO`S{Z3dv+n#IxLIfEyoE0TW#fC@&`;5miwyY;<(^eu_-#Vnnrc3*FPpdpeXPcns)(Nhc$Oi z7s3=*QR@nujQH7j(9xjrF+Q2Ad%YSsP`a2VgBLN^gt{5I!&A8bu-3t_A8YRk`YBbd@(B;I?>L2y(0rHVIwV#FBTPj5BwimxgTRw`L3T zeUiSv$Xs2zP?^CJr9|E`1UEr>QhDV>aLL5_j^E+29Zse)6c&65`8LcD zH`JA4O#q+48Ql0`se}BsMU*J=G@o-MAb}BGQ($Q(Y%drPgd*bnn-T<;zWY>aicx%A zqlwdTY(-`&06v@tDDVj~^x5C=$yHC%(tS&^*8KKXo5u<0k2mKj3D|a`aFR>P4q^T=5)p*ceyl% zcw;b@t8}RLj2rzglsh_z2n1S;4JJFg{{RB*$$OmwdLT<2u`fI#}AlLVAazx@*}r5DfqcDZ5B{(j1H)N3@XeH1bPIgwbJvzn|AiNe7qWWIxYAOzvxs+ z-^Fe8mSSSS-2Wz0`CFJRMQIO|akZ&IsL+po1-jOW_~l0|lw5ExoW5akhJ%sVJkE!7 z#d~PHJHJXJ+Ks};XA7 zEda<}Gdnw2KIT-uFYT|N)?VzFV+Ej3#Hs7k5rJmj#Bd{!unCbRNy$G)HtM<>^}~t` zUWBOcZe9dXme@pH@=3cAlH6F4I5Srs$wTKcxfx=XH zAihG()v>RUern|mKIwb!aNZpEZu)X*uu8FQHm;-ROm=Bv<3KO7GUd*l@CPAs^oaJ) zb3<$i?Rpj+CyhMU)_qO7Pp{|Vb=Gok@^F>wK61lRk>GC}o;Hy*<)TE9R(U_<{f>3M z*3ncV06Ze~DGz9jg&4Mp+yntDb#0)B(N)m2g}>EiTMM}4VM)AzRVEd|Ip`afkscdq=#38=axgA}*BYgm>%ZP8!&M z(j$`$l%B^gihL~wcBj|o>CuLhot#G)&~N{O`4X;Zvz`I?s7zc_x_;d8WW$K zBf&e5Ggtcipa6;$sVL#)rdy_!(x6e^I1#XC|C_A*s*U_RZomhp_*A2{2}p}78;$Vs z>Sz>MWWE_N$N9JE9VM$(X1Wkp;@EW76I#RvOh^xuO#cR@VqC5!w8g>CJJaZ)UQ~hN z?8;F-QJ)R%29ZMAl3xEN-?=0(T|JxiN8abAe#;s(8yu>DyP}$%s&B2jRhbhMl>Kh__99o@M7FM__#Y$o3q>h7a=GXyCFz2 z(?#flaFOB}l{KT$u}x_Y#yF5M6GA1p8W_+m483-o<>06jlc0d8Qt4$3doH4=8Gm;F zKQ^24ywZzhPc*d>%)HFR}eF*F!x-$>c|VRTs895?59 zxC+PQ_82!yQV8P=g5i~wTrEDEN{JH#TsVY4` ze8@F~q=WP!QB(cT4{>LalqAd%`c{NLOd@ zE67@d))2?#55I9%q5@@R*j|J}#-D6@559owqL1{lYYM`S$Z$;1_Z1Irh0P#Xh5cWe zj%$jJY#D#^Dh(e@%?WGSMm14(A9^KIUnL9trdcfhjV^^3#BT%W^^P&2XWZ}qj=XLs zHkfQb&6q~JRxTc{k+zGU?rJeN=~d#m*mh!7SqyDb?Lmez6r!O)5UVpb_P_0iE!fj( zFJT(obab2R61L70o3?A`49W94yFQHleQB2_` z`P2hB+fRemkWziXfW87^i+?X{F9J8-hx1e$+MZHl`TkuFV2Sw(rjHjY6>TbM^K32zMow8%RX2}uzMNkyZH#yK zyP>%xYgIW1E>!|8#@^-B-8iax8~L^otWG!ZdzB9eGcB}U;Pso0ze9CfJGP%PGETV; z-`i|mRa>4?p9q(@b;4&=M(oc1J7C?A;2T8oi$dbGlL9CPBIoLdoKtUvO+(9~ueiho@n__8oGpZ;2h42g>j9Ryo=R3)cR(r(G%(34P!#*Vl-OMAaW0uQaNh?S--#?K%K5UJ_!|>WM1r>%D z!oOZq<@2Y6)Zp)mV3l92Bx=csX}Den0h1_Xh=^1Etcp(p8TxN$f&xN^NYDY&UysQy zT{fxJ-tQ(}@1z(Pv`|8NDC5MYsynm>24=4k$Z%!H=4WHM>7@1eskW+8Ka70}NI{0e zU@-(AHp+6Db~PI0(q|9xcD`Qx(%LCDoQd1M2W#UD5z$)PB`HYtv5RWK6^rap>>8S(Wo@tqGg{hAl(Ow3w4ULvt z>G);QRY=`@9-M45qRd$&|kfceG7SBQSdi%CWedlt{i( z(ra2uyT^-bv#`tSg0q&97trx+fC`H=OF>Z2eC(|1l}}>9T8miMV*93JahcA+u3F9- z&B4in_vm=KODpE|IW?wxUYMFKh@7zUqRf zz1Q|kcQhXgeBcBAR(nGaQntYLc$Od{4jc=^V8ka zqyyvF@I3vqOvjYZKgjJtuN2byXP@}7l>YdB4+9s6!aoIxOJ7Vo*)v){vXe3d7F^2z69VqbuKDl8N2GAi zuE1@DTC_e0JrT7=KUz$P40XcmA zao>=@ucUo_KIcaJ-+wyEK@xY}8OCv7$;`^hg1(?u48pf|dK90@p(io_b4o_8kQ9|# za?jOG4wV?x{O=`_TAzBBe-+QZm@hX!!p#t7^o#fpX`=DYKj|FSU1cqEiKwZ8@$#LG=KQ*+!7hrRnXAD_5&G2dA=Ny(j&Nn$2uew4YB z-&ddeU!w9Yqt*|+GG}rfm;8EEUD=$6RN4PEBZQowd!-VXvTpnnX9 zCG|VpT$g8@3ol}3q}QuyX^xkwHmK1JvNmdR$UYe%-62MO9$C>Giy-?Nv5|5+6T+_Y zdvI+|qQ8+eH`{Eo`0}Um*+B?YSF+i+9O4zOy`m1D--U1wHWti%pVG?dAn(s^D!#aF zbI@Ul8*w}~Y|A-r`s^6Y77@Q4t4`DQCN;{Z=VqfnKJwet49xa->X)*WtBpfB3KgI8 zbt3CBI_H&2On3rOg5w|m>O!AH$4p!eIQM6^OGiefs@u9XuRn&Y665^;M=yQoWc2m$ zGB-vs{}`T&7-NNxaQ<<%k{pH*L{4STn%1YNmaAUMlk-T6gZOHLMuXWSq&-;%NX(ig zM*W0S;fiJNHUaoN8;jp#V`plaMFS=WidKwAU!|Z{FxXP zogmjTbE$lnX2ru8e_$r4&ml@mSn=%#f_w2Vtba@0iG3=?{IDYvaz5=H)WFx+3oufX zs3^c5;or`4 z^n7uZVR_p)CtpB`KF_J=W&e0D#echy0O(%YOyFA2BuAdGf9PB)?9$PFkwhY%r>1N? zOSo4Dl3!)D-e2WV^PJS(_^iNSu-OJ3l24>EoWZ3c3aw<-9c;z3kFS@FC#o_k;kOOq z(6=AgG+I@6s&VRYqFT&@W5_w z>pkI+CoQ?Y2j}O{o|+RhQ6W>w#iSqyLswSgViLYKt$>W8d)``I>Iix=(T_oQ`Sg$? zbyiZGP|{HTULe&+QQ-;r)@La!OoVaw+N<{H-#`Ai%*g_d`|AzmA|C6{=iq><9; z`85tVHyk+Sk3mOXXqt!v=7@ul*RS^OD?z1j^NgM@pc;ch!jf3#x^hXDK48UHH=7zF z$l8|Z!a4YMgb%4gh!S*#lw=7Iw+ubQ#s-~?M(;<0;{?_ilM4u)fAR^?;%vTMUZAJA z7SF8Xu|`{8>HF);;J{SBSxG?nsV9(MLIOPxp?aiuU5$halZBODbLtV&(;HMowy?D~ zjEKtsWWT7Fl7%*EhW}z0Fk`2|yRnO(u32m^kqtV=s$1G)v_SBh57{=GLe?W`hYN|4!*yYaI=OF+Dr0o&F zKxZHoU%zQ9gp&u~#;V3njp|Soy>ORUt#iX6{|@@VD#9;-)>DbFYf$>)t_et$E~dhP zt{Lk`%?kM#P$(%1nYbV?Q9-`_d3o!WW6k6!2tc@4xn^c@QTY}SAd5K0PX*PzvT!ll ze>B$3j6}{kpd)Eg=dHw?Gv)5EDL4_6;?VC>ZqxCw79A=8MN}?)ib_|&O|S`<@+L*@ zvdHPJ1~hx@1)XlGZ}041?!*yC1^FvG&k1C*5zNz?c73<@Qv4=?D9mZ4gbNir%#WKo z_!4A?E<)^;ZMAsAIB8aZ2gQGoJsX-A(PQsTbCSiMAp)cRbG9$yam;KeY$$db5r=*> zALRQD-w|tEnCizsx{W?l@a0!ZaAGvR5{zFaknO2D8yOJmOh*-HM78@$OU3bF&iDsD zsPlX5js^0LyFO4^v=&oMPvmeWTy6AOIO?0uz{(tQa_IKjVxR1{w`BLFrrFV}mBJug zXu7q?R1+oz4UbIH-wqZGsE!exo2ksUf&n+s|ECGYA9FeC>?3ymmvhs^SWs5dO3#vN zR%yEzpnu1VFmz>SlZS(9Jj?oe^qN@*E7}veZ{DI=6C(O1-0f`JoMe>xBy`$fW(^-} zkV8(W5Ah~P)E!B4t_>3NUSDWn{Esz5t{U!t!uu-?nQVnQ{xY>^ zhupv54nu~+-16l3IEdh1<+OYrY>>g)bM^xM8x_B;ywAjsi=8%tR#Z%^Ty&HTx7r-| zMot65`AsXvix@G|BVFz=5tptpo1(V?C2&W_TBYOyAmWJ6{0exV*WaN z?{_B4<%lO8ejvsxLQ;WJwOyALTu>z_`cE9fvV}@Uc z@#KU6s`pg_Wng~%?y^5_UM;$|U-;L~{U*VWls3{oBIkn~Ga%NU*N`EZ>p$b-E2TObs&0v~MR{;Q7Pnox77W(T;z%d-=6;*lk_9DMHn#2mX;=AWVq%-1V)JK zt5pMoNShTBb$c;`>6%-D?@Iu%XRSCAMGxb8j>jj!<8_f(4f%QlvfcOibG28e)z|+V z8S#Q^!j<=MYxbMu0e`0j-2B=rr`||qH8FKFY=w&a;S3n}K29u7BwYHH-;W2QBE=)- z#pCVFD8D`BL`K|V@~N^qw49D@@gZh;=Nsu$$vvW(CxmUuXVl{y;W(bSXlXe zGaNdr_yh8LUl*&MwaS0QUgr$O?iGFFXRzmf|J`3Oq$O+}G%ts)0#-1zP8h@J3xJ36 zD-AvkeA_)gpTwk8(EL43F8@k`CiYd2H7YDl=$X6XeZap3@d33$D~JIVyIHluX>-JH>mbFDispOahu4gp;ZSA9x*fVIx$?K zj$7suJEPKHooy_YS#DyZ!V0_@7ghlVI6lMm@0oG-BIqIcvLd`sL0^cGV4Q3!m?`&u z5PD-1<0p7bu-H$EluU5b?9S`|q;3WXhH&WH@JVX{3l3=#-5^&_=&H$UIT(wIs8-8*iA^_qJQJMGH|Q!6-ZF4xcmlf%s-552YyX2KPNMS zNSNJH8*RVZULK_4=~4DxA%+kTpNk!r?r$@f;n+b+nMQ7f1J)TE6R#eydu9*r(}7D% zLURjOLgV~<bLma4t|v!R5e3qi?{Z9%a|Cx4BGv-YXY8Bt3eE5Jg@9ZsNv}uA=RYYx_E7#t z>3y5DTl%tSh>faR+|XZfad9mz;aBBZ`xm0U*brjI$J^moj5muH*!O2PvBlmEO5B#} z+jU>!{iSFHtHAmX-SbEvMoaqdx~t3&L~ND?UL=QL#G{P&s~7wA#`ICZz)cjuK#L%> zC8yVrQY2U$1xI(>n=}MXqJ#+*R6Ab(^XvT8FaaOt>b8StVPPqGXO!-o&J-8vc6F}h zaUorIL}q_6l4%$cD{#65;FV{Fw9XwI5if`eb0B{+R6=+=bJo?KbC^C=R-Ry!Z7hlb zQdx^oi9bosyIAQ(n{VXi;xvDb9Vk<>A8TS*D>0SXi8A(HN2@LvW*fRh~L=A6zi= zoB-C&;kPT}O<>nSri+(3LHc-g(a2lolo6VfxesH^jat66aAf*n{xDAThkc$HJoNf! zZ@FV7GCTl`6WpaGfD8w`uUWtbiJ~G+Qy}+aIlWh>WMFNhh)*_P*MC*C>mm!xI}WO( zQgo*RI2nhx+wdWANG~xuQtPdJ3e#r;dy>3%;Je~akRDT_ju54UNEk+KFW`JJ7Ew7~ z;9rdU&U}at^{FuzQ+x86?sMA|8IGUWAY=un%*Klv5U!~n0mKw?mdLgNbvL0ILqRdse@ zi)S*yDhjIzHsqt-2$VZAXsfz!=4IR~4KDAbDKt(U3ZOn3V58X?EInSv(1~J4tgtf# z&;?Oc*&$T>HXSq7!)Fb%B7-cT=eV)c8LwIjdjBsfgY`8SbxCR_CEhLLO{ zesP9#pcfdK?bvIcpi`Y=NU6QNhxjIcbSNkvgb*K0Ca&YJ$dN~56NVg%5Nw7V9i2W} z0#;X7?;XNFO`y&3VOpl?P`}!YPCUxH99N!PIGp_C_=zX<@&rS(Y-Ts`JU3=ejS2m5 zvG;Sudj31RH$7S?75sMB$S{aTW^n{Pw7`UPYA}7~7YUNxZkQW(YZy9KuOVT1UHLX@ z;(NVQV^mF2u$`P~4aIxWrcwI_4hVCyB_-zt#l3IZ4GIVeh76XdIgEPd$T7B-8pep;^g z{Ni9i)@<}K60o-SGm7B~Qw67~9RTvnTtxhiL%&)omdfLayw>nFD{yv z;*^cBbyEg#pO&%NAA}0+#+X({qJWiY=G;U#W`-W$ibSZc0BKi zi4^p7%=|opMNs}YCp69mTOtaX3ZoD~nWU1*hfb5#yis5{7I`HY`MSAC(1=1Ec9&8r zYhhN$47J*}12rUmO0REO=GG;08Shtd!cCd5j5g8>l|EOX?6tB$GAsf+Q}p?Uo~8Kv z5+~J~yz}uu<7+Aujc&I4wsh#4XAxT?X?@IwD|4xy$6+KONYnhK7ac7q2dU@=>F}X=f@`F6AHKVyow#N%?4q zz8KE{gO~xb2~3B&d-c^|ev2RZuMc_z!X~A!bEa+u@gdH8FM^XRI>yIEK39h}#XP_4 z)znKx)5L~ShNfjqsIA@DU}!!+DwLh%ew}4h$!X$2gJEzX6MrG#)9MjSn_&u-9Y!qI zS+gIUn=6?Q+Kr{bTEC>_5%(n}b=_w8VZ}?qeDB#E(V-{f4zPhTQefO&>+4Iy!c%@A zq9(*UE{L(Y^j;U%c_y`9S3CPCVI4h0f|+KC<&)5by_|6f1#W0M9J2b_Nj?MMcb7W)C*q<#2wWzwK=bs@^PPs5Xk7A|UVbmia_<(i#QU zm{W$PX$Nyeg`Rv$yhICIgYS;wZ8u@`w^M>IGjO`&dVEszm=^>A1fJpksddpfbUb|E z@_7fw&xx_Bce8Sh+>larP&}rmM+u5%gvfd;I?&)^KLW>&;(P{$4X00bD=tnb!hQ3D z8923^)&msa^^<>GDTXCNKhzV=LM8r{#aU3i4+Dvu7auAc)4BJj+y=J-leKI3RKvR& z4&xF}MF7*ny}V)T<4Ng}mRoS}^#4vA3|a6S;dM(Cm{5}myj8zK0g+fu(4aMSJ#m`3 zJzK=)qd{vga%bvd6ER_xSdNtOFI6M-c5jFxywH zhZ|SP-~g-|>l~rNpV2@z#2v)C;3ndiX*WbY6-KVB;2V?x6gKt&BS-xqmX+eY%+b|D zFU#}~@4hUzEe5J&{!(r#q{>W*=Ui*2dvNh?7*WzGMQml9?ZUc65-bi|NFdgZpC(1b z;JDmDE8B}-%Ftk~cJoZ>31>_YML;ue#pKBY9|`1XL?lDRiU6^|3!-R}h6~p?vE#~h zs=uETp2ll>p^O_+iUxBqTky>OE}p@@94p@ z1xCuL5GbOS1dO0D+#w=_Krf?Z5(_$i^**xlCvGfIzef6xNY^hOU6Q_&KVCNjcSTi* zl!8LYU8O$t*DtV`Ai@7M!5zxKHXyXX7p}z9OrbUoVL+_vav+NFz#D>j)BFfU^bt^Sh! z7x?eZ?n3SM;tOF|fyp>?pNsTSh?)Rjg`-JTvKHAT@BiifU#Is{<<3qe@0GLL!4-@T zlGhWDWr!+Yn@?tg8V^b+(%)W&qG^IiKtE7HSX|gdL<)mdPUfaEe%WbXl+n{vo7M4+ zR1Bbtn%GB&_K=UCKISbZTJI#S1Oy!|FcY}MEw0t-zYrb1S(+ybaX%K`bxt0=v5!6X z1mqc}hkC@!3e6$2-4*>_`iOxsPtP>mlMz%xHQZtcPFoz{5D-B26{R$6#0E6R3PLIU zo^*wOsvA$}yK^Zl`yU{8X{O>HWy4V5s60R|IlVr3v3QZ125 zPqm07WP=v-r=nV~wit;dx+V_P#Fti6!;mEMY6k3S1hjr#Eu$!F#SXB_uh(108(6hi zv>~>ZpwH%Sjz5f#)C&kS@rHP(!!ovH$Odi^lobDq5^mgMyK>mTM>P^*`Lg#Zy1JvQ4vgz4T~9 z?Q`KPyhxg#Hrf@aH~;1v2M0=(*c33%^NUd+yv47k>u{tT?IUMuEQ4Agm33Iywq<`@B!iYoQjJh61MqYyUEv z)@LQfch9x|YU^?~^_LX~s;w=A3vG133d%2hHkthC`&}_PK9QU=_xnBeYinJmLLSke1yqCKMk*{f+4^~<}| zwZJHB|K?s-{#TBX1HDm;C+pC3PMB9T3L9BEB12`@EDufT%GEiU=2v5YmUYKbPJ@=2T_G8$Y^SFOY+{4cvV2qTM{)q66;y^~94I$!>q5bL1X zs15onz0%T8Xf$0N+=;!{f6Z)0xZIvC_MXimP!c;+JKmS7kt{{`N|GAq^nf~_+Wl*! zSJs8%+9>mT~@-^i5(qLRrc|S>%;g^ zE4EpkRt5T|o8~$kxaeX@K^5iY(4r{V-`T2t+dh^Fdyl)R1?Z*(d`~a1 zhi&5ulHvZ6zLS)~feNuZH(e__B7P+iAGJsxL<$-&0k`|j2EKseqk(G6`6d2Mj|~Q_ zur1hDAg7)OS{-d*1;5h4ht34fFIWUWbv)G}Xp5%)U-RbeE{SO`?RVrRZ|O&Fc*Jtv z_1w&W#Gv&GQiOg2lNapX`-0lJzfOS*)lQBZ)6$Z)k4?G9haqDXqRdJ%Q+gw-0~h=K zV$@1pNz9*m#tuZ+)a6?y%g0BeACzvbKmyIv!_0HlIs>OkdMZXNI8f$kOumb9Y?i|V zEXXenKnd`!T^w3eXVGS;CGt3sEQ@E%fskMH9dYT|&4DzL^%ZXO?#=qf5(x5i+<`um zUS8~FJBgH4{hC*()Z%-JA_b?s{Iaa>#O%Ihu4uWio9w+c_jMzYaqR_1`uRwDRG%Jl z>$HMIhRM7LlakAcTk$5XgIp$`tp~x8P7jKhwn`OTD|P?ZfkTGX`T`pyM_3s~ zgak`J8I*kK0Nd8OhHq%_-mU)hLb1CK0&DkgI!dQCc|Hwf3UzX0K)bOOkc8njTNq$c zja(sE1K#hMkLqSGFSm;gOp%`VRBiWETfZ#1ZcdTf*9k70 zT6x2U0zb7e9L2mI0Wr$qtrk1Au~349j>AV6H%4R*7Z_T;ZU&$JtY+T9qr=C>hltSE zW@!RSI<6YF^H*nrnVk+#JUq3>0G)n*v!CMmg|Q&U8u}#vJfIAvf(TDe_6-&3Qw+{@ zv5Z~ZT24#p%)317;WRqBFG58q^*A{5NKly==ezposaKQWgNHMA?7dzJ$WO)o10|CI z^iWR;3~U;usazB%mE+wJC;=#lVzo}5f1QV~+*zjCOwjQ6ApZ4VfY!N$x#wr6C<@9j zN-R&Q8C?3s{~U{vtC>`NLSBY!3ym@b2Q|pjwEL0w7>V;k%Ia)H8k>! zyhThxWQu@_p_kf#X5AtzzWHCjIAavTr_-I#pmt&(Oh9EXAkMY#!(-&QegOM2=80rF zkSKe9t;Vi;Tb#Q3Qy`tL!$)J%!bvnBo~X4kcon>%eRM`5i844}KQ*(mU0I4smLXMG zL`Y(Th84BbQOx&V^(hGs1ff4jCum|a%*pMBNgl-n$$RB)B{?Exeo}4`OT)BHL}^np zBIF2I<=&gSC6{M(Jo-lVlMG|dsa#N*nz^dGUAUWR#SL2EO0%sBJ}Yjk9wX&sz_{R1V4jjx?p?y{8-@7Rst zAJIE-eQU{7JYK?haZ!;-^h4=r^YicL*BJT#a)DMTzdbevmxhL6D^^BfUDoPjV_iIg zFxP5OcWg}_3GjC?B8}ZnM`e56oY9bHG4(QZwvG^SXJ`I%9E8y)t7)+!eAz(hW~Lj~ zw}fTg4|;E3>_t=fCMlqs8C|B-J3JbCw<}qhzOqTEcwIPv*_q$Zr z;XOlj%uyr-7XN2@WSBQ(S!1`Oxr4!Gh@m?wOM2St_q3YtE@?q&zLXa=74>30n@Tw0 zP+`Px?zUn+cyz>A!wY7jjg=OXW0)`7sBv;&m~(;8NV!EIoW3+VmxIaSYKJeb%)^$1 z?hQL6>f7kw)x3hkZD2?AvDF~1dnqXjjHyhEW-^^zOKNxycg6q%-+$14YoM?2w=%+J+k>A!u(s zu+n#^zePX#39>vSb$i?^SS)Y;?RxAFHd7BHBEvYvz$sFv^kUG3u*S+Zfm>UQ>zZR1 z7fVFn9K{DYY{;xnj;aQpTRkV+7}@*^`=Xx2vO8Pj;_cn`HM`lm@NB^6k-Nm>lIO4G zAa6E@-FHaM2LQ3Gj6DXVWp#}g&Bse+-D!{&!aShL6w`wWoh*#N_4P0N2B0&dv3|4v z>r>de8`lBSfieG+@SyFWHJ0x2li1|d3jtj6hd(+T<)-MBuNVR1q4q_uAaNEHPEjVw z^G*a4BYJXs$5XzcxLLuWt3$tk5+YULFVOm(Ihu=^GDjb6iYI=;{&voFfCA}>`u*Zs ze1IgD03cvtb&1;FN*f*+hEfqa4$ot!_}~f82P-(>va+$UJ$_<_^Oz^G13mynupk}! zT;%=Zqdu+2TVed;pd`*SWO1t|U-o$zI#xqj5_VA;5rH{?9Ly$~DN5gSdF6>H-~3Hsvy zL#;(Rlpi|t3dePjpj$n}I6W;bSlR#lIZUCK>Hli)tD~a+wnt~^?obdI3_?IU1Zjl< zBqRlqp+ic#8$>{02ni{{0UT0Vx`7yWKyq_Evm5OvXoaN!4fr{YE_*dSh<3Tv(i z!&1X8HcS*|(3rLidTp>9X>;afeQV(Gix(T%N)Oa-AoU@^$gvT_%n{SNWk$TBRZ|c} z9hF^~>$K>vvzNY{`GpSxXSq#g;JROX(l$A+w&?sVcdLLF!p*vK7WiutD^!5V+x0Um zf0>Jv+U0SK( z_aPg^h(ZpX{AA^qIUoFH7{m^UHrU`>5)EhhVQ;EFaE*_etqu8)kZw1Fp~*Wgw)PLX zWBq#wQYS@NFs(pD86n}^Q1ET@vfFkZWN@6q*d`~CNOmLmKvn3aOQG4Y3Ta+xOIF!_ zyjPTpL6?eijd={=O`a`5e5g3D(T2FcCfz5iZ;wWf9&Wxkz+Y;Ydm6Cm*f}e5qZkJh z<-zvQoN|J4iY}z+yOwd^Xq)UCVs(mS8Iwr$J(Ir_Uj+e7qd#&g- zXf5NV`MOs6a8SIwr{%bCMH2y4EaRiGi?R;YpqYsK8jjFY7^qXr6?1i+5i=wVTe;`K zl4h8?g)sb8*q0HeAJdg?y0!aRv;8j&p#6-UK`u!AJgNE8n97|Xz z)#}oWS=p$})l2c&go}VW;#ui8H<454d=G~0M%75&K&y}CO+1}Bh0k*su@DMYj-}ma zy6SJ(qD(Yu$JHy3CM<61-J^5ozqs`d06j%W-h3tf5(_I1z*%p)a}%(+xZy+E`(XoJ zBywCL#(QJc4uuT$%E1E^j|ln;@!G<$ePZ)OS8t6n_*0cw>tm>ERDHhnB8vbD5L7%B zKtVowQjs*L*J2GW3iRuT_Q)PEIV>1<-g8#MKR*! z$@}2pdm1dgxNkv|0Zn|1T~aW}`;JGn#?qA91FFjQWuT|Z5tW%}tgbu#J!lZB7@ORW z@=0e{dvyHFc@Wm8iNs$7v|w{gaP`Qrh=6Hmd?!6;?1%DygT|{DhZE);DW_vCZ^2+mrK$$PR}+N=UOrqn;u^1MYPfzpv1% zp0P)#zeh^1?0HooK=kTBlFIYnM}k(FS_RH2x4!4G`lCuREe*4 zGW?W}Ok`{phzj-XU%dC=aQF;mTZyOTXgR+F_=PNwO|twM^U~ePln3&}{nMTq79P$H zgDI)YE`>qAyisn2cg5Ofbby&q$Gj!>TFr28x{yjkizt>l?Z<>=nSz7?i?`Jre1LLF zxQX1NO?ILo-}GFt&|-s*!)Lr-j1}*G#Yr1O-3B}Fp%3>|lwVSA>1M1kMl$ye|H^Uj z4SDDo=FZ=!QuOjpw2&FZ%z-fdR(0CHSsOa3(=#5kZ!DVzSIdplvUW#!2O9-P@js(E%2(im|3|@v_6kV;IXNVXn@KM6Y}&uguVH=UaZ#JI1Y9kTgU~* z&ReJ6d+c?pcs*`lTMyEiaAxuMjw5LSnm5W`bw?J5+d?UC%nIp(3r+Fpo;g4nb6gJP z3ciyWV@J8B$G1TM6o+o{rulYYQ z_C6NpmYQ_D;G${XqJ6B`X?wBfM#Fk-Qpe;QFY&Mp)SQeAs@}kpI+wyxx21gd1dE9& z=Vrmj=5-A{N5S#Wd;r*ThQyS8(zgNygEj4cl64HkQR78#TAzKAivnBS%qs?NC+R}* z9l0uUQ_N!yPUMEh1ZgXRA$hj`%E5I*7T7fpXDVnOHw>GEwLPCC(vzyO4_qAR50O!? zM%>n$SL7>6S-N*v8z8{8aVUm~6z{N?TJa4F|4@-J7@IYDkOiieNx>HwC!jAWZ>C8z zKt)s#vK5MQ0a_gw1Ogq$L&5dSd^HPg4Wi}p5tAd&@E@=>`^M+9f0qh(mq_37a9x%* z*TX`*SNtIbNX1r;q`}BoAYrIuBUCY=iEk#-eTH3DYg{Cys#cm|1tG%l`jd+>sXh~aeI_@+ffIlJ5C;)Tyiah`?l z6EauAX27g6y>-`%1QBX@_Y92WVPOll=n$|IiYo2Aossj6u6@^8Mn z1+7?&q0kId6_)QeL3kvLOmi+3L|h0iJ(CdLYu^GRm!csL6bE(;4nGKm%Q9rP7;_w` zCPnp5KOLxeXRL2KV2J_8Y0A?PRdif^;*->g^J-In9gK)@Y*dwpPMYD{oG8b2b4O5hr15S7uHx*O zSWV=qiu)Dfrw_}i{o&@viZB6^AKPesx)fb8le<)vEyg|JH)LIv*4ulu^~u7~4>&ie z5Ks1hu)k_1Vcb`8KP=lsR0#48vCLQ+n5XCFq7*z7_!m3B z7iIpFFT`$5p7PDSnA-BS<*FLjIg;~hhGhszO(uOY(s2FachJ*Q?Q&RN=s--vhcD5i*ip&0_2Vt>3o3v^b-=2O;|5|#CI6sq z+{<&dol1CIwQlCJJv+C4c5lpk(=xAaba=gY=tqehf6hX&QZdTo7Jr1_(qB#HM4Pqq zM?KFz9~mt+zn=)&?+$uTS}$+^V(HWHv6;#8(!{6LPiJ>t^s6o$)^F-ZB{!oZ0P8ov z9!As&E;lvMo$h^M>gML*X1=JDUiScYX)|@xwP7wXA>s1)XuozeL%0RzD01BdFl*3$ z2<^E$Q+;;Xx7!}*eA0JTE9U5YUvkF%_{Ea#*QAQ|lv%9b7~KMb%mDTODYjw6_o4K_ zMB<4784%I;8nydCsER+#_56VVvvYT$lz^#QFdZTcQYa5!a#-3U0R^*0I7#b8Kx|oT zuYbFV*g&vDt;rEq(+2^#pqAlC4QahN)&*LJO-xdta&&~EBrOacHEq82K^#Puo;PR8 z4V5pNppU@-H6zcdy`)8*`x@*Y6M(S3e{yJ?)InpfZod`a1ERyoPuxzmrGi0CG7Q9y<&^S45=i%G0@Tn=EA_Qp6)@1i zN>YJNVRZRZ;QroiuB#=pI2tQqHxdwtaHK!H8BstYejnNyu|E$=EA%+I3p@A4{+716}k`C{!jP!pM~dd z!Qq_rCqU)@^SP|&pA-4F0Qo13|9j$rasHLz(EgK9{^xTSDCspJ{yX#W4~>5xJyvqf zF-;J^^~VH8<9PtR|Izb5o{ut%1FXhy%_pnBS>~Eg{tD?o-rqk8$N%l|{{rv7G#sHw zU@!Y)1N)!OMG?PA^m+sR8-$Vn|12CWb_|5qJVUfwrGg-HE&TI{xMrQ}qvG$){{@ef zf0d){p9#m`I??`_73gaJaWej z_1HGmyf?9%-GVAPhZJsrb{>Dp^pSLET%QCNKUUeT(57l`3&&lg1@o4OpNRb5e>wl} zxm5oB0SxlDzK**Jgmb(0+j0FQ!nk%U^XHT3 zKg8ntNelUXg};71{rRN&ujbdzT>hN>ztKPSHK?eR{WWx}y02H=^wnf?+{Q*+W>G-q zsjEcQ_xi4$i*bvfG$r|isDq*q5_xUOi$1Ilj*9N*M@Tg^tTs(5p6&XgMOJIF=gHC!{TAx*!X!l%^cZLH=2>Q+wtxRL>+NWqdRcko zK(R1LO_M@W|3GL)4bQ9o4ry!9);X5hmZTy}ncDeocy`bjC#$w+XixT#se8F*q! z(<)!Zb!zyjN%B^uTm*Hq?QcWpDp+QEQO<{>^hBuk(FEj|xOClb_b;H`7v3uG(6vgIH zO_T3-%+`C)j^~+re~6$F!tOU@9Pxg6;~nAT2kx^Hp^}k2sp(T|GcWcz>!75Bp0qSI zQP>Y8@tsy1PQ$j_RJ{DJ?BQcAD<>>g=dL0fR`>vaa#tCI$Mp?%DUT_}ofX2w5E9^pzCK`UUz4EA+#e;)Z3s-O>|yBfE^z^l_Ng)A@V$>Rus>dqKBZMeS2UnX9u; zf)=0VsKQ;Zl=ESUtb3ya!s2n?HnmYb{M9m>qE}(gywK>ivPL&9p67i&qLN=T9|;M; zzdcCL4mBc8MGJHL`kt;;b&Q>1uQttJ+Uad2mz4A~&zcMe!AMav*@_j@-rj|w?$+%&u&`n2>Si(to%#YVtV^l`jEe)0?y1cJ+F@s4Ssdxhx zX*|e@!6RJlg3FH0W1okid56EtvlADTf4&C3apQ%tsj2Dys8rqu8MDensZ%N~CwS{K zo7J=#Q86mJcoj|hm-n&FcW6u=TKOO=D&!6VB%8Qrf~-%JFd<9H7o96KLaWbWvs?Vj zY0mEOCE9)RLj6GF(g|TA=74ZiY*Q7f)(Nc|1To%sxt`UECBNQ2j>y42#l*J^XAYOF zqIAgAzL8HuHc5E;!qH6gwN*|JxorQ;^B7^vX9dWZ9&Zxpfy6N*$1wWC<>S=T%9xf$ zSgLN!M*8G7p?~=p^Cy0qp%_U==W<8ftmaEb{MJ77^N{2Cwgm#Fd6kfypo_3x@G1`e z_b0O9hyly4xoU)!W<-GV`;IY#r$XCRi$}IK3d7BGqVV13S90z1$FtaPvDd_$Nso-{ z315eXKBOVUA3=u*Y(MSM@_@ahV)7_R6|8LQ>grmt4$u@1>9*nacV14#Zr5!|er@FP zHo!8ZkWP^O==SIxmEi~t2T44>9*r3yC2OYRMmZqLc%#B&Y0X;C$6{-<39>Fsy|c!C z>B$#Zs;!RS11L|u$~tV{yjD11Ywf4Moi`a2 z#GP8pyi9G&a7*1>9vQ*)CD&h^7$_L1{@~!IX6WRZ%D`S$9~fDzT7|uFdFVr7ZsogH z>)qfD3yDbUbM>PvTisdI0k7WWFKp{ff=Wc&CV1bPO^QMk7EFGGfs-G(SLz2oo@0WF?7f9 z-uMgm51vb*evHzuHjZj>vq)^ybA{e$KF*+i(QSXzGCYx6?SKW@prf5x5SSMOq#;@m za)9c7nK*8JO#de===$r1>JX38vEI4jBc9$#?}pA?y=HTBjjK4XPB?60bHSCQsxng3 z#g>vj-K($M7Tbd%Y2r$&!&~=3qU^pDx^8l^ttw|!ANC%u4Suhz-^ zO7~ZdyCPfaQ(ZRMsvyVXvI(yS9y}t%<_*8F7F!w@8G)yXv`i}>PhPr^LR;CPsS^o4 zt}%&H9|kgh@>7j}tjYvgVS6HMtlTMM#n7+M&WA3Wq@4Gf#)oOm5EUE8Or*T+GW`?Qx}Wr3E7yWk1xhCNzwg%ZY-ZK5zO!tHNNE zyW8QI_C2mj^5_Go`tK>TvixVnvU58#Wp zZ<*2}(#1~ZGU)v(X*F!`F-|lAhPY!nDZ55$d4iUGgJ(cq$-V3O$-qJ_yev}iXV*0M zBJivTj+Wpc<(@H(z za3WA1>z@?Sy4=2J&_xZ+jkn~Z#RQJO3@UD9q zMx3!V?lS>JKL&{@kWvBUW}IB&ji2s$7(u9G@E!JBNCvYv8b6x=v*J|EwEF@BiAUHc zUCI&Qe1B`}#;r2;SI=@Tty{?#n=^HxpF{ml)#Fdo#XMo(;OO1=!Wr1L3BTDd*I#o@ zqUo9e!S%UV<@=~X)BEP>kwpBYcZ-wa!!9vT;CFkn#xIdv3^`K*>ejHYp4Egq7=mv76VF1$BtYGg z{Q2D(tLEyTAAmnpidFljG@u$Q6SRFh;?4c)ftnB_=6z4;r%dqO<+L#}(T^}a(Agd0 z+>LNdtKg#J9Zm+mDoBZB4koheWbz4KRSCcI>z!!-$IkeOJD_Jz*L5+F$EmF7Gk%D2 zSL7~(5S_BE--URqQO0o5dFZ`|<8Cd2TaC;3b+##Q)qSXr!k%A~hFk{VlbU?o^*3!0 zc_u1bo;c0(!ufgxXfm%FkxaX^1;mrv3Y zFH?Km?A-?5kI8>LKCzFx`C1lA_s0!D0g}eW4;*M$q`y*l>}|I`+B!g#KTGKyqTld2 zycnynP-L<~zAlDaJ|%3cc^@@8?!W(3?={-AgU%?H|=RKtz>P-hXOQ-x-kjA*FRnf&>SK#mc>VOyB&5*C?viLpKWn|;3%bK z!wzo{z2zQtq7(><_n(e?RB*gIOESS z%8Mt7?+FPkXlZ(Ubaf?%&#rt^qh6U{!dA~P;+HyA_80gS`)*q!xO9g$c)EPibcw(I zsO+|QXI4eJO;}2iy9ceBbR6$w0~55+6vS9PICh0j4b@zC`q}<9*z;Go4?ny?q1YXI z^(Gsg&8S{H6F`E%z=%L}fva7Hno7%79B#tX-HSTkV5!f05D)WZqGUfPE4dU7h&Lfg z8S;5F7|)Z_rRSK&oQSnb48KXwMqp__%1w#L5HSNTY^M8QNE&~LD7>bE5UO8K4DA`* zMZYnw3Wd{h>mV0(u@KryUcRv8YIX^%Ke)1%s$(vj9G*K8DW7LN7PC(J@MP#&*`hq7 zN_|&sb}m$T%AuwuppxzfbGvY_zI1Pf6FniYaUV2WP@LCD$5~!VLh5%v9o>eA$1Fba zsX6F>-MuOiE_(cBof8wq$_?2AY#Cv*j~!T+vvLwnf$*4p^9t6qyA;wHQ6C@D>hkQE zw+kLPxQz2GB+3XQAGNjum#D6lJt-eqLViGBYch!E#K98A1x69v zttS>1YkxYvE_Hvd8XNp4Dj?)VplDJ`sxi7~W$;(F7L3s1=?gsS(%Z7jQtB%=)rYeR zVzEZm)rhRL6Nth|wvNpt5?vNB)%`LO3UC~V6_&5C)U$h~+6-_IGwc-brQ?8jRpvuM zCiZDpO;Q!^-BNUl<4N`Hfbwr1+?bur4{59U4tS|f1mKMOhK?&-xOSC4EG4u>1SriE z`^ zLpmqwNf6()r>-j8+{CR+!Js$MI=RBi5F>M|p*)E8=fNL3Y>}|H%CartMRfP1-v}58 zuRIwR+d2oI-RZjQ5f42velrwX*l%zw@r~tWh?HE?o@3I(g6-doHK+)!Cedg)W+K+We$ zc{0QK=5G1fSJa}9cuKOeRzpn$hAlSp1C?2{b*AxA`ZHhYMXGLakv`Mo+bzra`hA5y z_uDtfXqnjo*Fh7^)I`&r(9!p+*$WcfRa%dc$gk1I_oMf3L#w6^M|+Kl)O|Et3-1ru zbr@`|Hbb}uZl3k5%}gXa6&Wt#u4*;t(1gA^``$zUj)WyrB$@LDVlhX*SO0B9Z%d`5 zY)w`5{hEp#r%X)?SUJlgsx*D7Xfh+xj|2MR)z<5!M-`}=$vY4I^0;13A+gU)wgNou zDjZi$XR7s9OZJd;Gw}8al=OOOLWZ2U7@WT{XUe z){>zP&FH4sP7dVk=Mb=|gFkxIjM`@8`B4=#eVI#eyc&L@31_i4HL;uMp6=DDzlr+M zBnNLug-|aFZkcX-9-nz$Ff1MKgNG&7n`E@z{HEmrqn_0I0wAPh9>;YFlWHizao$p>ntLwu9J!r0yyHbQr zNo?CznC)}#%E9a_ecU!5CX+sxprb})`P^AdpVYIU=7tVGsld)tfAIZ9`wVR#GSa1? z(DzdQq$)^rgKHXJr~Y=@)(CQRXk6^!#WW3~)?eR1)WUproi+C|f0jQM)I^DEWyzLG zq&}qU%pJM!4i9&hC2oFFZ}XAb{VkKS;2Kpl!e?<1pz8Rw+2idZid%=2r<|7|rjOy_ z2F(qfnQrPDmWFqrFg1AIc>6#@(YNf$`L<#^)*wxv*F(aMj=6O#L7GW(`xWTDqvq_v z3)-IpIZ*=z7kTy)6o@Q?8S%GYqt}}1JpH;l#-rYfK|@Y-Sv~ytSs6*yWAujU^BO1~ zRV!d4zfX)bem)r#=;F=Of!jgt<4IeO;uB9a*&qF1q}f!`ohYdensOnLO}ja`O1(cyeV^go+YOT6=Eo zWGMbcx2IZlVe53DLz6X==}@KRjG)Yi;(ck_#ME=4sH-CdJ@G5Uh2X1GkrTuduyF08jKlfi>XuMq2cDJK+06Gvv3F8q`LI zC=Oi^7xh-Y?g26eNjtH41XbeyJ@ijvRC3hZr?i{bB505U?kdOd$(XNY!yi3*!TWo? z{lvZ$G*4}rv@85>-vEhZyH;=eEA0Q_w*%H{V+_~FkgK1g%Rm#5!V{IpMKXqg{|jgM Bu6FuoSCjO-S>9Y(@)o}zE!bmD)Lz9Bq+OV@mGtk zYuN^$bS&%^4PePjp_+po>d(KG?f2+eAssOVFaJ$~_R}9?^OM}%VfdI`DMu`)zqve7 zVk}n-d6(UGW!U!TzOV?rcS@#I5Al|%j;oh1+~hAETb83JJ72@K*`!IxYGdB*94X9g zsUhh^+?ELNiolz*0o06W_ZoH0`AC6&mf zAIHWyXkh~3BQZOgJx_9}v-1;~8^=^fHiTvcf7yf%Pa#~ag3{doJUx2kH%*{KJ^T3S zkQr7c+gYKuJ>6$X2g^Ca_cP-@?8a{Vq|%8NFv=jrUvx>!E$Bs~{F*XSLijC9nw2mv z;_>sno?Q;l`}Vb9`6Nf6_o45n7}C|``Yr2zWEPJo(e;b_$LMcnD^i@o&JyyBq{Mu< z@e+HKg$d*g7z1vciWKwdTlcaoLmS^y4}S#*EURXbL;fmLC8ciM#XDZCKD^T z(^#YjZ)|7(0E0@!Zz*t*1$rpohmp-`y?vAhIVZ z;tT(7N?c^4cO;tA@@LiF%grO;A>yMneN90M&hK9kEWI}fG0**G=D;cB`JqlXRS`^+ zppRaC`mGNVWa5Wts%TD;@{tFT-hD?3#qcm(j-hbx3d%nP1v3Q~5r$IA#LGB0;rnXu zZ2sQ&Q22bh`07R}(1>9v_!P|2&_`DM)Pfr9FZJY2Adjy2PVTH!4~M+cx%!x^qWIU< z#GU$mj!>4%xY@+youIgtDPU=`DC3WmqqsMba9G|@&R74Q{-lpsdKlg^VJN!GXebTMm0xGK$h<4u1;4q)KDi5l%1@ z5)^6!6yCltio3X!+&{CRmTaT&zu*9VBwbx!Q#|)Zks+AXlRnat-S_G@{;iiK4E2b< zb+^k;{Ygj+|L8vXcc~mDA@tqXPiF#fx_{9EB>|{#ct9fB@Yu-*%+~QzGv+L`oiJ)O z_>8dGLNZ50LkYq^NY`QhlZYyz+<&QCG3z2aT(3MsGYd(7pqSz!Qc-C|ChbuT#vqwT z3sAB4lcGuVfo*B=6eOW|oYeBx)E6mlERi&l9ObG~I)71ZA-Yr8NjuZvq^N9RoxdAU zV|+FTAs*YDZ*~W|_*fCHIH#j4_d4n##1rL4L2D5SDFr z{T5@>3{US(#wUeu3woS7aoXn1dNhIKy5GEOFdicD-Gs*bkJiz#2RB{C#E=RSIR;11 zn15i4N0|;#Zmit;z^9u@e5LWlZH;t`^z74;!YlgxHPIF9O46l79(f}}og&#p-QMfN znUbZDD{1t>NOf6RM8%OtjQ$!7q7_XgAC4!G+(>a(kcBiu@*oxv76>*}zJYlm>re)p zmLX+e3*Mc{59N;W4*l-k9foX#x#U@)j2hx+*yqyEwV&li=oC@5 z*}GI~Rng66=E#hdvKQ%Ss%lWGiC0a}lFzj5!(R#R6YhKM>&}=?G4f!LeBn#UP-Q7S zDmO0nvQy(>g-x!h(WhQ>$U5|`s4b*&l{|6i%^n3Br>GG-~Tb6G@rDvwR~&I$Z6!@ z3;jA8^Kr}Jvt853UWIx&=gOZYJw^?TxW!PzBzpXPkRXID9F+YSWZ_$5IHc;-$ zGRPjxCdxYI>vSnIALLTvHnf^^oO5z^6q^ey^Gm!V$B083rT%H2IG`VolcAG=mVv=~ zz*b-gGjOXtueGl^*4L~JswvmgH85?YTKwwR;5fHr^j+4;*pb_j#gSv7$h*#)y5q{* zi3XKsSw2QyE2-74-g@HuL}UH8ki8yPR1Zei3LjryXrLwZ*EY>W(&O>oM%Gd5?AbA6 ztvXc+x*Ttk|EA?ZzfYBGJ712Fkn3gc6jq6;@RA@#9>2hvdr?P%m;PVq;rZC?nD)NG z!6MB1IAi1c_z}I*7s6qK-$J`8t~VY9o2y&T!#`(f<}C__O!Kev_49>A3X;E((2zBH z{kGuH=l&kIO`QI-_((DC>V@KF- z7}RC=%JT-2tLVT8oBj0ZN*!l+6uke83q~EwUf+5;lpMU*S@2~h( z5m!+@RZ?stSCCjV^dW8m??P;j!`tp~Mc_cd&&WfBO-!&$=vg{Eq%SV=+KpytjKqgi zU0nV1AFzyKoa$o647ZrsF#E9VFh9MXau(nEqs&w60)Fy`V&x6x#R4gi0%#%S zJe|0=dg}_}t~p=oeIfYB`TLbD_;{@Km0fxbT8P}X5rD@s`vfjemK&u{absWdbKvc={~U112)LZ?6BpqINCQt zGM7_t{QcU&Pwwsty*qB@0CSGb;O1ke*;6`J7pXlzi8JfMtzVk$bnTermjh-t7Nr*4 zmMtg0cHZEFg*ClyZI|gaora?&@3ZUcs=X@BS?AeVVN7qv*f^u_)ew(mqUz|`5y(%-PfT5VO}UOl=uU1JIrh4>fO~5RxFlNv=lZk zzds*^$f2umK$?Q)0A3!AQgRg;o5*4S>x@=GNo8-I;p?S~M&Br2)8jLGqV~)Az)+VyYmF=5|+PYe=%w=|7Bk%6zKYV3J zdxQln40ZRWq8^C>M;lkC2TuGO&dcrDfsIcYf9Eci7FtZ#hC42{kCy`?0|st*k2A&I z`>NeVk5P6k880P^T!#EPXWW@u8G0PzDEO5hc*Gc}7-Vq&`&R$TqkLC6FDx(9G$CZ_ zOym4qNq4FsC!{XG>S@2nv@4|9Gx^}ymn~@J!TQXwvt?;bu-oA{_R#NCZ1*V>XMplb zOee@ZNa#Uu{i2aWvpcmbBdGCi?pE~jp>s8N)dWp-8J1Z-Pd~H2)7d@{0kb(1UP7bFw~&6Jb6F7^}@ ztkGz#O;bJQ)bXp`M$1gD)~QR}`G@o$nH~Owr4=}^YgQ*wMTYgH3O$O zuedUgsFI+Rs+(`5u#5%`n~;^GpPHVPgraUlT*e1&b7!wGQ8~@eUn;0r1QOB;`}_Ot zT!S+6Dp+}?IRxZ_BEh-Eb;>#xKEZLuR&KQH!hM6Ixh3^!*`+ed2Ao3j+#(7w$zRy` zWdp*KvhpjLxFvr6{Aq6Q!^SJ4sA-n`IrmFZt)aO~cubnTM@Vu;vA&t}_Wqf*a{#}D zYFtXboQhFOR*8mzt(mQtt+U_blFAuhO1ggzf6QXYE3Udf zTDiY~l~jDasS%;$=DTT7xm#(yy1cmU^%6DU5zyk*HFMI5WV_oOx-KTUgXZ4tP8OEd z-VQ~Kjg4IuV%*J@OIvfZa7h|`bUZpbvMZxgpv!ie3V3f=}mqaEb{9YX-0x}$ud_9P&Sm`NPD=Pz-Uu9GP zA{+?-=~aSz{ffbn{-3fO93$Z0u@w#g|H?D`|B?TV`d^>dgYAFU{MXXe&oKc2K!Adb zq?YgE;mVRGzCL{D+3NZFhl|wy&k<6g>(s@?;p@dl8>q#;vF{!IJ`zyL5SQ!~CuDGg zDw}_*X^mmvJXqdwb=9dp;5Zj}2<3T#q;}_OZl9`nR`S5~R6Rp5rG#!mtADc-E|vgn%R4ggZQc*;2H?(CKWX!eM$npS{%A2dH?Y+)Z!39 z^522IAj0!fB11i#;8lJ`hD9T=Q=YPyV!lIQ%0j7^)wEF*1_fGa~AaJ(WU3<_|7 zQ^|t#61tg+6^Ksi_1Q8W_Jus;5ZYIac^mMs8Ltw@VesFLAHLo-G8{lj}${^Znzj%% z^OirOPS@4>;g@@rAwNi(%5m~V1nu8iFdVBaVvOhhaDJOs|7q~@a5xQTnsV;XEtmsW za-XuZS*)l$w@Bk5CV;${DU|>ax{nckz>JF>fC?R?|0pOP2pYpeothG$$rP#A#W;@n zC2@n~5L{+FE=D|YBy3B(foKX0pP47qE-4;2Dbx?gb0F^i+K1 z+DKTsQsNEn+810Cb>xLzsFOo9l{dyu>8Px?L-)|!K1!|iin?v1ni_@AFjR&orbF>Oe!m7y^ zBuD@)ZQ9g?fz)A8qON8Mu-T|t&x(Xi9K^sLLlq#|$gIo)s)yZC_S2C=R{XovQT+<1 zPoyf=ezo*}0B62JA6?V;dw8lp3F~&wNrTCzp>UOR6yl)XX~d)U$bIM6%cJ|OITfMq z@ZIa~mR6;TSA{@N>=!=;;7~hpP%3GW&rX?d;b81)bQH_W3kxaU^9D%%X2bv9rxsm> z1r#!MA-z$C4K?%+R*SKilXca3EaW&oqoxKuVQSF$1awj$BiKugN3R?|Ob zZWqsY1abtljO?{ziF8v$sBagbg9~Q2;7A0$=|IYP|~@1P8+tIYj41| zkNf<+jG6|5Rj@;>qeHYK&a3rxI9Tx#LY#|NY>WhZCmN!dJ1;3zyj#CCPe$y6$!jvA zP=Kl-9>J48oqyfIyG?I5lD#I1p{s-ijT+fx69%RGmm6?C|^Xii@)My*g_ZUM<^qmj6YCgDxSF-xD$Ivc9# z$nm~sY=<{ZV!*2vOQlG#o&qH$!!&Jd4Ug^bA(Hmb^Uas{G_MZyI$@>2zKLt&Lq^Ef zlu8QxdUlNz*u=OlzAnnZNO-){INqShKoLxVSHz37w)CKoU!rQP&D7>(zh8cG;Y{<_ki|3N6L zQ?y*I*-|971v=6ssXi7;y_0U<2m+OiaL^Ww8#%<<=i2m_br+EBzV$+EF(S&_ zg3(Fq-^hMUc#vl#yJf*`&Fh_e znUT&bv12mZ6G70}Sly%K{a4|uUx97+J?;LS*6KEEc^R7f!ZwO3SfqpB7Mh87O2({( ze}ubionICmI@ND4cbZGu*Ho+awOuf6`cMC`D?4-`wJ~QY6YLht6C>|7IPt&tEY5R3 zo@d|e`eEd$;;`7!+Sb+;EEEFn`YrST+aCv#A0!PAi7s1_rTCDLvYy*Em+P)_h$=bh z<9L8p50%f#)%?ya9DCafYIi<3bWgPiT)6e}glr7~LR~_q^AvNnxUNBHQV9dt3+N zLV}TC<4^LNcf`M>^WWr0%)I0DM1h^A23?s)i!G!HomQBtJkggQk5;yx1>IYpaO@{{ zlz%cly3EPouBIK?bU2Pmz|HI z-eS8q?%tdIQro+nfYAEB80}9N)f)chQ#ooFJGHSXi&wV#vNhjb;$lwit{Ig!RG#|WsXLdeg_9Sy^nb($pHFUh7alf@mq{2 z#Q5Y<5OS^+61aT#*|a)(^YL$rhhT_twezDg5lq-78-2&p8$8H;5FnC83h|?;<$O2J zy6lc*7gj#`{r}OK1$kG-ET`}gFgqlN<^r9*`g`=o zP4pP4fJbPJ!Ga`LuAiS$ERM-L7L&w|7-7no$??u63W$~6k~tSdS9Sc&$-9V^tJd8C zV2Yp;^eQKL@alw08A~!c5=_UNb1`q8aR|w@LR3@xc>R%lMdhjtcmDed`2v zy3o1!_4rX`tYz}%Q%24Y+MgNK{kC9302W!?7dooyukolFtvCj(Bx$(jF>m-n4dMke z#18HCxBmsbXVmq_7|#(l_w%BnD;^5g)V||X-7ZWY=((q-joSimjoBI=5i^UW(~D*` z#a#>h#*{PP+`2AWolcoKcZ;BV^;s(OyJ)+}F zU=zfW0|b5`8wfij6&V4>jR6W-zcBf{BRcQ;U0Nc2Ry8VRh7Vw-2mL|)e(93YGZ;b(sa9|xO{P!bd zD@%t^3^Nef#@1C94>FWkBDIAM$cv%=&Cnu|MJ^1!8WXEK4%?&XGDbrh;BWu_7fhA7|}syWxet)7ST| zd~)qpQ3@!EFEJwEozvay)~yv77wWFcH*oEwVrR24fakS(Ye2S9*6D<+ZS2B(3N!=+DnQx=#k zfgx(Oybp?H4L*n|l&}Zd9SV%Hh%#9fgsP8z`!Rzn0iPD729#K{9Y<>uJ)j$D%O2+@&;NyRY zAG_(QcQo%wA|WIe6hde!|Ef6>XxJc~l!OgvwY`zH^DQD@!XW-!`kwBAmZ~KbRrWY# z=~vu24G}nwIscH}+L%)6lo7n5Nhr|Ede5@5NOLSPG9Ki7xcB>8F@y*_xUHs_Cbdg4 zc1`jpbKosL{3})7*L}i=_^mKwLz2&)l3zEmY__!ovmxkZ@=A8R=^__5> z?>-}uSP%vidf4R$IHtzcS${ep(j#-Mw`7Y*n5QuuI~-(-KaFSi5nz{3tkc29jvaCr zdl;aWY-G?h#7e{*WJHKKe#}&+EeswU`!ypUD1ZU_NMyDCtk(=zIqJB^l<{$=am}$c zaka`9T9tG_MPAHjrRYo(lX-32(Pe z5Y~h*#dT9c1XiiG5)t+Zhlg3JjH%kALQa&^An1^b5dbav_|wGW6jFXNhu7g@p+&|x zX^Rq7J>Mo0WU?z?=+X{i*Q|;RwX3ET*Y;^<0v}ffsdl3SuZ;Tq%EPksJ@7#4j9LLq ztE`m@%EIu}Sp6l;k0YNZH(D5Yr+6MLT!5nA=@w|f)Zlz_U@am*W6i3->`UqLWdRU8 ze%f?CU@c)#r-~^X%K|oO9MIaa?AU!TEJ}moAx(A9L&c(F70eH$OI{c(*tuc@=Cy3- zS0a1oz{9$XWaGfiI}-k5NT3i2pzP~5MuQxvZNh5n90C+a>Hjq7vtv=OIH$-vMdioc zqXA%g0!AvnXST(T7k~cK1`n7RBd451eG4c=@>*+{P*D~kMLA3?RjnFbJ#NQ_hb-kx zhgT;3IG>puSg3eRK!-fp$KNRkunkbKx?$9qhd=cNo#7u3Yr%txEbXHFmZs6c;liD? z$1r=3%qPP19FA)CfEKz)JG&c#L>h3hS_PlhWZx}v%J*L-B6>}XQ+B7TMdOe%gE0wQ{h#>j-sBbEY_FNt#e(tIO;1Rd92;FAU!>@i)5YJ3@p9`0BOb+%%@kM28t_|rWmJF;a&&O8w#(5+58#u2>CT#?f-<{O zmd@158+a!4D0}W%l8Zg1AvCW}k?9RRx4B-i@jf|2djuU11f=X}Xi}h~>gklSM6ojC61lG5de>-1kH8PTz16OTY+IO3;gc=bKDzo(W zVvhUoS*}5Sv+|*l-y>&(jrR+V1cdFhLMbCiAak-&-|%3v<{L{YhDC-bJWL-6Y6X{z zp2Cc%S%HcYO#2qhRZ<4fm~-C~y&ZjUH+T;`s%y+Stto=Kj!KN2Px+~q_~^uIQdA1| zIIq`QIzn(;+bU`4+u&h51+3M6%y6&45`)z_KN%PkZ%a~z~)juSZu%K?PX|_%g;420(e*@ zfT{F@{jH_reiB<~3EoAI;(K7;=&;1dVTyrM+sooZ6%j7T^xJsR4=!7$Ds7-KeAj3) zsqTK{r-DVHnXBarH{^sm!y_5ONzYmi4mjAGWVa_r6llDfOQFAADmWh}hZ1N7dv2pd zL2VnQapNcDpz3(K$07-uMA5%5rTb6c46ad*f$YkeLuXSFeTqclv4#g(`#842v6VGU z$hxud1ifQo4)sFF$zUJ?EJ7($j!bx--Oszi6zgf`z=rbG>w1QMwpkzs^~1jJ8u0y; zXK^)?0B*k%vBoJXs?ti|lM+M)!_R1+K$RK9`v&+17d5z5H~T z+jxeT{Lk@JVz%gV6^J50Z_$?I9o1 z#~ZSYuX?XdKXmiwk1sx<+}=wAo!)^mW0maF5=!R6UU@8?lRewY_-4ELiP3c$p+Mq( z5dGS6;aa*Do~ezUJ5Oidys%uKK&XgM(cDThUG!KYCsjfX4m$2t8K!00B?wN97d%M# zpa`!~Pe(B0us_ZC--g#ci%|(3EdJw2ht`Fc+@4~i?t?NbAwjYv)G$x2Y?+L0(G})- zY0b#Pi4On`gOclmSc=XDr~Sz8$xVY%Aq)UWN?Za2shU}9R6N3wn1#Q8o#QwL)%Rmh6=9~o)Ko~)kRCCGO5Ge+_+oA)8+)1s=ze~Q8VMd{z z4x-+^;O4Wv-jBXPqa5J6PjzF_8j_(i<+va`kSYeK601oA=zLW`OV*5yi3y=KNe`O= z){c%+9+$pweuoFZ1W_Mz`OoUu#nG`LmKGi3iOEktsF@%_+v8`uRNZ#-figs)mx>t5 zVV=G|J~s%jQ59D^s-I#h{~-B2yhg+6+a05hP6;ibm#I{hiCC@s_V*YW`F|X6`T$uo zNUJ=%iVw>_#erB1c1tTq%LH7Df0@M|IyBB90l>B=)3iYM8M%f^;^ISLJlQ$aO8oh1 zE`gWz-J6Fjmh`fM?tJOA_+^BwhHJ zK`*6bT~n5Uk5k|^5b;+M{^erROZ=94sP5Ha*M@&6Gb1 zqiuN?M%>?Rg!7%Al8=126eWKj=i^9nDR6}u)TngXNP4XO&RATeJqPkyJBA6Zyb`vb z`?k4O$JVE%dp*H~=)0M7(%nV&dV*$mM)^Yk(XBTb%PhWqyz(<_5DC64JG!es3%?uI zTtb5yp6%Jn>)kbb2^%>diSX)E{0?twu5a;hWxZ6%cXoCr!A^Dvzg)g-TN4(R^8I?R zHzD)3J9ypS$0%(GnLX;fr|0YzSa7rUu05D*-h=%E<*^7i*TS3E6fpwT^1HV&@*rU; zANk!xm}?z_;3=$Y+Vs&mQVZO*yl2$D`ef^@88Y5!IojZf^wef-^z8Ilchxd5I}BnQ z#!7uym!X@!x7jyecI(cU3hgdaI4KYh>2AB@?f&h&qvV7Ntq@k4*sxRPR!?Rh@HncD zDy;w!Q>35Y*_1**jb3x$K<{p!r!dwv?iV)Il57}w$D>(6qi5_KI8v^uXe-ai5vf?M2iVA=08SOd}yu+q-jSLWrU$RG|k;P26~0!ldFX&aw( zu@hcbLSepcYJ%`PUyJusuqQvq{O9GI?582uhv->jzJvRa#=7VmQu`D9Cx@dUP1Mtj zrJuk=jsQop<;6R4k?a~O zt^>BghsF27&{`Hr1C>D&mFr}3BR@w*i109EX`lwl?mL&yjjO-If;b-{OvX3shqwua z@H@)Z`k~}l;EG&o(hlD$cl%jB^m3tXWh_ZBwQm1;;_mvo*OLm;F~9%#7?@itN#e4u zg>$|B%9^F4b-D+|;Io1AFiU1lcN9C;yZ86EJ?HTQM+xBX$1%uzYC;KG|-c?a8hs<2<$%ypg;| zv6i1d0k-@3@+3{RiT;{0`c58{=u$ub0E5-GoOr(ENrkqow7QsN2b(mDk(kglFSNNsm`GP0cjjc4;nizp$Q*Vr( zcLlAeV{=ZPG=fL;*XCAu$i2LMgr~g~BJaq?P7VSM$n>M9m;3Y{kzjj!z+Ro#b0=S! z^}cvnuu}K*Kv?@-()9`x;$NKCm-Ay=)BEOBM zxC_-jS!eyuZ|y7rIyoloPTjPa`00bkKanoGR*Cow2 zspF*<#Q_;5DXN3I#HFT>^F{ZsS@W04N!Oe5*m$o?wxbqJ)SkIuRvjow;u<@vZgrF{ zl3kI3v56k3dM!c7a$r9xm61v$Ey6UZltryDI`mi35V^&==cZElWd!(0C5u#_7=rV& z?eL7dNE3_>&7-xuJloqdvh?)!KB{aJH8Obe^%&~E^d0hf*!-RQcoI9<{!n&3&xB}p zu+}}muwZ^$I?|_MXxKpZoFPdf-r1zaWEH<9&g7hLAJ`!5Y1PdlC72Ieebc}u!EwX` z@;DQ4a36&Y0y|S5VOtSilKz$g0V4iao8emE=j;$X*c&y{4i9f<=VT88fZmkhk4$W^ z$=FN7WgJm$CA8GEq+azC=!B5JzU=a8Kd_h)*@f;bYwmAIpGvsrezoUKdgHq7<+aN~ z?n8RS7QK}J%^`8Mq(4ji+T~g0YU*z>33u8oI5Y*I)xu8Sb^tEKFz zP2L%zfKvkzwn3j1lQD7oKXXVAmW560>X#_zswR9ALSGIWKHH%mopszLj5=2+0J_9-A}5f_UCuGGs4G0VgKRrV7yd9+&}{lw8yxjq_I z5VxtC$1iz*%}`l=1vuSFy*!=ZUc!N97vPMl|I5DrOVj^(@0C+3Bc6|+rm;rDD03k5CfO4GwCJg;oIq*91|DRR@ zjQ&r7f3s@+rvTh*9mD?^^#82jzj}jz2K--JmzgQ=-M?(Nh9ZkItHCpVr_x6#=4(&d zPsyDg4+_fx@V=&e7mMJpbFK;pNGah&)QsW1EF_sTqa2K1(T3>z{40oO)mO6IWj^a_S{a?1L%!J=8%$DDqN=Ndp1`8q-o3Q&2~(Hx$|z zGAWmQH@Z&MOCUzc6d2~nk?uF=T;c8QX}LRDiqlh^YxsA=_Dd1P;&pf2N-=m4F%J{! zHT9FBGnp07h|>C~prFe)vOX`Qu!+T%J5_laWrogD{Bqo=QK?D-rZ=F>9QlEQQh){< z5p%rI7aboiA4fl%61$u-KjxM3+32z$gB;U?BNK(_+t3>OpB#8B)i3AT5z_198NXrw z>1skjt_;Buq^@m2OFhvUzYIQ2UCJF)DA*1ThWuQNT&rqZ&TgE&@Ud6n`f_ZYGLSCXTSr*8RK%`EaYQzK%Hj{m8@oglKd%kxqI)M9 zM}P*w=r5s(y)=*+UHV}8yJW35>?VShr`&CB!c{~GsEi;YY`Egb%HLK_(m$BxqXw`I zI(}zG1zSCYx3n&d47J*B=lgLyGXiy4I{Ss#J@AnBf@P+sEz1Tk!UmBxir98^1mymH zH0p5vGNpuiV$J8Cw0?Cngx4EE{B5u1jBeuYS;!VW!QShd zQHObo`FRqgm`DqTZFME!_eUW@)!ohYQ?eI0cZNTfgn1J4DvT3=a1yVBB|3*1{HMoG z{8{<_++?Y=(yKAu#($rCN_-Rw;OWx#3jyy`vnZOVcS)I&AFw{4n(hu$J&S>l0iMy$ z$A~9Bq4&+4!L5IZNZ$9XAwvH!F12m*z^PRnYP0rd^>+C?%|7L~2M69MafSb51aX|a zJT6o6;=Xeg^3cN@ko+%>&^sh(y;I!0D8DlJkuNw7voD7`SH=F!B(!D67;qhFQu3 ziToNBEtqfJyGN6T!)I@@=YtlvN za)|#?+f9?Nrr=Jto3;M)wAGCPp`d(QmlcHsCAHNps#PIl-$4P9UnaDz&JYMiH^EKf zr_6$qF(9vueVxKrMCdbUMO_#Hy!qln?!9_GQf1c=0NR&h4{q3jhyHT5Vc9^2KF#08 zJ`@LW-#qTuwVE_<)TS2Kd^w<%-4HK7V`c)${#H4*3l6=!yplhT|5ESo_Wif{&t(ML z?48+Al^r+`shR0f%*;Rn?wWgPD~Kaa-)H;2ykMeMQ}-f1W62serc#zki4IYpCbKo- zQjc5V8!Iog2&U~!#(|(rdNY6V;-tg#35k!`ue(!L=Xc?vs7`&ZDD%TM%h_RmK4z22 zR892757O;`gpF@fi%PZiO}qQ!oB)JVXqA z&r7b$ZgZ@!;G@K1=%U1?bQ$EJ*J2zMq-5ojcT4PJz8J)!5_E~T;o{WLFleO>E#NU_ zzZ&r3?#>po z6Otk1irIoe_~&EN@+*K58@6Im(he!}Z)WJ@n|wa3QBsEgM@b=G3UVn(e#H|eUnTaV z6xC6yLs*JM+mF~jU;e9KbFL)>q234A9B|G8;OnC0AxRzuivwvqOtx%X7DZ@Kr~#j0 z#AgJE*Vo2fR8Y&5bN2zV$m%O_b+nVQ^bg2-pUwHy-UKWQwnjRds6YRFcUZWzLN+;E zj;h~4V>vV3Ut(p;Xuo9FlmtBpLV8CfsatLJ-bVL0C55`C{8yaqbm8I3`@+DE2*;+x zmL%}NVx=N!P5hL^zMZ4@RJvU4(ikS0hmHhEw0qCY1g5tnR-1R!>#J#;0Y|9CE8rmF zkjW!&RdV1J>>SfCN?ks?OFEQiI9|~b|A@N_7vr|U z*VM=_R$uU%&FF0__WbM4iwSyK57+x;5&9k|i|uMu4=nk%D^u!{jaTpvtYQT^SmtWK zP+?nnYBM$YXqJ;WALX4TEVrD$4}g(3vFMYII3`ZN26KeS5Y4y$gSsdM)=M9L^Moxp z-aze-HX-jEA0s%!-W8u}{(MON4I)-Y*Z~WwNbzS4_M$kcU9k}^+6L1mNtU8+Ln1?U zcP!V$9Jw1cC1eQi19%zm6cNsLpHlMS&K*0H#~pCQzt|%6nf{l&5uFgrq$Tx^>z(I0 z+V)h>ZXAx^!3GZFn;#sf8&FZpGvyBAh_dH=Ea8~g8Ri};_T|}i3VrX!#ZFoS!GJVB0TNzWICA zhyZ=$)FRv-DdR&2K*L;nIo`>QQw4o1$}TfftS`|tQ=?hrLT{ zhc%o%>`VSo|GhDzEp{b9<7W?TyNOwEBf=@U{33mF)Bgthe%w|7ugbsp8m~w7&9kEc zcR-~&@Tf=BX)-|*XoXWC(g+(nU=5)+p~cY2f6UU}(0#c@cAK$I4pe{W2_qmuSE6l7 zjXdx99d>yT3$F1+!?mh>q88oeJ8-DC^M4br%3x&FoIW_@>$%}mNFRf@DuXO<8`KNN z=IAtSmKbg1a8?NCfC^fx5-CjDJX(kRXqRl@<+bxH$9snc=^BIw1q}uI3@|+|^;Bun znQas9KV#ST>dPa7usG|TX{|G;2uYWwIp*49GAV_Usa$*EKq3`atO(txesDqhLbFR2RulCr(92R45>b& zvro}sQ6#!(;QCPMRlMP?-HZITliyfr5j1eiSy4!g`M-hV&mN+G;KGRDII#=u^>w8* zOWUigOTd5x8<+J9RVGn_lz3It6vNaUUblK7Zr%rZvNP1Lz<*o)1dh%`i0t%!0nRR! znPOp`8W)7}bD&isCxVOgD=gs6-_+uy{31C_3Mf8~;n+(7(P=@8Tvgg|?U6OppQump zcG(RMtDkfk?5PAx@AC(7KU2%bAwq9-W^q@ za{>>IEX*K43iWtip&R@v-76;W(R3Y=orFLTd@air6W2Fa6E@RMYz`)RP`Q=cdsJ+< zbu2&zRH`zd*LS&5JM|9bM-dvqlWMRpTgQ7sZ@vwQcSovQu z*^-FHTI~7+M3@z!GMKruG4Wrr9L)nK`-2vqkXpriUjpuhg0k)2vhNEr7~>$jzAdY+ z>gcYltjoCjs}Z=gL+gVv2qIU0@4t3;*rj;i z$Jd2-DU1cuHa5BMe~?Flikh@BM7Ut_#05H_A!sa+!Qlw}y^1EN58($Yrx=IU-PuBsOnU7#iZFjI9eb04S5eGYRO)ClPnVmeG~)~Y~*k+%F3JOtrc7%6bNRDDYxQ0bTyisE{! z+4;N@dYOTA`&O?~f`p8{7{2oFi`OOPmrV0NWwAZ4Xk2H7j+zKUJGVdgp@w*)BPJlQ z^WcFN^h5@qjn+xy#PEYSN-#(`&HDi`cp#0~Rvsc3wBjiScJ>zFEq|05bpMpF|C8s~ zp9FZdj!}McbUId{@K#P#LLl1pu)FXuZPGiQeQz(=nVODIoJoTDK!yq`>*whW43dH) zV)cw4B)5`x-4?w5_8BE~Gvp_h(fcx4)Ix#Q-UkO$7gZFEZL^~HU4i4JRZ_VJR&6`I z@7Mc~77Fk{gvJzi6NzjZ*9w1&$j^Kf{bhqu!HPSmzM%j}+aM+A2@qv-1(!)CXiTxzl) z*VovmQh2M&5!p1526j>Lg$9gpJdI~z27lS{S}X>Y{=8gS1C+$N3S0)WR~p1fFb6yZ zz`;6W%nPi5wHACB*u?5#mq|Dp?9bKxhiO1sB=J3|sj#L&l=g4+ zCs7@RcrI>4#Y5$I8PA#^HkUO$3Al`hvt$SM9d zWxXZ@u56|+vrxW9`9F@nXbARszVVgUaXk<#!_Nj0@2KN}N(b76gy}`phVjEPZ{rrw zL8JCBsm)6W&wboaSqx!ht}crbA?Dfi}ob^ zkNEE^s9*u#{&@vB4Frfs#D_p^V6#JyQd(vEpgJI=A;WBa%s>Flcl@OGfhZI2Q8Ib& z@5j?V9DPxEBoGb>CWdAdQmB?8or1Ve^cqsXX?~SgmlOsuvd`6dlv%1o|rrMM&O}BJ7FG<@Q$^V17 zw~lK2X&S|GcP|>;TA;-}cz|NTiWetnaraWJl;FiJKm!GeJG5wlV!?_RXmKgU{f2&@ z=Y8LM&U^0f{?0w;o|`|C&1ZLJXJ=<-H<{U4{dqidbfkpju%vqOi7W2x+_@9d${3fZ zT_lGdPYb{W0Mc0)uyQ`;MYbDtXgGzN7U1rka*}7UzaoqD$3M>9`&3+Wa-JU;0ch~O z(?d)c{fW*E)e5osS{tvJ1f>8JD?0uIaOhT6xLdWCPfT49$gVu)yM1}(T3@Nae_3sN zBrQK4RdpMI(plyhb~4db98z#)u0}0{G!}4F#5o4I-sneILUEw;^B&+lJQ?20xXS|b zQpq@o=`9rDnm69H33{F?hi^Y#nWhJbqW1F{Dvi1fpUT3583+N)>@AC#xz&QDc2bZh zykjYUp#tcFcqNixX{PB6;*OFj;q@$25i6_|s0p9s6<$ZVnC@-ZC7=lg_}xVA?^_*; z=-@BbAxM=lKg2RFXw*Epf5`N^q2Z)pI+z$+r4 zF(XkluU5YH#MQ%h#{!zH*B%fA4FWg3}?|cO}TFN zUx$=mDt8i;XPUNUd*eG>_ftBw1QA@ZnYBDdgS+W7K+9WS3wd=y*hAi_I7@#+@e9P} zauUQOzQtO|a|@R@to|x)X6j|*yC#FXPs*0ef8Hm%`#a>Q#Q{^}V*m;^czSmQ7j!;o z9WW!23JEW_W49nm6fGaa0HOC_(y0cae^sC(J-Pfu;7D>#wpk#D1~suSFb({!8bR=M zt+v%mEWj}(PDJ|0w3c(lEk03`*ic0)NnB1I(;1uAGzxs$CH&5_gYj?$is1OKv$UiB z#X=`Ls?M(%JhpvM0R$1!_T#Gg_Sg)1&-vqiSUM#| zDWVu)$bv@#!>$c8c^Uz?Y5-0WEOatj8IZ`5SXeYX{*ln5)(ZQ{TGW8hE4C5k;UYdA z;a)<;HIq*ebFz>YKuKg={PbaPm@e_1K6}Q;9M76ILeAGJ4M`tI)P2(I4Nr>c+hwXT z58Korl%U{>oiM#=_F9?d6QJw>S^=knen8Y^2&I4jTvUnS&m3aZh(hcA)lfCRaJnm9 z=7Q2Jg(H;Jq>i1_V>I~snzrkrch7P;L+xYaufXI_B^`3#E+Y4BtBI(;$uFXODNK;+ ze?z4GWXUh6(13_v7TXsW%wuU}Cefa_6R+gV9Pfu|^ATGn2#?QZ?!!V-0>k^Vov$=G7NkSjMx%e01{ zj*5(7LlXYTFtlmg+`*LG`h602Wu|Ng_+JN=4EZBMX$V}o}=LP)^$f@%$G90h**nohX$lz7|R_P{4({-e)q za;p%Ljlyrc?BoJ{%__mwjl%3l#U8rFS)s#4&CrGp3%gU<4`q(wQ*ps_he5ZgwK!0| z%762i4jr!9I@hi@7$}*$kYmcept*U_cMh*CtAF8N^L`Xk{3JS&x6c*=cm~~3^*)BE zf4ug92JfjE23o014SIxm1)M1H!k=6s0x#PgQeH?jv9vd7<$MGJ;Av%BBqfZCCH;n@ zEhI^;SLcNpLf?3P1sc?eyTq#6O@C;WqTNVk7;Bo`+njl$Rd$vWm-7MbwC;k!S1kA@ zH^acWVnbW%WyI{*W8X9Qjq=W_X5$ZAe=LwJ7U;g>&o!sxZ>`4{(}(x<4Ahv2`^07|o=@b7 zpNsDm2zwR6PAuB=qA(`c-Dlm+%u!YS+O8)IzaEfjPCv87kE>VDlZ06Qq7xaSh1+7k zeb`Z+Fr6JZG`R4he1643EA`3wdBMvQ zYXlR#zKZJLa`g~uWUPEU28}$iEj!lg6bkC%3tjk~X~cN*sagI(D*VWZ&ZaQ1uRds|JlD>dH?C5DesV+3g9T4jM6RlrRzk zzN+N<+lOa66L-#6I4A(F$vM}Bcs=Oy>DIxwRBV)PL8oh4IG_U`QFW?=0sv0t0TN18 z+BPInNQy4KVG%-a@Ih^mEcRbSC_vy4oBHJCQa%QR03Wuknf(3~1?ZsEn$j2)s|V$a zs9(|GPi7O`Mh*M4$2r*d@UZ_AP-46o1?V?qGyaDiEEhlygN(hAMjOF{PF!M?*Y>i57!djlXlV&j+PVo4&onS0 z6mmO)8YsZ`$;iW>P-zrkvD`fQgP;0AS&({z1O7V+NJsk8RPYhfiB94HJ;Qu(t0TSH z4~}i*+jD$&&ws}PJUG3P5Xgo|m;3+R?Eili#@5zR+h(BiRGZ;B)7?at%KhcmR_8#T z#)_=f>a7>Y-yU#;R4j)3j2Ba2#nFCyI=>XON_o8IkTDQQ@=1#B`8@5Uw)bl%W*Y|A z1Iv#_evN6((sfS`mj>&eG6i@wfV!yv4g_PfHl^ROo+zcKoP}YZA+Jg{u1r7CCD^OZ z>2LjSV1FRf_qMit4umw(58*;;&slCA=SC+A3a4Tr4Jr`EAfvQeojsxFnN?jC8$h1N zNdVIT4V(y@13EyA1171nlJ_td{i>diuK4E7X4;odf(z;$I#)(okDqT6R_2b~<@x6Y z1b?!MR@^zAk>0)hx*I(8PFAI9{dIv>(@nLRFgT0?phSWpH=m;N+X36Nq3Z26oy+f& zP5AMY;Da_h?!(C*zW$qnDt3u5#%rQTAv`D=422sQ z2f&HoVx~tUlf(zh0{?j!0l=}^B!PangkGWi1BxVyddWa)_8s5h7#)f@Ky{NHG8|Ps4#IrF#Gn z;kGuJ5&Od|hn?)A!Ku1@l%b5{efuKq`m86w;aXuullaXWlW}us)wmhcTHad#3WPV- zbUijKjRB2Y#lh`+zb^U%7ZKI?Fyosqb3ln&>cqqTc_MKB)3$b>^PFf5q-bmtf!I~# z5bwh4m-BNTScC^P4}cPBBoTDHFnL+2ai0m?IeLBL;$JZ@rzS&>wkgAgoMDh5kd}>z z5Q~+K1QHE&{4lLUdiET0$c_yuXKh1)p=_66!Bgk2AI;FqvVs;UI6(`@$(Dn0_QS{VuTi-+N;6NAUhM4myW8waO9EWEpW!3!WH_z-*%OsJMy)2SQb1+(N9A(12o zSszeeY*{=B6Qb(Tpp`>GwBB76beuCrX7ka&-st0{t!H-I@djx^8FyPlewt>^P9|h= z=W=F#6OFV6%d*)$-x&l~L`|5!b20X6p+9Hv>Uf+HA5hxYgOnr)wcO6!ONE$k8%(mA z-yHEJ+eG)kfs!qh7RHOg5OnxcIgdy_jfs+L#{2QL{a2kqpEv3KH6NjH0LRktQTT5NS!H7LAtbC)w&z7et+!RQ-(F5}Q$A()l^-S3e! zKIk&)TacIO%ij0MsK^(K@2PM&$`C&>m!TbUT~H?k8F`@P;s>M%HOOPke=qy06gK5i zX8G>zkNinO$$b-SNY;-(zr6q>dOT?abCoY7P+`*3YQt&6w__bT!1&5H=pW*HgH7qb=!g{=p(9N<+)thcAoawL-TDI;mV^#MwJb^f~I+2vAxL7VQ@`~KPLZ&z|?+`VK8 zAlNax*l+Zt=$3%Vnls`g8uRqmQWze>2@e4gA4<&g$@oK$IcbIKt*H+PWfB7Vr z!pUjQbZAD>JO!Xp0{$~Qr2`K!L99{nmAvzoR%zlb0UPkQwY=wvRTsyF4QcM}_zz1+ zA@$9N9M(3occw*FWYyezf9+N?*tk<|LMYdoBp^piS!F_I3!Xy_m9)%%<+#oU)fBh; z&{`69lCM65KdXg}KplvBjJHh`Uvxkp8oXMG4=OIQYx|RA?Y~RvI)j4-#e*vE%%H%i z@eo&q>Xs=VItWWc94TQ9Z_U~6vlJ5X`e1qA%3weSjW%>*?_Au&_dY9SC6Gkk*1X5F zVj$jtq}!~q;(w!8X|9v>{@LDBgvte;_5l%23NPNRM7U-*9M+OvM40eR`a24g1RXD_9Z~tHKT1Ur4`f^imJtKzw))7_r-G=C1Wlk310@ z5z#2i3ZH7!)e3)HBIwMt`x|Lk=cS=%M*}kX6TjRmGUnH9M zVq>P~#{L{HxEFH}eY> z_ZWB}@ga`o0vEx=Hf@OI?oeUjG(nTxE(`g#pinf%Js}4c_$@QU8_E?;K{7$R8pwcb!y6Z z1(-bfiP3azI&w*6RXO2Z*!cOn81CFi1oL-ywE8854lxHchREyXJx}y3qo^#mN|go% z%mG`6mfhucEx~o?Sw872OMeGw;iRChrm-YPVNRF2 z%R@N(FfxXwzO<}X6#F}R_0iJN1P9=kyjDBW`6@>O00mwbxx8%8gbL!Pf@ylpO9hPL zLGrXrwVXk14S~-*syK*bRVKGT_mEv%u}hDE3$;==lC3_63=tuUF332%O|VJ#0m51% z{kmzrr%49N9Z)Mdwvm|y-=eYRowR36iw`y?109AxR-~4A5%FmL%KWT3^w~L+6AsvO zXWYWTs4XJ}RqCeL!I?qB($d0b#DQ<7YIG|Nmdott zWvft;8zfs)c#iUMrn+>J)hqpXBAb^U&p@F*;$Zna%h5>*kSJT6|8gDcX+9c^PQn3-`RnP(9@pyE0D%t1$gMQ3ZS3_nE zy>E_#n2K~?77t_=KgGA)HPZ-Tu$l|=6unjy?Pk|E|0pjoiydsV-eb4k+2O0CKPc_ySwRY3ugMpdzj|dGAD<=93L8CM?(p3VUn}AO z&YME>#5Si&&3dYcMxq^$_57AY@5ZL(vf?BR4m!HmUBdLXe!sr|bZezhEQ!5s=|-eC z-S;CEu@|d8uel=0hzZ`ksDrqi-Be#xaiGDzkieD4B?+JhSRlcxk;b>Uh_SArJ8!4m zH)20;)vjv#JwX=SVpW61w@NO?y52-^Nj+mC@Nvz8WOO|O2aYVNE)TbpbYX)~A;&-- zSUMFs^GF5nVBg8}nurOV!)E`2rs|4Fuh8Cfyk%a~#fN_swaTkCopRqD(!-)7`cPi; z_gN=?Fxg&tXLeq;7)pf;-sD!fCnrd``FAnN^_ibZDmmtr9*hP!MVEIOv7Un8lmN#T%#9wmR zh-7OPNKyjKU8tit{|ahgoB)YuJ!=R*=?LxL+<0^GYbQ>eczej;7}}Yk7R0|nwPYH& zRrBYx4Sb~GL;+GrOgn}K)Fo5pnpCLwOTpCDop>u984<=rbJrPBS6 zAS;`-ed3{?M^0Y`>zYoQI4*5&Qk#soQd(Y0>$0H1hG5*jZ}m)W*Qd z<62S2Vlxw0;h9=dw=AMXZQY;ol-q{OsZ(5A_?z5^CPi|NG6u`W z2J!q)I)c7mSxuS_FEhw5VSy4j8&ZG952BwhZ=iAmTxdble@_26oD#an*>}+byheOZ zbH+fv)BeLIrk%8)zHhyrDOuE;A%7BE0%eEuh(){v-un)sz!y8V3tuK$87}Oif?HUl z>&piC+U~iR5KSlQuVi}KeH<0K&U{`Jqrnt{Odc!>GXg7e>eZ&`UH2%sJZcOJVv}9b z2mX~!nO|%spvP0?I&<}6Gu?-#qu#N723*rTRlD?-Gs?%gp%({9B?pMpE>hjMwAbqB zc%_Xs4ZB2d;D&X+CZ1vRcHPjbAxwymFEPLKM_x(h{rSf(uPt}f&KAMkbm1Ta$x!`o zFs3%i$vZX-1Z#KT>|*3E)-}Ac?~n>c00X(C$M%O~ttbBSQh(xTdMM)sMoJb#!*enB zn>#O#7u6U-lg|nQ)c1Biy@))qOLlW&0mgx{(ZSXS6T_2}8LS6Y)S!DWRHP<40n(^z z$A-QPstW7g-P+@O7#9cA@-w{TYZYX9GKB)(Ey$6CxUOc46fS-bzRb9)42b%o)Zhxv z2)c<7RSoUNfS&?2bnh>y{cp!#R`CHE_=fk*+XIyjR`kW`cE9Dc2i|@$yCnKBhp8Dz zJ=IoG%n0TRy;?80nSRvyF&2fJ#f1vgr|n>}Wi#>o*O3ko4}`jHjsZEW->Aagm@3?L zd@_DZ9eItFIE4n@ozk~fk7V7s3$D9b%4oMIfR50~@@1 zc=sr^3R75RS!z?Z^gPRV^K^MZIDCrMc*;Ofg5LCt47{Ve!D9H}03Ye4+C4sP^4C?~ zr-#j;x}e=$;@-;zx55suDxyQm?!bEV&?#G*j-lh6=Y5qg((1&QxmpGtEh zO-Yy+e}tFXXJ_r(lHHc4{Dl6ud#Puzo338f4AHTTN?JL`U)NLa7yh2^BS{fitDe8# zhV1+rU(a5i=@b?fIo3nCpWVSf>dQinb$1eJ>7-y|OF8U8E2@vL87p$dxPZ0H#!LYhNN~9S?N=3{-K~w2?Zh zsQ259vBdl>4F>6~ohNOfY@UGt56QvIrr;D`terc;6mOrO@*DZKhrqE5o0agxVIL{k zkY1*z4G3&O>Z?0<$uH+Zq=1sr$SI!sD5}oU7k~N7PYY92!~k^(K#dJbwOLh=Dvabp zY77n(%nIarZp>9r`7F~h5gqo>8qC51R3k)&-u|T&m7A0l!2Tc?+yHiD&ELYmfXN=P zP(aC$E&dkJz(6%*H@HX~$ab+v^k`tTe_EjaQ+PmLj)8E!cH<)brxg;v&M{EJR#rat zZ|8pjv#=35l8I#hkonMoaHV3#$kXek8xPNMhyS1p)7GC6jME zdO#F;;=A`~`tYBz6m{rHh$X)jjZ*%S9F02mroc8`tT&G%SBLoo7nf-(LfaGx8> zk!&5~MU4&Gx1oWJYGHUkVi}q9ks&~6{SYkI`WH575yg4&9nhO&kZ)h{(kd!=c!(o< zKTje?Xx5sTvu@QzP?1&`NE?!m^1xz6MGY*7$n39}sZrT(7~!3H;FRlv?wsGH76xmh zbgM%0M$XtPm>>hOn`9zrcnt6)@ZWGFR1lWgG^R#~C@q()0sR<9+s>aeVqf;2dGE%h zcc5WSfX38rjP&0=^i-03HWsi;TaT=)cNq`jlC`Ch_GszmR@+vjpUtGb9j~g}*J5g! zk)dI@z1XfEZ1w+Vmdo=&b=x-f%kW&<)awHuj>$Q{6D^Fj{gu@-$rQ@^g+We}+u(oA zpRgJ1NKqnV4~CWgt%UsOf=ZTj&+9s^-Xz-PzECC_?~wdK1X5!hh@nE+1#i+52Iwx& z3>T%CTt=9Xe=z=2Rgg++SiBM}Gj|n4^bbE-SgsX7Yzw-D0Jd!JWY@{-gPAn7rRkFXzByOXH95Q_^_WzOz z6Uac^uDsq%5u)>-gTam<(^;H;7Lyl1MV8tN&fi>jv9#K;_>NY!gZ=0lzk6>n4vtB0 zIuE_<<~7UElX0-jLkw#xDoZ9c58FJw=ZR2|{uvkv7zgRoM7~~A$m201k2wC?kq$rPLB#(kp&((Skd7bZ>px3CBrFNi^@B_={2wKh2Uz)stjqtU zgo1>XM|wGtum3FlCu#p#dLZ)Zo&{Fp)&8m@7rbFJqnSHA6E1q$wzQnl#n-s7doVW8 zI9zQCHk)wVMa%_{e&w#g;f$(7rQsyrKeN0C{gkQ{%h*?Opu39X*n;JzY^krL~#2No_;tJ^q3JxrC&Tx0BiwnRhV&)+JQcpS` z3-TghlKgV8JB{&opq!~IglmuauM#Yi#y%{$#ctadRozTdO~9``Q`oAPEk52dS&gPS zSKlbb%sfWvSIO%8ZYBU%VPTymt^2cU)k=!7`6&OWI_7f6b>-uQKmh5?vTe$kc&EwK z@wf6MYfusSnJ0U*s}1ktx17^?9jBDlwt^vKsYg5;dj@@Ei?N}}Y8i&^=2dV}&e{3G zJd1AWq$fUsDz`TB6sKl0&{g*1WSMyCyw{AHENV#p zS7>szJ#5R_a~LI$L={(tbJp_+|9GF>kL;i@Yy3PWJcDo4rJ~)1FDD#g9k3*KQK78& zP}YJA$^zJoXDSz1y#LrzRcY128#{jd)LAJ{3SMm{YjqxtODv|g9N{#5wBIok6XJYA z4Hk|yb2 zAOkxpQF<&(vlR90&foU(wuQV3l_=MXp&eS-yEjMBerlXkl*E`I$yQ^Y_F*AoQ0UhL zz>*vz{)&A{0GL;2!ljtnH#X!*+$DW^Ox5Xtj(l>|Je1j+U&ngsnZAE~ZaYisP2%mJ zCPlBR$7r9Mt(!HKSmw?lF^arqB^xGDQBI4cf5HplG9SR*9V6|1^Hur%e`l&azbqr( z$Y3XCOFfiXKPARjx6@CTIu80yZ2D&@eICD{pma@r`Z7CjV4|U<-Z|xEg@;)I4!na_ z=PNb`t{25e*Fjx^1}*~y3npuW4Q{O>iK|K%kqKfsw%$@5P_ciJ(g3uE90&ds{Gfz5 z+ZeSxgp;)aYd7XK+ZRj|`T_j+GZvsHyE$8lIm}rE6<}�|4xY=S7CYNa=7vn_j%) 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 literal 0 HcmV?d00001 diff --git a/docs/src/public/screenshots/dark/06_streams.png b/docs/src/public/screenshots/dark/06_streams.png new file mode 100644 index 0000000000000000000000000000000000000000..feb4fa46e15371c03ac939a4da1f96cd65ffdde4 GIT binary patch literal 51261 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 IWgmzB4<|DOl>h($ literal 0 HcmV?d00001 diff --git a/docs/src/public/screenshots/dark/07_404_hosts.png b/docs/src/public/screenshots/dark/07_404_hosts.png new file mode 100644 index 0000000000000000000000000000000000000000..431c69d2e235f3a8d45ae6d6f4ccd3fed3861c88 GIT binary patch literal 47706 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 literal 0 HcmV?d00001 diff --git a/docs/src/public/screenshots/dark/08_access-lists.png b/docs/src/public/screenshots/dark/08_access-lists.png new file mode 100644 index 0000000000000000000000000000000000000000..33a19bc405bb451aa2c7d85c76cad2f6519921f1 GIT binary patch literal 49392 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

h1t%|g3m_GYv_u{$79Juj4d$G%4= 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 literal 0 HcmV?d00001 diff --git a/docs/src/public/screenshots/dark/09_certificates.png b/docs/src/public/screenshots/dark/09_certificates.png new file mode 100644 index 0000000000000000000000000000000000000000..e870ae5240492493f2ee55de3d60aa7400e33035 GIT binary patch literal 54680 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 {CY%{=-M0JZNKWA7Fz8 zl(xZxU^0$6gg!`VdC&jUpJo)(q(a^ZfW%SkbfXk5fAGZ2ri z$A;GD`UjFheQUnqE3@E5luo}qpnDRct^2)hIM^}by^!3(w*xvYO|nz@Ua_{f1H9et zZZ9t1kt+L(>Qx{-W4H@}&3Ai;zOF35!ay0-HWw2hdjyYit}hQIIWwep*FL3E2P}XX zOsq2pCuuCXZ%yl(mdIPFt-`3l_h~r?d-G}iD!rsOBVv!KOZ3g(-J0s7N~j~7|V9B6~bIpV`JMZ^QqcuWYDw1y3r zessLF6{B1wsB1S2~+twn!|$|Mua!P zdmM|iq_zF@t?X^E7(RDe$yv*te+)VW)V}T2Eo5BT$&#o0_Qn%l;iG z9nDqX0DA`$dQ8~VF-j%{WM8d9g7(kU;Fr@Pl$d)A_^$feT)9qYP=x|a(HZRiWU0hb z2*yo7cv^DV|03x1ZaYy-euNhjdYkrd!b}CtK1T&r|FRuBTG?U-`5uQesU1#*W5T3v z85^73trySmYH(|^_F;Nx?k;S@zuk{Yis{LM_UsR@^_7Zrc+0@aT{xcvf|swMun*+djLkuAh>4{X%tA&U*3Z}9MZxHP(cn&wE{RX%g^y@By(AL0j; zto}?iC``7)X|}p2@@D1zy_UTV)-yS{SQO2ap31Qjp1MD~eeHg9)w6(VsU_*gU>Nph zR$a_3hn7>@ayaB?*8t5S+rbaVN~`arSc$#@r*}@p_>a7*AJjA+-Sf$I!^~y- zwRFMm@+jX0wSJaYvbXS|eD1Ro)M-+qr?P=w2em5T;V9#>h>o@+hmKc+#LPKIUCnfD zSfe&R213o5Dso=)4WF;&Ywg)v{k%ZM#@}7Pa=qfJkLs#n&{aUiQo?TH;}}bVYdXV9 zIWCHl`kGaoCb)`fYRE{XE!!GoXT`toMD+1jiox4f^!Ol9OmuO?7O>)tyTi$)x5r0g zS#ViW{D@b>%0^Pl^{=y{1lOzH1hI=i>>GmU8UKh6|1Sv!q`?h#LkFRUF~S=EX?!9i zI>0_B7$aCOOqdYviH&@CIJXM``TAP&fKA9@S%zq+cHj_@_vs^OJqx%w_eCcb0Ldl) z7+P=r>{5_;9vv{>H!|1p@bhV?`;L&G!!i0i<0`Qgm}OEU#)1QQGj>YlCwKm2D9~P! z5WqH_Z;9Btx$r_UgEkQp{iek1aEgwTwSa>(=IEA3U$LW&WHBc}$D~tJhK*IDYk+T# z?$si(&=3X1;B94ePx7W>n5bZ6p~CzF<@C5=001;J>x<@wjZHcce3H_Rr$%s~l!b9? z%Lk24VS{MyAC>DZmExjb$PaZ7RHi$iDKZt`r2uzu006G%P2A!IZw4|L>^o^nW23e|`IZ2;j|x z{y$0wmFG{x8sB-v2RsKDflz*3{?O#a8KV8xOh3)_Ck>TH(j(_!|hGhdO z_KnU2Us}-T%9Eg#Md4<0{f`;+407{Sf?jWKej@1qZ+-M>*#Of$KObfztJWC0H*xoh8wWTKMUQw z9{*A3kMh53y+Nb=jcADmgj)cj?x0V8$=?7;0v{Wm zq^*5ca%I~d?qp7Rps3&%;Ut$TU|~|UR<$9^xr;Z>P#@bBMNPqA@puQr%Q2~V%^AU| zpzEf6OYfi*hvoMRATzL7GiD8s+_ zg6`=oiS36952b~tR{dqsugo8+GPdmO8a^&Pq^My8k3SttQLN9?Gf%I*=qB!q~zkSsG;;;TkF)< zy(bF3FQ2f27j>WuG@j}^BRnXpV>?S6KZyMh!{U7#-@2xv0go5LV@a*MeIHW=aUT_> z_WR{HAo?W^!mW04?APsQ=s7)Mx(`V2!UT?Fuu`}6&v`=+$9={m)aJc{P?2&7Zb>HC z@n@JjAcJri^D;zRv9G*{|BUaXprOD)=1`=f$LG3P zNGiQyPO@toORMgqwqK+>1G%6Fveu>{JYGjOJ;~cxn-4sN6eD zEUdqeb7B}^<|+Q13~=2hXRopoCOfEKKxapA(`I#HF0O=d4AuY*EXzf*O_|9BN7^%= zxY%H^RhS}v~ zUEb`7q~X}*rF{OS`J(qYRJWyOX5}R8@ad(E@mLVwIvVw>VejarETaWJq_t}BJ4>C) z-b3oP^td1&Im+0X-l3pSv%W+d$n1 z5+msg=BHi`gw_wTUiTN6zodIDm|lQIFL!PpdZWVkup8oBP!@tKLs^`5_*;9keF zv60An)P8=Sp5|4#)+N=^pwmPKWXz`R{;9QI&Aa<%_46w&f-Wtz{hE`tTND1w;QW!% zS;H@lO}4^&7EMzhHZS5@4edH*Dtu3HEUJd_>>Qr+XZc-k^`?Z>)H2DQ30W5&+kH9< zGu-ZzA@|yNY4y_?)mfP7g-*wM8FLS*w8dFHRZv(vN zfpMe}xvi~tVKb3_5YxeH!CZ2B1eT&Wt%JBif2nNfu4G!F!O6P9H%1@sBkKo~VL2dW@D;Y90KHUsoRmzA(4%}zd2M{J}d0h~%QMAfTbun766 zpxcv)By|Mgc~DcagW`JZ){{+(>Ukw@CE??f0>fbJ{eBS-)JbD&G7T4>y6^YWbh@^Xoj$s(hy>1b$L)7$&f> zqEsOXSN%WZrOKUOANq5-)H*%BpWnpfZNRE9JN(gwanADEO76raR~!70Vod=hvT&3(aqkqn`oWP7%>}5;k*+vC1C&$+; zM>aNg(Ck-In<%ap2Ab*x-m6HOu%<}*XcebffE%mol)o6ZJ z8154Y@f((Wi4v4NK*D(c$#zQEq|2*Y2V_DgLZBjOrbdv3bIZdEl#A~tKur_D#`6jbJ6#YAq^lA0Gw;^O z(Ln$lrH8e%(12Rr!x3sqqIra!pWbg{zu3 zN6;;>lkW4^#|(#v@JFnXr-c2i8D#sJG(!}02?l^20tDli62>fGtPZ>^f7Vk?}SJ!hksAsG^8A0JUnr+&RItS_mNRFHw@oYO!%ww#k zEu@&C3Z5UKUR8 z6?u$N5-_MZk6-kl$+~Eb!5G`yhU~m0GPz>ha(z24jR#2e61(ytEN6*!K&nGL*7>;# zX_m@POAijE%1Dm#n-*8!q>#neFWp#p(gsOeL_o&+Kbd<7!8XzBL@OqQ;3HI41mE2} z1DnmZ3C0tahr+=bXNOE6womJt&G}=>$B=>N%F17;(fmMjgc8cV&GuH_s?$S_Wg0(&!gOBLQ#@m%3T2{)as{QExFx?4>eJ#Tnrifdd&?JePhoAr}ZQ+XUIIw3t72x)IY{;2-&*g<1u%aYlpLjP; z#X10W?H={mCMxC{`or{R_*B#RbF#yaBxk{5-2(SkZjM7PAfrLVF@<`r0D|J1n%4K; z;Rp^;Kkrx#F-q1pus7&1@9BhT&4_Ad|E8)%hGrDcYjuY_y6m5ng^Ium&Ki$YVpyuB z8>opHgvi|*CwCYoi;$1yW9<>k7(&`>H%LU*I`JrpUAQtL#(DX^h6s}pg!Gs2R|)4U zp_L=v2LO$eK7P}m=1T;=Ps4x34(B)%!k+;5*g zozcTJy}Li0`cPb4Jm5B%{^w0+uZac-zE*5g5hnuR83Zsqgfk76SX@2Cr8f@B$CeR? z{d5(;w1@}uuvvW!D6yGlfI8zthl{5Ypx@#iS!M1KDJ6$KYp{>{#NQeqyEhKJucEy` zR%V(Ey7M}K9vtA%n0B{~Y?Z~B0Cp^(1gInaav8FV3kkYHZNKRE0A<8FdS2JkfhBF5 z?I^)EMTZYFkEi1?XB0*CK=%IY>3kP#nI1;9?DVnz4^qsCU@o4I;^VxgiF+COEqnU? zBq#UCm1MemUmaI7DVP1xGn5=KF1-UE3gLaWiw&0?bEdif2FFaNpodTmJ*^cz7aRvD zFFg9Y$m%i=;qyObc*pmERH&E#yCLe(9XRGjQ*KF69wk-$#_TNtl`#27L0EE>aQq`? z;(QnS1E_L5ZCMG8YTSn7<~-<}uXPC>z>~|zK^oRHZ$k;bhb;qV!8@GnVqC%b^qCag zgE*Sj0dY%Ln)pjw_=3Y;Lx=*Lv5F+$=Gk^ma~?Xd8Y_m6|?4i5;%Hmjy&Fd zxcXZtF>boT360z)Dt2lk1CxCR&ysXH2SpY5e`=moh>2(60^?mC-o^Z5LQ3v9Rief) zvUZj-rgDo{kX*6$v$q|{v3qCyq>)bh%k<&1dKi|I*cSy==eLG(gRRpYp*Q-sqW;Fh z%~AB|B-njcc~>7KVX&&iyLw2A4qLRlmn_A2{xi6?2utvU658*xmAi$&5bT`O-wj{@ zTl5w~!V8)JzWQ&!vJf%3-@2?L$R>Iot(Kb-h4aVs;s&A3dYhG-1t25Ot$FOKvQ+_xQwz^7d7!`4d6PGI{re8Z-xb9Okqo? z=cNG7E8!6{KE||@bos=J%QCEqg`6h@wuVG+6N4WxSGpy%FPnj}%su_`>V_&YZ&}SC5!C6lDD4 zVinOd*YC5$Gs3PLL=GmisV#5d)SCowNp#`tI4+Q8KhptHJ>%rIK=NisDffjc0`*s8 z`kcx(q5JV=X=llA5|k2bj0{)}v&CcyU>giq$kMMq*K~X=b&v*bE}7HU(~5<)SR`xe zL)$T07B+WAW+IGJZdOm%b0Ls@W(N)Q_8f!30v4=*XnKjd74lhBZF{S8zwD4mAa+NS#epjfV$c5^>myqnx9AEe-{B2RC z@ICCzeL;S>Tn53OeEpL|jv-7^Pc=?6;=L0+25?_Eeuv9S-0qXF`21v3Lb>lqU|!z> zR3App$(s?Pzin9@+TzFLI)BwE!8}r=YrboD4|?wBEy3!wK9fEDMHLI__Un88z=d|Q z*prQHs5&(cqz!j|On7sCjRT<|!SF7(NZhC3*=r?P0HOHiEZ;%nUQuxJVCF>p;SiP} zOW$G){MaD7vc9(T+o!$EX1oqLWAd8)J$y~l%nDT!WvgeZ@6g8;ClpcmfE0E`?k=lF)3g zx;EUIvRP%0qZ7r0Wn#g4uM6IMQSfWc{;=fm5}<+i^e%ffour8I3#cE0g7@%00ZIc{@H*aZh{N34;~o_L-K0Mo zcAtq=2*3d6gYjz??21z|iJwm)sU{>r zgy6pC%#0suS+Wdr!Z@ni4s zZb9Gt%+o@W-&sqmPTPD5yhm~8yr;(9rz?aq<)b_Q#dmIFLNkkK6nDf3|7B_A2Mh>h zYJxFA&n;5oUKB?Dvgr9NC`OerX2lyS_cMgjY5rRviA#Q;1~yp77i96)!OPvVE53pq znl~t;)SP8*jDhSt7N=GC9(&3=Zs;zV+iHYzl14E{Gyyi_NMHq$wC3j)eqLjl!VGvX z-kEpX;B_dl#Y5ShZ_k^)WhUv1?CtUaTHV-*_18fV4`J? zf!3oLx&1>#W=fIwaf!J%5PV1SGHrmW#QXe!rE#kvesSTFtsMpAecc>ODD(P9%@zew zCNMxxu4x(@*RsaA|MHh6tM5jr`B5=KWscG%Is)QOY3tYcaP7^AUBt4{_Vw$sF&ff- z+Vv*O@*`W9Bi-x5H%PX_13Ssa%I9$iJFZzj#IVi7y~QG_cinjOX+O4?pNhJTY6mm& zF3y?|mgVP<2fdm49N+mm4RQYnk#unAml3C-#Vsbp=NNh@fNjU89Mm?=YLl?PwNOcq zw#%YnPUo9{B)s8*Nt7^*YhVDdOMvqgdrPYb4~EnAfxg}5WjBl)4>+&2fNJmaAsUE( zr5<;V&HVqTrD95$qy0OWw(8J^?Po7iW zG_+3&Z*A@bulwB;nhO)g|6t$xU~A%oL5wci`U|yy7E%_Wt!HX8#}lr$AT$Uh1FU&Sc|_5c6? literal 0 HcmV?d00001 diff --git a/docs/src/public/screenshots/dark/10_users.png b/docs/src/public/screenshots/dark/10_users.png new file mode 100644 index 0000000000000000000000000000000000000000..34ed0b54b3b01278305cf6e92d243bc5fbe77441 GIT binary patch literal 60073 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 @RBbwjE$-;yV8YE`*RU+Y(Hl5Yl_-mLH2N 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/src/public/screenshots/dark/11_audit-logs.png b/docs/src/public/screenshots/dark/11_audit-logs.png new file mode 100644 index 0000000000000000000000000000000000000000..bce75b12da89aa35f45989de25c03f3e2541ffdd GIT binary patch literal 115408 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 aoYdOoIIe?V^cyfB0#zkV#WJXA(Ek7)jhLYT literal 0 HcmV?d00001 diff --git a/docs/src/public/screenshots/dark/12_settings.png b/docs/src/public/screenshots/dark/12_settings.png new file mode 100644 index 0000000000000000000000000000000000000000..adc518f3470ac5356101684f2bd6d94f5c0257e6 GIT binary patch literal 56492 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 literal 0 HcmV?d00001 diff --git a/docs/src/public/screenshots/dark/13_add-proxy_host.png b/docs/src/public/screenshots/dark/13_add-proxy_host.png new file mode 100644 index 0000000000000000000000000000000000000000..4b5522c76c575a3db5412b36ed2e943797632e4a GIT binary patch literal 87959 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

av_NS<{zI;p)*u4uYqC? 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�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%0AnPS5QRa2?V1LdF*X&PLFF1noze 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