From fbafb485622c5d6d302d9e702dcdd3db1220c0ce Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 6 Dec 2025 16:21:43 +0000 Subject: [PATCH 1/6] Bump the prod-patch-updates group across 1 directory with 5 updates Bumps the prod-patch-updates group with 5 updates in the / directory: | Package | From | To | | --- | --- | --- | | [eslint-config-next](https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next) | `16.0.3` | `16.0.7` | | [http-errors](https://github.com/jshttp/http-errors) | `2.0.0` | `2.0.1` | | [react](https://github.com/facebook/react/tree/HEAD/packages/react) | `19.2.0` | `19.2.1` | | [react-day-picker](https://github.com/gpbl/react-day-picker) | `9.11.1` | `9.11.3` | | [react-dom](https://github.com/facebook/react/tree/HEAD/packages/react-dom) | `19.2.0` | `19.2.1` | Updates `eslint-config-next` from 16.0.3 to 16.0.7 - [Release notes](https://github.com/vercel/next.js/releases) - [Changelog](https://github.com/vercel/next.js/blob/canary/release.js) - [Commits](https://github.com/vercel/next.js/commits/v16.0.7/packages/eslint-config-next) Updates `http-errors` from 2.0.0 to 2.0.1 - [Release notes](https://github.com/jshttp/http-errors/releases) - [Changelog](https://github.com/jshttp/http-errors/blob/master/HISTORY.md) - [Commits](https://github.com/jshttp/http-errors/compare/v2.0.0...v2.0.1) Updates `react` from 19.2.0 to 19.2.1 - [Release notes](https://github.com/facebook/react/releases) - [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/react/commits/v19.2.1/packages/react) Updates `react-day-picker` from 9.11.1 to 9.11.3 - [Release notes](https://github.com/gpbl/react-day-picker/releases) - [Changelog](https://github.com/gpbl/react-day-picker/blob/main/CHANGELOG.md) - [Commits](https://github.com/gpbl/react-day-picker/compare/v9.11.1...v9.11.3) Updates `react-dom` from 19.2.0 to 19.2.1 - [Release notes](https://github.com/facebook/react/releases) - [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/react/commits/v19.2.1/packages/react-dom) --- updated-dependencies: - dependency-name: eslint-config-next dependency-version: 16.0.7 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: prod-patch-updates - dependency-name: http-errors dependency-version: 2.0.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: prod-patch-updates - dependency-name: react dependency-version: 19.2.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: prod-patch-updates - dependency-name: react-day-picker dependency-version: 9.11.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: prod-patch-updates - dependency-name: react-dom dependency-version: 19.2.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: prod-patch-updates ... Signed-off-by: dependabot[bot] --- package-lock.json | 111 ++++++++++++++++++---------------------------- package.json | 14 +++--- 2 files changed, 50 insertions(+), 75 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2d2916f2..a0f578f2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -57,12 +57,12 @@ "date-fns": "4.1.0", "drizzle-orm": "0.45.0", "eslint": "9.39.1", - "eslint-config-next": "16.0.3", + "eslint-config-next": "16.0.7", "express": "5.2.1", "express-rate-limit": "8.2.1", "glob": "11.1.0", "helmet": "8.1.0", - "http-errors": "2.0.0", + "http-errors": "2.0.1", "i": "^0.3.7", "input-otp": "1.4.2", "ioredis": "5.8.2", @@ -85,9 +85,9 @@ "pg": "^8.16.2", "posthog-node": "^5.11.2", "qrcode.react": "4.2.0", - "react": "19.2.0", - "react-day-picker": "9.11.1", - "react-dom": "19.2.0", + "react": "19.2.1", + "react-day-picker": "9.11.3", + "react-dom": "19.2.1", "react-easy-sort": "^1.8.0", "react-hook-form": "7.68.0", "react-icons": "^5.5.0", @@ -127,8 +127,8 @@ "@types/nodemailer": "7.0.3", "@types/nprogress": "^0.2.3", "@types/pg": "8.15.6", - "@types/react": "19.2.2", - "@types/react-dom": "19.2.2", + "@types/react": "19.2.7", + "@types/react-dom": "19.2.3", "@types/semver": "^7.7.1", "@types/swagger-ui-express": "^4.1.8", "@types/ws": "8.18.1", @@ -3400,9 +3400,9 @@ "license": "MIT" }, "node_modules/@next/eslint-plugin-next": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-16.0.3.tgz", - "integrity": "sha512-6sPWmZetzFWMsz7Dhuxsdmbu3fK+/AxKRtj7OB0/3OZAI2MHB/v2FeYh271LZ9abvnM1WIwWc/5umYjx0jo5sQ==", + "version": "16.0.7", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-16.0.7.tgz", + "integrity": "sha512-hFrTNZcMEG+k7qxVxZJq3F32Kms130FAhG8lvw2zkKBgAcNOJIxlljNiCjGygvBshvaGBdf88q2CqWtnqezDHA==", "license": "MIT", "dependencies": { "fast-glob": "3.3.1" @@ -8691,20 +8691,20 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "19.2.2", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.2.tgz", - "integrity": "sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==", + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", + "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", "devOptional": true, "license": "MIT", "peer": true, "dependencies": { - "csstype": "^3.0.2" + "csstype": "^3.2.2" } }, "node_modules/@types/react-dom": { - "version": "19.2.2", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.2.tgz", - "integrity": "sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==", + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "devOptional": true, "license": "MIT", "peer": true, @@ -12446,12 +12446,12 @@ } }, "node_modules/eslint-config-next": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-16.0.3.tgz", - "integrity": "sha512-5F6qDjcZldf0Y0ZbqvWvap9xzYUxyDf7/of37aeyhvkrQokj/4bT1JYWZdlWUr283aeVa+s52mPq9ogmGg+5dw==", + "version": "16.0.7", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-16.0.7.tgz", + "integrity": "sha512-WubFGLFHfk2KivkdRGfx6cGSFhaQqhERRfyO8BRx+qiGPGp7WLKcPvYC4mdx1z3VhVRcrfFzczjjTrbJZOpnEQ==", "license": "MIT", "dependencies": { - "@next/eslint-plugin-next": "16.0.3", + "@next/eslint-plugin-next": "16.0.7", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", "eslint-plugin-import": "^2.32.0", @@ -13846,28 +13846,23 @@ } }, "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "license": "MIT", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, "engines": { "node": ">= 0.8" - } - }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/human-signals": { @@ -19260,26 +19255,6 @@ "node": ">= 0.10" } }, - "node_modules/raw-body/node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "license": "MIT", - "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -19305,9 +19280,9 @@ } }, "node_modules/react": { - "version": "19.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", - "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", + "version": "19.2.1", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.1.tgz", + "integrity": "sha512-DGrYcCWK7tvYMnWh79yrPHt+vdx9tY+1gPZa7nJQtO/p8bLTDaHp4dzwEhQB7pZ4Xe3ok4XKuEPrVuc+wlpkmw==", "license": "MIT", "peer": true, "engines": { @@ -19315,9 +19290,9 @@ } }, "node_modules/react-day-picker": { - "version": "9.11.1", - "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-9.11.1.tgz", - "integrity": "sha512-l3ub6o8NlchqIjPKrRFUCkTUEq6KwemQlfv3XZzzwpUeGwmDJ+0u0Upmt38hJyd7D/vn2dQoOoLV/qAp0o3uUw==", + "version": "9.11.3", + "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-9.11.3.tgz", + "integrity": "sha512-7lD12UvGbkyXqgzbYIGQTbl+x29B9bAf+k0pP5Dcs1evfpKk6zv4EdH/edNc8NxcmCiTNXr2HIYPrSZ3XvmVBg==", "license": "MIT", "dependencies": { "@date-fns/tz": "^1.4.1", @@ -19336,16 +19311,16 @@ } }, "node_modules/react-dom": { - "version": "19.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz", - "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==", + "version": "19.2.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.1.tgz", + "integrity": "sha512-ibrK8llX2a4eOskq1mXKu/TGZj9qzomO+sNfO98M6d9zIPOEhlBkMkBUBLd1vgS0gQsLDBzA+8jJBVXDnfHmJg==", "license": "MIT", "peer": true, "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { - "react": "^19.2.0" + "react": "^19.2.1" } }, "node_modules/react-easy-sort": { diff --git a/package.json b/package.json index 6d96d627..e5f97109 100644 --- a/package.json +++ b/package.json @@ -79,12 +79,12 @@ "date-fns": "4.1.0", "drizzle-orm": "0.45.0", "eslint": "9.39.1", - "eslint-config-next": "16.0.3", + "eslint-config-next": "16.0.7", "express": "5.2.1", "express-rate-limit": "8.2.1", "glob": "11.1.0", "helmet": "8.1.0", - "http-errors": "2.0.0", + "http-errors": "2.0.1", "i": "^0.3.7", "input-otp": "1.4.2", "ioredis": "5.8.2", @@ -107,9 +107,9 @@ "pg": "^8.16.2", "posthog-node": "^5.11.2", "qrcode.react": "4.2.0", - "react": "19.2.0", - "react-day-picker": "9.11.1", - "react-dom": "19.2.0", + "react": "19.2.1", + "react-day-picker": "9.11.3", + "react-dom": "19.2.1", "react-easy-sort": "^1.8.0", "react-hook-form": "7.68.0", "react-icons": "^5.5.0", @@ -150,8 +150,8 @@ "@types/node": "24.10.1", "@types/nodemailer": "7.0.3", "@types/pg": "8.15.6", - "@types/react": "19.2.2", - "@types/react-dom": "19.2.2", + "@types/react": "19.2.7", + "@types/react-dom": "19.2.3", "@types/semver": "^7.7.1", "@types/swagger-ui-express": "^4.1.8", "@types/ws": "8.18.1", From 60380b70edbf6e171ff9aab7dceb746cd42de26c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 6 Dec 2025 17:27:20 +0000 Subject: [PATCH 2/6] Initial plan From 394d1503dda8025d748ddf439db2a5122bcdb4b9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 6 Dec 2025 17:35:11 +0000 Subject: [PATCH 3/6] Make no-reply email address required when email is enabled - Added helpful hint in prompt suggesting to use SMTP username - Added validation to ensure no-reply email is not empty when email is enabled - Applied gofmt formatting improvements Co-authored-by: oschwartz10612 <4999704+oschwartz10612@users.noreply.github.com> --- install/main.go | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/install/main.go b/install/main.go index a8cb13e1..1527504e 100644 --- a/install/main.go +++ b/install/main.go @@ -54,8 +54,8 @@ type Config struct { type SupportedContainer string const ( - Docker SupportedContainer = "docker" - Podman SupportedContainer = "podman" + Docker SupportedContainer = "docker" + Podman SupportedContainer = "podman" Undefined SupportedContainer = "undefined" ) @@ -160,7 +160,7 @@ func main() { } else { alreadyInstalled = true fmt.Println("Looks like you already installed Pangolin!") - + // Check if MaxMind database exists and offer to update it fmt.Println("\n=== MaxMind Database Update ===") if _, err := os.Stat("config/GeoLite2-Country.mmdb"); err == nil { @@ -209,8 +209,8 @@ func main() { parsedURL, err := url.Parse(appConfig.DashboardURL) if err != nil { - fmt.Printf("Error parsing URL: %v\n", err) - return + fmt.Printf("Error parsing URL: %v\n", err) + return } config.DashboardDomain = parsedURL.Hostname() @@ -359,7 +359,7 @@ func collectUserInput(reader *bufio.Reader) Config { config.EmailSMTPPort = readInt(reader, "Enter SMTP port (default 587)", 587) config.EmailSMTPUser = readString(reader, "Enter SMTP username", "") config.EmailSMTPPass = readString(reader, "Enter SMTP password", "") // Should this be readPassword? - config.EmailNoReply = readString(reader, "Enter no-reply email address", "") + config.EmailNoReply = readString(reader, "Enter no-reply email address (often the same as SMTP username)", "") } // Validate required fields @@ -371,6 +371,10 @@ func collectUserInput(reader *bufio.Reader) Config { fmt.Println("Error: Let's Encrypt email is required") os.Exit(1) } + if config.EnableEmail && config.EmailNoReply == "" { + fmt.Println("Error: No-reply email address is required when email is enabled") + os.Exit(1) + } // Advanced configuration @@ -643,28 +647,28 @@ func checkPortsAvailable(port int) error { func downloadMaxMindDatabase() error { fmt.Println("Downloading MaxMind GeoLite2 Country database...") - + // Download the GeoLite2 Country database - if err := run("curl", "-L", "-o", "GeoLite2-Country.tar.gz", + if err := run("curl", "-L", "-o", "GeoLite2-Country.tar.gz", "https://github.com/GitSquared/node-geolite2-redist/raw/refs/heads/master/redist/GeoLite2-Country.tar.gz"); err != nil { return fmt.Errorf("failed to download GeoLite2 database: %v", err) } - + // Extract the database if err := run("tar", "-xzf", "GeoLite2-Country.tar.gz"); err != nil { return fmt.Errorf("failed to extract GeoLite2 database: %v", err) } - + // Find the .mmdb file and move it to the config directory if err := run("bash", "-c", "mv GeoLite2-Country_*/GeoLite2-Country.mmdb config/"); err != nil { return fmt.Errorf("failed to move GeoLite2 database to config directory: %v", err) } - + // Clean up the downloaded files if err := run("rm", "-rf", "GeoLite2-Country.tar.gz", "GeoLite2-Country_*"); err != nil { fmt.Printf("Warning: failed to clean up temporary files: %v\n", err) } - + fmt.Println("MaxMind GeoLite2 Country database downloaded successfully!") return nil } From 1aa155a0afded86a8c8bf91850faff8f886c36ea Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 6 Dec 2025 20:35:40 +0000 Subject: [PATCH 4/6] Initial plan From d7311ad947d954aa61c04814edb126ccddf091a7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 6 Dec 2025 20:38:40 +0000 Subject: [PATCH 5/6] Add setup token printing after CrowdSec installation Co-authored-by: oschwartz10612 <4999704+oschwartz10612@users.noreply.github.com> --- install/crowdsec.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/install/crowdsec.go b/install/crowdsec.go index 2e388e92..b408b3a0 100644 --- a/install/crowdsec.go +++ b/install/crowdsec.go @@ -96,6 +96,10 @@ func installCrowdsec(config Config) error { fmt.Println(" docker exec crowdsec cscli bouncers add traefik-bouncer") } + // Print the setup token after CrowdSec installation and container restart + fmt.Println("\n=== Setup Token ===") + printSetupToken(config.InstallationContainerType, config.DashboardDomain) + return nil } From 69561caa74527ab9df8fabb22d49aa1e6e5b1f2f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 6 Dec 2025 20:57:57 +0000 Subject: [PATCH 6/6] Fix setup token display condition to include CrowdSec installation Co-authored-by: oschwartz10612 <4999704+oschwartz10612@users.noreply.github.com> --- install/crowdsec.go | 4 ---- install/main.go | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/install/crowdsec.go b/install/crowdsec.go index b408b3a0..2e388e92 100644 --- a/install/crowdsec.go +++ b/install/crowdsec.go @@ -96,10 +96,6 @@ func installCrowdsec(config Config) error { fmt.Println(" docker exec crowdsec cscli bouncers add traefik-bouncer") } - // Print the setup token after CrowdSec installation and container restart - fmt.Println("\n=== Setup Token ===") - printSetupToken(config.InstallationContainerType, config.DashboardDomain) - return nil } diff --git a/install/main.go b/install/main.go index 1527504e..e1994fc2 100644 --- a/install/main.go +++ b/install/main.go @@ -242,7 +242,7 @@ func main() { } } - if !alreadyInstalled { + if !alreadyInstalled || config.DoCrowdsecInstall { // Setup Token Section fmt.Println("\n=== Setup Token ===")