Compare commits

...

1400 Commits

Author SHA1 Message Date
Milo Schwartz ea1ad23bff Merge pull request #1497 from fosrl/dev
Dev
2025-09-18 16:22:02 -04:00
miloschwartz 7ffc5e0212 fix 1.10.1 migration script 2025-09-18 16:19:23 -04:00
Owen Schwartz acba9444f4 Merge pull request #1495 from Tim5965/patch-3
Update nl-NL.json
2025-09-18 15:06:44 -04:00
Tim f7e3671801 Update nl-NL.json
I think the file was accidentally reverted to the version that contained errors. The errors that were in that version have been updated again.
2025-09-18 21:04:48 +02:00
miloschwartz a1b2e36a5d fix installer 2025-09-18 11:55:01 -04:00
Owen Schwartz 44e96942b3 Merge pull request #1484 from fosrl/dependabot/npm_and_yarn/dev-patch-updates-2c7447d29a
Bump the dev-patch-updates group with 2 updates
2025-09-18 11:52:37 -04:00
Owen Schwartz f2efa760ff Merge pull request #1488 from cku-heise/patch-1
Update de-DE.json
2025-09-18 11:52:18 -04:00
cku-heise 256df9042b Update de-DE.json
"Spielpfad" is literal, but wrong translation (not a word in German). "Unterverzeichnis" would be the best approximation of the UI label here.
2025-09-18 10:52:01 +02:00
miloschwartz 6d7091fb5c migrate siteId on targets table to delete on cascade 2025-09-17 22:54:29 -04:00
dependabot[bot] 0d1f88a368 Bump the dev-patch-updates group with 2 updates
Bumps the dev-patch-updates group with 2 updates: [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) and [esbuild](https://github.com/evanw/esbuild).


Updates `@types/node` from 24.5.0 to 24.5.2
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Updates `esbuild` from 0.25.9 to 0.25.10
- [Release notes](https://github.com/evanw/esbuild/releases)
- [Changelog](https://github.com/evanw/esbuild/blob/main/CHANGELOG.md)
- [Commits](https://github.com/evanw/esbuild/compare/v0.25.9...v0.25.10)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 24.5.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: esbuild
  dependency-version: 0.25.10
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-18 01:16:29 +00:00
Owen Schwartz 2ae601717d Merge pull request #1483 from barnabehvrd/patch-1
fr-fr language translation improvement
2025-09-17 17:11:03 -04:00
Barnabé Havard c7c8b463b4 Remove customHeadersDescription from fr-FR.json
Removed translation that doesn't appear anywhere
2025-09-17 23:06:13 +02:00
Barnabé Havard 282f839211 Fix typo in French translation for 'dataIn' 2025-09-17 22:53:12 +02:00
Barnabé Havard b2eb846b69 Update French translations in fr-FR.json 2025-09-17 22:50:41 +02:00
Owen Schwartz 62cf925dcf Merge pull request #1482 from fosrl/crowdin_dev
New Crowdin updates
2025-09-17 16:45:29 -04:00
Owen Schwartz e699f84c4d New translations en-us.json (Dutch) 2025-09-17 16:44:45 -04:00
Owen Schwartz c1189dadc5 New translations en-us.json (German) 2025-09-17 16:44:42 -04:00
Owen 76bc080a6d Merge branch 'main' into dev 2025-09-17 16:41:54 -04:00
miloschwartz 7f989f77ac fix type and fix redirect to resource niceId on create 2025-09-17 16:27:22 -04:00
Owen b916f768fe Quiet debug logs 2025-09-17 16:19:07 -04:00
Owen e4509c5714 Merge branch 'main' into dev 2025-09-17 15:54:10 -04:00
miloschwartz ddb6893a64 ask for container type in crowdsec installer 2025-09-17 15:52:40 -04:00
dependabot[bot] 248751ba1d Bump the dev-minor-updates group with 2 updates
Bumps the dev-minor-updates group with 2 updates: [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) and [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint).


Updates `@types/node` from 24.4.0 to 24.5.0
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Updates `typescript-eslint` from 8.43.0 to 8.44.0
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.44.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 24.5.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-minor-updates
- dependency-name: typescript-eslint
  dependency-version: 8.44.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-minor-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-17 09:06:13 -07:00
dependabot[bot] b4b74ed53a Bump @dotenvx/dotenvx in the dev-patch-updates group
Bumps the dev-patch-updates group with 1 update: [@dotenvx/dotenvx](https://github.com/dotenvx/dotenvx).


Updates `@dotenvx/dotenvx` from 1.49.0 to 1.49.1
- [Release notes](https://github.com/dotenvx/dotenvx/releases)
- [Changelog](https://github.com/dotenvx/dotenvx/blob/main/CHANGELOG.md)
- [Commits](https://github.com/dotenvx/dotenvx/compare/v1.49.0...v1.49.1)

---
updated-dependencies:
- dependency-name: "@dotenvx/dotenvx"
  dependency-version: 1.49.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-17 09:05:57 -07:00
dependabot[bot] 76903cd67f Bump next-intl from 4.3.8 to 4.3.9 in the prod-patch-updates group
Bumps the prod-patch-updates group with 1 update: [next-intl](https://github.com/amannn/next-intl).


Updates `next-intl` from 4.3.8 to 4.3.9
- [Release notes](https://github.com/amannn/next-intl/releases)
- [Changelog](https://github.com/amannn/next-intl/blob/main/CHANGELOG.md)
- [Commits](https://github.com/amannn/next-intl/compare/v4.3.8...v4.3.9)

---
updated-dependencies:
- dependency-name: next-intl
  dependency-version: 4.3.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-17 09:05:42 -07:00
Tim e4f2eac703 Update nl-NL.json
It currently contains several errors. I believe I've fixed the major ones now, but there are probably still things I've overlooked.

Incidentally, there's no option to edit the main headings for General, Access Control, and Organization. This also applies to Manage Clients (beta) page.
2025-09-17 09:01:46 -07:00
Oliver Antwerpen 3aa45007a7 Update de-DE.json
Corrected different translations to real german
2025-09-17 09:01:09 -07:00
miloschwartz f452892c88 fix cant create oidc user closes #1472 2025-09-16 17:29:45 -07:00
miloschwartz a0fece8a0e print failed crowdsec install error 2025-09-16 17:17:41 -07:00
Owen Schwartz e3d493209b Merge pull request #1475 from Pallavikumarimdb/Fix/frontend-resource-niceid
Use niceId for resource URLs to prevent 307 redirects
2025-09-16 12:22:54 -07:00
Pallavi 2e8b63553d resource links from id to niceId 2025-09-16 23:46:21 +05:30
Owen fb8f4b95b7 Make sure to default the match 2025-09-15 22:06:50 -07:00
miloschwartz 83e107c713 migrate autoProvisioned on user based on idp autoProvision 2025-09-15 21:52:35 -07:00
Owen e97642a790 Filter out duplicates 2025-09-15 21:50:21 -07:00
Owen 426d8684bf Merge branch 'dev' 2025-09-15 15:22:06 -07:00
Owen 5e7409a4f0 Make sure to allow targets only 2025-09-15 15:21:53 -07:00
Owen Schwartz c225a4cd48 Merge pull request #1467 from fosrl/dev
1.10.0
2025-09-15 14:44:04 -07:00
Owen Schwartz 24df9e1ce6 Merge pull request #1466 from fosrl/crowdin_dev
New Crowdin updates
2025-09-15 14:34:59 -07:00
Owen Schwartz eab1fd3722 New translations en-us.json (Norwegian Bokmal) 2025-09-15 14:34:40 -07:00
Owen Schwartz 93bd041693 New translations en-us.json (Chinese Simplified) 2025-09-15 14:34:39 -07:00
Owen Schwartz 665ebe993c New translations en-us.json (Turkish) 2025-09-15 14:34:38 -07:00
Owen Schwartz 4086130371 New translations en-us.json (Russian) 2025-09-15 14:34:36 -07:00
Owen Schwartz 29aacf5238 New translations en-us.json (Portuguese) 2025-09-15 14:34:35 -07:00
Owen Schwartz 497e6a8422 New translations en-us.json (Polish) 2025-09-15 14:34:34 -07:00
Owen Schwartz af8572add9 New translations en-us.json (Dutch) 2025-09-15 14:34:33 -07:00
Owen Schwartz d6aea96400 New translations en-us.json (Korean) 2025-09-15 14:34:31 -07:00
Owen Schwartz 17e26ff1a6 New translations en-us.json (Italian) 2025-09-15 14:34:30 -07:00
Owen Schwartz f5f223348d New translations en-us.json (German) 2025-09-15 14:34:28 -07:00
Owen Schwartz e4f90fd7ea New translations en-us.json (Czech) 2025-09-15 14:34:27 -07:00
Owen Schwartz 96dff20760 New translations en-us.json (Bulgarian) 2025-09-15 14:34:26 -07:00
Owen Schwartz d639f7f6de New translations en-us.json (Spanish) 2025-09-15 14:34:25 -07:00
Owen Schwartz 5b35ec2ea2 New translations en-us.json (French) 2025-09-15 14:34:23 -07:00
Owen bc78b95265 Remove toast 2025-09-15 14:32:36 -07:00
Owen 97f22eccbb Merge branch 'dev' of github.com:fosrl/pangolin into dev 2025-09-15 14:26:47 -07:00
Owen Schwartz a4fe86e38a Merge pull request #1406 from Pallavikumarimdb/enhancement-#906/enter-key-form-behavior
Enter key handling & hostname field reset in resource create
2025-09-15 14:26:29 -07:00
Owen 4bc1e10ecb Adjust default to prefix 2025-09-15 14:17:41 -07:00
Owen Schwartz 5b840d73bb Merge pull request #1465 from marcschaeferger/dev
feat(sites): adding official kubernetes helm install command for newt
2025-09-15 14:01:35 -07:00
Marc Schäfer afa9acfb1e feat(sites): adding official kubernetes helm install command for newt 2025-09-15 20:27:03 +02:00
Owen 7b7f65da39 Add default to siteResources niceId 2025-09-15 11:13:31 -07:00
Owen Schwartz 806da59f47 Merge pull request #1449 from fosrl/declare
Add declareivie config for resources, path matching, custom headers
2025-09-14 22:06:33 -07:00
Owen 9a009a4ea3 Adjust headers to work as name value 2025-09-14 22:06:05 -07:00
Owen 083d890053 Merge branch 'dev' into declare 2025-09-14 21:54:39 -07:00
Owen e693a8aeb8 Merge remote-tracking branch 'refs/remotes/origin/dev' into dev 2025-09-14 21:30:10 -07:00
Owen 831b46d7b5 Merge branch 'main' into dev 2025-09-14 21:29:43 -07:00
Owen 8dd3022b94 Merge branch 'Lokowitz-main' 2025-09-14 20:34:34 -07:00
Owen b278eb7110 Merge branch 'main' of github.com:Lokowitz/pangolin into Lokowitz-main 2025-09-14 20:33:20 -07:00
Owen 7a66163216 Working on making blueprints work 2025-09-14 20:33:06 -07:00
Owen Schwartz dda2043401 Merge pull request #1450 from fosrl/crowdin_dev
New Crowdin updates
2025-09-14 20:31:05 -07:00
Owen 08d6183c9b Update migrations 2025-09-14 17:35:21 -07:00
Owen eea0b86d6d Rules, client resources working 2025-09-14 17:27:21 -07:00
Owen 58c04fd196 Site resources for the blueprint 2025-09-14 15:57:41 -07:00
Lokowitz 09de6f6b5f modified: package-lock.json
modified:   package.json
2025-09-14 18:50:28 +00:00
Lokowitz d0bbd2b539 modified: package-lock.json
modified:   package.json
2025-09-14 18:33:34 +00:00
Lokowitz 134595a6b7 modified: package-lock.json
modified:   package.json
2025-09-14 09:44:04 +00:00
Milo Schwartz 4ff46f1650 Update README.md 2025-09-13 19:15:52 -04:00
Lokowitz 4779201d4c modified: src/app/[orgId]/settings/access/layout.tsx 2025-09-13 15:06:34 +00:00
dependabot[bot] 3a8643d83c Bump next in the npm_and_yarn group across 1 directory (#336)
Bumps the npm_and_yarn group with 1 update in the / directory: [next](https://github.com/vercel/next.js).


Updates `next` from 15.4.6 to 15.5.3
- [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/compare/v15.4.6...v15.5.3)

---
updated-dependencies:
- dependency-name: next
  dependency-version: 15.5.3
  dependency-type: direct:production
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-13 16:49:21 +02:00
Marvin 806a49b822 Update page.tsx 2025-09-13 16:42:37 +02:00
Marvin 95d74825ee Update layout.tsx 2025-09-13 16:42:22 +02:00
Marvin e4960909ed layout.tsx aktualisieren 2025-09-13 10:18:43 +02:00
dependabot[bot] 6cb36aaf13 Bump the prod-minor-updates group across 1 directory with 7 updates (#335) 2025-09-13 10:08:40 +02:00
dependabot[bot] cb06e93650 Bump uuid from 11.1.0 to 13.0.0 (#334) 2025-09-13 09:43:59 +02:00
dependabot[bot] e3a2f7a514 Bump the dev-patch-updates group with 6 updates (#329)
Bumps the dev-patch-updates group with 6 updates:

| Package | From | To |
| --- | --- | --- |
| [@tailwindcss/postcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-postcss) | `4.1.12` | `4.1.13` |
| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `24.3.0` | `24.3.3` |
| [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) | `19.1.12` | `19.1.13` |
| [@types/semver](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/semver) | `7.7.0` | `7.7.1` |
| [react-email](https://github.com/resend/react-email/tree/HEAD/packages/react-email) | `4.2.8` | `4.2.11` |
| [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss) | `4.1.12` | `4.1.13` |


Updates `@tailwindcss/postcss` from 4.1.12 to 4.1.13
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.1.13/packages/@tailwindcss-postcss)

Updates `@types/node` from 24.3.0 to 24.3.3
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Updates `@types/react` from 19.1.12 to 19.1.13
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

Updates `@types/semver` from 7.7.0 to 7.7.1
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/semver)

Updates `react-email` from 4.2.8 to 4.2.11
- [Release notes](https://github.com/resend/react-email/releases)
- [Changelog](https://github.com/resend/react-email/blob/canary/packages/react-email/CHANGELOG.md)
- [Commits](https://github.com/resend/react-email/commits/react-email@4.2.11/packages/react-email)

Updates `tailwindcss` from 4.1.12 to 4.1.13
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.1.13/packages/tailwindcss)

---
updated-dependencies:
- dependency-name: "@tailwindcss/postcss"
  dependency-version: 4.1.13
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@types/node"
  dependency-version: 24.3.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@types/react"
  dependency-version: 19.1.13
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@types/semver"
  dependency-version: 7.7.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: react-email
  dependency-version: 4.2.11
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: tailwindcss
  dependency-version: 4.1.13
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-13 09:37:17 +02:00
dependabot[bot] 01b1e817d8 Bump the prod-patch-updates group with 7 updates (#332)
Bumps the prod-patch-updates group with 7 updates:

| Package | From | To |
| --- | --- | --- |
| [@react-email/components](https://github.com/resend/react-email/tree/HEAD/packages/components) | `0.5.0` | `0.5.3` |
| [@react-email/render](https://github.com/resend/react-email/tree/HEAD/packages/render) | `1.2.0` | `1.2.3` |
| [drizzle-orm](https://github.com/drizzle-team/drizzle-orm) | `0.44.4` | `0.44.5` |
| [next-intl](https://github.com/amannn/next-intl) | `4.3.4` | `4.3.8` |
| [nodemailer](https://github.com/nodemailer/nodemailer) | `7.0.5` | `7.0.6` |
| [@types/nodemailer](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/nodemailer) | `6.4.17` | `7.0.1` |
| [tw-animate-css](https://github.com/Wombosvideo/tw-animate-css) | `1.3.7` | `1.3.8` |


Updates `@react-email/components` from 0.5.0 to 0.5.3
- [Release notes](https://github.com/resend/react-email/releases)
- [Changelog](https://github.com/resend/react-email/blob/canary/packages/components/CHANGELOG.md)
- [Commits](https://github.com/resend/react-email/commits/@react-email/components@0.5.3/packages/components)

Updates `@react-email/render` from 1.2.0 to 1.2.3
- [Release notes](https://github.com/resend/react-email/releases)
- [Changelog](https://github.com/resend/react-email/blob/canary/packages/render/CHANGELOG.md)
- [Commits](https://github.com/resend/react-email/commits/@react-email/render@1.2.3/packages/render)

Updates `drizzle-orm` from 0.44.4 to 0.44.5
- [Release notes](https://github.com/drizzle-team/drizzle-orm/releases)
- [Commits](https://github.com/drizzle-team/drizzle-orm/compare/0.44.4...0.44.5)

Updates `next-intl` from 4.3.4 to 4.3.8
- [Release notes](https://github.com/amannn/next-intl/releases)
- [Changelog](https://github.com/amannn/next-intl/blob/main/CHANGELOG.md)
- [Commits](https://github.com/amannn/next-intl/compare/v4.3.4...v4.3.8)

Updates `nodemailer` from 7.0.5 to 7.0.6
- [Release notes](https://github.com/nodemailer/nodemailer/releases)
- [Changelog](https://github.com/nodemailer/nodemailer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nodemailer/nodemailer/compare/v7.0.5...v7.0.6)

Updates `@types/nodemailer` from 6.4.17 to 7.0.1
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/nodemailer)

Updates `tw-animate-css` from 1.3.7 to 1.3.8
- [Release notes](https://github.com/Wombosvideo/tw-animate-css/releases)
- [Commits](https://github.com/Wombosvideo/tw-animate-css/compare/v1.3.7...v1.3.8)

---
updated-dependencies:
- dependency-name: "@react-email/components"
  dependency-version: 0.5.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: "@react-email/render"
  dependency-version: 1.2.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: drizzle-orm
  dependency-version: 0.44.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: next-intl
  dependency-version: 4.3.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: nodemailer
  dependency-version: 7.0.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: "@types/nodemailer"
  dependency-version: 7.0.1
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: prod-patch-updates
- dependency-name: tw-animate-css
  dependency-version: 1.3.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-13 09:36:52 +02:00
dependabot[bot] c3a5195575 Bump typescript-eslint in the dev-minor-updates group (#331)
Bumps the dev-minor-updates group with 1 update: [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint).


Updates `typescript-eslint` from 8.40.0 to 8.43.0
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.43.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.43.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-minor-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-13 09:34:35 +02:00
Marvin 99765c7bd5 Update index.ts 2025-09-13 09:32:01 +02:00
Owen 8929f389f4 Adjust styling to make it more clear 2025-09-12 11:45:03 -07:00
Owen Schwartz 4141d91f1b New translations en-us.json (Norwegian Bokmal) 2025-09-11 21:55:28 -07:00
Owen Schwartz 90272c84d2 New translations en-us.json (Chinese Simplified) 2025-09-11 21:55:27 -07:00
Owen Schwartz 3006a8e58c New translations en-us.json (Turkish) 2025-09-11 21:55:26 -07:00
Owen Schwartz 52a9dbd45d New translations en-us.json (Russian) 2025-09-11 21:55:25 -07:00
Owen Schwartz b2fb55d2c1 New translations en-us.json (Portuguese) 2025-09-11 21:55:23 -07:00
Owen Schwartz a1c16d22d8 New translations en-us.json (Polish) 2025-09-11 21:55:22 -07:00
Owen Schwartz 0e9504ee4d New translations en-us.json (Dutch) 2025-09-11 21:55:21 -07:00
Owen Schwartz e8cad6fc20 New translations en-us.json (Korean) 2025-09-11 21:55:20 -07:00
Owen Schwartz bc261f7739 New translations en-us.json (Italian) 2025-09-11 21:55:19 -07:00
Owen Schwartz 0b8983a86b New translations en-us.json (German) 2025-09-11 21:55:17 -07:00
Owen Schwartz 5a61da3c53 New translations en-us.json (Czech) 2025-09-11 21:55:16 -07:00
Owen Schwartz 800fe6244c New translations en-us.json (Bulgarian) 2025-09-11 21:55:15 -07:00
Owen Schwartz 9e1fec812c New translations en-us.json (Spanish) 2025-09-11 21:55:14 -07:00
Owen Schwartz 61632f9c97 New translations en-us.json (French) 2025-09-11 21:55:12 -07:00
Owen f5e44129d8 Eslint fix 2025-09-11 21:32:12 -07:00
Owen 3eaca924da Update migrations 2025-09-11 21:28:15 -07:00
Owen da1c706334 Translate 2025-09-11 21:26:13 -07:00
Owen 3b726dfb1e Merge branch 'dev' into declare 2025-09-11 21:24:27 -07:00
Owen d51e7f7e40 Add prefix to ui and resource 2025-09-11 21:20:33 -07:00
Owen 2551e0c291 Handle different routers based on target path 2025-09-11 15:30:07 -07:00
Owen 2efd5c31ab Headers input working on resource 2025-09-11 13:58:12 -07:00
Owen 1eacb8ff36 Get the headers into the traefik config 2025-09-11 12:20:50 -07:00
Owen 612446c3c9 Work accross sites? 2025-09-11 11:42:37 -07:00
Owen Schwartz e121e16ad9 Merge pull request #1441 from fosrl/dependabot/go_modules/install/prod-minor-updates-f3fcceee1e
Bump golang.org/x/term from 0.34.0 to 0.35.0 in /install in the prod-minor-updates group
2025-09-11 10:38:17 -07:00
Owen Schwartz 23616b41be Merge pull request #1445 from fosrl/crowdin_dev
New Crowdin updates
2025-09-11 10:36:04 -07:00
Owen Schwartz 1778ba49b2 New translations en-us.json (Norwegian Bokmal) 2025-09-11 10:35:39 -07:00
Owen Schwartz b6f2bd4703 New translations en-us.json (Chinese Simplified) 2025-09-11 10:35:38 -07:00
Owen Schwartz 5fd67224f6 New translations en-us.json (Turkish) 2025-09-11 10:35:37 -07:00
Owen Schwartz c9d21dde0c New translations en-us.json (Russian) 2025-09-11 10:35:35 -07:00
Owen Schwartz de2c5aa068 New translations en-us.json (Portuguese) 2025-09-11 10:35:34 -07:00
Owen Schwartz ad01cecae6 New translations en-us.json (Polish) 2025-09-11 10:35:33 -07:00
Owen Schwartz 75ef14c75b New translations en-us.json (Dutch) 2025-09-11 10:35:32 -07:00
Owen Schwartz 03a5a0eddb New translations en-us.json (Korean) 2025-09-11 10:35:30 -07:00
Owen Schwartz 66befd35eb New translations en-us.json (Italian) 2025-09-11 10:35:29 -07:00
Owen Schwartz 3cbad16c30 New translations en-us.json (German) 2025-09-11 10:35:27 -07:00
Owen Schwartz 3bba7c5956 New translations en-us.json (Czech) 2025-09-11 10:35:26 -07:00
Owen Schwartz 0daa84c583 New translations en-us.json (Bulgarian) 2025-09-11 10:35:25 -07:00
Owen Schwartz 92358a52c0 New translations en-us.json (Spanish) 2025-09-11 10:35:23 -07:00
Owen Schwartz faf17e9e86 New translations en-us.json (French) 2025-09-11 10:35:22 -07:00
Owen ef6efe94b4 Eslint fix 2025-09-11 10:27:02 -07:00
Owen 819d7ea23e Merge branch 'main' into dev 2025-09-11 10:25:21 -07:00
Owen Schwartz 61ff192cfd Merge pull request #1444 from hetlelid/patch-1
Update page.tsx
2025-09-11 10:24:55 -07:00
Owen ceb1b07ce2 Just style it a bit 2025-09-11 10:24:40 -07:00
Owen 90188d4358 Testing cross site issue 2025-09-11 10:12:27 -07:00
hetlelid 35aa0ab4e7 Update page.tsx
Added default location for the config files, for reference
2025-09-11 11:11:36 +02:00
Owen 14dd76db8b Apply blueprint over api call 2025-09-10 17:28:00 -07:00
Owen fb26dfad65 Add migrations for 1.10.0 2025-09-10 17:15:54 -07:00
miloschwartz bedc5adb75 add hide free domain option to domain picker 2025-09-10 15:36:05 -07:00
Owen 800b1f1520 Add basic blueprints 2025-09-10 15:33:56 -07:00
miloschwartz a4571a80ae Merge branch 'patch' into dev 2025-09-10 14:44:25 -07:00
miloschwartz a0a612618e fixed email undefined error on request email code 2025-09-10 14:20:25 -07:00
dependabot[bot] db94728a5b Bump golang.org/x/term in /install in the prod-minor-updates group
Bumps the prod-minor-updates group in /install with 1 update: [golang.org/x/term](https://github.com/golang/term).


Updates `golang.org/x/term` from 0.34.0 to 0.35.0
- [Commits](https://github.com/golang/term/compare/v0.34.0...v0.35.0)

---
updated-dependencies:
- dependency-name: golang.org/x/term
  dependency-version: 0.35.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-09 01:18:58 +00:00
Owen 04352a670a Merge branch 'dev' of github.com:fosrl/pangolin into dev 2025-09-08 17:50:57 -07:00
Owen fe6e3b013e Resource identified with niceId now 2025-09-08 17:50:07 -07:00
Owen a947a74194 Add resource niceId 2025-09-08 17:37:30 -07:00
miloschwartz 06055ff62b add common domain validation func 2025-09-08 17:25:01 -07:00
miloschwartz 45cb1562e5 pull api base url from config for axios 2025-09-08 16:55:40 -07:00
Pallavi 2f89a16852 minor fix to domain sanitize when create resources 2025-09-08 11:26:54 +05:30
Pallavi 86956b8cac fix enter key reload issue 2025-09-08 11:26:54 +05:30
Pallavi 84fb3add33 Enter key handling & hostname field reset in resource create 2025-09-08 11:26:54 +05:30
Owen Schwartz 56ee68d9f3 Merge pull request #1434 from fosrl/dependabot/github_actions/actions/setup-node-5
Bump actions/setup-node from 4 to 5
2025-09-07 22:01:36 -07:00
Owen Schwartz e81fd3bb31 Merge pull request #1435 from fosrl/dependabot/github_actions/actions/setup-go-6
Bump actions/setup-go from 5 to 6
2025-09-07 22:01:28 -07:00
Owen Schwartz 938ca29777 Merge pull request #1436 from fosrl/dependabot/github_actions/actions/stale-10
Bump actions/stale from 9 to 10
2025-09-07 22:01:21 -07:00
Owen Schwartz 122902968f Merge pull request #1415 from fosrl/crowdin_dev
New Crowdin updates
2025-09-07 22:01:12 -07:00
Owen Schwartz b55c30065f Merge pull request #1431 from Pallavikumarimdb/Fix/site-resource-destinationip-validation
Fix inconsistent destinationIp validation between create and update APIs
2025-09-07 21:11:32 -07:00
dependabot[bot] 92ac2dbac2 Bump actions/stale from 9 to 10
Bumps [actions/stale](https://github.com/actions/stale) from 9 to 10.
- [Release notes](https://github.com/actions/stale/releases)
- [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/stale/compare/v9...v10)

---
updated-dependencies:
- dependency-name: actions/stale
  dependency-version: '10'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-08 01:32:59 +00:00
dependabot[bot] d3e6decef9 Bump actions/setup-go from 5 to 6
Bumps [actions/setup-go](https://github.com/actions/setup-go) from 5 to 6.
- [Release notes](https://github.com/actions/setup-go/releases)
- [Commits](https://github.com/actions/setup-go/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/setup-go
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-08 01:32:10 +00:00
dependabot[bot] 579cd9d338 Bump actions/setup-node from 4 to 5
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 4 to 5.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-08 01:32:04 +00:00
Pallavi 9e2a58dd46 inconsistent destinationIp validation between create and update 2025-09-07 23:45:35 +05:30
Owen 64722617c1 Fix #1423 2025-09-07 10:47:08 -07:00
Owen Schwartz 5845ddbdda Merge pull request #1430 from Pallavikumarimdb/Fix/include-region-in-exitnode-query
Fix: Include "region" field in ExitNode query to match schema
2025-09-07 10:25:00 -07:00
Pallavi bf9ce0df9b Include region field in ExitNode query to match schema 2025-09-07 22:47:06 +05:30
miloschwartz 8aee2ec3a1 update install link 2025-09-06 22:37:02 -07:00
Milo Schwartz 3292eafe4a Update README.md 2025-09-07 01:36:37 -04:00
miloschwartz 9ad31b2c81 auto detect public ip 2025-09-06 22:24:22 -07:00
miloschwartz 374ed79a18 remove extra components 2025-09-06 21:38:17 -07:00
miloschwartz 3d5f73e344 fix listIdp query error 2025-09-06 17:26:44 -07:00
Owen 6761428a96 Add region 2025-09-06 16:54:16 -07:00
Owen Schwartz 0a9b463eaa New translations en-us.json (Norwegian Bokmal) 2025-09-05 17:16:59 -07:00
Owen Schwartz c219256fff New translations en-us.json (Chinese Simplified) 2025-09-05 17:16:58 -07:00
Owen Schwartz 7e48803dc5 New translations en-us.json (Turkish) 2025-09-05 17:16:57 -07:00
Owen Schwartz d496b8a414 New translations en-us.json (Russian) 2025-09-05 17:16:55 -07:00
Owen Schwartz 4825129560 New translations en-us.json (Portuguese) 2025-09-05 17:16:54 -07:00
Owen Schwartz adc54b2582 New translations en-us.json (Polish) 2025-09-05 17:16:53 -07:00
Owen Schwartz 863567c9b6 New translations en-us.json (Dutch) 2025-09-05 17:16:52 -07:00
Owen Schwartz 102555023b New translations en-us.json (Korean) 2025-09-05 17:16:51 -07:00
Owen Schwartz f1a9eef531 New translations en-us.json (Italian) 2025-09-05 17:16:49 -07:00
Owen Schwartz 5f007a5b0f New translations en-us.json (German) 2025-09-05 17:16:48 -07:00
Owen Schwartz 9455141262 New translations en-us.json (Czech) 2025-09-05 17:16:47 -07:00
Owen Schwartz 37e1379c88 New translations en-us.json (Bulgarian) 2025-09-05 17:16:46 -07:00
Owen Schwartz 55d597e519 New translations en-us.json (Spanish) 2025-09-05 17:16:45 -07:00
Owen Schwartz da5ee5c951 New translations en-us.json (French) 2025-09-05 17:16:43 -07:00
miloschwartz b0bd9279fc add idp auto provision override on user 2025-09-05 16:14:25 -07:00
Owen 90456339ca Add node env for react email issue back 2025-09-05 11:51:44 -07:00
Owen a653c8bad7 Update start command one more time 2025-09-05 11:45:42 -07:00
Owen c4fa6cf458 Remove source map support 2025-09-05 11:25:13 -07:00
Owen 268fc7b923 Update build process 2025-09-05 11:23:43 -07:00
miloschwartz 02604f5290 increase telemetry report interval 2025-09-04 20:17:59 -07:00
miloschwartz 1dad7e86a0 add optional icon to strategy select 2025-09-04 18:02:42 -07:00
Owen 838e3efbca Pass in db to pickPort 2025-09-04 18:01:33 -07:00
miloschwartz 3e353717f5 add oidc variant 2025-09-04 17:52:52 -07:00
miloschwartz 0a4b74b91a scope user id check to idp in create idp user 2025-09-04 15:23:51 -07:00
miloschwartz e69fbf3ccf Merge branch 'dev' of https://github.com/fosrl/pangolin into dev 2025-09-04 15:23:48 -07:00
miloschwartz 0b2349d6bf fix delete idp user 2025-09-04 15:15:10 -07:00
Owen 3a8f04cf14 Add transaction type 2025-09-04 14:01:12 -07:00
Owen e941cf956f Fix typo in response 2025-09-04 14:01:11 -07:00
Owen Schwartz 29f7bcf6f5 New translations en-us.json (Norwegian Bokmal) 2025-09-04 11:40:07 -07:00
Owen Schwartz 1cf1e0dc57 New translations en-us.json (Chinese Simplified) 2025-09-04 11:40:06 -07:00
Owen Schwartz 175283805e New translations en-us.json (Portuguese) 2025-09-04 11:40:02 -07:00
Owen Schwartz 063c0405e8 New translations en-us.json (Dutch) 2025-09-04 11:40:00 -07:00
Owen Schwartz 947cb77753 New translations en-us.json (Korean) 2025-09-04 11:39:58 -07:00
miloschwartz 28b3b305ea remove special char domain placeholders 2025-09-04 11:27:06 -07:00
miloschwartz df85f13aea move all components to components dir 2025-09-04 11:18:42 -07:00
Owen Schwartz 042e2c1390 Merge pull request #1413 from AstralDestiny/traefik-dynamic_config-cleanup
Update Traefik to not declare an unnecessary path and make the config cleaner.
2025-09-04 10:46:42 -07:00
AstralDestiny e6314bee35 Update Traefik to not declare an unnecessary path and make the config cleaner. 2025-09-04 11:44:20 -04:00
Owen 4292d3262e Add niceId to resource 2025-09-03 17:34:16 -07:00
Owen 35d070ad29 Convert to exitNodeComm function 2025-09-02 16:11:08 -07:00
Owen Schwartz cd79e77576 Merge pull request #1397 from fosrl/dev
1.9.4
2025-09-01 17:47:01 -07:00
Owen Schwartz 1f1c20d637 Merge pull request #1396 from fosrl/crowdin_dev
New Crowdin updates
2025-09-01 17:46:22 -07:00
Owen Schwartz e87b3b1b54 New translations en-us.json (Norwegian Bokmal) 2025-09-01 17:46:02 -07:00
Owen Schwartz a6f7b65625 New translations en-us.json (Chinese Simplified) 2025-09-01 17:46:01 -07:00
Owen Schwartz 722fa47132 New translations en-us.json (Turkish) 2025-09-01 17:46:00 -07:00
Owen Schwartz f83e290b4c New translations en-us.json (Russian) 2025-09-01 17:45:59 -07:00
Owen Schwartz 11b4047283 New translations en-us.json (Portuguese) 2025-09-01 17:45:57 -07:00
Owen Schwartz 69b2032a86 New translations en-us.json (Polish) 2025-09-01 17:45:56 -07:00
Owen Schwartz 636298569f New translations en-us.json (Dutch) 2025-09-01 17:45:55 -07:00
Owen Schwartz ed8a282d35 New translations en-us.json (Korean) 2025-09-01 17:45:54 -07:00
Owen Schwartz 3bd5e850e0 New translations en-us.json (Italian) 2025-09-01 17:45:52 -07:00
Owen Schwartz 070f1f9159 New translations en-us.json (German) 2025-09-01 17:45:51 -07:00
Owen Schwartz 195644cca5 New translations en-us.json (Czech) 2025-09-01 17:45:50 -07:00
Owen Schwartz 8092c86ecd New translations en-us.json (Bulgarian) 2025-09-01 17:45:49 -07:00
Owen Schwartz 28f33702da New translations en-us.json (Spanish) 2025-09-01 17:45:48 -07:00
Owen Schwartz 570632b8be New translations en-us.json (French) 2025-09-01 17:45:46 -07:00
Owen f2881e1b31 Merge branch 'Pallavikumarimdb-enhancement-#906/persist-amount-of-entries' into dev 2025-09-01 17:40:02 -07:00
Owen dad35e37ef Merge branch 'enhancement-#906/persist-amount-of-entries' of github.com:Pallavikumarimdb/pangolin into Pallavikumarimdb-enhancement-#906/persist-amount-of-entries 2025-09-01 17:39:16 -07:00
Owen 39afabd60e Source maps as js 2025-09-01 14:03:32 -07:00
Owen dc7e14a34b Limit saas 2025-09-01 11:39:30 -07:00
Owen 1dca71a779 Try to include source maps 2025-09-01 11:29:49 -07:00
Pallavi e9494efa8e quick fix 2025-09-01 23:06:39 +05:30
Owen Schwartz 8159a0f13d Merge pull request #1394 from Pallavikumarimdb/Fix/hostname-field-reset-port-and-method
Fix/hostname field reset port and method
2025-09-01 10:21:31 -07:00
Pallavi ee9101e738 Save Amount of Entries 2025-09-01 22:26:12 +05:30
Pallavi b670e6e3dc update parser to handle h2c 2025-09-01 21:47:50 +05:30
Pallavi 5e5754fa62 preserve port and method on host change 2025-09-01 21:22:18 +05:30
Owen Schwartz 5fcf76066f Merge pull request #1391 from fosrl/dev
1.9.3
2025-08-31 20:58:35 -07:00
Owen 601645fa72 Fix translations
Fix #1355
2025-08-31 20:56:49 -07:00
Owen 12765ad675 Merge branch 'Pallavikumarimdb-Fix/allow-unicode-domain-name' into dev 2025-08-31 19:41:35 -07:00
Owen ad3383d23d Merge branch 'Fix/allow-unicode-domain-name' of github.com:Pallavikumarimdb/pangolin into Pallavikumarimdb-Fix/allow-unicode-domain-name 2025-08-31 19:40:13 -07:00
Pallavi 7d5961cf50 Support unicode with subdomain sanitized 2025-08-31 22:45:42 +05:30
Owen 864aa052f1 Merge branch 'Hetav21-enhancement-1318' into dev 2025-08-31 09:50:47 -07:00
Hetav21 be16196058 feat: make version numbers link to GitHub releases and add Discord link 2025-08-31 21:19:34 +05:30
Pallavi 8a62f12e8b fix lint 2025-08-31 17:53:36 +05:30
Pallavi 78f464f6ca Show/allow unicode domain name 2025-08-31 17:53:35 +05:30
Owen f37eda4739 Fix #1376 2025-08-30 22:28:37 -07:00
Owen 4e106e9e5a Make more explicit in config telemetry
Fixes #1374
2025-08-30 22:22:42 -07:00
Owen ccf8e5e6f4 Dont pull org from api key
Fixes #1361
2025-08-30 22:12:35 -07:00
Owen 9455adf61f Add list invitations to integration api
Fixes #1364
2025-08-30 21:18:22 -07:00
miloschwartz 970ab9818a translate managed page 2025-08-30 16:51:44 -07:00
Owen Schwartz 7848cf7141 Merge pull request #1377 from fosrl/dependabot/npm_and_yarn/dev-patch-updates-f90e31e16c
Bump the dev-patch-updates group across 1 directory with 2 updates
2025-08-30 16:12:29 -07:00
Owen 8e5aa9c195 Merge branch 'Pallavikumarimdb-feature-906/smart-host-parsing' into dev 2025-08-30 15:52:45 -07:00
Owen a03e9ba7dd Merge branch 'feature-906/smart-host-parsing' of github.com:Pallavikumarimdb/pangolin into Pallavikumarimdb-feature-906/smart-host-parsing 2025-08-30 15:51:15 -07:00
Owen 9e646ba385 Merge branch 'Pallavikumarimdb-Fix/domain-picker-issue' into dev 2025-08-30 15:24:15 -07:00
Owen d9a4f20fe6 Merge branch 'Fix/domain-picker-issue' of github.com:Pallavikumarimdb/pangolin into Pallavikumarimdb-Fix/domain-picker-issue 2025-08-30 15:22:02 -07:00
Owen e659f0e75d Fix type 2025-08-29 15:39:06 -07:00
Owen 8891d6239f Handle wildcard certs 2025-08-29 15:35:57 -07:00
Pallavi e3bd3fb985 consistent full domain 2025-08-30 02:59:23 +05:30
Pallavi 54764dfacd unify subdomain validation schema to handle edge cases 2025-08-30 01:14:03 +05:30
Owen b156b5ff2d Make /32 to not mess with newt 2025-08-28 22:42:27 -07:00
Owen d8e547c9a0 Configure if allow raw resources 2025-08-28 22:11:24 -07:00
dependabot[bot] a0b93377a4 Bump the dev-patch-updates group across 1 directory with 2 updates
Bumps the dev-patch-updates group with 2 updates in the / directory: [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) and [@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom).


Updates `@types/react` from 19.1.11 to 19.1.12
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

Updates `@types/react-dom` from 19.1.8 to 19.1.9
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-dom)

---
updated-dependencies:
- dependency-name: "@types/react"
  dependency-version: 19.1.12
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@types/react-dom"
  dependency-version: 19.1.9
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-29 01:23:18 +00:00
Pallavi e8a6efd079 subdomain validation consistent 2025-08-29 03:58:49 +05:30
Pallavi 18bb6caf8f allows typing flow while providing helpful validation 2025-08-29 02:44:39 +05:30
Pallavi bc335d15c0 preserve subdomain with sanitizeSubdomain and validateSubdomain 2025-08-29 01:12:12 +05:30
Owen Schwartz 2a0d440a34 Merge pull request #1366 from fosrl/dev
1.9.2
2025-08-27 12:02:21 -07:00
Owen Schwartz b0500fac29 Merge pull request #1367 from fosrl/crowdin_dev
New Crowdin updates
2025-08-27 11:59:06 -07:00
Owen Schwartz af16e6423a New translations en-us.json (Norwegian Bokmal) 2025-08-27 11:58:46 -07:00
Owen Schwartz ff90471f0f New translations en-us.json (Chinese Simplified) 2025-08-27 11:58:44 -07:00
Owen Schwartz bcc501c524 New translations en-us.json (Turkish) 2025-08-27 11:58:43 -07:00
Owen Schwartz c4ef211a3e New translations en-us.json (Russian) 2025-08-27 11:58:42 -07:00
Owen Schwartz 592c0eb7ab New translations en-us.json (Portuguese) 2025-08-27 11:58:41 -07:00
Owen Schwartz 880a000865 New translations en-us.json (Polish) 2025-08-27 11:58:40 -07:00
Owen Schwartz a9571f6adf New translations en-us.json (Dutch) 2025-08-27 11:58:38 -07:00
Owen Schwartz ca91f313bc New translations en-us.json (Korean) 2025-08-27 11:58:37 -07:00
Owen Schwartz 76b9753916 New translations en-us.json (Italian) 2025-08-27 11:58:36 -07:00
Owen Schwartz cd8bbe28bf New translations en-us.json (German) 2025-08-27 11:58:35 -07:00
Owen Schwartz 9550c11594 New translations en-us.json (Spanish) 2025-08-27 11:58:32 -07:00
Owen Schwartz 7ac21cad25 New translations en-us.json (French) 2025-08-27 11:58:30 -07:00
Owen 2008a3955a Change destructuring 2025-08-27 11:31:15 -07:00
Owen f1641c9f3e Dont create exit node on new key
Fixes #1347
Fixes #776
Fixes #1090
2025-08-27 11:25:10 -07:00
Owen Schwartz bec5bbd033 Merge pull request #1329 from fosrl/dependabot/go_modules/install/prod-minor-updates-b66dbea3a9
Bump golang.org/x/term from 0.33.0 to 0.34.0 in /install in the prod-minor-updates group
2025-08-27 10:55:48 -07:00
Owen Schwartz ae11f72e28 Merge pull request #1362 from fosrl/dependabot/npm_and_yarn/dev-patch-updates-43a727f364
Bump the dev-patch-updates group across 1 directory with 3 updates
2025-08-27 10:50:20 -07:00
Owen Schwartz 6b88cb3920 Merge pull request #1354 from fosrl/crowdin_dev
New Crowdin updates
2025-08-27 10:47:58 -07:00
dependabot[bot] 38772111e8 Bump the dev-patch-updates group across 1 directory with 3 updates
Bumps the dev-patch-updates group with 3 updates in the / directory: [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react), [@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom) and [tsx](https://github.com/privatenumber/tsx).


Updates `@types/react` from 19.1.10 to 19.1.11
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

Updates `@types/react-dom` from 19.1.7 to 19.1.8
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-dom)

Updates `tsx` from 4.20.4 to 4.20.5
- [Release notes](https://github.com/privatenumber/tsx/releases)
- [Changelog](https://github.com/privatenumber/tsx/blob/master/release.config.cjs)
- [Commits](https://github.com/privatenumber/tsx/compare/v4.20.4...v4.20.5)

---
updated-dependencies:
- dependency-name: "@types/react"
  dependency-version: 19.1.11
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@types/react-dom"
  dependency-version: 19.1.8
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: tsx
  dependency-version: 4.20.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-27 11:45:42 +00:00
Owen Schwartz 14f50c3e66 New translations en-us.json (Czech) 2025-08-27 02:22:26 -07:00
Owen b89a2c9e49 Trust the gerbil proxy for proxyProtcol 2025-08-26 22:36:33 -07:00
Owen Schwartz 2d2eda988c New translations en-us.json (Norwegian Bokmal) 2025-08-26 22:34:55 -07:00
Owen Schwartz 432033969b New translations en-us.json (Chinese Simplified) 2025-08-26 22:34:54 -07:00
Owen Schwartz 1fbf74e1f7 New translations en-us.json (Turkish) 2025-08-26 22:34:53 -07:00
Owen Schwartz 93648ff00b New translations en-us.json (Russian) 2025-08-26 22:34:52 -07:00
Owen Schwartz 9513136610 New translations en-us.json (Portuguese) 2025-08-26 22:34:50 -07:00
Owen Schwartz 43a2a39f8d New translations en-us.json (Polish) 2025-08-26 22:34:49 -07:00
Owen Schwartz 218351de9a New translations en-us.json (Dutch) 2025-08-26 22:34:48 -07:00
Owen Schwartz b92b922eee New translations en-us.json (Korean) 2025-08-26 22:34:46 -07:00
Owen Schwartz 91be4937ee New translations en-us.json (Italian) 2025-08-26 22:34:45 -07:00
Owen Schwartz 19b36a5fae New translations en-us.json (German) 2025-08-26 22:34:44 -07:00
Owen Schwartz bb9ee7dfd2 New translations en-us.json (Czech) 2025-08-26 22:34:42 -07:00
Owen Schwartz ac0351b525 New translations en-us.json (Bulgarian) 2025-08-26 22:34:41 -07:00
Owen Schwartz 405f5ad7cc New translations en-us.json (Spanish) 2025-08-26 22:34:40 -07:00
Owen Schwartz 8cc2712da3 New translations en-us.json (French) 2025-08-26 22:34:39 -07:00
Owen c02ac8d1bf Seperate out function 2025-08-26 17:19:04 -07:00
Owen a1802add19 Geoblocking works 2025-08-26 17:14:55 -07:00
Owen 218a6642a2 Merge branch 'dev' into geoip 2025-08-25 21:07:17 -07:00
dependabot[bot] 21a83a5755 Bump golang.org/x/term in /install in the prod-minor-updates group
Bumps the prod-minor-updates group in /install with 1 update: [golang.org/x/term](https://github.com/golang/term).


Updates `golang.org/x/term` from 0.33.0 to 0.34.0
- [Commits](https://github.com/golang/term/compare/v0.33.0...v0.34.0)

---
updated-dependencies:
- dependency-name: golang.org/x/term
  dependency-version: 0.34.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-26 02:12:49 +00:00
Owen Schwartz bec75e51f6 New translations en-us.json (French) 2025-08-25 17:41:14 -07:00
Owen Schwartz 6c9b445be6 Merge pull request #1353 from fosrl/dev
1.9.1
2025-08-25 17:13:33 -07:00
Owen 06b17fa941 Merge branch 'main' into dev 2025-08-25 17:07:28 -07:00
Owen e1d4c029e7 Remove cancel button
Fixes #1312
2025-08-25 17:00:51 -07:00
Owen 293fd70ccb Remove bad file 2025-08-25 16:51:33 -07:00
Owen Schwartz 4ee863db5a Merge pull request #1352 from fosrl/crowdin_dev
New Crowdin updates
2025-08-25 16:42:41 -07:00
Owen Schwartz 2717be0fed New translations en-us.json (Norwegian Bokmal) 2025-08-25 16:42:22 -07:00
Owen Schwartz 1f312e146f New translations en-us.json (Chinese Simplified) 2025-08-25 16:42:21 -07:00
Owen Schwartz b91557ebb0 New translations en-us.json (Turkish) 2025-08-25 16:42:20 -07:00
Owen Schwartz 465380b5a3 New translations en-us.json (Russian) 2025-08-25 16:42:19 -07:00
Owen Schwartz 60af901feb New translations en-us.json (Portuguese) 2025-08-25 16:42:17 -07:00
Owen Schwartz ea78a654ff New translations en-us.json (Polish) 2025-08-25 16:42:16 -07:00
Owen Schwartz f28b6ad0a5 New translations en-us.json (Dutch) 2025-08-25 16:42:15 -07:00
Owen Schwartz a3bdab1318 New translations en-us.json (Korean) 2025-08-25 16:42:14 -07:00
Owen Schwartz f8c5d01e3c New translations en-us.json (Italian) 2025-08-25 16:42:13 -07:00
Owen Schwartz 3ebe218b7f New translations en-us.json (German) 2025-08-25 16:42:12 -07:00
Owen Schwartz 7d039ab729 New translations en-us.json (Czech) 2025-08-25 16:42:10 -07:00
Owen Schwartz b2b6c8c268 New translations en-us.json (Bulgarian) 2025-08-25 16:42:09 -07:00
Owen Schwartz 4950f25063 New translations en-us.json (Spanish) 2025-08-25 16:42:08 -07:00
Owen Schwartz 524d6b48d9 New translations en-us.json (French) 2025-08-25 16:42:07 -07:00
Owen 29fb5735e2 Add missing api endpoints to integration
Fixes #1344
2025-08-25 16:23:22 -07:00
Owen 247fc85440 Fix #1339 2025-08-25 16:08:37 -07:00
Owen 2b4302572c Fix #1343 2025-08-25 13:58:21 -07:00
Owen 9b28780e62 Merge branch 'main' of github.com:fosrl/pangolin 2025-08-25 13:56:34 -07:00
Owen Schwartz 8656f68008 Merge pull request #1341 from SINF-KEN/main
fix typos french.
2025-08-25 11:10:35 -07:00
SINF-KEN 15651b6919 fix typos french. 2025-08-25 12:33:45 +02:00
Owen 78d3861382 Add pass rule 2025-08-24 22:20:09 -07:00
Owen 72f19274cd Add ip lookup 2025-08-24 21:58:52 -07:00
Owen adbcd1a2e0 Add missing cols 2025-08-24 13:51:03 -07:00
Owen 5b7727fab4 Fix #1332 2025-08-24 12:22:54 -07:00
Owen 9627dfa90c Add ipKeyGenerator 2025-08-24 12:18:34 -07:00
Owen 50022c9fc8 Update readme 2025-08-24 10:33:03 -07:00
Owen Schwartz e0b76ffebc Merge pull request #1322 from fosrl/dev
1.9.0
2025-08-24 10:31:23 -07:00
Owen Schwartz be5a9a840c Merge pull request #1323 from fosrl/crowdin_dev
New Crowdin updates
2025-08-23 15:51:54 -07:00
Owen Schwartz 6e5f429e0a New translations en-us.json (Norwegian Bokmal) 2025-08-23 15:51:05 -07:00
Owen Schwartz e9d9d6e2f4 New translations en-us.json (Chinese Simplified) 2025-08-23 15:51:04 -07:00
Owen Schwartz b4a57e630c New translations en-us.json (Turkish) 2025-08-23 15:51:03 -07:00
Owen Schwartz 1062e33dc8 New translations en-us.json (Russian) 2025-08-23 15:51:02 -07:00
Owen Schwartz 0e14441f73 New translations en-us.json (Portuguese) 2025-08-23 15:51:01 -07:00
Owen Schwartz a6a909ae4f New translations en-us.json (Polish) 2025-08-23 15:51:00 -07:00
Owen Schwartz 2b4a39e64c New translations en-us.json (Dutch) 2025-08-23 15:50:59 -07:00
Owen Schwartz 82b4921602 New translations en-us.json (Korean) 2025-08-23 15:50:58 -07:00
Owen Schwartz 4229324a5d New translations en-us.json (Italian) 2025-08-23 15:50:57 -07:00
Owen Schwartz 34d3ca9c51 New translations en-us.json (German) 2025-08-23 15:50:55 -07:00
Owen Schwartz 9bd7002917 New translations en-us.json (Spanish) 2025-08-23 15:50:53 -07:00
Owen Schwartz ebed9f7a68 New translations en-us.json (French) 2025-08-23 15:50:52 -07:00
Owen 5d34bd82c0 Adjust const one more time 2025-08-23 15:36:19 -07:00
Owen 8bcb2b3b0f Fix type error 2025-08-23 15:30:03 -07:00
Owen 32ba17cf91 Fix linter errors 2025-08-23 15:26:43 -07:00
Owen 704ded4410 Merge branch 'dev' of github.com:fosrl/pangolin into dev 2025-08-23 15:23:09 -07:00
Owen 88277976c6 Merge branch 'main' into dev 2025-08-23 15:21:32 -07:00
Owen Schwartz cb95f02912 Merge pull request #1308 from fosrl/dependabot/npm_and_yarn/dev-minor-updates-65c0d343c4
Bump the dev-minor-updates group with 3 updates
2025-08-23 15:20:25 -07:00
Owen Schwartz 928b406359 Merge pull request #1310 from fosrl/crowdin_dev
New Crowdin updates
2025-08-23 15:16:26 -07:00
Owen Schwartz 4757c7db8c Merge pull request #1281 from jackrosenberg/push-nymutulytrsq
fix: change default integration_api to 3004
2025-08-23 15:16:03 -07:00
Owen 5df87641a1 Fix #1321 2025-08-23 15:13:44 -07:00
Owen 04077c53fd Update url to cloud 2025-08-23 12:31:16 -07:00
Owen 574be52b84 Revert b4be620a5b 2025-08-22 10:43:04 -07:00
Owen Schwartz a66613c5ca New translations en-us.json (Czech) 2025-08-22 09:05:46 -07:00
Owen Schwartz 01b3b19715 New translations en-us.json (Czech) 2025-08-22 07:34:03 -07:00
Pallavi fb1481c69c fix lint issue 2025-08-22 19:18:47 +05:30
Pallavi 9557f755a5 Add Smart Host Parsing 2025-08-22 13:07:03 +05:30
Owen 60d8831399 Rename hybrid to managed 2025-08-21 14:19:21 -07:00
Owen 5ff5660db3 Add key 2025-08-21 14:12:09 -07:00
Owen Schwartz d62c359452 New translations en-us.json (Bulgarian) 2025-08-21 00:53:41 -07:00
Owen Schwartz ec0b6b64fe New translations en-us.json (Bulgarian) 2025-08-20 23:16:40 -07:00
Owen c53eac76f8 Bug fixes around hybrid 2025-08-20 18:50:39 -07:00
Owen 49cb2ae260 Fixes for siteResources with clients 2025-08-20 18:49:58 -07:00
Owen 77796e8a75 Adjust again for uncertian config 2025-08-20 17:48:55 -07:00
Owen 49f0f6ec7d Installer working with hybrid 2025-08-20 17:00:52 -07:00
Owen Schwartz 2c273a85d8 New translations en-us.json (Bulgarian) 2025-08-20 14:56:23 -07:00
Owen 8273554a1c Hybrid install mode done? 2025-08-20 12:40:21 -07:00
Owen ad8ab63fd5 Reorging functions 2025-08-20 11:20:46 -07:00
Owen 7de0761329 Rename function 2025-08-20 11:20:46 -07:00
Owen 907dab7d05 Move docker podman question and add hybird question
Allow empty config

Continue to adjust config for hybrid
2025-08-20 11:20:34 -07:00
Owen 2907f22200 Fix server component issue 2025-08-19 22:20:11 -07:00
Owen 7bbe1b2dbe Align correctly 2025-08-19 22:18:42 -07:00
Owen Schwartz 099513072c Merge pull request #1306 from fosrl/crowdin_dev
New Crowdin updates
2025-08-19 22:13:21 -07:00
Owen 7de8bb00e7 Use the sites if they are offline for now 2025-08-19 22:07:52 -07:00
dependabot[bot] 12d44696e8 Bump the dev-minor-updates group with 3 updates
Bumps the dev-minor-updates group with 3 updates: [@dotenvx/dotenvx](https://github.com/dotenvx/dotenvx), [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) and [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint).


Updates `@dotenvx/dotenvx` from 1.48.4 to 1.49.0
- [Release notes](https://github.com/dotenvx/dotenvx/releases)
- [Changelog](https://github.com/dotenvx/dotenvx/blob/main/CHANGELOG.md)
- [Commits](https://github.com/dotenvx/dotenvx/compare/v1.48.4...v1.49.0)

Updates `@types/node` from 24.2.1 to 24.3.0
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Updates `typescript-eslint` from 8.39.1 to 8.40.0
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.40.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: "@dotenvx/dotenvx"
  dependency-version: 1.49.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-minor-updates
- dependency-name: "@types/node"
  dependency-version: 24.3.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-minor-updates
- dependency-name: typescript-eslint
  dependency-version: 8.40.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-minor-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-20 04:47:04 +00:00
Owen 25cef26251 Fix ws reconnect and change create site 2025-08-19 21:29:56 -07:00
Owen Schwartz dceb398695 New translations en-us.json (Chinese Simplified) 2025-08-19 12:13:19 -07:00
Owen Schwartz f60599abd3 New translations en-us.json (Turkish) 2025-08-19 12:13:18 -07:00
Owen Schwartz 44f8098e4a New translations en-us.json (Russian) 2025-08-19 12:13:16 -07:00
Owen Schwartz 747979f939 New translations en-us.json (Portuguese) 2025-08-19 12:13:15 -07:00
Owen Schwartz b3083ae779 New translations en-us.json (Polish) 2025-08-19 12:13:14 -07:00
Owen Schwartz 67580a8b69 New translations en-us.json (Norwegian Bokmal) 2025-08-19 12:13:11 -07:00
Owen Schwartz 291c7aaf0b New translations en-us.json (Dutch) 2025-08-19 12:13:10 -07:00
Owen Schwartz 1a098eecf6 New translations en-us.json (Korean) 2025-08-19 12:13:08 -07:00
Owen Schwartz 0a05bdba1d New translations en-us.json (Italian) 2025-08-19 12:13:07 -07:00
Owen Schwartz 37bfc07ffb New translations en-us.json (German) 2025-08-19 12:13:06 -07:00
Owen Schwartz eae3ab2dc1 New translations en-us.json (Czech) 2025-08-19 12:13:04 -07:00
Owen Schwartz 1665bf6515 New translations en-us.json (Bulgarian) 2025-08-19 12:13:03 -07:00
Owen Schwartz 0383ffb7f3 New translations en-us.json (Spanish) 2025-08-19 12:13:02 -07:00
Owen Schwartz a0d6646e49 New translations en-us.json (French) 2025-08-19 12:13:01 -07:00
Owen 254b3a0fc8 Also filer out offline sites? 2025-08-19 11:26:37 -07:00
Owen 21743e5a23 Clarify site address 2025-08-19 11:26:37 -07:00
Owen Schwartz 0550924e08 Merge pull request #1278 from fosrl/dependabot/npm_and_yarn/express-rate-limit-8.0.1
Bump express-rate-limit from 7.5.1 to 8.0.1
2025-08-18 22:18:05 -07:00
Owen Schwartz 7867302be5 Merge pull request #1297 from fosrl/dependabot/npm_and_yarn/dev-patch-updates-1706bce14d
Bump the dev-patch-updates group with 2 updates
2025-08-18 22:17:20 -07:00
Owen Schwartz 14815b388d Merge pull request #1298 from fosrl/dependabot/npm_and_yarn/prod-patch-updates-c7b744908a
Bump the prod-patch-updates group across 1 directory with 13 updates
2025-08-18 22:17:08 -07:00
Owen Schwartz 92cc82220e Merge pull request #1299 from fosrl/dependabot/github_actions/actions/checkout-5
Bump actions/checkout from 4 to 5
2025-08-18 22:16:16 -07:00
Owen Schwartz da1fae6016 Merge pull request #1304 from Pallavikumarimdb/Fix/Manage-resources-cardheader-responsive
Fix: responsive layout for CardHeader (small/medium/large screens)  inside manage resources page.
2025-08-18 22:09:12 -07:00
miloschwartz 34002470a5 add migration to scirpts 2025-08-18 16:27:51 -07:00
miloschwartz 49f84bccad migrations 2025-08-18 15:43:48 -07:00
Owen 4bcb4a1590 Merge branch 'hybrid' into dev 2025-08-18 15:29:23 -07:00
miloschwartz 378de19f41 add pg 1.9.0 migration 2025-08-18 15:29:04 -07:00
Owen ffe2512734 Update 2025-08-18 15:27:59 -07:00
Pallavi b4be620a5b Fix: responsive layout for CardHeader (small/medium/large screens) 2025-08-19 03:53:49 +05:30
miloschwartz ac8b546393 add sqlite 1.9.0 migration 2025-08-18 14:29:06 -07:00
Owen 9bdf31ee97 Add csrf to auth 2025-08-18 12:22:45 -07:00
Owen c29cd05db8 Update to pull defaults from var 2025-08-18 12:22:45 -07:00
miloschwartz cd34820138 prompt for convert node in installer 2025-08-18 12:06:59 -07:00
miloschwartz d207318494 remove org from get client route 2025-08-18 12:06:01 -07:00
Owen 117062f1d1 One start command 2025-08-17 22:18:25 -07:00
Owen 9d561ba94d Remove bad import 2025-08-17 22:01:30 -07:00
Owen 97fcaed9b4 Optionally use file mode 2025-08-17 21:58:27 -07:00
Owen 5e53ea3607 Merge branch 'hybrid' of github.com:fosrl/pangolin into hybrid 2025-08-17 21:47:13 -07:00
Owen 7dc74cb61b Fix import for traefikConfig 2025-08-17 21:45:17 -07:00
Owen fbefcfedb9 Also allow local traefikConfig 2025-08-17 21:44:28 -07:00
miloschwartz 36c0d9aba2 add hybrid splash 2025-08-17 21:29:21 -07:00
Owen 8c8a981452 Make more efficient the cert get 2025-08-17 20:18:10 -07:00
dependabot[bot] 7dd586e31d Bump actions/checkout from 4 to 5
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-18 02:32:20 +00:00
dependabot[bot] 366a31b41b Bump the prod-patch-updates group across 1 directory with 13 updates
Bumps the prod-patch-updates group with 13 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [@radix-ui/react-checkbox](https://github.com/radix-ui/primitives) | `1.3.2` | `1.3.3` |
| [@radix-ui/react-collapsible](https://github.com/radix-ui/primitives) | `1.1.11` | `1.1.12` |
| [@radix-ui/react-dialog](https://github.com/radix-ui/primitives) | `1.1.14` | `1.1.15` |
| [@radix-ui/react-dropdown-menu](https://github.com/radix-ui/primitives) | `2.1.15` | `2.1.16` |
| [@radix-ui/react-popover](https://github.com/radix-ui/primitives) | `1.1.14` | `1.1.15` |
| [@radix-ui/react-radio-group](https://github.com/radix-ui/primitives) | `1.3.7` | `1.3.8` |
| [@radix-ui/react-scroll-area](https://github.com/radix-ui/primitives) | `1.2.9` | `1.2.10` |
| [@radix-ui/react-select](https://github.com/radix-ui/primitives) | `2.2.5` | `2.2.6` |
| [@radix-ui/react-switch](https://github.com/radix-ui/primitives) | `1.2.5` | `1.2.6` |
| [@radix-ui/react-tabs](https://github.com/radix-ui/primitives) | `1.1.12` | `1.1.13` |
| [@radix-ui/react-toast](https://github.com/radix-ui/primitives) | `1.2.14` | `1.2.15` |
| [@radix-ui/react-tooltip](https://github.com/radix-ui/primitives) | `1.2.7` | `1.2.8` |
| [tw-animate-css](https://github.com/Wombosvideo/tw-animate-css) | `1.3.6` | `1.3.7` |



Updates `@radix-ui/react-checkbox` from 1.3.2 to 1.3.3
- [Changelog](https://github.com/radix-ui/primitives/blob/main/release-process.md)
- [Commits](https://github.com/radix-ui/primitives/commits)

Updates `@radix-ui/react-collapsible` from 1.1.11 to 1.1.12
- [Changelog](https://github.com/radix-ui/primitives/blob/main/release-process.md)
- [Commits](https://github.com/radix-ui/primitives/commits)

Updates `@radix-ui/react-dialog` from 1.1.14 to 1.1.15
- [Changelog](https://github.com/radix-ui/primitives/blob/main/release-process.md)
- [Commits](https://github.com/radix-ui/primitives/commits)

Updates `@radix-ui/react-dropdown-menu` from 2.1.15 to 2.1.16
- [Changelog](https://github.com/radix-ui/primitives/blob/main/release-process.md)
- [Commits](https://github.com/radix-ui/primitives/commits)

Updates `@radix-ui/react-popover` from 1.1.14 to 1.1.15
- [Changelog](https://github.com/radix-ui/primitives/blob/main/release-process.md)
- [Commits](https://github.com/radix-ui/primitives/commits)

Updates `@radix-ui/react-radio-group` from 1.3.7 to 1.3.8
- [Changelog](https://github.com/radix-ui/primitives/blob/main/release-process.md)
- [Commits](https://github.com/radix-ui/primitives/commits)

Updates `@radix-ui/react-scroll-area` from 1.2.9 to 1.2.10
- [Changelog](https://github.com/radix-ui/primitives/blob/main/release-process.md)
- [Commits](https://github.com/radix-ui/primitives/commits)

Updates `@radix-ui/react-select` from 2.2.5 to 2.2.6
- [Changelog](https://github.com/radix-ui/primitives/blob/main/release-process.md)
- [Commits](https://github.com/radix-ui/primitives/commits)

Updates `@radix-ui/react-switch` from 1.2.5 to 1.2.6
- [Changelog](https://github.com/radix-ui/primitives/blob/main/release-process.md)
- [Commits](https://github.com/radix-ui/primitives/commits)

Updates `@radix-ui/react-tabs` from 1.1.12 to 1.1.13
- [Changelog](https://github.com/radix-ui/primitives/blob/main/release-process.md)
- [Commits](https://github.com/radix-ui/primitives/commits)

Updates `@radix-ui/react-toast` from 1.2.14 to 1.2.15
- [Changelog](https://github.com/radix-ui/primitives/blob/main/release-process.md)
- [Commits](https://github.com/radix-ui/primitives/commits)

Updates `@radix-ui/react-tooltip` from 1.2.7 to 1.2.8
- [Changelog](https://github.com/radix-ui/primitives/blob/main/release-process.md)
- [Commits](https://github.com/radix-ui/primitives/commits)

Updates `tw-animate-css` from 1.3.6 to 1.3.7
- [Release notes](https://github.com/Wombosvideo/tw-animate-css/releases)
- [Commits](https://github.com/Wombosvideo/tw-animate-css/compare/v1.3.6...v1.3.7)

---
updated-dependencies:
- dependency-name: "@radix-ui/react-checkbox"
  dependency-version: 1.3.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: "@radix-ui/react-collapsible"
  dependency-version: 1.1.12
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: "@radix-ui/react-dialog"
  dependency-version: 1.1.15
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: "@radix-ui/react-dropdown-menu"
  dependency-version: 2.1.16
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: "@radix-ui/react-popover"
  dependency-version: 1.1.15
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: "@radix-ui/react-radio-group"
  dependency-version: 1.3.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: "@radix-ui/react-scroll-area"
  dependency-version: 1.2.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: "@radix-ui/react-select"
  dependency-version: 2.2.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: "@radix-ui/react-switch"
  dependency-version: 1.2.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: "@radix-ui/react-tabs"
  dependency-version: 1.1.13
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: "@radix-ui/react-toast"
  dependency-version: 1.2.15
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: "@radix-ui/react-tooltip"
  dependency-version: 1.2.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: tw-animate-css
  dependency-version: 1.3.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-18 02:22:55 +00:00
dependabot[bot] f09557d73c Bump the dev-patch-updates group with 2 updates
Bumps the dev-patch-updates group with 2 updates: [@tailwindcss/postcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-postcss) and [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss).


Updates `@tailwindcss/postcss` from 4.1.11 to 4.1.12
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.1.12/packages/@tailwindcss-postcss)

Updates `tailwindcss` from 4.1.11 to 4.1.12
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.1.12/packages/tailwindcss)

---
updated-dependencies:
- dependency-name: "@tailwindcss/postcss"
  dependency-version: 4.1.12
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: tailwindcss
  dependency-version: 4.1.12
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-18 02:18:49 +00:00
Owen 33a2ac402c Fix " 2025-08-17 18:36:23 -07:00
Owen 632333c49f Fix build args again 2025-08-17 18:31:08 -07:00
Owen c8bea4d7de Finish adding arg 2025-08-17 18:20:53 -07:00
Owen c1d75d32c2 Remove old docker files 2025-08-17 18:19:33 -07:00
Owen b805daec51 Move to build arg 2025-08-17 18:18:26 -07:00
Owen af2088df4e Control which types of sites work and tell user 2025-08-17 18:01:36 -07:00
Owen 3b8d1f40a7 Include get hostname, filter sites fix gerbil conf 2025-08-17 11:23:43 -07:00
Owen 8355d3664e Retry the token request 2025-08-16 17:53:33 -07:00
Owen 83a696f743 Make traefik config wor 2025-08-16 17:29:27 -07:00
Owen 7ca507b1ce Fixing traefik problems 2025-08-16 17:16:19 -07:00
Owen 609435328e Smoothing over initial connection issues 2025-08-16 16:42:34 -07:00
Owen d771317e3f Fix traefik config 2025-08-16 14:57:19 -07:00
Owen d548563e65 Export the right thing 2025-08-16 14:54:16 -07:00
Owen f07cd8aee3 Fix traefik config merge 2025-08-16 12:07:15 -07:00
miloschwartz 48963f24df add oss check 2025-08-16 12:06:42 -07:00
Owen 7bf98c0c40 Merge branch 'dev' into hybrid 2025-08-16 12:04:16 -07:00
Owen e73383cc79 Add auth to gerbil calls 2025-08-15 16:53:30 -07:00
miloschwartz 79ce93d578 Merge branch 'site-targets-auto-login' into dev 2025-08-15 16:42:09 -07:00
miloschwartz 200a7fcd40 fix sidebar spacing 2025-08-15 16:00:58 -07:00
Owen e043d0e654 Use new function 2025-08-15 15:59:38 -07:00
Owen 21ce678e5b Move exit node function 2025-08-15 15:52:09 -07:00
Owen 5c94887949 Use new exit node functions 2025-08-15 15:45:45 -07:00
Owen 69a9bcb3da Add exit node helper functions 2025-08-15 15:34:31 -07:00
Owen 2fea091e1f Move newt version 2025-08-15 12:24:54 -07:00
Owen Schwartz 24314a103f Merge pull request #1284 from Pallavikumarimdb/Fix/missing-hostmeta-export-PG
add missing hostmeta export for PG schema
2025-08-15 10:55:22 -07:00
Pallavi b56db41d0b add missing hostmeta export for PG schema 2025-08-15 21:23:07 +05:30
Owen 825bff5d60 Badger & traefik working now? 2025-08-14 21:48:14 -07:00
Owen f9184cf489 Handle badger config correctly 2025-08-14 20:30:07 -07:00
miloschwartz 5c04b1e14a add site targets, client resources, and auto login 2025-08-14 18:24:21 -07:00
Owen 2c96eb7851 Adding and removing peers working; better axios errors 2025-08-14 17:57:50 -07:00
miloschwartz 67ba225003 add statistics 2025-08-14 17:06:07 -07:00
Owen 04ecf41c5a Move exit node comms to new file 2025-08-14 15:39:05 -07:00
Owen 6600de7320 Traefik config & gerbil config working? 2025-08-14 14:47:07 -07:00
Owen f7b82f0a7a Work on pulling in remote traefik 2025-08-14 12:35:33 -07:00
Owen 65bdb232f4 Use right logging 2025-08-14 12:01:07 -07:00
Owen 200e3af384 Websocket connects 2025-08-14 11:58:08 -07:00
Owen aabfa91f80 Fix ping new integer 2025-08-14 11:11:01 -07:00
Jack Rosenberg e5468a7391 fix: change default integration_api to 3004 2025-08-14 19:53:25 +02:00
Owen d5a11edd0c Remove orgId 2025-08-14 10:38:22 -07:00
Owen fcc86b07ba Break out hole punch 2025-08-13 22:05:26 -07:00
miloschwartz 74d2527af5 make email lower case in pangctl reset password closes #1210 2025-08-13 22:00:20 -07:00
Owen 50cf284273 Break out bandwidth 2025-08-13 21:45:44 -07:00
Owen aaddde0a9b Add export 2025-08-13 21:41:33 -07:00
Owen ac87345b7a Seperate get relays 2025-08-13 21:35:06 -07:00
Owen 23079d9ac0 Fix exit node ping message 2025-08-13 20:48:54 -07:00
Owen b573d63648 Add cols to exit node 2025-08-13 20:41:29 -07:00
Owen 34d705a54e Rename olm offline 2025-08-13 20:31:48 -07:00
Owen eeb1d4954d Use an epoch number for the clients online to fix query 2025-08-13 20:27:57 -07:00
Owen b638adedff Seperate get gerbil config 2025-08-13 20:27:48 -07:00
Owen 285e24cdc7 Use an epoch number for the clients online to fix query 2025-08-13 20:26:50 -07:00
dependabot[bot] 396e643b06 Bump express-rate-limit from 7.5.1 to 8.0.1
Bumps [express-rate-limit](https://github.com/express-rate-limit/express-rate-limit) from 7.5.1 to 8.0.1.
- [Release notes](https://github.com/express-rate-limit/express-rate-limit/releases)
- [Commits](https://github.com/express-rate-limit/express-rate-limit/compare/v7.5.1...v8.0.1)

---
updated-dependencies:
- dependency-name: express-rate-limit
  dependency-version: 8.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-14 02:08:28 +00:00
Owen dc50190dc3 Handle token 2025-08-13 17:30:59 -07:00
Owen 2c8bf4f18c Handle oss tls 2025-08-13 16:23:24 -07:00
Owen 1f6379a7e6 Break out traefik config 2025-08-13 16:15:23 -07:00
Owen ddd8eb1da0 Change sni proxy url 2025-08-13 16:02:03 -07:00
Owen 4c463de45f Version does not need to be notNull 2025-08-13 14:47:03 -07:00
Owen 1f4a7a7f6f Add olm version 2025-08-13 12:35:09 -07:00
Owen e7df29104e Fix backwards compat path 2025-08-13 12:28:45 -07:00
Owen 9987b35b60 Update package lock again 2025-08-13 12:26:38 -07:00
Owen 16e876ab68 Clean up checkbox 2025-08-13 12:13:47 -07:00
Owen 50fc2fc74e Add newt install command 2025-08-13 11:30:21 -07:00
Owen c244dc9c0c Add accept clients to install 2025-08-13 11:15:14 -07:00
Owen 0f50981573 Update lock 2025-08-13 11:15:06 -07:00
Owen 0c1cb20936 Merge branch 'main' into dev 2025-08-13 10:58:04 -07:00
Owen Schwartz 192617a884 Merge pull request #1268 from fosrl/crowdin_dev
New Crowdin updates
2025-08-13 10:18:21 -07:00
Owen Schwartz 297991ef5f New translations en-us.json (Chinese Simplified) 2025-08-12 22:16:21 -07:00
Owen Schwartz 75f97c4a31 New translations en-us.json (Turkish) 2025-08-12 22:16:20 -07:00
Owen Schwartz 40f520086c New translations en-us.json (Russian) 2025-08-12 22:16:18 -07:00
Owen Schwartz c8dda4f90d New translations en-us.json (Portuguese) 2025-08-12 22:16:17 -07:00
Owen Schwartz 5f09f97032 New translations en-us.json (Polish) 2025-08-12 22:16:15 -07:00
Owen Schwartz 168056d595 New translations en-us.json (Dutch) 2025-08-12 22:16:14 -07:00
Owen Schwartz c70eaa0096 New translations en-us.json (Korean) 2025-08-12 22:16:13 -07:00
Owen Schwartz 5f36b13408 New translations en-us.json (Italian) 2025-08-12 22:16:11 -07:00
Owen Schwartz 9dc73efa3a New translations en-us.json (German) 2025-08-12 22:16:10 -07:00
Owen Schwartz e9c2868998 New translations en-us.json (Czech) 2025-08-12 22:16:09 -07:00
Owen Schwartz 0a13b04c55 New translations en-us.json (Bulgarian) 2025-08-12 22:16:07 -07:00
Owen Schwartz cf12d3ee56 New translations en-us.json (Spanish) 2025-08-12 22:16:06 -07:00
Owen Schwartz cea7190453 New translations en-us.json (French) 2025-08-12 22:16:04 -07:00
Owen Schwartz c6d78680fb New translations en-us.json (Norwegian Bokmal) 2025-08-12 22:16:03 -07:00
Owen Schwartz 0bf302e013 Merge pull request #1129 from adrianeastles/feature/form-signup-improvements
Form Signup Improvements - Password Requirements & Pre-Filled Email on signup form Invite
2025-08-12 21:52:44 -07:00
Owen 1351fb6689 Merge branch 'feature/form-signup-improvements' of github.com:adrianeastles/pangolin into adrianeastles-feature/form-signup-improvements 2025-08-12 21:40:55 -07:00
Owen af638d666c Dont look for port if not root; causes permission 2025-08-12 21:34:24 -07:00
Owen Schwartz e4fe601d9d Merge pull request #1208 from adrianeastles/feature/setup-token-security
Add setup token security for initial server setup
2025-08-12 21:31:58 -07:00
Owen 4f3cd71e1e Merge branch 'feature/setup-token-security' of github.com:adrianeastles/pangolin into adrianeastles-feature/setup-token-security 2025-08-12 21:12:55 -07:00
Owen Schwartz 9c0295db9f Merge pull request #1246 from Lokowitz/update-express
Update express to version 5
2025-08-12 20:38:02 -07:00
Owen Schwartz 3fc2d1df80 Merge pull request #1252 from fosrl/dependabot/npm_and_yarn/prod-minor-updates-ce9f23b7ef
Bump the prod-minor-updates group with 2 updates
2025-08-12 20:37:13 -07:00
Owen Schwartz 4a6747dcc7 Merge pull request #1266 from fosrl/dependabot/npm_and_yarn/dev-patch-updates-eb33d068de
Bump the dev-patch-updates group across 1 directory with 6 updates
2025-08-12 20:36:51 -07:00
Owen Schwartz 54b3c92953 Merge pull request #1262 from jackrosenberg/patch-1
fix: fixed api error message in createSite.ts
2025-08-12 20:36:26 -07:00
dependabot[bot] a4d460e850 Bump the dev-patch-updates group across 1 directory with 6 updates
Bumps the dev-patch-updates group with 6 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `24.2.0` | `24.2.1` |
| [@types/pg](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/pg) | `8.15.4` | `8.15.5` |
| [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) | `19.1.9` | `19.1.10` |
| [esbuild](https://github.com/evanw/esbuild) | `0.25.6` | `0.25.9` |
| [tsx](https://github.com/privatenumber/tsx) | `4.20.3` | `4.20.4` |
| [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) | `8.39.0` | `8.39.1` |



Updates `@types/node` from 24.2.0 to 24.2.1
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Updates `@types/pg` from 8.15.4 to 8.15.5
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/pg)

Updates `@types/react` from 19.1.9 to 19.1.10
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

Updates `esbuild` from 0.25.6 to 0.25.9
- [Release notes](https://github.com/evanw/esbuild/releases)
- [Changelog](https://github.com/evanw/esbuild/blob/main/CHANGELOG.md)
- [Commits](https://github.com/evanw/esbuild/compare/v0.25.6...v0.25.9)

Updates `tsx` from 4.20.3 to 4.20.4
- [Release notes](https://github.com/privatenumber/tsx/releases)
- [Changelog](https://github.com/privatenumber/tsx/blob/master/release.config.cjs)
- [Commits](https://github.com/privatenumber/tsx/compare/v4.20.3...v4.20.4)

Updates `typescript-eslint` from 8.39.0 to 8.39.1
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.39.1/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 24.2.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@types/pg"
  dependency-version: 8.15.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@types/react"
  dependency-version: 19.1.10
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: esbuild
  dependency-version: 0.25.9
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: tsx
  dependency-version: 4.20.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: typescript-eslint
  dependency-version: 8.39.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-13 02:39:05 +00:00
Owen 3d8869066a Adjust pulling in config 2025-08-12 16:47:59 -07:00
Owen 880a123149 Import tcm 2025-08-12 16:31:53 -07:00
Owen 39e35bc1d6 Add traefik config management 2025-08-12 16:27:41 -07:00
Owen f219f1e36b Move remote proxy 2025-08-12 16:27:34 -07:00
Owen 25ed3d65f8 Make the proxy more general 2025-08-12 15:58:20 -07:00
Owen 30dbabd73d Add internal proxy for gerbil endpoints 2025-08-12 15:27:03 -07:00
Owen ea2e5bf486 Merge branch 'dev' into hybrid 2025-08-12 15:02:43 -07:00
Owen ae52fcc757 Merge branch 'dev' into clients-multi-pop 2025-08-12 15:01:00 -07:00
Owen b6c2f123e8 Add basic ws client 2025-08-12 14:30:23 -07:00
Owen 15f900317a Basic client 2025-08-12 13:53:57 -07:00
Owen 22545cac8b Basic verify session breakout 2025-08-12 13:40:59 -07:00
jack rosenberg 03c8d82471 fix: fixed api error message in createSite.ts 2025-08-12 17:34:40 +02:00
dependabot[bot] 14d7a138a5 Bump the prod-minor-updates group with 2 updates
Bumps the prod-minor-updates group with 2 updates: [eslint](https://github.com/eslint/eslint) and [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react).


Updates `eslint` from 9.32.0 to 9.33.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.32.0...v9.33.0)

Updates `lucide-react` from 0.536.0 to 0.539.0
- [Release notes](https://github.com/lucide-icons/lucide/releases)
- [Commits](https://github.com/lucide-icons/lucide/commits/0.539.0/packages/lucide-react)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 9.33.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: lucide-react
  dependency-version: 0.539.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-11 02:26:46 +00:00
Marvin a829eb949b modified: package-lock.json
modified:   package.json
	modified:   server/nextServer.ts
2025-08-10 19:02:50 +00:00
Owen Schwartz fd605d9c81 Merge pull request #1244 from fosrl/crowdin_dev
New Crowdin updates
2025-08-10 10:17:31 -07:00
Owen 55b4a9eddb Merge branch 'main' into dev 2025-08-10 10:16:47 -07:00
Owen Schwartz 9ccf77b99c Merge pull request #1113 from fosrl/copilot/fix-1112
Fix ESLint issues: prefer-const warnings and missing semicolons
2025-08-10 10:15:58 -07:00
Owen ea27075bab Lint fix 2025-08-10 10:14:45 -07:00
Owen c3723d0fce Add semi 2025-08-10 10:14:04 -07:00
Owen 0edb3cd316 Merge branch 'main' of github.com:fosrl/pangolin into copilot/fix-1112 2025-08-10 10:11:19 -07:00
Owen e9e6b0bc4f Merge branch 'main' into copilot/fix-1112 2025-08-10 10:10:10 -07:00
Owen 4701da201d Fix a few consts to lets 2025-08-10 10:09:52 -07:00
Owen d6d2e052dd Fix missing bracket 2025-08-10 10:04:41 -07:00
Owen Schwartz d3d1dcfe1d New translations en-us.json (Norwegian Bokmal) 2025-08-09 12:24:58 -07:00
Owen Schwartz 918ebf5e65 Merge pull request #1228 from fosrl/dependabot/npm_and_yarn/prod-patch-updates-7f7b11108e
Bump the prod-patch-updates group across 1 directory with 7 updates
2025-08-09 10:13:26 -07:00
Owen Schwartz 67184b88a8 Merge pull request #1134 from Lokowitz/update-node-version
update node to LTS 22
2025-08-09 10:12:57 -07:00
dependabot[bot] fb0f4c3939 Bump the prod-patch-updates group across 1 directory with 7 updates
Bumps the prod-patch-updates group with 7 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [@react-email/tailwind](https://github.com/resend/react-email/tree/HEAD/packages/tailwind) | `1.2.1` | `1.2.2` |
| [drizzle-orm](https://github.com/drizzle-team/drizzle-orm) | `0.44.2` | `0.44.4` |
| [react](https://github.com/facebook/react/tree/HEAD/packages/react) | `19.1.0` | `19.1.1` |
| [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) | `19.1.8` | `19.1.9` |
| [react-dom](https://github.com/facebook/react/tree/HEAD/packages/react-dom) | `19.1.0` | `19.1.1` |
| [@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom) | `19.1.6` | `19.1.7` |
| [tw-animate-css](https://github.com/Wombosvideo/tw-animate-css) | `1.3.5` | `1.3.6` |



Updates `@react-email/tailwind` from 1.2.1 to 1.2.2
- [Release notes](https://github.com/resend/react-email/releases)
- [Changelog](https://github.com/resend/react-email/blob/@react-email/tailwind@1.2.2/packages/tailwind/CHANGELOG.md)
- [Commits](https://github.com/resend/react-email/commits/@react-email/tailwind@1.2.2/packages/tailwind)

Updates `drizzle-orm` from 0.44.2 to 0.44.4
- [Release notes](https://github.com/drizzle-team/drizzle-orm/releases)
- [Commits](https://github.com/drizzle-team/drizzle-orm/compare/0.44.2...0.44.4)

Updates `react` from 19.1.0 to 19.1.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.1.1/packages/react)

Updates `@types/react` from 19.1.8 to 19.1.9
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

Updates `react-dom` from 19.1.0 to 19.1.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.1.1/packages/react-dom)

Updates `@types/react-dom` from 19.1.6 to 19.1.7
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-dom)

Updates `tw-animate-css` from 1.3.5 to 1.3.6
- [Release notes](https://github.com/Wombosvideo/tw-animate-css/releases)
- [Commits](https://github.com/Wombosvideo/tw-animate-css/compare/v1.3.5...v1.3.6)

---
updated-dependencies:
- dependency-name: "@react-email/tailwind"
  dependency-version: 1.2.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: drizzle-orm
  dependency-version: 0.44.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: react
  dependency-version: 19.1.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: "@types/react"
  dependency-version: 19.1.9
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: react-dom
  dependency-version: 19.1.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: "@types/react-dom"
  dependency-version: 19.1.7
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: tw-animate-css
  dependency-version: 1.3.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-09 17:09:19 +00:00
Owen Schwartz aae5343543 Merge pull request #1192 from fosrl/dependabot/npm_and_yarn/dev-minor-updates-157f1fe21d
Bump the dev-minor-updates group across 1 directory with 5 updates
2025-08-09 10:06:16 -07:00
Owen Schwartz 51e9762ca8 Merge pull request #1229 from fosrl/dependabot/npm_and_yarn/prod-minor-updates-12f913bac4
Bump the prod-minor-updates group across 1 directory with 9 updates
2025-08-09 10:05:47 -07:00
Owen Schwartz 330dafc652 Merge pull request #1242 from EliasTors/translation-nb-NO
Translation nb no
2025-08-09 10:02:47 -07:00
Owen Schwartz 7ddf9fa54e Merge pull request #1234 from fosrl/crowdin_dev
New Crowdin updates
2025-08-09 10:02:21 -07:00
Owen Schwartz f2ca09eedd Merge pull request #1237 from adrianeastles/feature/passkey-pangctl-support
Pangctl command to reset a user’s passkeys (WebAuthn credentials)
2025-08-09 10:01:40 -07:00
Elias Torstensen f0e2c8416d Merge branch 'dev' into translation-nb-NO 2025-08-08 21:41:43 +02:00
EliasT05 338b7a8c13 Added nb-NO to list of locals 2025-08-08 21:33:11 +02:00
EliasT05 b4284f82f3 Added nb-NO translation 2025-08-08 21:23:09 +02:00
Owen Schwartz 0ce430cab5 New translations en-us.json (Bulgarian) 2025-08-07 15:04:32 -07:00
Owen Schwartz 95c0f6c093 New translations en-us.json (Russian) 2025-08-07 15:04:30 -07:00
Owen Schwartz 387dbc360e New translations en-us.json (Chinese Simplified) 2025-08-07 15:04:29 -07:00
Owen Schwartz a88be89c2f New translations en-us.json (Turkish) 2025-08-07 15:04:24 -07:00
Owen Schwartz 8bc353442f New translations en-us.json (Portuguese) 2025-08-07 15:04:22 -07:00
Owen Schwartz b3502bd627 New translations en-us.json (Polish) 2025-08-07 15:04:21 -07:00
Owen Schwartz 56da7c242d New translations en-us.json (Dutch) 2025-08-07 15:04:20 -07:00
Owen Schwartz fa8f49e87d New translations en-us.json (Korean) 2025-08-07 15:04:18 -07:00
Owen Schwartz 6e08a70afc New translations en-us.json (Italian) 2025-08-07 15:04:17 -07:00
Owen Schwartz bd4be2b05c New translations en-us.json (German) 2025-08-07 15:04:16 -07:00
Owen Schwartz 6b6ff0a95e New translations en-us.json (Czech) 2025-08-07 15:04:15 -07:00
Owen Schwartz 4755cae5cb New translations en-us.json (Spanish) 2025-08-07 15:04:14 -07:00
Owen Schwartz b2384ccc06 New translations en-us.json (French) 2025-08-07 15:04:12 -07:00
Owen e6589308dd Update readme 2025-08-07 14:53:46 -07:00
dependabot[bot] 879b25be9f Bump the prod-minor-updates group across 1 directory with 9 updates
Bumps the prod-minor-updates group with 9 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [@react-email/components](https://github.com/resend/react-email/tree/HEAD/packages/components) | `0.3.1` | `0.5.0` |
| [@react-email/render](https://github.com/resend/react-email/tree/HEAD/packages/render) | `1.1.3` | `1.2.0` |
| [axios](https://github.com/axios/axios) | `1.10.0` | `1.11.0` |
| [eslint](https://github.com/eslint/eslint) | `9.31.0` | `9.32.0` |
| [eslint-config-next](https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next) | `15.3.5` | `15.4.6` |
| [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) | `0.525.0` | `0.536.0` |
| [next](https://github.com/vercel/next.js) | `15.3.5` | `15.4.6` |
| [npm](https://github.com/npm/cli) | `11.4.2` | `11.5.2` |
| [react-hook-form](https://github.com/react-hook-form/react-hook-form) | `7.60.0` | `7.62.0` |



Updates `@react-email/components` from 0.3.1 to 0.5.0
- [Release notes](https://github.com/resend/react-email/releases)
- [Changelog](https://github.com/resend/react-email/blob/@react-email/components@0.5.0/packages/components/CHANGELOG.md)
- [Commits](https://github.com/resend/react-email/commits/@react-email/components@0.5.0/packages/components)

Updates `@react-email/render` from 1.1.3 to 1.2.0
- [Release notes](https://github.com/resend/react-email/releases)
- [Changelog](https://github.com/resend/react-email/blob/@react-email/render@1.2.0/packages/render/CHANGELOG.md)
- [Commits](https://github.com/resend/react-email/commits/@react-email/render@1.2.0/packages/render)

Updates `axios` from 1.10.0 to 1.11.0
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.10.0...v1.11.0)

Updates `eslint` from 9.31.0 to 9.32.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.31.0...v9.32.0)

Updates `eslint-config-next` from 15.3.5 to 15.4.6
- [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/v15.4.6/packages/eslint-config-next)

Updates `lucide-react` from 0.525.0 to 0.536.0
- [Release notes](https://github.com/lucide-icons/lucide/releases)
- [Commits](https://github.com/lucide-icons/lucide/commits/0.536.0/packages/lucide-react)

Updates `next` from 15.3.5 to 15.4.6
- [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/compare/v15.3.5...v15.4.6)

Updates `npm` from 11.4.2 to 11.5.2
- [Release notes](https://github.com/npm/cli/releases)
- [Changelog](https://github.com/npm/cli/blob/latest/CHANGELOG.md)
- [Commits](https://github.com/npm/cli/compare/v11.4.2...v11.5.2)

Updates `react-hook-form` from 7.60.0 to 7.62.0
- [Release notes](https://github.com/react-hook-form/react-hook-form/releases)
- [Changelog](https://github.com/react-hook-form/react-hook-form/blob/master/CHANGELOG.md)
- [Commits](https://github.com/react-hook-form/react-hook-form/compare/v7.60.0...v7.62.0)

---
updated-dependencies:
- dependency-name: "@react-email/components"
  dependency-version: 0.5.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: "@react-email/render"
  dependency-version: 1.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: axios
  dependency-version: 1.11.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: eslint
  dependency-version: 9.32.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: eslint-config-next
  dependency-version: 15.4.6
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: lucide-react
  dependency-version: 0.536.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: next
  dependency-version: 15.4.6
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: npm
  dependency-version: 11.5.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: react-hook-form
  dependency-version: 7.62.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-07 01:42:42 +00:00
dependabot[bot] d3ad941b30 Bump the dev-minor-updates group across 1 directory with 5 updates
Bumps the dev-minor-updates group with 5 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [@dotenvx/dotenvx](https://github.com/dotenvx/dotenvx) | `1.47.6` | `1.48.4` |
| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `24.0.14` | `24.1.0` |
| [react-email](https://github.com/resend/react-email/tree/HEAD/packages/react-email) | `4.1.0` | `4.2.6` |
| [typescript](https://github.com/microsoft/TypeScript) | `5.8.3` | `5.9.2` |
| [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) | `8.37.0` | `8.38.0` |



Updates `@dotenvx/dotenvx` from 1.47.6 to 1.48.4
- [Release notes](https://github.com/dotenvx/dotenvx/releases)
- [Changelog](https://github.com/dotenvx/dotenvx/blob/main/CHANGELOG.md)
- [Commits](https://github.com/dotenvx/dotenvx/compare/v1.47.6...v1.48.4)

Updates `@types/node` from 24.0.14 to 24.1.0
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Updates `react-email` from 4.1.0 to 4.2.6
- [Release notes](https://github.com/resend/react-email/releases)
- [Changelog](https://github.com/resend/react-email/blob/react-email@4.2.6/packages/react-email/CHANGELOG.md)
- [Commits](https://github.com/resend/react-email/commits/react-email@4.2.6/packages/react-email)

Updates `typescript` from 5.8.3 to 5.9.2
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release-publish.yml)
- [Commits](https://github.com/microsoft/TypeScript/compare/v5.8.3...v5.9.2)

Updates `typescript-eslint` from 8.37.0 to 8.38.0
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.38.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: "@dotenvx/dotenvx"
  dependency-version: 1.48.4
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-minor-updates
- dependency-name: "@types/node"
  dependency-version: 24.1.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-minor-updates
- dependency-name: react-email
  dependency-version: 4.2.6
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-minor-updates
- dependency-name: typescript
  dependency-version: 5.9.2
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-minor-updates
- dependency-name: typescript-eslint
  dependency-version: 8.38.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-minor-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-07 01:40:47 +00:00
Owen Schwartz f077fbc3f5 Merge pull request #1219 from aclfe/port-check80443
Added checks for port 80 and 443
2025-08-06 10:33:24 -07:00
Owen 4679ce968b Merge branch 'Xentrice-IPv6_optional' into dev 2025-08-06 10:22:19 -07:00
Owen 101e462649 Merge branch 'main' into dev 2025-08-06 10:21:54 -07:00
Owen 5d93ab9b9e Merge branch 'IPv6_optional' of github.com:Xentrice/pangolin into Xentrice-IPv6_optional 2025-08-06 10:19:51 -07:00
Owen d557832509 Send this right IP this time 2025-08-05 11:37:45 -07:00
Owen fe5c91db29 Change how you send the desitnations 2025-08-05 11:25:54 -07:00
Adrian Astles b2947193ec Integrate setup token into installer, this will now parse the container logs to extract setup token automatically. Displays token with clear instructions and URL for initial admin setup. 2025-08-05 17:35:22 +08:00
Owen f6440753b6 Only update proxy mapping if there is an existing 2025-08-04 21:34:07 -07:00
Owen 17cf903804 publicKey optional 2025-08-04 21:29:40 -07:00
Owen dcf530d237 Add backward compatability 2025-08-04 20:36:25 -07:00
Owen 6b1808dab1 Handle multiple hp messages 2025-08-04 20:34:27 -07:00
Owen 5889efd74a Send all hp data now 2025-08-04 20:22:13 -07:00
Owen 1a9de1e5c5 Move endpoint to per site 2025-08-04 20:17:35 -07:00
Owen d1404a2b07 Merge branch 'dev' of github.com:fosrl/pangolin into dev 2025-08-04 20:02:08 -07:00
Sebastian Felber 664dbf3f4c make IPv6 optional during install 2025-08-04 15:45:33 +00:00
Owen Schwartz f32a8e26b6 Merge pull request #1209 from fosrl/crowdin_dev
New Crowdin updates
2025-08-03 11:42:10 -07:00
Owen Schwartz b1a92fd4e0 New translations en-us.json (Bulgarian) 2025-08-03 11:40:48 -07:00
Owen Schwartz 1ea9fd2d49 New translations en-us.json (Russian) 2025-08-03 11:40:47 -07:00
Owen Schwartz f31e4e3176 New translations en-us.json (Chinese Simplified) 2025-08-03 11:40:46 -07:00
Owen Schwartz e3287a7e9f New translations en-us.json (Turkish) 2025-08-03 11:40:45 -07:00
Owen Schwartz ec21153d4b New translations en-us.json (Portuguese) 2025-08-03 11:40:44 -07:00
Owen Schwartz 917e7a8c1d New translations en-us.json (Polish) 2025-08-03 11:40:43 -07:00
Owen Schwartz 8e0a8dc272 New translations en-us.json (Dutch) 2025-08-03 11:40:41 -07:00
Owen Schwartz 91bac29ea3 New translations en-us.json (Korean) 2025-08-03 11:40:40 -07:00
Owen Schwartz 3e333769bb New translations en-us.json (Italian) 2025-08-03 11:40:39 -07:00
Owen Schwartz b4bde6660a New translations en-us.json (German) 2025-08-03 11:40:38 -07:00
Owen Schwartz 917f752081 New translations en-us.json (Czech) 2025-08-03 11:40:37 -07:00
Owen Schwartz 915d561286 New translations en-us.json (Spanish) 2025-08-03 11:40:36 -07:00
Owen Schwartz 01ef809fd3 New translations en-us.json (French) 2025-08-03 11:40:35 -07:00
Owen Schwartz 19902092ce Merge pull request #1177 from Error-Gap/portbinding-fixes
Portbinding fixes
2025-08-03 11:37:30 -07:00
Owen Schwartz 39603b6e53 Merge pull request #1205 from Pallavikumarimdb/feature-default-language
System wide default language detection via browser language header
2025-08-03 11:35:41 -07:00
Adrian Astles 9c85a09d3e revert: package-lock.json to original state 2025-08-03 21:20:25 +08:00
Adrian Astles 69baa6785f feat: Add setup token security for initial server setup
- Add setupTokens database table with proper schema
- Implement setup token generation on first server startup
- Add token validation endpoint and modify admin creation
- Update initial setup page to require setup token
- Add migration scripts for both SQLite and PostgreSQL
- Add internationalization support for setup token fields
- Implement proper error handling and logging
- Add CLI command for resetting user security keys

This prevents unauthorized access during initial server setup by requiring
a token that is generated and displayed in the server console.
2025-08-03 21:17:18 +08:00
Adrian Astles bb84d01e14 Reset a user's security keys (passkeys) by deleting all their webauthn credentials.
pangctl reset-user-security-keys --email user@example.com

This command will:
1. Find the user by email address
2. Check if they have any registered security keys
3. Delete all their security keys from the database
4. Provide feedback on the operation
2025-08-03 20:47:27 +08:00
Pallavi 616dae2d8b code format 2025-08-03 12:26:21 +05:30
Pallavi 3fbfe50e09 Default language detection via browser language header 2025-08-03 12:21:41 +05:30
Kairav Mittal c0c8edb9d1 Added checks for port 80 and 443
In my issue #1203, I noticed there was a problem when ports 80 and 443 were already in use. This caused the docker containers to be created but not running
2025-08-03 11:30:33 +05:30
miloschwartz 84268e484d update docs links 2025-08-01 22:34:02 -07:00
Owen Schwartz c473c2fa81 Merge pull request #1200 from Lokowitz/update-versions
Update versions
2025-08-01 21:24:39 -07:00
miloschwartz 7402590f49 remove api-key-org association for root keys 2025-08-01 15:56:03 -07:00
Marvin 529d1c9f66 modified: .github/workflows/cicd.yml 2025-08-01 18:37:08 +00:00
Marvin e85b772ca5 update versions 2025-08-01 18:33:25 +00:00
Owen f75169fc26 Add missing langs 2025-08-01 11:08:30 -07:00
Owen Schwartz 07b86521a5 Merge pull request #1196 from confusedalex/fix-nix
fix: adapt nix run command
2025-08-01 09:34:02 -07:00
confusedalex 961008bbe1 fix: adapt nix run command 2025-08-01 11:31:29 +02:00
Owen 6d359b6bb9 Add createdAt to org insert 2025-07-31 17:53:11 -07:00
Owen ea6f803e78 Add createdAt to org 2025-07-31 17:51:30 -07:00
Owen 0151f8a6a9 Fix bad sourcePort 2025-07-31 15:57:30 -07:00
Owen 39c5101957 Merge branch 'main' into dev 2025-07-31 15:55:54 -07:00
Owen 9b1cd5f79c Ignore the config dir 2025-07-31 15:01:29 -07:00
Owen 36d0b83ed3 Fix errors again 2025-07-31 15:00:17 -07:00
Owen f0138fad4f Improve gerbil logging 2025-07-31 14:25:22 -07:00
Owen 69802e78f8 Org is not optional 2025-07-31 11:06:07 -07:00
Owen 92e69f561f Org is not optional 2025-07-31 11:05:24 -07:00
miloschwartz b351520e92 add clients enabled middleware 2025-07-30 23:18:51 -07:00
T Aviss 481714f095 Fix for issues with binding ports other than 80/443
server/routers/badger/verifySession.ts : verifyResourceSession() updated code behind "cleanHost" var to a regex which strips the trailing :port for any port (rather than a string match for 80/443)
src/app/auth/resource/[resourceId]/page.tsx : ResourceAuthPage() added a secondary match for serverResourceHost and redirectHost that accounts for ports
server/routers/badger/exchangeSession.ts : Updated exchangeSession() to use the same "cleanHost" type var (with port-stripping) as in verifyResourceSession(), replaced references to "host" with "cleanHost"
2025-07-30 22:16:46 -07:00
miloschwartz d38656e026 add clients to int api 2025-07-30 21:31:16 -07:00
Owen 69b28b9b02 Merge branch 'dev' 2025-07-30 15:19:27 -07:00
Owen Schwartz 35a68703c2 Merge pull request #1173 from fosrl/crowdin_dev
New Crowdin updates
2025-07-30 15:19:04 -07:00
Owen Schwartz c49fe04750 New translations en-us.json (Russian) 2025-07-30 15:18:36 -07:00
Owen Schwartz 31feabbec7 New translations en-us.json (Chinese Simplified) 2025-07-30 15:18:35 -07:00
Owen Schwartz bc3cb2c3c9 New translations en-us.json (Turkish) 2025-07-30 15:18:34 -07:00
Owen Schwartz 5ec4481c92 New translations en-us.json (Portuguese) 2025-07-30 15:18:32 -07:00
Owen Schwartz be5cb48dfe New translations en-us.json (Polish) 2025-07-30 15:18:31 -07:00
Owen Schwartz 48ff1ece16 New translations en-us.json (Dutch) 2025-07-30 15:18:30 -07:00
Owen Schwartz ed20ed592f New translations en-us.json (Italian) 2025-07-30 15:18:28 -07:00
Owen Schwartz 4fb3435c29 New translations en-us.json (German) 2025-07-30 15:18:27 -07:00
Owen Schwartz 37eb14a01a New translations en-us.json (Spanish) 2025-07-30 15:18:25 -07:00
Owen Schwartz d403bc86e3 New translations en-us.json (French) 2025-07-30 15:18:24 -07:00
Owen Schwartz 0e2f0f2a4d Merge pull request #1150 from fosrl/crowdin_dev
New Crowdin updates
2025-07-30 15:11:48 -07:00
Owen Schwartz 1a4d34a802 Merge pull request #1172 from fosrl/dev
1.8.0
2025-07-30 15:07:47 -07:00
Owen bb15af9954 Add ports warn at start 2025-07-30 10:23:52 -07:00
Owen 8a250d1011 rm YC 2025-07-30 10:23:44 -07:00
Owen 2f9994f600 Merge branch 'dev' of github.com:fosrl/pangolin into dev 2025-07-30 10:09:34 -07:00
Owen 1cca06a274 Add note about wintun 2025-07-29 23:09:49 -07:00
miloschwartz 8fdb3ea631 hide favicon 2025-07-29 10:46:08 -07:00
Owen 35823d5751 Fix adding sites to client 2025-07-28 22:40:27 -07:00
Owen 66f90a542a Rename to pg 2025-07-28 18:34:23 -07:00
Owen 49981c4bee Add 21820 to docker 2025-07-28 18:34:01 -07:00
Owen d732c1a845 Clean up migrations 2025-07-28 17:32:15 -07:00
Owen 4d7e25f97b Complete migrations 2025-07-28 17:22:53 -07:00
Owen 80656f48e0 Sqlite migration done 2025-07-28 17:18:51 -07:00
Owen ebde149980 Merge branch 'main' into dev 2025-07-28 17:15:05 -07:00
miloschwartz adc0a81592 delete org domains and resources on org delete 2025-07-28 15:34:56 -07:00
Owen Schwartz b596f00ce5 New translations en-us.json (Chinese Simplified) 2025-07-28 14:16:24 -07:00
Owen Schwartz 448442f92b New translations en-us.json (Turkish) 2025-07-28 14:16:23 -07:00
Owen Schwartz 8518201562 New translations en-us.json (Portuguese) 2025-07-28 14:16:21 -07:00
Owen Schwartz 17586c4559 New translations en-us.json (Polish) 2025-07-28 14:16:19 -07:00
Owen Schwartz f8622da7d4 New translations en-us.json (Dutch) 2025-07-28 14:16:18 -07:00
Owen Schwartz b1a27e9060 New translations en-us.json (Korean) 2025-07-28 14:16:17 -07:00
Owen Schwartz 3c6423d444 New translations en-us.json (Italian) 2025-07-28 14:16:15 -07:00
Owen Schwartz 91b03160ea New translations en-us.json (German) 2025-07-28 14:16:14 -07:00
Owen Schwartz 0c1e20ba48 New translations en-us.json (Czech) 2025-07-28 14:16:13 -07:00
Owen Schwartz 1dcac85c0d New translations en-us.json (Spanish) 2025-07-28 14:16:12 -07:00
Owen Schwartz 3fc72dbec2 New translations en-us.json (French) 2025-07-28 14:16:11 -07:00
miloschwartz 494329f568 delete resources on delete org 2025-07-28 12:55:20 -07:00
Owen a1e8211ba7 Dont send enableProxy 2025-07-28 12:53:13 -07:00
miloschwartz 80aa7502af fix resource domain not required 2025-07-28 12:52:44 -07:00
miloschwartz 67bae76048 minor visual tweaks to member landing 2025-07-28 12:21:15 -07:00
Milo Schwartz bda2aa46b6 Merge pull request #1124 from adrianeastles/feature/member-resouce-landing-page
New Member Resource Landing Page
2025-07-28 14:33:09 -04:00
copilot-swe-agent[bot] 27ac204bb6 Fix variables incorrectly changed from let to const - revert to let where variables are reassigned
Co-authored-by: oschwartz10612 <4999704+oschwartz10612@users.noreply.github.com>
2025-07-28 17:43:40 +00:00
copilot-swe-agent[bot] a2526ea244 Revert mappings variable from const to let in getAllRelays.ts
Co-authored-by: oschwartz10612 <4999704+oschwartz10612@users.noreply.github.com>
2025-07-28 17:30:21 +00:00
Owen Schwartz 6d9ba8dd2f Merge pull request #1104 from jackrosenberg/nixos_newt
add nixos option for newt in site creation
2025-07-28 10:19:23 -07:00
Owen 2ca8febff7 We dont need this config 2025-07-27 14:12:01 -07:00
Owen e105a523e4 Add log and fix default 2025-07-27 14:11:36 -07:00
Owen 28f8b05dbc Basic clients working 2025-07-27 10:21:27 -07:00
Owen Schwartz d95286db0e Merge pull request #1139 from SigmaSquadron/push-xlmpuutwtnuy
add shebangs to migration and server scripts
2025-07-27 10:11:17 -07:00
Owen Schwartz 8e45c34e8e Merge pull request #1138 from SigmaSquadron/push-uolqlutswopp
add an environment variable for the smtp_pass config option
2025-07-27 10:09:25 -07:00
Fernando Rodrigues 9e87c42d0c add shebangs to migration and server scripts
In NixOS, we wrap these files in a bash script to allow users to just run them as normal executables, instead of calling them as arguments to Node.JS. In our build scripts, we just add the shebang after the files have been compiled, but adding it upstream will allow all Pangolin users to just run ./server.mjs to start their Pangolin instances.

Signed-off-by: Fernando Rodrigues <alpha@sigmasquadron.net>
2025-07-27 13:10:18 +10:00
Fernando Rodrigues 0b52cd002e add an environment variable for the smtp_pass config option
The password for secure authentication may be sensitive, so it is best
to not leave it lying around in a config file. This commit introduces
the EMAIL_SMTP_PASS environment variable, which can be set to configure
the SMTP password without writing it to the configuration file.

Signed-off-by: Fernando Rodrigues <alpha@sigmasquadron.net>
2025-07-27 13:03:29 +10:00
Marvin 39c43c0c09 modified: .github/workflows/cicd.yml
modified:   .github/workflows/linting.yml
	modified:   .github/workflows/test.yml
	modified:   .nvmrc
	modified:   Dockerfile.dev
	modified:   Dockerfile.pg
	modified:   Dockerfile.sqlite
	modified:   esbuild.mjs
	modified:   package-lock.json
	modified:   tsconfig.json
2025-07-26 14:17:55 +00:00
Adrian Astles 350485612e This improves the user experience by automatically filling the email field
and preventing users from changing the email they were invited with.

- Update invite link generation to include email parameter in URL
- Modify signup form to pre-fill and lock email field when provided via invite
- Update invite page and status card to preserve email through redirect chain
- Ensure existing invite URLs continue to work without breaking changes
2025-07-25 22:46:40 +08:00
Adrian Astles df31c13912 added real-time password validation to signup form. 2025-07-25 21:59:25 +08:00
Owen 15adfcca8c Add remote subnets to ui 2025-07-24 22:01:22 -07:00
Owen 1466788f77 Clients ui done 2025-07-24 21:42:44 -07:00
Owen 760fe3aca9 Create client component done 2025-07-24 21:26:02 -07:00
Owen 5f75813e84 Handle relaying change values in gerbil 2025-07-24 20:47:39 -07:00
Owen 59cb06acf4 Support relaying on register 2025-07-24 14:48:24 -07:00
Adrian Astles 6349406523 Removed member resouce sidebar to work with new sidebar. 2025-07-24 21:30:20 +08:00
Adrian Astles bcc2c59f08 Add member portal functionality - extracted from feature/member-landing-page 2025-07-24 21:04:55 +08:00
jack 52d46f9879 add nixos option for newt in site creation 2025-07-23 10:02:58 +02:00
Owen Schwartz 0b50a5474d Merge pull request #1041 from wayneyaoo/feature/podman-installer
Add podman support to the installer
2025-07-22 21:41:32 -07:00
copilot-swe-agent[bot] 2259879595 Fix ESLint issues: prefer-const warnings and missing semicolons
Co-authored-by: oschwartz10612 <4999704+oschwartz10612@users.noreply.github.com>
2025-07-22 19:07:43 +00:00
copilot-swe-agent[bot] 4f5091ed7f Initial commit: Document plan to fix ESLint issues
Co-authored-by: oschwartz10612 <4999704+oschwartz10612@users.noreply.github.com>
2025-07-22 18:56:04 +00:00
copilot-swe-agent[bot] b5afd73024 Initial plan 2025-07-22 18:47:17 +00:00
Owen 5c929badeb Send endpoint 2025-07-22 11:21:39 -07:00
Owen Schwartz 3f2de333fb Merge pull request #1111 from Xentrice/main
add IPv6 support for docker network
2025-07-22 11:06:06 -07:00
Sebastian Felber 7c12b8ae25 add IPv6 support for docker network 2025-07-22 16:20:02 +02:00
miloschwartz b54ccbfa2f fix log in loading button 2025-07-21 17:26:02 -07:00
miloschwartz 114ce8997f add tos and pp consent 2025-07-21 16:57:21 -07:00
Owen f1bba3b958 Fix issues in pg schema 2025-07-21 16:32:13 -07:00
miloschwartz 053acef728 allow using password to log in if security keys are available 2025-07-21 14:28:32 -07:00
miloschwartz 9f2710185b center toast 2025-07-21 13:10:39 -07:00
Owen d000879c01 Add config for domains 2025-07-21 12:42:50 -07:00
Owen 25ae169fee Merge branch 'dev' of github.com:fosrl/pangolin into dev 2025-07-21 11:48:32 -07:00
Wayne Yao 4443dda0f6 Fix a bug that error check prevents port configuration 2025-07-21 22:48:10 +08:00
Wayne Yao c484e989a9 Merge branch 'fosrl:main' into feature/podman-installer 2025-07-21 21:36:10 +08:00
miloschwartz 86a4656651 fix multi level subdomain conflict bug 2025-07-19 22:54:30 -07:00
Owen f25aefeb11 Merge branch 'main' of github.com:fosrl/pangolin 2025-07-19 10:33:49 -07:00
Owen Schwartz 228643c7d7 Merge pull request #1097 from ivenos/patch-1
Replace .io domain with .com domain in README
2025-07-19 10:32:08 -07:00
Owen Schwartz 072d6d7094 Merge pull request #1095 from Lokowitz/fix-test
fix test
2025-07-19 10:29:20 -07:00
Iven de3ce672b8 Replace .io domain with .com domain 2025-07-19 18:31:08 +02:00
Marvin 6f5c191998 Update test.yml 2025-07-19 11:09:19 +02:00
Owen bbaea4def0 Handle peer relay dynamically now 2025-07-18 21:42:12 -07:00
Milo Schwartz 54f9282166 Merge pull request #1091 from fosrl/dev
Dev
2025-07-18 18:53:45 -04:00
miloschwartz a39b1db266 bump version 2025-07-18 15:50:55 -07:00
miloschwartz 2ddb4ec905 allow multi level sudomains in domain picker 2025-07-18 15:48:23 -07:00
miloschwartz 7a59e3acf7 fix external user select box 2025-07-18 14:45:16 -07:00
miloschwartz b34c3db956 fix redirect bug for some accounts when disable create org is enabled 2025-07-18 12:59:57 -07:00
Owen afea958aca Also limit to org 2025-07-18 11:48:14 -07:00
Owen dca2a29865 Fix #1085 2025-07-18 11:32:07 -07:00
Owen 97b8e84143 Fix #1085 2025-07-18 11:16:10 -07:00
Owen Schwartz 23eb0da7d7 Merge pull request #1089 from tomribbens/unauthenticated_email
test if smtp user/pass config is set and if not set auth: null
2025-07-18 10:28:17 -07:00
Owen Schwartz 2edda471e7 Merge pull request #1087 from itsbhanusharma/patch-1
Small Typo causes crowdsec to fail
2025-07-18 10:26:20 -07:00
Tom Ribbens 676aa1358d test if user/pass config is set and if not set auth: null 2025-07-18 17:09:22 +02:00
Bhanu 87a36d6ae3 Small Typo causes crowdsec to fail
first rule is named iame instead of name. seems like a recent typo. I edited file manually and it seems to have allowed crowdsec to boot up.
2025-07-18 18:40:15 +05:30
Owen b67611094e YC 2025-07-18 00:28:10 -07:00
Owen 2e986def78 const 2025-07-17 23:15:16 -07:00
miloschwartz d16a05959d Merge branch 'main' into dev 2025-07-17 23:14:50 -07:00
Owen 7e58e0b490 Correctly handle ssl on new domains 2025-07-17 22:57:47 -07:00
Owen 9b01aecf3c Add default cert resovler 2025-07-17 22:37:33 -07:00
miloschwartz 86043fd5f8 add defaults for domain cert resolver and prefer wildcard cert 2025-07-17 22:35:07 -07:00
Milo Schwartz 372a1758e9 Update README.md 2025-07-17 19:35:27 -04:00
Owen 0a2b1d9e53 Use a records for the wildcard 2025-07-17 16:17:01 -07:00
Owen e562946308 Fix logic 2025-07-17 16:03:34 -07:00
Owen 398e15b3c6 Format 2025-07-17 15:59:28 -07:00
miloschwartz c225a54dbe Merge branch 'dev' 2025-07-17 15:05:02 -07:00
Owen 5148988dcc Also dont return if you are passing an exit node 2025-07-17 14:59:49 -07:00
Owen 28b57ba652 Allow null exit node id as well 2025-07-17 14:57:09 -07:00
Owen 9c7e74ef37 Remove ping logic 2025-07-17 14:43:47 -07:00
Owen 330b28ad9c Fix local sites 2025-07-17 14:35:22 -07:00
miloschwartz da7166a7ea fix config 2025-07-17 14:34:57 -07:00
Milo Schwartz e8793c5d8d Update README.md 2025-07-17 16:35:00 -04:00
miloschwartz c63d45e344 Merge branch 'main' into dev 2025-07-17 13:20:34 -07:00
miloschwartz 1159a79410 fix emails 2025-07-17 13:20:27 -07:00
Milo Schwartz 5b5e65ac08 Merge pull request #1074 from fosrl/dev
1.7.0
2025-07-17 15:47:52 -04:00
Owen 417811e94f Merge branch 'dev' of github.com:fosrl/pangolin into dev 2025-07-17 12:26:51 -07:00
Owen Schwartz 9c40057c51 Merge pull request #1072 from fosrl/crowdin_dev
New Crowdin updates
2025-07-17 12:26:05 -07:00
Owen Schwartz a6409c16c3 New translations en-us.json (Chinese Simplified) 2025-07-17 12:25:16 -07:00
Owen ba4667528c Merge branch 'main' of github.com:fosrl/pangolin into dev 2025-07-17 12:25:15 -07:00
Owen Schwartz a2368d7c3f New translations en-us.json (Turkish) 2025-07-17 12:25:15 -07:00
Owen Schwartz e90b203a7d New translations en-us.json (Portuguese) 2025-07-17 12:25:14 -07:00
Owen Schwartz b7389d74db New translations en-us.json (Dutch) 2025-07-17 12:25:13 -07:00
Owen Schwartz 24321521c7 New translations en-us.json (Italian) 2025-07-17 12:25:11 -07:00
Owen Schwartz f85497d446 New translations en-us.json (German) 2025-07-17 12:25:10 -07:00
Owen Schwartz 1f9e92fdb7 New translations en-us.json (Spanish) 2025-07-17 12:25:09 -07:00
Owen Schwartz b66d2b95c5 New translations en-us.json (French) 2025-07-17 12:25:08 -07:00
Owen Schwartz 6f013b3bc4 New translations en-us.json (Polish) 2025-07-17 12:25:06 -07:00
miloschwartz cdf8a01c14 readme adjustments 2025-07-17 12:19:06 -07:00
Owen 547923bbb4 Update cloud links 2025-07-17 12:17:27 -07:00
Owen Schwartz a8c3c1bece New translations en-us.json (Korean) 2025-07-17 12:14:53 -07:00
Owen Schwartz 0f47a5d51e New translations en-us.json (Czech) 2025-07-17 12:14:52 -07:00
Owen Schwartz 9f9196427f New translations en-us.json (Chinese Simplified) 2025-07-17 12:14:51 -07:00
Owen Schwartz 341d688e79 New translations en-us.json (Turkish) 2025-07-17 12:14:49 -07:00
Owen Schwartz 92c5d1ed46 New translations en-us.json (Portuguese) 2025-07-17 12:14:48 -07:00
Owen Schwartz 55d8579b1a New translations en-us.json (Dutch) 2025-07-17 12:14:47 -07:00
Owen Schwartz 51a74c5045 New translations en-us.json (Italian) 2025-07-17 12:14:45 -07:00
Owen Schwartz 64f1af4d0b New translations en-us.json (German) 2025-07-17 12:14:44 -07:00
Owen Schwartz 8dd5daf495 New translations en-us.json (Spanish) 2025-07-17 12:14:43 -07:00
Owen Schwartz 0ee87d736c New translations en-us.json (French) 2025-07-17 12:14:41 -07:00
Owen Schwartz ba822af355 New translations en-us.json (Polish) 2025-07-17 12:14:40 -07:00
Owen Schwartz 78c1990b42 New translations en-us.json (Russian) 2025-07-17 12:14:39 -07:00
Owen 768179a664 Rename file 2025-07-17 12:10:37 -07:00
Owen 1268c46f02 Update diagram 2025-07-17 12:08:56 -07:00
miloschwartz d870a49381 change domain picker description and fix metadata title 2025-07-17 12:05:08 -07:00
Owen 8e476cc07e Update readme 2025-07-17 11:58:28 -07:00
Owen Schwartz ea54fd6e98 New translations en-us.json (Korean) 2025-07-16 23:06:51 -07:00
Owen Schwartz ea001cc0db New translations en-us.json (Czech) 2025-07-16 23:06:49 -07:00
Owen Schwartz 2378343c74 New translations en-us.json (Chinese Simplified) 2025-07-16 23:06:48 -07:00
Owen Schwartz 018b3346bb New translations en-us.json (Turkish) 2025-07-16 23:06:47 -07:00
Owen Schwartz d104829a6d New translations en-us.json (Portuguese) 2025-07-16 23:06:46 -07:00
Owen Schwartz 0035460712 New translations en-us.json (Dutch) 2025-07-16 23:06:45 -07:00
Owen Schwartz cae57ffcd8 New translations en-us.json (Italian) 2025-07-16 23:06:43 -07:00
Owen Schwartz b587ff663c New translations en-us.json (German) 2025-07-16 23:06:42 -07:00
Owen Schwartz 531a888592 New translations en-us.json (Spanish) 2025-07-16 23:06:41 -07:00
Owen Schwartz a13b167c41 New translations en-us.json (French) 2025-07-16 23:06:40 -07:00
Owen Schwartz c1f9195a38 New translations en-us.json (Polish) 2025-07-16 23:06:38 -07:00
Owen Schwartz e1ea7c6986 New translations en-us.json (Russian) 2025-07-16 23:06:37 -07:00
Owen bd21927069 Working on readme 2025-07-16 22:31:15 -07:00
Owen f1f4f7e5f3 Working on adjusting readme 2025-07-16 22:30:20 -07:00
miloschwartz ccdcda7f1d add screenshots and minor fixes 2025-07-16 22:18:11 -07:00
dependabot[bot] e9586b7336 Bump the dev-patch-updates group across 1 directory with 2 updates
Bumps the dev-patch-updates group with 2 updates in the / directory: [@dotenvx/dotenvx](https://github.com/dotenvx/dotenvx) and [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node).


Updates `@dotenvx/dotenvx` from 1.47.3 to 1.47.6
- [Release notes](https://github.com/dotenvx/dotenvx/releases)
- [Changelog](https://github.com/dotenvx/dotenvx/blob/main/CHANGELOG.md)
- [Commits](https://github.com/dotenvx/dotenvx/compare/v1.47.3...v1.47.6)

Updates `@types/node` from 24.0.12 to 24.0.14
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@dotenvx/dotenvx"
  dependency-version: 1.47.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@types/node"
  dependency-version: 24.0.14
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-16 22:01:58 -07:00
Owen Schwartz da36a218df Merge pull request #1069 from fosrl/dependabot/npm_and_yarn/dev-patch-updates-5cee210a78
Bump the dev-patch-updates group across 1 directory with 2 updates
2025-07-16 22:01:25 -07:00
Owen Schwartz 1723089844 Merge pull request #1071 from fosrl/crowdin_dev
New Crowdin updates
2025-07-16 22:01:07 -07:00
Owen Schwartz e99eb04e2f New translations en-us.json (Korean) 2025-07-16 22:00:38 -07:00
Owen Schwartz 5fddd71fc2 New translations en-us.json (Czech) 2025-07-16 22:00:37 -07:00
Owen Schwartz c682b03736 New translations en-us.json (Chinese Simplified) 2025-07-16 22:00:36 -07:00
Owen Schwartz 4008767e1b New translations en-us.json (Turkish) 2025-07-16 22:00:35 -07:00
Owen Schwartz 74c768e2fb New translations en-us.json (Portuguese) 2025-07-16 22:00:34 -07:00
Owen Schwartz 03b883c320 New translations en-us.json (Dutch) 2025-07-16 22:00:33 -07:00
Owen Schwartz 807ddaa0bb New translations en-us.json (Italian) 2025-07-16 22:00:32 -07:00
Owen Schwartz da9d555168 New translations en-us.json (German) 2025-07-16 22:00:31 -07:00
Owen Schwartz 05ba2c0103 New translations en-us.json (Spanish) 2025-07-16 22:00:29 -07:00
Owen Schwartz de96b722d5 New translations en-us.json (French) 2025-07-16 22:00:28 -07:00
Owen Schwartz afde493040 New translations en-us.json (Polish) 2025-07-16 22:00:27 -07:00
Owen Schwartz cce440cf49 New translations en-us.json (Russian) 2025-07-16 22:00:26 -07:00
Owen e96dbdb026 Working on readm 2025-07-16 21:58:52 -07:00
Owen f4cd163c34 Fix get config for gerbil 2025-07-16 21:15:19 -07:00
Owen 0af9bdc964 Move ws 2025-07-16 19:07:25 -07:00
Owen 71bb1105f7 a 2025-07-16 18:20:05 -07:00
Owen 84c28645be Merge branch 'dev' of github.com:fosrl/pangolin into dev 2025-07-16 18:13:25 -07:00
miloschwartz 665ef08733 minor fixes for release 2025-07-16 18:09:17 -07:00
Owen b3e63a5f8a Merge branch 'dev' of github.com:fosrl/pangolin into dev 2025-07-16 17:26:27 -07:00
miloschwartz 92c09b8843 fix sqlite crash on code 13 bug 2025-07-16 17:26:15 -07:00
Owen 7b726a41ef Remove extra try catch 2025-07-16 16:56:05 -07:00
miloschwartz a1a0587a2b add build file 2025-07-16 16:41:59 -07:00
miloschwartz 98be9cee83 Merge branch 'dev' of https://github.com/fosrl/pangolin into dev 2025-07-16 15:50:14 -07:00
miloschwartz 0646934c9d add stores 2025-07-16 15:50:03 -07:00
Owen f0f68632ff Add transaction 2025-07-16 12:34:53 -07:00
Owen e557bda48e Fix default 2025-07-16 12:34:42 -07:00
Owen 2992de5139 Add basic org subnet thing to postgres
T#
2025-07-16 12:00:38 -07:00
Owen 779532b1c9 Generate the initial subnets for sites and orgs 2025-07-16 11:56:26 -07:00
Owen 300175ac67 Defaults for org 2025-07-16 11:56:26 -07:00
miloschwartz a356147164 remove not null from orgs 2025-07-16 11:52:36 -07:00
miloschwartz d1489a9a78 fixes to sqlite migration 2025-07-16 11:47:59 -07:00
Owen 021bc073a2 Make org subnet optional 2025-07-16 11:35:38 -07:00
dependabot[bot] 4e571e1e4d Bump the dev-patch-updates group across 1 directory with 2 updates
Bumps the dev-patch-updates group with 2 updates in the / directory: [@dotenvx/dotenvx](https://github.com/dotenvx/dotenvx) and [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node).


Updates `@dotenvx/dotenvx` from 1.47.3 to 1.47.6
- [Release notes](https://github.com/dotenvx/dotenvx/releases)
- [Changelog](https://github.com/dotenvx/dotenvx/blob/main/CHANGELOG.md)
- [Commits](https://github.com/dotenvx/dotenvx/compare/v1.47.3...v1.47.6)

Updates `@types/node` from 24.0.12 to 24.0.14
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@dotenvx/dotenvx"
  dependency-version: 1.47.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@types/node"
  dependency-version: 24.0.14
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-16 01:43:17 +00:00
miloschwartz 1dff9baa61 Merge branch 'dev' of https://github.com/fosrl/pangolin into dev 2025-07-15 16:24:26 -07:00
miloschwartz 19d54778f5 add branding logo component 2025-07-15 16:24:16 -07:00
Owen 99d0fa974b Remove breakpoints 2025-07-15 16:17:31 -07:00
Owen 84ca275f1e Remove subnet check on the org for now 2025-07-15 16:15:22 -07:00
Owen 963bc5f0bc Add migrations to the callers 2025-07-15 15:59:37 -07:00
Owen b446c2ce4b Add initial migration 2025-07-15 15:58:01 -07:00
Owen 65a4f7af28 Merge branch 'dev' of github.com:fosrl/pangolin into dev 2025-07-15 15:52:37 -07:00
Owen f6b2c5bbf3 Initial migration created for sqlite 2025-07-15 15:52:15 -07:00
miloschwartz e99905e3c9 translate domains and prevent delete config domain 2025-07-15 15:51:37 -07:00
miloschwartz 5c0b42446d Merge branch 'dev' of https://github.com/fosrl/pangolin into dev 2025-07-15 15:27:38 -07:00
miloschwartz a3be0d4655 ensure subdomain is null if is base domain 2025-07-15 15:27:23 -07:00
Owen 47729c2348 Remove reference to deleted site form 2025-07-15 15:13:50 -07:00
Owen 78bfcf5b1c Fix some clients address showing issues 2025-07-15 15:11:30 -07:00
miloschwartz f1291d4d7d remove is base domain resource and flag 2025-07-15 15:07:34 -07:00
Owen ff809416f5 Regenerate package lock 2025-07-15 14:44:08 -07:00
miloschwartz 83a4677026 don't allow deleting config managed domains 2025-07-15 13:20:44 -07:00
Owen ffe8593a07 Remove create site modal 2025-07-15 12:07:25 -07:00
Owen 60e4db16ff Fix dockerfiles 2025-07-15 11:39:19 -07:00
miloschwartz 2e510778be fix header 2025-07-14 22:37:08 -07:00
miloschwartz c492559010 fix profile icon merge issue 2025-07-14 22:32:42 -07:00
miloschwartz a8dc36b6d2 Merge branch 'dev' of https://github.com/fosrl/pangolin into dev 2025-07-14 22:21:12 -07:00
miloschwartz 379d31aac6 Merge branch 'dev' of https://github.com/fosrl/pangolin into dev 2025-07-14 22:21:04 -07:00
Owen 28fc1ab063 Rename to sqlite 2025-07-14 18:27:06 -07:00
Owen 75e01018a5 Add docker file for dev 2025-07-14 18:24:37 -07:00
miloschwartz b7df0b122d introduce strict rate limitso on auth router endpoints 2025-07-14 18:00:41 -07:00
Owen f9798a8d86 Redis 2025-07-14 17:10:26 -07:00
Owen 7691bdd181 Add back "swagger-ui-express": "^5.0.1", 2025-07-14 17:00:34 -07:00
Owen 3dc79da2fa Merge branch 'dev' into clients-pops-dev 2025-07-14 16:59:00 -07:00
Owen 83b00c1cfa Fix domain picker build and copy in for domains 2025-07-14 16:37:54 -07:00
miloschwartz d6fdb38c22 remove vacuum 2025-07-14 16:27:18 -07:00
miloschwartz 3505342a8d style consistency changes to add security key form 2025-07-14 15:43:33 -07:00
Owen 78661799f2 Resources working with new picker 2025-07-14 15:36:15 -07:00
Owen ec57996b01 Hide license 2025-07-14 14:56:03 -07:00
miloschwartz 0a97d91aed restore migrations and fix rate limit 2025-07-14 14:55:09 -07:00
Owen 753027ffc7 Translate missing translations 2025-07-14 14:45:46 -07:00
Milo Schwartz d3383f0f1a Merge pull request #1011 from adrianeastles/feat/internal-user-passkey-support
Internal User - Passwordless Login for Org Members
2025-07-14 17:43:20 -04:00
Milo Schwartz 9075ecb007 Merge branch 'dev' into feat/internal-user-passkey-support 2025-07-14 17:43:01 -04:00
Owen 4b8cc7c4d3 Control with build 2025-07-14 12:46:47 -07:00
Owen 2f20397c60 Flag deleting orgs 2025-07-14 12:38:58 -07:00
Owen 7f227932da Domain picker support wildcard 2025-07-14 12:24:38 -07:00
Owen 69d253fba3 Create wildcard domains 2025-07-14 12:18:12 -07:00
Owen b75800c583 Reintroduce clients conditionally 2025-07-14 11:43:13 -07:00
Owen a35add3fc6 Consolidate imports 2025-07-14 10:56:24 -07:00
Owen b17ff57582 Add missing new domain cols 2025-07-14 10:56:10 -07:00
miloschwartz 915ccdc007 server admin enforce 2fa per user 2025-07-13 21:58:37 -07:00
Owen 98a261e38c Pull up downstream changes 2025-07-13 21:57:24 -07:00
Adrian Astles c9f5ffae42 Merge branch 'dev' into feat/internal-user-passkey-support 2025-07-14 07:20:33 +08:00
Owen 342675276b Add type & cap 2025-07-13 15:58:58 -07:00
Milo Schwartz 590296e64d Merge pull request #1035 from jnewing/feature-manage-2fa
Feature Manage Users 2fa
2025-07-13 18:33:36 -04:00
Milo Schwartz 17b39d16a3 Merge branch 'dev' into feature-manage-2fa 2025-07-13 18:33:27 -04:00
Owen 515a621eb4 Merge branch 'feature/podman-installer' of github.com:wayneyaoo/pangolin into wayneyaoo-feature/podman-installer 2025-07-13 15:09:39 -07:00
Owen Schwartz ca0e950cdf Merge pull request #1038 from fosrl/dependabot/npm_and_yarn/prod-minor-updates-3b5c1dc64f
Bump the prod-minor-updates group across 1 directory with 5 updates
2025-07-13 11:47:58 -07:00
dependabot[bot] cec9e4101d Bump the prod-minor-updates group across 1 directory with 5 updates
Bumps the prod-minor-updates group with 5 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [@react-email/components](https://github.com/resend/react-email/tree/HEAD/packages/components) | `0.1.0` | `0.2.0` |
| [@react-email/tailwind](https://github.com/resend/react-email/tree/HEAD/packages/tailwind) | `1.0.5` | `1.1.0` |
| [eslint](https://github.com/eslint/eslint) | `9.29.0` | `9.30.1` |
| [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) | `0.522.0` | `0.525.0` |
| [react-hook-form](https://github.com/react-hook-form/react-hook-form) | `7.58.1` | `7.60.0` |



Updates `@react-email/components` from 0.1.0 to 0.2.0
- [Release notes](https://github.com/resend/react-email/releases)
- [Changelog](https://github.com/resend/react-email/blob/canary/packages/components/CHANGELOG.md)
- [Commits](https://github.com/resend/react-email/commits/@react-email/components@0.2.0/packages/components)

Updates `@react-email/tailwind` from 1.0.5 to 1.1.0
- [Release notes](https://github.com/resend/react-email/releases)
- [Changelog](https://github.com/resend/react-email/blob/canary/packages/tailwind/CHANGELOG.md)
- [Commits](https://github.com/resend/react-email/commits/@react-email/tailwind@1.1.0/packages/tailwind)

Updates `eslint` from 9.29.0 to 9.30.1
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.29.0...v9.30.1)

Updates `lucide-react` from 0.522.0 to 0.525.0
- [Release notes](https://github.com/lucide-icons/lucide/releases)
- [Commits](https://github.com/lucide-icons/lucide/commits/0.525.0/packages/lucide-react)

Updates `react-hook-form` from 7.58.1 to 7.60.0
- [Release notes](https://github.com/react-hook-form/react-hook-form/releases)
- [Changelog](https://github.com/react-hook-form/react-hook-form/blob/master/CHANGELOG.md)
- [Commits](https://github.com/react-hook-form/react-hook-form/compare/v7.58.1...v7.60.0)

---
updated-dependencies:
- dependency-name: "@react-email/components"
  dependency-version: 0.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: "@react-email/tailwind"
  dependency-version: 1.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: eslint
  dependency-version: 9.30.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: lucide-react
  dependency-version: 0.525.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: react-hook-form
  dependency-version: 7.60.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-13 18:47:45 +00:00
Owen Schwartz 862fabf6ad Merge pull request #1054 from daeho-ro/weblate
feat: Add Korean translations
2025-07-13 11:46:28 -07:00
Owen Schwartz 128a9aae4e Merge pull request #1045 from fosrl/dependabot/npm_and_yarn/dev-minor-updates-4850a154df
Bump the dev-minor-updates group with 3 updates
2025-07-13 11:40:38 -07:00
Daeho Ro 1983d0067d Add Korean translations 2025-07-12 13:21:14 +09:00
Daeho Ro bdaf48da20 Translated using Weblate (Korean)
Currently translated at 100.0% (1134 of 1134 strings)

Translated using Weblate (Korean)

Currently translated at 2.9% (33 of 1134 strings)

Translated using Weblate (Korean)

Currently translated at 2.9% (33 of 1134 strings)

Translated using Weblate (Korean)

Currently translated at 2.9% (33 of 1134 strings)

Added translation using Weblate (Korean)

Co-authored-by: Daeho Ro <40587651+daeho-ro@users.noreply.github.com>
Co-authored-by: Daeho Ro <email@daeho.ro>
Co-authored-by: OpenAI <noreply-mt-openai@weblate.org>
Co-authored-by: Weblate <noreply-mt-weblate@weblate.org>
Translate-URL: https://mini-i18n.daeho.ro/projects/pangolin/main/ko/
Translation: pangolin/main
2025-07-12 04:15:35 +00:00
dependabot[bot] 09024a93e9 Bump the dev-minor-updates group with 3 updates
Bumps the dev-minor-updates group with 3 updates: [@dotenvx/dotenvx](https://github.com/dotenvx/dotenvx), [react-email](https://github.com/resend/react-email/tree/HEAD/packages/react-email) and [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint).


Updates `@dotenvx/dotenvx` from 1.45.1 to 1.47.3
- [Release notes](https://github.com/dotenvx/dotenvx/releases)
- [Changelog](https://github.com/dotenvx/dotenvx/blob/main/CHANGELOG.md)
- [Commits](https://github.com/dotenvx/dotenvx/compare/v1.45.1...v1.47.3)

Updates `react-email` from 4.0.16 to 4.1.0
- [Release notes](https://github.com/resend/react-email/releases)
- [Changelog](https://github.com/resend/react-email/blob/canary/packages/react-email/CHANGELOG.md)
- [Commits](https://github.com/resend/react-email/commits/react-email@4.1.0/packages/react-email)

Updates `typescript-eslint` from 8.35.1 to 8.36.0
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.36.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: "@dotenvx/dotenvx"
  dependency-version: 1.47.3
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-minor-updates
- dependency-name: react-email
  dependency-version: 4.1.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-minor-updates
- dependency-name: typescript-eslint
  dependency-version: 8.36.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-minor-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-10 01:57:05 +00:00
Owen Schwartz 064e7071b2 Merge pull request #1037 from fosrl/dependabot/npm_and_yarn/dev-patch-updates-47326aa7c5
Bump the dev-patch-updates group across 1 directory with 3 updates
2025-07-09 10:03:30 -07:00
Owen Schwartz 2b2fedb380 Merge pull request #1039 from fosrl/dependabot/npm_and_yarn/prod-patch-updates-2cef69bbab
Bump the prod-patch-updates group across 1 directory with 7 updates
2025-07-09 10:02:58 -07:00
dependabot[bot] 5ff7c216b9 Bump the prod-patch-updates group across 1 directory with 7 updates
Bumps the prod-patch-updates group with 7 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [eslint-config-next](https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next) | `15.3.4` | `15.3.5` |
| [next](https://github.com/vercel/next.js) | `15.3.4` | `15.3.5` |
| [next-intl](https://github.com/amannn/next-intl) | `4.3.1` | `4.3.4` |
| [nodemailer](https://github.com/nodemailer/nodemailer) | `7.0.3` | `7.0.5` |
| [tw-animate-css](https://github.com/Wombosvideo/tw-animate-css) | `1.3.4` | `1.3.5` |
| [ws](https://github.com/websockets/ws) | `8.18.2` | `8.18.3` |
| [zod](https://github.com/colinhacks/zod) | `3.25.67` | `3.25.76` |



Updates `eslint-config-next` from 15.3.4 to 15.3.5
- [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/v15.3.5/packages/eslint-config-next)

Updates `next` from 15.3.4 to 15.3.5
- [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/compare/v15.3.4...v15.3.5)

Updates `next-intl` from 4.3.1 to 4.3.4
- [Release notes](https://github.com/amannn/next-intl/releases)
- [Changelog](https://github.com/amannn/next-intl/blob/main/CHANGELOG.md)
- [Commits](https://github.com/amannn/next-intl/compare/v4.3.1...v4.3.4)

Updates `nodemailer` from 7.0.3 to 7.0.5
- [Release notes](https://github.com/nodemailer/nodemailer/releases)
- [Changelog](https://github.com/nodemailer/nodemailer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nodemailer/nodemailer/compare/v7.0.3...v7.0.5)

Updates `tw-animate-css` from 1.3.4 to 1.3.5
- [Release notes](https://github.com/Wombosvideo/tw-animate-css/releases)
- [Commits](https://github.com/Wombosvideo/tw-animate-css/compare/v1.3.4...v1.3.5)

Updates `ws` from 8.18.2 to 8.18.3
- [Release notes](https://github.com/websockets/ws/releases)
- [Commits](https://github.com/websockets/ws/compare/8.18.2...8.18.3)

Updates `zod` from 3.25.67 to 3.25.76
- [Release notes](https://github.com/colinhacks/zod/releases)
- [Commits](https://github.com/colinhacks/zod/compare/v3.25.67...v3.25.76)

---
updated-dependencies:
- dependency-name: eslint-config-next
  dependency-version: 15.3.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: next
  dependency-version: 15.3.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: next-intl
  dependency-version: 4.3.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: nodemailer
  dependency-version: 7.0.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: tw-animate-css
  dependency-version: 1.3.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: ws
  dependency-version: 8.18.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: zod
  dependency-version: 3.25.76
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-09 01:20:06 +00:00
dependabot[bot] c476ac7bc5 Bump the dev-patch-updates group across 1 directory with 3 updates
Bumps the dev-patch-updates group with 3 updates in the / directory: [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node), [drizzle-kit](https://github.com/drizzle-team/drizzle-orm) and [esbuild](https://github.com/evanw/esbuild).


Updates `@types/node` from 24.0.7 to 24.0.12
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Updates `drizzle-kit` from 0.31.2 to 0.31.4
- [Release notes](https://github.com/drizzle-team/drizzle-orm/releases)
- [Commits](https://github.com/drizzle-team/drizzle-orm/compare/drizzle-kit@0.31.2...drizzle-kit@0.31.4)

Updates `esbuild` from 0.25.5 to 0.25.6
- [Release notes](https://github.com/evanw/esbuild/releases)
- [Changelog](https://github.com/evanw/esbuild/blob/main/CHANGELOG.md)
- [Commits](https://github.com/evanw/esbuild/compare/v0.25.5...v0.25.6)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 24.0.12
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: drizzle-kit
  dependency-version: 0.31.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: esbuild
  dependency-version: 0.25.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-09 01:18:19 +00:00
Wayne Yao e83e8c2ee4 Add podman support to the installer. 2025-07-08 23:14:42 +08:00
Wayne Yao 607b168b56 Use explicity FQDN image path because Podman by default doesn't have unqualified-search, and we don't bother configuring it for users. Being explicit is also a good practice 2025-07-08 23:14:23 +08:00
Wayne Yao e0cf0916dd Add a few targets to the Makefile to ease local development 2025-07-08 23:13:00 +08:00
J. Newing 0f3a5ce8ba Added users 2FA statsu to userstable 2025-07-08 10:21:24 -04:00
J. Newing 2a6298e9eb Admins can enable 2FA
Added the feature for admins to force 2FA on accounts. The next time the
user logs in they will have to setup 2FA on their account.
2025-07-08 10:21:24 -04:00
Adrian Astles f97b133c8c Resolved build error. 2025-07-08 22:04:24 +08:00
Owen Schwartz f11fa4f32d Merge pull request #1023 from Burzhui34/fix-russian-plural-forms
Fix plural forms for Russian language
2025-07-07 09:08:32 -07:00
Adrian Astles f0a1c10ec5 fix(auth): improve security key login flow.
- Fix login to verify password before showing security key prompt
- Add proper 2FA verification flow when deleting security keys

Previously, users with security keys would see the security key prompt
even if they entered an incorrect password. Now the password is verified
first. Additionally, security key deletion now properly handles 2FA
verification when enabled.
2025-07-07 17:48:23 +08:00
Burzhui34 08fed8fe93 Fix plural forms for Russian language
Change =1/other to one/other format to support proper grammar in Russian
2025-07-06 21:04:27 +03:00
Adrian Astles 813992141a Fix version mismatch with package-lock.json with package.json 2025-07-07 01:08:01 +08:00
Owen Schwartz f90129213e Merge pull request #1021 from fosrl/dependabot/github_actions/docker/setup-buildx-action-3
Bump docker/setup-buildx-action from 2 to 3
2025-07-06 10:07:50 -07:00
dependabot[bot] 838af30a38 Bump docker/setup-buildx-action from 2 to 3
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 2 to 3.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](https://github.com/docker/setup-buildx-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-version: '3'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-06 17:02:46 +00:00
Owen Schwartz 13ff15311a Merge pull request #1019 from fosrl/dependabot/github_actions/actions/setup-go-5
Bump actions/setup-go from 4 to 5
2025-07-06 10:02:29 -07:00
Owen Schwartz 56e237c479 Merge pull request #1020 from fosrl/dependabot/github_actions/docker/login-action-3
Bump docker/login-action from 2 to 3
2025-07-06 10:01:49 -07:00
Owen Schwartz ff1e10a025 Merge pull request #1022 from fosrl/dependabot/github_actions/actions/checkout-4
Bump actions/checkout from 3 to 4
2025-07-06 10:00:51 -07:00
dependabot[bot] c259037dbf Bump actions/checkout from 3 to 4
Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-06 16:38:48 +00:00
dependabot[bot] 7b4878620f Bump docker/login-action from 2 to 3
Bumps [docker/login-action](https://github.com/docker/login-action) from 2 to 3.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-version: '3'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-06 16:38:42 +00:00
dependabot[bot] 38fd58c173 Bump actions/setup-go from 4 to 5
Bumps [actions/setup-go](https://github.com/actions/setup-go) from 4 to 5.
- [Release notes](https://github.com/actions/setup-go/releases)
- [Commits](https://github.com/actions/setup-go/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/setup-go
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-06 16:38:40 +00:00
Owen Schwartz d1185d43f7 Merge pull request #1018 from Lokowitz/update-dependabot
Update dependabot with github-actions
2025-07-06 09:38:02 -07:00
Adrian Astles a093c54b16 simplified security key management interface. 2025-07-06 20:41:26 +08:00
Marvin 30cc85b793 Update dependabot.yml 2025-07-06 13:12:43 +02:00
Adrian Astles 5009906385 renamed passkey to security key to stay aligned with the UI and other backend naming. 2025-07-05 21:51:31 +08:00
Adrian Astles 6ccc05b183 Update security key error handling and user feedback. Improve user guidance for security key interactions and Implement proper error handling for permission denials and timing issues. 2025-07-05 18:56:32 +08:00
Adrian Astles 3994b25a71 Merge branch 'dev' into feat/internal-user-passkey-support 2025-07-05 18:36:44 +08:00
Adrian Astles 5130071a60 improved security key management interface, also updated locales 2025-07-05 18:27:04 +08:00
Adrian Astles d5e67835aa improved WebAuthn error messages and session handling. Compatibility guidance in error states, and Improve user guidance for common authentication issues. 2025-07-05 16:52:56 +08:00
Adrian Astles bf8078ed66 enhance WebAuthn implementation and error handling. 2025-07-05 16:48:37 +08:00
Adrian Astles 1559a2a943 Fixed database dependencies. 2025-07-05 16:32:04 +08:00
Owen Schwartz e2d5301376 Merge pull request #990 from Lokowitz/fix-test
Fix test
2025-07-04 08:57:56 -07:00
Adrian Astles f31717145f feat(passkeys): Add password verification for passkey management
- Add password verification requirement when registering passkeys
- Add password verification requirement when deleting passkeys
- Add support for 2FA verification if enabled
- Add new delete confirmation dialog with password field
- Add recommendation message when only one passkey is registered
- Improve dialog styling and user experience
- Fix type issues with WebAuthn credential descriptors

Security: This change ensures that sensitive passkey operations require
password verification, similar to 2FA management, preventing unauthorized
modifications to authentication methods.
2025-07-03 22:57:29 +08:00
Adrian Astles db76558944 refactor: rename passkeyChallenge to webauthnChallenge
- Renamed table for consistency with webauthnCredentials
- Created migration script 1.8.1.ts for table rename
- Updated schema definitions in SQLite and PostgreSQL
- Maintains WebAuthn standard naming convention
2025-07-03 21:53:07 +08:00
Owen 1bcb027e05 Fix translation issue with targets 2025-07-01 21:04:40 -07:00
miloschwartz 719d75f8a6 fix pg migration for >1.6.0 2025-07-01 21:03:10 -07:00
Milo Schwartz 8c164c410d Merge pull request #994 from fosrl/dev
remove duplicate yargs
2025-06-30 18:03:54 -04:00
miloschwartz 8c6a4a90aa remove duplicate yargs 2025-06-30 15:03:09 -07:00
miloschwartz c679875273 add inset shadow 2025-06-30 14:18:17 -07:00
miloschwartz 1e5141c27c add newt version update available to table 2025-06-30 13:59:30 -07:00
Lokowitz e56330be47 modified: Makefile 2025-06-30 20:08:44 +00:00
Lokowitz 764a63d784 modified: Makefile 2025-06-30 20:04:51 +00:00
Lokowitz 6f280c4664 modified: package-lock.json 2025-06-30 20:03:22 +00:00
Lokowitz 9b29f38d10 modified: package-lock.json 2025-06-30 19:54:59 +00:00
Marvin 6b60410791 modified: package-lock.json 2025-06-30 19:42:25 +00:00
Marvin dffaceba6f modified: package-lock.json 2025-06-30 19:40:45 +00:00
miloschwartz 4ffdd6f74f clean up a few save buttons 2025-06-30 12:28:27 -07:00
Marvin 3499dd4f56 Update test.yml 2025-06-30 21:25:52 +02:00
Marvin 7004820326 Update Makefile 2025-06-30 21:25:16 +02:00
Marvin 24a17235ae Update test.yml 2025-06-30 21:24:32 +02:00
Milo Schwartz 66e8a4666c Merge pull request #988 from fosrl/dev
1.6.0
2025-06-30 14:31:30 -04:00
Owen 862dd6f0bc Update package-lock.json 2025-06-30 11:19:33 -07:00
miloschwartz 83afb23ac4 Merge branch 'main' into dev 2025-06-30 10:21:51 -07:00
miloschwartz a0381eb2c6 clean up ui pass 1 2025-06-30 09:34:14 -07:00
Owen 3b6a44e683 Merge branch 'dev' into clients-pops 2025-06-27 18:01:21 -04:00
Owen baee745d3c Fix orgId not in queries 2025-06-27 18:01:06 -04:00
miloschwartz cc930ebf53 prevent site name from wrapping 2025-06-27 16:46:03 -04:00
miloschwartz 809a135721 add refresh sites button 2025-06-27 16:43:14 -04:00
Owen 073c318f12 Improve bandiwdth update 2025-06-27 10:36:58 -04:00
miloschwartz 8f1cfd8037 toggle clients with feature flag 2025-06-26 15:09:16 -04:00
miloschwartz 7bf9cccbf6 show account already exists if email not verified 2025-06-25 16:54:33 -04:00
miloschwartz d194e230de option to log out if on verify email screen 2025-06-25 16:44:23 -04:00
miloschwartz bd3d9d2da3 adjust ring offset 2025-06-25 15:29:32 -04:00
miloschwartz e694817b57 add server init method to config 2025-06-25 12:18:29 -04:00
miloschwartz 66191a9610 fix org selector overflow 2025-06-24 17:19:03 -04:00
miloschwartz 9bb4d8b2a3 store last visited org in cookie 2025-06-24 14:54:07 -04:00
Owen Schwartz 2f5579b070 Merge pull request #960 from fosrl/dependabot/npm_and_yarn/dev-patch-updates-c1dab6c5b3
Bump drizzle-kit from 0.31.1 to 0.31.2 in the dev-patch-updates group
2025-06-24 11:27:43 -04:00
Owen Schwartz bc5d7f5f57 Merge pull request #961 from fosrl/dependabot/npm_and_yarn/dev-minor-updates-d97bf475c8
Bump typescript-eslint from 8.34.1 to 8.35.0 in the dev-minor-updates group
2025-06-24 11:27:15 -04:00
dependabot[bot] d729be0d71 Bump typescript-eslint in the dev-minor-updates group
Bumps the dev-minor-updates group with 1 update: [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint).


Updates `typescript-eslint` from 8.34.1 to 8.35.0
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.35.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.35.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-minor-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-24 03:57:56 +00:00
dependabot[bot] 7ccf7f6f15 Bump drizzle-kit from 0.31.1 to 0.31.2 in the dev-patch-updates group
Bumps the dev-patch-updates group with 1 update: [drizzle-kit](https://github.com/drizzle-team/drizzle-orm).


Updates `drizzle-kit` from 0.31.1 to 0.31.2
- [Release notes](https://github.com/drizzle-team/drizzle-orm/releases)
- [Commits](https://github.com/drizzle-team/drizzle-orm/compare/drizzle-kit@0.31.1...drizzle-kit@0.31.2)

---
updated-dependencies:
- dependency-name: drizzle-kit
  dependency-version: 0.31.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-24 03:31:48 +00:00
Owen Schwartz 918dc98f71 Merge pull request #957 from fosrl/dependabot/npm_and_yarn/prod-patch-updates-86f5eb48c3
Bump express-rate-limit from 7.5.0 to 7.5.1 in the prod-patch-updates group
2025-06-23 09:26:08 -04:00
Owen Schwartz 79a72528d7 Merge pull request #958 from fosrl/dependabot/npm_and_yarn/prod-minor-updates-ca63e9bc34
Bump lucide-react from 0.518.0 to 0.522.0 in the prod-minor-updates group
2025-06-23 09:25:59 -04:00
Owen Schwartz 0f2cc7d425 Merge pull request #956 from fosrl/dependabot/npm_and_yarn/dev-minor-updates-063149b7b9
Bump @dotenvx/dotenvx from 1.44.2 to 1.45.1 in the dev-minor-updates group
2025-06-23 09:25:48 -04:00
dependabot[bot] 8f75725987 Bump lucide-react in the prod-minor-updates group
Bumps the prod-minor-updates group with 1 update: [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react).


Updates `lucide-react` from 0.518.0 to 0.522.0
- [Release notes](https://github.com/lucide-icons/lucide/releases)
- [Commits](https://github.com/lucide-icons/lucide/commits/0.522.0/packages/lucide-react)

---
updated-dependencies:
- dependency-name: lucide-react
  dependency-version: 0.522.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-23 01:29:13 +00:00
dependabot[bot] 2918a3f767 Bump express-rate-limit in the prod-patch-updates group
Bumps the prod-patch-updates group with 1 update: [express-rate-limit](https://github.com/express-rate-limit/express-rate-limit).


Updates `express-rate-limit` from 7.5.0 to 7.5.1
- [Release notes](https://github.com/express-rate-limit/express-rate-limit/releases)
- [Commits](https://github.com/express-rate-limit/express-rate-limit/compare/v7.5.0...v7.5.1)

---
updated-dependencies:
- dependency-name: express-rate-limit
  dependency-version: 7.5.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-23 01:27:02 +00:00
dependabot[bot] 598c206bbd Bump @dotenvx/dotenvx in the dev-minor-updates group
Bumps the dev-minor-updates group with 1 update: [@dotenvx/dotenvx](https://github.com/dotenvx/dotenvx).


Updates `@dotenvx/dotenvx` from 1.44.2 to 1.45.1
- [Release notes](https://github.com/dotenvx/dotenvx/releases)
- [Changelog](https://github.com/dotenvx/dotenvx/blob/main/CHANGELOG.md)
- [Commits](https://github.com/dotenvx/dotenvx/compare/v1.44.2...v1.45.1)

---
updated-dependencies:
- dependency-name: "@dotenvx/dotenvx"
  dependency-version: 1.45.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-minor-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-23 01:24:39 +00:00
miloschwartz 34180ca454 set trust proxy for int api 2025-06-22 20:01:31 -04:00
miloschwartz fb5010a2b5 use redis store in rate limiters 2025-06-22 19:55:05 -04:00
miloschwartz 0e87b6e48b Merge branch 'dev' into clients-pops 2025-06-22 17:50:39 -04:00
miloschwartz d45443258b update selection algorithm 2025-06-22 17:19:40 -04:00
Owen f3b44a3085 Add default type 2025-06-22 15:48:47 -04:00
Owen 9680260104 Add domain type 2025-06-22 12:58:33 -04:00
miloschwartz 2ead5f4506 add deprecated env vars warning 2025-06-21 16:59:10 -04:00
miloschwartz 4f68a26049 dont show org id taken after success 2025-06-21 16:42:59 -04:00
miloschwartz 49b88002fb add replaceme back to installer 2025-06-21 16:36:17 -04:00
miloschwartz ead5df0a8c simplify installer and remove parsing from read config 2025-06-21 16:35:22 -04:00
Owen Schwartz 9f38ad9b4d Merge pull request #945 from fosrl/crowdin_dev
New Crowdin updates
2025-06-20 17:19:46 -04:00
miloschwartz 317a15b649 Merge branch 'dev' into clients-pops 2025-06-20 16:34:49 -04:00
Owen Schwartz 7748fb682d New translations en-us.json (Chinese Simplified) 2025-06-20 10:03:31 -04:00
Owen Schwartz 6f601c7814 New translations en-us.json (Turkish) 2025-06-20 10:03:30 -04:00
Owen Schwartz c63dcd89b5 New translations en-us.json (Portuguese) 2025-06-20 10:03:29 -04:00
Owen Schwartz 8c6e3be8ce New translations en-us.json (Polish) 2025-06-20 10:03:27 -04:00
Owen Schwartz 13bfeae780 New translations en-us.json (Dutch) 2025-06-20 10:03:26 -04:00
Owen Schwartz 051162cd69 New translations en-us.json (Italian) 2025-06-20 10:03:25 -04:00
Owen Schwartz 9065d21778 New translations en-us.json (German) 2025-06-20 10:03:24 -04:00
Owen Schwartz cafbad88f3 New translations en-us.json (Spanish) 2025-06-20 10:03:22 -04:00
Owen Schwartz 20965fc67b New translations en-us.json (French) 2025-06-20 10:03:21 -04:00
Owen Schwartz 3efb04a603 Merge pull request #942 from fosrl/dependabot/npm_and_yarn/prod-patch-updates-9f90b90163
Bump the prod-patch-updates group with 3 updates
2025-06-20 09:44:43 -04:00
Owen Schwartz d650d1e6eb Merge pull request #943 from fosrl/dependabot/npm_and_yarn/prod-minor-updates-740e6d8f02
Bump lucide-react from 0.517.0 to 0.518.0 in the prod-minor-updates group
2025-06-20 09:44:26 -04:00
Owen Schwartz 2b23587200 New translations en-us.json (Chinese Simplified) 2025-06-19 22:40:15 -04:00
Owen Schwartz a839f9146f New translations en-us.json (Turkish) 2025-06-19 22:40:14 -04:00
Owen Schwartz a6138a02fd New translations en-us.json (Portuguese) 2025-06-19 22:40:13 -04:00
Owen Schwartz 0e18fc4700 New translations en-us.json (Polish) 2025-06-19 22:40:11 -04:00
Owen Schwartz 68015511c1 New translations en-us.json (Dutch) 2025-06-19 22:40:10 -04:00
Owen Schwartz 715d33fe90 New translations en-us.json (Italian) 2025-06-19 22:40:09 -04:00
Owen Schwartz 85b99852bb New translations en-us.json (German) 2025-06-19 22:40:08 -04:00
Owen Schwartz a54c88eb32 New translations en-us.json (Spanish) 2025-06-19 22:40:07 -04:00
Owen Schwartz 6a5bdd40b6 New translations en-us.json (French) 2025-06-19 22:40:05 -04:00
miloschwartz d03f45279c remove server admin from config and add onboarding ui 2025-06-19 22:11:05 -04:00
dependabot[bot] e7b45df81f Bump lucide-react in the prod-minor-updates group
Bumps the prod-minor-updates group with 1 update: [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react).


Updates `lucide-react` from 0.517.0 to 0.518.0
- [Release notes](https://github.com/lucide-icons/lucide/releases)
- [Commits](https://github.com/lucide-icons/lucide/commits/0.518.0/packages/lucide-react)

---
updated-dependencies:
- dependency-name: lucide-react
  dependency-version: 0.518.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-20 01:29:50 +00:00
dependabot[bot] 91df8c0556 Bump the prod-patch-updates group with 3 updates
Bumps the prod-patch-updates group with 3 updates: [eslint-config-next](https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next), [next](https://github.com/vercel/next.js) and [pg](https://github.com/brianc/node-postgres/tree/HEAD/packages/pg).


Updates `eslint-config-next` from 15.3.3 to 15.3.4
- [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/v15.3.4/packages/eslint-config-next)

Updates `next` from 15.3.3 to 15.3.4
- [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/compare/v15.3.3...v15.3.4)

Updates `pg` from 8.16.0 to 8.16.2
- [Changelog](https://github.com/brianc/node-postgres/blob/master/CHANGELOG.md)
- [Commits](https://github.com/brianc/node-postgres/commits/pg@8.16.2/packages/pg)

---
updated-dependencies:
- dependency-name: eslint-config-next
  dependency-version: 15.3.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: next
  dependency-version: 15.3.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: pg
  dependency-version: 8.16.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-20 01:28:07 +00:00
Owen 2fd8134a57 Dont go over capacity or accept no capacity 2025-06-19 18:04:52 -04:00
miloschwartz 494b54ac32 add redis rate limiter 2025-06-19 16:58:03 -04:00
Owen 377eb2b851 Handle version in db 2025-06-19 16:40:20 -04:00
Owen bd7e96b8af Send version and try to be reverse compatible 2025-06-19 16:40:02 -04:00
miloschwartz acf25e8ad7 Merge branch 'dev' into clients-pops 2025-06-19 16:34:06 -04:00
miloschwartz f300838f8e add migration for 1.6.0 2025-06-19 15:58:05 -04:00
miloschwartz 1bf2e23f5d make username lowercase 2025-06-19 15:41:49 -04:00
miloschwartz 58ba0d07b0 add migration to set trust_proxy to 1 if it exists in config 2025-06-19 12:08:06 -04:00
miloschwartz 97ae76e4e7 forward headers from server component and make trust_proxy config a number 2025-06-19 11:22:29 -04:00
Owen Schwartz 4b24d722b6 Merge pull request #933 from fosrl/dependabot/npm_and_yarn/tailwind-merge-3.3.1
Bump tailwind-merge from 2.6.0 to 3.3.1
2025-06-19 09:49:20 -04:00
Owen Schwartz 09efed4331 Merge pull request #930 from fosrl/dependabot/npm_and_yarn/prod-minor-updates-b2e6812000
Bump the prod-minor-updates group with 7 updates
2025-06-19 09:43:37 -04:00
Owen a0ac757982 Exit node filtering 2025-06-19 09:30:02 -04:00
dependabot[bot] c86418dbbb Bump the prod-minor-updates group with 7 updates
Bumps the prod-minor-updates group with 7 updates:

| Package | From | To |
| --- | --- | --- |
| [@react-email/components](https://github.com/resend/react-email/tree/HEAD/packages/components) | `0.0.41` | `0.1.0` |
| [axios](https://github.com/axios/axios) | `1.9.0` | `1.10.0` |
| [drizzle-orm](https://github.com/drizzle-team/drizzle-orm) | `0.38.3` | `0.44.2` |
| [eslint](https://github.com/eslint/eslint) | `9.28.0` | `9.29.0` |
| [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) | `0.511.0` | `0.516.0` |
| [react-hook-form](https://github.com/react-hook-form/react-hook-form) | `7.56.4` | `7.58.1` |
| [zod-validation-error](https://github.com/causaly/zod-validation-error) | `3.4.1` | `3.5.1` |


Updates `@react-email/components` from 0.0.41 to 0.1.0
- [Release notes](https://github.com/resend/react-email/releases)
- [Changelog](https://github.com/resend/react-email/blob/canary/packages/components/CHANGELOG.md)
- [Commits](https://github.com/resend/react-email/commits/@react-email/components@0.1.0/packages/components)

Updates `axios` from 1.9.0 to 1.10.0
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.9.0...v1.10.0)

Updates `drizzle-orm` from 0.38.3 to 0.44.2
- [Release notes](https://github.com/drizzle-team/drizzle-orm/releases)
- [Commits](https://github.com/drizzle-team/drizzle-orm/compare/0.38.3...0.44.2)

Updates `eslint` from 9.28.0 to 9.29.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.28.0...v9.29.0)

Updates `lucide-react` from 0.511.0 to 0.516.0
- [Release notes](https://github.com/lucide-icons/lucide/releases)
- [Commits](https://github.com/lucide-icons/lucide/commits/0.516.0/packages/lucide-react)

Updates `react-hook-form` from 7.56.4 to 7.58.1
- [Release notes](https://github.com/react-hook-form/react-hook-form/releases)
- [Changelog](https://github.com/react-hook-form/react-hook-form/blob/master/CHANGELOG.md)
- [Commits](https://github.com/react-hook-form/react-hook-form/compare/v7.56.4...v7.58.1)

Updates `zod-validation-error` from 3.4.1 to 3.5.1
- [Release notes](https://github.com/causaly/zod-validation-error/releases)
- [Changelog](https://github.com/causaly/zod-validation-error/blob/main/CHANGELOG.md)
- [Commits](https://github.com/causaly/zod-validation-error/compare/v3.4.1...v3.5.1)

---
updated-dependencies:
- dependency-name: "@react-email/components"
  dependency-version: 0.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: axios
  dependency-version: 1.10.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: drizzle-orm
  dependency-version: 0.44.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: eslint
  dependency-version: 9.29.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: lucide-react
  dependency-version: 0.516.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: react-hook-form
  dependency-version: 7.58.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: zod-validation-error
  dependency-version: 3.5.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-19 02:05:14 +00:00
miloschwartz c043912f94 fix bug preventing creating raw resources with api key closes #920 2025-06-18 16:42:07 -04:00
miloschwartz b56ba3ee23 prevent org id taken error for flashing after create org 2025-06-18 16:22:01 -04:00
miloschwartz 0b8bb5a974 don't use word mark in nav bar 2025-06-18 16:11:37 -04:00
miloschwartz 3b3d7b134a mark exit node as was previously connected 2025-06-18 15:57:45 -04:00
miloschwartz b84b78a34d add server/db/index.ts to gitignore 2025-06-18 14:20:55 -04:00
Owen Schwartz 954b13ac60 Merge pull request #931 from fosrl/dependabot/npm_and_yarn/nodemailer-7.0.3
Bump nodemailer from 6.9.16 to 7.0.3
2025-06-18 09:10:19 -04:00
Owen Schwartz bae540966b Merge pull request #936 from fosrl/dependabot/npm_and_yarn/brace-expansion-1.1.12
Bump brace-expansion from 1.1.11 to 1.1.12
2025-06-18 09:09:48 -04:00
dependabot[bot] 79d4ab1671 Bump brace-expansion from 1.1.11 to 1.1.12
Bumps [brace-expansion](https://github.com/juliangruber/brace-expansion) from 1.1.11 to 1.1.12.
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](https://github.com/juliangruber/brace-expansion/compare/1.1.11...v1.1.12)

---
updated-dependencies:
- dependency-name: brace-expansion
  dependency-version: 1.1.12
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-18 12:55:21 +00:00
dependabot[bot] 31104d3d04 Bump nodemailer from 6.9.16 to 7.0.3
Bumps [nodemailer](https://github.com/nodemailer/nodemailer) from 6.9.16 to 7.0.3.
- [Release notes](https://github.com/nodemailer/nodemailer/releases)
- [Changelog](https://github.com/nodemailer/nodemailer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nodemailer/nodemailer/compare/v6.9.16...v7.0.3)

---
updated-dependencies:
- dependency-name: nodemailer
  dependency-version: 7.0.3
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-18 12:55:18 +00:00
Owen Schwartz f254d98712 Merge pull request #929 from fosrl/dependabot/npm_and_yarn/prod-patch-updates-97e741ec99
Bump the prod-patch-updates group with 4 updates
2025-06-18 08:54:07 -04:00
dependabot[bot] b403f5018b Bump tailwind-merge from 2.6.0 to 3.3.1
Bumps [tailwind-merge](https://github.com/dcastil/tailwind-merge) from 2.6.0 to 3.3.1.
- [Release notes](https://github.com/dcastil/tailwind-merge/releases)
- [Commits](https://github.com/dcastil/tailwind-merge/compare/v2.6.0...v3.3.1)

---
updated-dependencies:
- dependency-name: tailwind-merge
  dependency-version: 3.3.1
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-18 01:48:55 +00:00
dependabot[bot] fd219d5780 Bump the prod-patch-updates group with 4 updates
Bumps the prod-patch-updates group with 4 updates: [@asteasolutions/zod-to-openapi](https://github.com/asteasolutions/zod-to-openapi), [glob](https://github.com/isaacs/node-glob), [npm](https://github.com/npm/cli) and [zod](https://github.com/colinhacks/zod).


Updates `@asteasolutions/zod-to-openapi` from 7.3.3 to 7.3.4
- [Release notes](https://github.com/asteasolutions/zod-to-openapi/releases)
- [Commits](https://github.com/asteasolutions/zod-to-openapi/compare/v7.3.3...v7.3.4)

Updates `glob` from 11.0.2 to 11.0.3
- [Changelog](https://github.com/isaacs/node-glob/blob/main/changelog.md)
- [Commits](https://github.com/isaacs/node-glob/compare/v11.0.2...v11.0.3)

Updates `npm` from 11.4.1 to 11.4.2
- [Release notes](https://github.com/npm/cli/releases)
- [Changelog](https://github.com/npm/cli/blob/latest/CHANGELOG.md)
- [Commits](https://github.com/npm/cli/compare/v11.4.1...v11.4.2)

Updates `zod` from 3.25.56 to 3.25.67
- [Release notes](https://github.com/colinhacks/zod/releases)
- [Commits](https://github.com/colinhacks/zod/compare/v3.25.56...v3.25.67)

---
updated-dependencies:
- dependency-name: "@asteasolutions/zod-to-openapi"
  dependency-version: 7.3.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: glob
  dependency-version: 11.0.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: npm
  dependency-version: 11.4.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: zod
  dependency-version: 3.25.67
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-18 01:45:24 +00:00
miloschwartz 17ac5a5e81 add flag to disable config managed domains 2025-06-17 17:25:41 -04:00
miloschwartz a24431bc3b fix hide raw resources again 2025-06-17 17:03:08 -04:00
Owen cdfeb2ff86 Filter by exit node 2025-06-17 17:00:11 -04:00
miloschwartz 8199202dc3 fix hide raw resource option 2025-06-17 16:53:57 -04:00
miloschwartz 7fd1fb89f1 disable local and wg sites with flag 2025-06-17 16:35:05 -04:00
miloschwartz 32e54d0f94 hide raw resources ui if disabled 2025-06-17 16:23:33 -04:00
miloschwartz 21e9edd201 move max connections from config to db 2025-06-17 15:53:57 -04:00
miloschwartz a0001aaa74 add max connection and weight calculation 2025-06-17 15:51:32 -04:00
Owen Schwartz 2b77c0fac8 Merge pull request #926 from fosrl/dependabot/npm_and_yarn/dev-patch-updates-53bc854d25
Bump the dev-patch-updates group with 4 updates
2025-06-17 09:35:56 -04:00
dependabot[bot] 81ab008d83 Bump the dev-patch-updates group with 4 updates
Bumps the dev-patch-updates group with 4 updates: [@types/jsonwebtoken](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jsonwebtoken), [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node), [postcss](https://github.com/postcss/postcss) and [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint).


Updates `@types/jsonwebtoken` from 9.0.9 to 9.0.10
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jsonwebtoken)

Updates `@types/node` from 24.0.1 to 24.0.3
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Updates `postcss` from 8.5.5 to 8.5.6
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.5.5...8.5.6)

Updates `typescript-eslint` from 8.34.0 to 8.34.1
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.34.1/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: "@types/jsonwebtoken"
  dependency-version: 9.0.10
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@types/node"
  dependency-version: 24.0.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: postcss
  dependency-version: 8.5.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: typescript-eslint
  dependency-version: 8.34.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-17 02:53:28 +00:00
miloschwartz 753307bb99 use new exit node info 2025-06-16 22:07:03 -04:00
Owen 970feb75dd Add priority 100 2025-06-16 17:41:40 -04:00
miloschwartz 08556789f9 add exit node name 2025-06-16 17:32:38 -04:00
miloschwartz 72d8ad3204 disable migrations 2025-06-16 15:23:28 -04:00
miloschwartz 6cdf53e262 use sqlite db 2025-06-16 15:19:37 -04:00
miloschwartz f6d81c3a23 update schema 2025-06-16 12:30:15 -04:00
miloschwartz 4d7b905e98 fix typo 2025-06-16 11:33:24 -04:00
Owen 8c42dee5de Remove unneeded clientType 2025-06-15 18:18:28 -04:00
miloschwartz 23d529bb31 Merge branch 'dev' into clients-pops 2025-06-15 18:04:44 -04:00
miloschwartz 7bbb687047 make exit node name backwards compatible 2025-06-15 18:02:31 -04:00
miloschwartz b39708700d add exit node name and fix db import issues 2025-06-15 17:49:27 -04:00
miloschwartz d46b9eaf87 Merge branch 'redis' into clients-pops 2025-06-15 13:26:48 -04:00
miloschwartz 3e60a2bd6f Merge branch 'dev' into clients-pops 2025-06-15 13:25:21 -04:00
miloschwartz 4e2e434947 Merge branch 'dev' into redis 2025-06-15 13:25:04 -04:00
miloschwartz af32dfbbcd move enable redis to flag 2025-06-15 13:24:51 -04:00
miloschwartz fc19d0ba8b add set server admin password to cli 2025-06-15 13:19:07 -04:00
miloschwartz 83c10166e2 Merge branch 'redis' into clients-pops 2025-06-15 11:54:55 -04:00
Owen ddd292422b Make error more clear
From #911
2025-06-15 10:53:03 -04:00
miloschwartz 8bb0401c25 Merge branch 'dev' into clients-pops 2025-06-13 16:43:33 -04:00
miloschwartz 139c9d2ce3 add redis conn to config 2025-06-13 16:42:15 -04:00
miloschwartz 21f4623e3e Merge branch 'dev' into redis 2025-06-13 13:05:24 -04:00
miloschwartz b86ef93211 add replica connections for pg 2025-06-13 13:04:44 -04:00
Owen Schwartz 6384bcd934 Merge pull request #908 from fosrl/dependabot/npm_and_yarn/dev-patch-updates-e7885b43cc
Bump the dev-patch-updates group across 1 directory with 5 updates
2025-06-13 09:39:45 -04:00
dependabot[bot] 3d4177bd93 Bump the dev-patch-updates group across 1 directory with 5 updates
Bumps the dev-patch-updates group with 4 updates in the / directory: [@tailwindcss/postcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-postcss), [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react), [postcss](https://github.com/postcss/postcss) and [tsx](https://github.com/privatenumber/tsx).


Updates `@tailwindcss/postcss` from 4.1.8 to 4.1.10
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.1.10/packages/@tailwindcss-postcss)

Updates `@types/react` from 19.1.7 to 19.1.8
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

Updates `postcss` from 8.5.4 to 8.5.5
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.5.4...8.5.5)

Updates `tailwindcss` from 4.1.8 to 4.1.10
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.1.10/packages/tailwindcss)

Updates `tsx` from 4.20.1 to 4.20.3
- [Release notes](https://github.com/privatenumber/tsx/releases)
- [Changelog](https://github.com/privatenumber/tsx/blob/master/release.config.cjs)
- [Commits](https://github.com/privatenumber/tsx/compare/v4.20.1...v4.20.3)

---
updated-dependencies:
- dependency-name: "@tailwindcss/postcss"
  dependency-version: 4.1.10
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@types/react"
  dependency-version: 19.1.8
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: postcss
  dependency-version: 8.5.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: tailwindcss
  dependency-version: 4.1.10
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: tsx
  dependency-version: 4.20.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-13 13:36:55 +00:00
Owen Schwartz c6e1a9a171 Merge pull request #897 from fosrl/dependabot/npm_and_yarn/types/node-24.0.1
Bump @types/node from 22.15.30 to 24.0.1
2025-06-13 09:34:42 -04:00
Owen Schwartz 13825568fe Merge pull request #896 from fosrl/dependabot/npm_and_yarn/dev-minor-updates-fd9b651c61
Bump tsx from 4.19.4 to 4.20.1 in the dev-minor-updates group
2025-06-13 09:34:21 -04:00
dependabot[bot] 05c6a010e4 Bump @types/node from 22.15.30 to 24.0.1
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.15.30 to 24.0.1.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 24.0.1
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-12 02:02:33 +00:00
dependabot[bot] 98178eaf24 Bump tsx from 4.19.4 to 4.20.1 in the dev-minor-updates group
Bumps the dev-minor-updates group with 1 update: [tsx](https://github.com/privatenumber/tsx).


Updates `tsx` from 4.19.4 to 4.20.1
- [Release notes](https://github.com/privatenumber/tsx/releases)
- [Changelog](https://github.com/privatenumber/tsx/blob/master/release.config.cjs)
- [Commits](https://github.com/privatenumber/tsx/compare/v4.19.4...v4.20.1)

---
updated-dependencies:
- dependency-name: tsx
  dependency-version: 4.20.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-minor-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-12 02:02:17 +00:00
Owen 8266c26ef1 Merge branch 'dev' into clients-pops 2025-06-11 11:38:01 -04:00
Owen Schwartz 5c682fe923 Merge pull request #891 from fosrl/crowdin_dev
New Crowdin updates
2025-06-11 11:36:50 -04:00
Owen Schwartz 100dd80764 New translations en-us.json (Turkish) 2025-06-11 11:35:48 -04:00
Owen a59222cabb Merge branch 'dev' into clients-pops 2025-06-11 11:15:54 -04:00
Owen Schwartz 867f1bcc96 Merge pull request #890 from fosrl/crowdin_dev
New Crowdin updates
2025-06-11 11:15:13 -04:00
Owen 459bc32f9d Merge branch 'dev' into clients-pops 2025-06-11 11:13:40 -04:00
Owen Schwartz 78b38c91e7 New translations en-us.json (Chinese Simplified) 2025-06-11 11:09:45 -04:00
Owen Schwartz 2ee88d6a46 New translations en-us.json (German) 2025-06-11 11:09:40 -04:00
Owen Schwartz 8d651cd44d Merge pull request #669 from Lokowitz/feature-i18n
Feature i18n added
2025-06-11 10:47:13 -04:00
Owen 8aa95db9bc Adjust button and add profile translations 2025-06-11 10:00:38 -04:00
Owen 31a41576d8 Fix translation & add space 2025-06-11 09:37:21 -04:00
Owen 9a2022a4fe Working on new exit node picking 2025-06-11 09:13:38 -04:00
Marvin 335c9b1fea Update zh-CN.json 2025-06-11 07:50:46 +02:00
Marvin b395b65b86 Update de-DE.json 2025-06-11 07:48:19 +02:00
Marvin 768e4745e1 New Crowdin updates (#184)
* New translations en-us.json (French)

* New translations en-us.json (Spanish)

* New translations en-us.json (German)

* New translations en-us.json (Italian)

* New translations en-us.json (Dutch)

* New translations en-us.json (Polish)

* New translations en-us.json (Portuguese)

* New translations en-us.json (Turkish)

* New translations en-us.json (Chinese Simplified)
2025-06-11 07:45:16 +02:00
Owen Schwartz ba33064852 Merge pull request #885 from fosrl/dependabot/npm_and_yarn/dev-patch-updates-45f2eb23f4
Bump @dotenvx/dotenvx from 1.44.1 to 1.44.2 in the dev-patch-updates group
2025-06-10 22:29:13 -04:00
dependabot[bot] 94b5aadd76 Bump @dotenvx/dotenvx in the dev-patch-updates group
Bumps the dev-patch-updates group with 1 update: [@dotenvx/dotenvx](https://github.com/dotenvx/dotenvx).


Updates `@dotenvx/dotenvx` from 1.44.1 to 1.44.2
- [Release notes](https://github.com/dotenvx/dotenvx/releases)
- [Changelog](https://github.com/dotenvx/dotenvx/blob/main/CHANGELOG.md)
- [Commits](https://github.com/dotenvx/dotenvx/compare/v1.44.1...v1.44.2)

---
updated-dependencies:
- dependency-name: "@dotenvx/dotenvx"
  dependency-version: 1.44.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-11 01:41:04 +00:00
Owen a65ea9c360 Merge branch 'dev' into Lokowitz-feature-i18n 2025-06-10 18:40:24 -04:00
Owen a6afce5c0e Restore eslint 2025-06-10 18:38:11 -04:00
Owen d26ec69445 Add quotes 2025-06-10 18:37:26 -04:00
Owen 3c2ea1a75f Add translation and fix ts issues 2025-06-10 18:34:04 -04:00
Owen 0537992603 Merge branch 'dev' into clients-pops 2025-06-10 13:00:20 -04:00
Owen Schwartz 6acc2b6a17 Merge pull request #871 from Lokowitz/feat-add-test
feat - add test action
2025-06-10 12:38:32 -04:00
Marvin 83b4976305 Update Dockerfile 2025-06-10 15:59:58 +02:00
Marvin b1cbb1b50f Update Dockerfile.pg 2025-06-10 15:59:30 +02:00
Marvin ff9e5a383b Update test.yml 2025-06-10 14:00:34 +02:00
Lokowitz d66739f69e update proxy section in resource 2025-06-10 07:30:30 +00:00
Marvin fc6c93a08a Update Dockerfile.pg 2025-06-10 08:49:56 +02:00
Marvin 9897c53ed3 Update Dockerfile 2025-06-10 08:49:48 +02:00
Marvin ced34dd2c6 Update Dockerfile.pg 2025-06-10 08:47:25 +02:00
Marvin 92caac309a Update Dockerfile 2025-06-10 08:43:16 +02:00
Marvin 3c7a91a047 Update test.yml 2025-06-10 08:42:09 +02:00
Marvin 571db825ad Merge branch 'fosrl:main' into feat-add-test 2025-06-10 08:06:48 +02:00
Marvin 0ae5ac9947 Update de-DE.json 2025-06-10 07:50:11 +02:00
Marvin cd35148e48 Update zh-CN.json 2025-06-10 07:48:36 +02:00
Marvin 19ccf098f0 New Crowdin updates (#179)
* New translations en-us.json (French)

* New translations en-us.json (German)

* New translations en-us.json (Italian)

* New translations en-us.json (Polish)

* New translations en-us.json (Portuguese)

* New translations en-us.json (Turkish)

* New translations en-us.json (Chinese Simplified)

* New translations en-us.json (Spanish)

* New translations en-us.json (Dutch)

* New translations en-us.json (French)

* New translations en-us.json (German)

* New translations en-us.json (Italian)

* New translations en-us.json (Polish)

* New translations en-us.json (Portuguese)

* New translations en-us.json (Spanish)

* New translations en-us.json (Dutch)
2025-06-10 07:45:23 +02:00
Timo 2b64c0e84e Update de-DE.json (#154)
Updated DE until Line 100
2025-06-10 07:29:02 +02:00
风间苏苏 d62a3c64cf feat(i18n): chinese i18n (#178) 2025-06-10 07:27:28 +02:00
Owen 3503cc3338 Merge branch 'main' into dev 2025-06-09 22:07:02 -04:00
Owen Schwartz 6d83e29ee2 Merge pull request #878 from thijsvanloef/fix/linting
Automate Linting, change linting slightly, and fix semi colon errors.
2025-06-09 22:04:06 -04:00
Owen Schwartz 5f9c9eed0a Merge pull request #880 from fosrl/dependabot/npm_and_yarn/dev-patch-updates-ec219de246
Bump @types/react from 19.1.6 to 19.1.7 in the dev-patch-updates group
2025-06-09 22:03:06 -04:00
dependabot[bot] 97ef363461 Bump @types/react from 19.1.6 to 19.1.7 in the dev-patch-updates group
Bumps the dev-patch-updates group with 1 update: [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react).


Updates `@types/react` from 19.1.6 to 19.1.7
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: "@types/react"
  dependency-version: 19.1.7
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-10 01:20:20 +00:00
Owen c67a2dfa73 Add sidebar - needs translations 2025-06-09 18:10:04 -04:00
Owen f29a5ccc67 Translate sidebar 2025-06-09 18:04:45 -04:00
Thijs van Loef cbca88f76b fix semi colons 2025-06-09 23:52:16 +02:00
Thijs van Loef 3ee9051bc1 change naming 2025-06-09 23:51:53 +02:00
Thijs van Loef 097dafb553 enable automated linting 2025-06-09 23:49:35 +02:00
Owen 915581dfe7 Add label 2025-06-09 17:42:28 -04:00
Owen a2cf4ffac1 Remove old internationalization 2025-06-09 17:41:31 -04:00
Milo Schwartz 6b4e52a725 Merge pull request #877 from fosrl/dev
1.5.1
2025-06-09 17:40:35 -04:00
Owen 454d7c4a88 Update lock 2025-06-09 17:40:10 -04:00
Owen cb85ad460e Remove redundant icons; make update selector 2025-06-09 17:39:29 -04:00
miloschwartz e41eafd497 enhance link styling and bump traefik version 2025-06-09 17:38:18 -04:00
Owen Schwartz d70396a664 Merge pull request #876 from thijsvanloef/fix/define-files-in-eslint
Add Typescript specific linting & define files in eslint
2025-06-09 17:15:23 -04:00
Thijs van Loef 3d59556bcd readd accidentally removed line 2025-06-09 22:38:38 +02:00
Thijs van Loef c7018e92b0 Merge branch 'dev' into fix/define-files-in-eslint 2025-06-09 22:36:56 +02:00
Thijs van Loef a575bace39 add typescript eslint 2025-06-09 22:32:38 +02:00
Thijs van Loef 2047aa30e1 add typescript specific linting 2025-06-09 22:25:27 +02:00
Thijs van Loef 3b10453af3 define files in eslint 2025-06-09 22:18:38 +02:00
Owen 363b8b52af Merge branch 'dev' into Lokowitz-feature-i18n 2025-06-09 14:53:32 -04:00
Owen 3257edc2a0 Add link to docs for newt 2025-06-09 14:23:53 -04:00
miloschwartz cd54e7dd38 pick first port on select container 2025-06-09 13:01:53 -04:00
Owen 9177eaba22 Merge branch 'main' into dev 2025-06-09 11:22:35 -04:00
Owen Schwartz 33ae2e08cc Merge pull request #872 from Lokowitz/fix-dependabot
fix - dependabot
2025-06-09 11:17:45 -04:00
Owen Schwartz 4fc61386d3 Merge pull request #867 from thijsvanloef/fix-767/unit-aware-sorting
Fix - Sort Data In/Out correctly in Sites Management page in the Pangolin Dashboard
2025-06-09 11:17:15 -04:00
Owen c409266954 Fix #860 2025-06-09 11:13:58 -04:00
Owen 57315a36ee Merge branch 'main' into dev 2025-06-09 11:07:42 -04:00
Owen Schwartz 63637b91a8 Merge pull request #874 from fosrl/dependabot/npm_and_yarn/dev-patch-updates-637b1bbe0a
Bump the dev-patch-updates group across 1 directory with 4 updates
2025-06-09 11:06:32 -04:00
Owen Schwartz 09238cd98a Merge pull request #873 from fosrl/dependabot/npm_and_yarn/prod-patch-updates-1931de1053
Bump zod from 3.25.46 to 3.25.56 in the prod-patch-updates group across 1 directory
2025-06-09 11:06:08 -04:00
Owen Schwartz 67b149ce4b Merge pull request #834 from fosrl/dependabot/npm_and_yarn/tar-fs-2.1.3
Bump tar-fs from 2.1.2 to 2.1.3
2025-06-09 11:05:24 -04:00
Thijs van Loef 96151de814 improve readability 2025-06-09 13:18:22 +02:00
Thijs van Loef f2e461a1ee improve readability 2025-06-09 13:06:08 +02:00
dependabot[bot] 8125622c98 Bump the dev-patch-updates group across 1 directory with 4 updates
Bumps the dev-patch-updates group with 4 updates in the / directory: [@types/cookie-parser](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/cookie-parser), [@types/cors](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/cors), [@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom) and [react-email](https://github.com/resend/react-email/tree/HEAD/packages/react-email).


Updates `@types/cookie-parser` from 1.4.8 to 1.4.9
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/cookie-parser)

Updates `@types/cors` from 2.8.18 to 2.8.19
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/cors)

Updates `@types/react-dom` from 19.1.5 to 19.1.6
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-dom)

Updates `react-email` from 4.0.15 to 4.0.16
- [Release notes](https://github.com/resend/react-email/releases)
- [Changelog](https://github.com/resend/react-email/blob/canary/packages/react-email/CHANGELOG.md)
- [Commits](https://github.com/resend/react-email/commits/react-email@4.0.16/packages/react-email)

---
updated-dependencies:
- dependency-name: "@types/cookie-parser"
  dependency-version: 1.4.9
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@types/cors"
  dependency-version: 2.8.19
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@types/react-dom"
  dependency-version: 19.1.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: react-email
  dependency-version: 4.0.16
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-09 02:06:40 +00:00
dependabot[bot] 1a6942ccc9 Bump zod in the prod-patch-updates group across 1 directory
Bumps the prod-patch-updates group with 1 update in the / directory: [zod](https://github.com/colinhacks/zod).


Updates `zod` from 3.25.46 to 3.25.56
- [Release notes](https://github.com/colinhacks/zod/releases)
- [Commits](https://github.com/colinhacks/zod/compare/v3.25.46...v3.25.56)

---
updated-dependencies:
- dependency-name: zod
  dependency-version: 3.25.56
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-09 02:05:59 +00:00
Marvin 7b0e1df778 Update dependabot.yml 2025-06-08 17:29:14 +02:00
Marvin 6f8c538086 Update Dockerfile 2025-06-08 16:57:01 +02:00
Marvin b353a8f9b4 Update Makefile 2025-06-08 16:56:46 +02:00
Marvin 0eb35f2221 Create test.yml 2025-06-08 16:56:21 +02:00
Owen Schwartz 7d6b114d67 Merge pull request #869 from Lokowitz/fix-package
Fix - package-lock
2025-06-08 08:47:40 -04:00
Lokowitz a169256770 update package-lock 2025-06-08 12:30:32 +00:00
Lokowitz 2e54afd72f rebuild package-lock 2025-06-08 12:26:52 +00:00
Thijs van Loef 26207bd951 add datasize helper and add correct sorting to sitestable 2025-06-08 00:07:49 +02:00
Owen 3ed681e277 Bump temp version 2025-06-06 12:16:58 -04:00
Owen c135b5e3cf Dont request unless its a newt 2025-06-06 12:15:15 -04:00
Owen e648307f0b Merge branch 'main' into dev 2025-06-06 12:04:24 -04:00
Owen Schwartz 0e4f35e87a Merge pull request #855 from Lokowitz/main
fix - removed package-lock.json from .gitignore
2025-06-06 12:00:49 -04:00
Marvin 553dffd4ee removed package-lock.json from .gitignore
update package-lock.json
2025-06-06 07:00:07 +00:00
风间苏苏 b4b19d2263 chore(i18n): partial Simplified Chinese localization (draft) (#143)
* Chinese i18n

* fix(i18n): corrected mislabeled language name from "中国人" to "简体中文"

* chore(i18n): initial Simplified Chinese translation
2025-06-06 08:29:49 +02:00
Marvin c7c39676d1 add NL and ES
resolve conflicts
2025-06-06 06:06:56 +00:00
Marvin a6348a3e28 Merge remote-tracking branch 'upstream/dev' into feature-i18n 2025-06-06 06:03:55 +00:00
Marvin 75212f1e05 New Crowdin updates (#153)
* New translations en-us.json (Spanish)

* New translations en-us.json (Dutch)
2025-06-06 07:55:44 +02:00
miloschwartz c1fd38ac39 fix typo 2025-06-05 15:48:37 -04:00
miloschwartz 33e2798313 Merge branch 'main' into dev 2025-06-05 14:44:55 -04:00
miloschwartz f0cb65f65c dont import db in nextjs 2025-06-05 14:44:34 -04:00
Marvin e885676ad8 add chinese 2025-06-05 17:30:49 +00:00
Marvin b75d0a921e resolve conflicts 2025-06-05 17:27:38 +00:00
Marvin 34fa5fe438 Merge remote-tracking branch 'upstream/dev' into feature-i18n 2025-06-05 17:27:13 +00:00
Marvin c2449ce795 New translations en-us.json (Chinese Simplified) (#149) 2025-06-05 19:18:22 +02:00
Milo Schwartz 9bb6cb14a6 Merge pull request #843 from fosrl/dev
1.5.0
2025-06-05 12:11:47 -04:00
miloschwartz b6f67e0f0b Merge branch 'main' into dev 2025-06-05 12:11:37 -04:00
miloschwartz 980545c636 dont throw if fail to migration config 2025-06-05 11:55:59 -04:00
miloschwartz 92135ff9c1 minor visal adjustments to docker container view 2025-06-05 11:51:48 -04:00
Marvin dd7b91f770 Merge remote-tracking branch 'upstream/dev' into feature-i18n 2025-06-05 04:41:28 +00:00
Owen ab843b1a43 Clean up unused 2025-06-04 17:42:19 -04:00
miloschwartz 4593edbb45 add get role to integration api 2025-06-04 17:28:46 -04:00
Owen 96b451843c Update placeholder 2025-06-04 17:27:10 -04:00
Owen 54aa3ce7d8 Comment the socket status for now 2025-06-04 17:18:42 -04:00
Owen 45a70152ee Merge branch 'dev' of github.com:fosrl/pangolin into dev 2025-06-04 17:17:56 -04:00
miloschwartz 8c5f00a446 remove .sqlite from Dockerfile 2025-06-04 17:17:18 -04:00
miloschwartz af98610d0d fix migration number and add allowed_headers migration 2025-06-04 17:15:11 -04:00
Owen 875ec662ad Fix retry 2025-06-04 16:05:41 -04:00
Owen 8800ec9675 Merge branch 'dev' of github.com:fosrl/pangolin into dev 2025-06-04 16:02:52 -04:00
Owen df4da75c57 Dont do socket on non-newt sites 2025-06-04 16:02:45 -04:00
miloschwartz 717dfae26c look for ipv6 in brackets and fix cors headers in install config 2025-06-04 15:56:16 -04:00
Owen 58a2a9dcc9 Fix db import for pg 2025-06-04 15:24:15 -04:00
Owen 27a0df4ed4 Add migration for 1.4.0 2025-06-04 15:16:42 -04:00
Milo Schwartz 6fc6f325a7 Merge pull request #807 from pyrho/feat/auth-header
send user data to badger when authenticated
2025-06-04 12:17:23 -04:00
miloschwartz b46e49922c Merge branch 'dev' into postgres 2025-06-04 12:04:28 -04:00
miloschwartz 2cca561e51 support postgresql as database option 2025-06-04 12:02:07 -04:00
Marvin fbc1aa25a3 merge with dev and resolved confics 2025-06-04 09:01:43 +00:00
Marvin e8870cf174 Merge remote-tracking branch 'upstream/dev' into feature-i18n 2025-06-04 09:01:37 +00:00
Owen 17919192e0 Speed up when the button shows 2025-06-03 21:04:08 -04:00
vlalx d768bb163a I18n additionals (#125)
* New translation keys

* Updates in src/components

* Updates in src/providers

* remove lable in selector, not needed

---------

Co-authored-by: Lokowitz <marvinlokowitz@gmail.com>
2025-06-03 20:10:00 +02:00
vlalx dc6fafba41 Fixes for build (#124) 2025-06-03 19:48:20 +02:00
dependabot[bot] 9f979c5019 Bump tar-fs from 2.1.2 to 2.1.3
Bumps [tar-fs](https://github.com/mafintosh/tar-fs) from 2.1.2 to 2.1.3.
- [Commits](https://github.com/mafintosh/tar-fs/commits)

---
updated-dependencies:
- dependency-name: tar-fs
  dependency-version: 2.1.3
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-03 09:32:28 +00:00
Owen Schwartz c3d2c34279 Merge pull request #831 from TheresaQWQ/patch-1
fix typo
2025-06-02 22:42:17 -04:00
风间苏苏 430f187fde fix typo 2025-06-03 10:37:27 +08:00
Owen f438d2ddbf Watch target inputs 2025-06-02 21:13:57 -04:00
Owen 6d519af198 Rollback select packages; update fav 2025-06-02 20:47:22 -04:00
Owen Schwartz a34e88257d Merge pull request #823 from fosrl/dependabot/npm_and_yarn/multi-5726d3b8f4
Bump esbuild and drizzle-kit
2025-06-02 09:08:28 -04:00
Owen ea0ab0e63c Merge branch 'dev' into improbableone-hub-dev 2025-06-01 23:31:11 -04:00
dependabot[bot] 80375cd0dc Bump esbuild and drizzle-kit
Bumps [esbuild](https://github.com/evanw/esbuild) to 0.25.2 and updates ancestor dependency [drizzle-kit](https://github.com/drizzle-team/drizzle-orm). These dependencies need to be updated together.


Updates `esbuild` from 0.18.20 to 0.25.2
- [Release notes](https://github.com/evanw/esbuild/releases)
- [Changelog](https://github.com/evanw/esbuild/blob/main/CHANGELOG-2023.md)
- [Commits](https://github.com/evanw/esbuild/compare/v0.18.20...v0.25.2)

Updates `drizzle-kit` from 0.30.6 to 0.31.1
- [Release notes](https://github.com/drizzle-team/drizzle-orm/releases)
- [Commits](https://github.com/drizzle-team/drizzle-orm/compare/drizzle-kit@0.30.6...drizzle-kit@0.31.1)

---
updated-dependencies:
- dependency-name: esbuild
  dependency-version: 0.25.2
  dependency-type: indirect
- dependency-name: drizzle-kit
  dependency-version: 0.31.1
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-02 03:26:24 +00:00
Owen f817ba7664 Merge branch 'dev' of github.com:fosrl/pangolin into dev 2025-06-01 23:19:18 -04:00
Owen 3398088e03 Merge branch 'Lokowitz-main' into dev 2025-06-01 23:18:58 -04:00
Owen e586dd50f4 Merge branch 'main' of github.com:Lokowitz/pangolin into Lokowitz-main 2025-06-01 23:15:54 -04:00
Owen Schwartz 5a71c0ba65 Merge pull request #817 from PrtmPhlp/main
docker run command in detached mode
2025-06-01 22:32:22 -04:00
Marvin f13b6abd78 Update dependabot.yml 2025-06-01 15:50:14 +02:00
Marvin 34c6b590d7 Update dependabot.yml 2025-06-01 15:47:54 +02:00
Marvin ab797203eb Update dependabot.yml 2025-06-01 15:46:23 +02:00
Marvin 30e8b1f0fe Update dependabot.yml 2025-06-01 15:39:20 +02:00
dependabot[bot] d03bee98f5 Bump yargs from 17.7.2 to 18.0.0 in the dev-major-updates group (#119)
Bumps the dev-major-updates group with 1 update: [yargs](https://github.com/yargs/yargs).


Updates `yargs` from 17.7.2 to 18.0.0
- [Release notes](https://github.com/yargs/yargs/releases)
- [Changelog](https://github.com/yargs/yargs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/yargs/yargs/compare/v17.7.2...v18.0.0)

---
updated-dependencies:
- dependency-name: yargs
  dependency-version: 18.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: dev-major-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-01 15:25:08 +02:00
dependabot[bot] fa365fb7b8 Bump the dev-minor-updates group with 4 updates (#118)
Bumps the dev-minor-updates group with 4 updates: [@dotenvx/dotenvx](https://github.com/dotenvx/dotenvx), [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node), [drizzle-kit](https://github.com/drizzle-team/drizzle-orm) and [typescript](https://github.com/microsoft/TypeScript).


Updates `@dotenvx/dotenvx` from 1.32.0 to 1.44.1
- [Release notes](https://github.com/dotenvx/dotenvx/releases)
- [Changelog](https://github.com/dotenvx/dotenvx/blob/main/CHANGELOG.md)
- [Commits](https://github.com/dotenvx/dotenvx/compare/v1.32.0...v1.44.1)

Updates `@types/node` from 22.10.10 to 22.15.29
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Updates `drizzle-kit` from 0.30.6 to 0.31.1
- [Release notes](https://github.com/drizzle-team/drizzle-orm/releases)
- [Commits](https://github.com/drizzle-team/drizzle-orm/compare/drizzle-kit@0.30.6...drizzle-kit@0.31.1)

Updates `typescript` from 5.7.3 to 5.8.3
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release-publish.yml)
- [Commits](https://github.com/microsoft/TypeScript/compare/v5.7.3...v5.8.3)

---
updated-dependencies:
- dependency-name: "@dotenvx/dotenvx"
  dependency-version: 1.44.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-minor-updates
- dependency-name: "@types/node"
  dependency-version: 22.15.29
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-minor-updates
- dependency-name: drizzle-kit
  dependency-version: 0.31.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-minor-updates
- dependency-name: typescript
  dependency-version: 5.8.3
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-minor-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-01 15:16:59 +02:00
dependabot[bot] ea1cd4b0d4 Bump the prod-minor-updates group with 27 updates (#121)
* Bump the prod-minor-updates group with 27 updates

Bumps the prod-minor-updates group with 27 updates:

| Package | From | To |
| --- | --- | --- |
| [@radix-ui/react-checkbox](https://github.com/radix-ui/primitives) | `1.1.3` | `1.3.2` |
| [@radix-ui/react-radio-group](https://github.com/radix-ui/primitives) | `1.2.2` | `1.3.7` |
| [@radix-ui/react-select](https://github.com/radix-ui/primitives) | `2.1.4` | `2.2.5` |
| [@radix-ui/react-slot](https://github.com/radix-ui/primitives) | `1.1.1` | `1.2.3` |
| [@radix-ui/react-switch](https://github.com/radix-ui/primitives) | `1.1.2` | `1.2.5` |
| [@react-email/render](https://github.com/resend/react-email/tree/HEAD/packages/render) | `1.0.6` | `1.1.2` |
| [@tanstack/react-table](https://github.com/TanStack/table/tree/HEAD/packages/react-table) | `8.20.6` | `8.21.3` |
| [arctic](https://github.com/pilcrowonpaper/arctic) | `3.6.0` | `3.7.0` |
| [axios](https://github.com/axios/axios) | `1.8.4` | `1.9.0` |
| [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) | `11.7.0` | `11.10.0` |
| [cmdk](https://github.com/pacocoursey/cmdk/tree/HEAD/cmdk) | `1.0.4` | `1.1.1` |
| [drizzle-orm](https://github.com/drizzle-team/drizzle-orm) | `0.38.3` | `0.44.1` |
| [eslint](https://github.com/eslint/eslint) | `9.17.0` | `9.28.0` |
| [eslint-config-next](https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next) | `15.1.3` | `15.3.3` |
| [helmet](https://github.com/helmetjs/helmet) | `8.0.0` | `8.1.0` |
| [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) | `0.469.0` | `0.511.0` |
| [next](https://github.com/vercel/next.js) | `15.2.4` | `15.3.3` |
| [npm](https://github.com/npm/cli) | `11.2.0` | `11.4.1` |
| [react](https://github.com/facebook/react/tree/HEAD/packages/react) | `19.0.0` | `19.1.0` |
| [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) | `19.1.1` | `19.1.6` |
| [react-dom](https://github.com/facebook/react/tree/HEAD/packages/react-dom) | `19.0.0` | `19.1.0` |
| [@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom) | `19.1.2` | `19.1.5` |
| [react-hook-form](https://github.com/react-hook-form/react-hook-form) | `7.54.2` | `7.56.4` |
| [semver](https://github.com/npm/node-semver) | `7.6.3` | `7.7.2` |
| [@types/semver](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/semver) | `7.5.8` | `7.7.0` |
| [tw-animate-css](https://github.com/Wombosvideo/tw-animate-css) | `1.2.8` | `1.3.2` |
| [zod](https://github.com/colinhacks/zod) | `3.24.1` | `3.25.46` |


Updates `@radix-ui/react-checkbox` from 1.1.3 to 1.3.2
- [Changelog](https://github.com/radix-ui/primitives/blob/main/release-process.md)
- [Commits](https://github.com/radix-ui/primitives/commits)

Updates `@radix-ui/react-radio-group` from 1.2.2 to 1.3.7
- [Changelog](https://github.com/radix-ui/primitives/blob/main/release-process.md)
- [Commits](https://github.com/radix-ui/primitives/commits)

Updates `@radix-ui/react-select` from 2.1.4 to 2.2.5
- [Changelog](https://github.com/radix-ui/primitives/blob/main/release-process.md)
- [Commits](https://github.com/radix-ui/primitives/commits)

Updates `@radix-ui/react-slot` from 1.1.1 to 1.2.3
- [Changelog](https://github.com/radix-ui/primitives/blob/main/release-process.md)
- [Commits](https://github.com/radix-ui/primitives/commits)

Updates `@radix-ui/react-switch` from 1.1.2 to 1.2.5
- [Changelog](https://github.com/radix-ui/primitives/blob/main/release-process.md)
- [Commits](https://github.com/radix-ui/primitives/commits)

Updates `@react-email/render` from 1.0.6 to 1.1.2
- [Release notes](https://github.com/resend/react-email/releases)
- [Changelog](https://github.com/resend/react-email/blob/canary/packages/render/CHANGELOG.md)
- [Commits](https://github.com/resend/react-email/commits/@react-email/render@1.1.2/packages/render)

Updates `@tanstack/react-table` from 8.20.6 to 8.21.3
- [Release notes](https://github.com/TanStack/table/releases)
- [Commits](https://github.com/TanStack/table/commits/v8.21.3/packages/react-table)

Updates `arctic` from 3.6.0 to 3.7.0
- [Release notes](https://github.com/pilcrowonpaper/arctic/releases)
- [Commits](https://github.com/pilcrowonpaper/arctic/compare/v3.6.0...v3.7.0)

Updates `axios` from 1.8.4 to 1.9.0
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.8.4...v1.9.0)

Updates `better-sqlite3` from 11.7.0 to 11.10.0
- [Release notes](https://github.com/WiseLibs/better-sqlite3/releases)
- [Commits](https://github.com/WiseLibs/better-sqlite3/compare/v11.7.0...v11.10.0)

Updates `cmdk` from 1.0.4 to 1.1.1
- [Release notes](https://github.com/pacocoursey/cmdk/releases)
- [Commits](https://github.com/pacocoursey/cmdk/commits/v1.1.1/cmdk)

Updates `drizzle-orm` from 0.38.3 to 0.44.1
- [Release notes](https://github.com/drizzle-team/drizzle-orm/releases)
- [Commits](https://github.com/drizzle-team/drizzle-orm/compare/0.38.3...0.44.1)

Updates `eslint` from 9.17.0 to 9.28.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.17.0...v9.28.0)

Updates `eslint-config-next` from 15.1.3 to 15.3.3
- [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/v15.3.3/packages/eslint-config-next)

Updates `helmet` from 8.0.0 to 8.1.0
- [Changelog](https://github.com/helmetjs/helmet/blob/main/CHANGELOG.md)
- [Commits](https://github.com/helmetjs/helmet/compare/v8.0.0...v8.1.0)

Updates `lucide-react` from 0.469.0 to 0.511.0
- [Release notes](https://github.com/lucide-icons/lucide/releases)
- [Commits](https://github.com/lucide-icons/lucide/commits/0.511.0/packages/lucide-react)

Updates `next` from 15.2.4 to 15.3.3
- [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/compare/v15.2.4...v15.3.3)

Updates `npm` from 11.2.0 to 11.4.1
- [Release notes](https://github.com/npm/cli/releases)
- [Changelog](https://github.com/npm/cli/blob/latest/CHANGELOG.md)
- [Commits](https://github.com/npm/cli/compare/v11.2.0...v11.4.1)

Updates `react` from 19.0.0 to 19.1.0
- [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.1.0/packages/react)

Updates `@types/react` from 19.1.1 to 19.1.6
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

Updates `react-dom` from 19.0.0 to 19.1.0
- [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.1.0/packages/react-dom)

Updates `@types/react-dom` from 19.1.2 to 19.1.5
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-dom)

Updates `react-hook-form` from 7.54.2 to 7.56.4
- [Release notes](https://github.com/react-hook-form/react-hook-form/releases)
- [Changelog](https://github.com/react-hook-form/react-hook-form/blob/master/CHANGELOG.md)
- [Commits](https://github.com/react-hook-form/react-hook-form/compare/v7.54.2...v7.56.4)

Updates `semver` from 7.6.3 to 7.7.2
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/main/CHANGELOG.md)
- [Commits](https://github.com/npm/node-semver/compare/v7.6.3...v7.7.2)

Updates `@types/semver` from 7.5.8 to 7.7.0
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/semver)

Updates `tw-animate-css` from 1.2.8 to 1.3.2
- [Release notes](https://github.com/Wombosvideo/tw-animate-css/releases)
- [Commits](https://github.com/Wombosvideo/tw-animate-css/compare/v1.2.8...v1.3.2)

Updates `zod` from 3.24.1 to 3.25.46
- [Release notes](https://github.com/colinhacks/zod/releases)
- [Commits](https://github.com/colinhacks/zod/compare/v3.24.1...v3.25.46)

---
updated-dependencies:
- dependency-name: "@radix-ui/react-checkbox"
  dependency-version: 1.3.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: "@radix-ui/react-radio-group"
  dependency-version: 1.3.7
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: "@radix-ui/react-select"
  dependency-version: 2.2.5
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: "@radix-ui/react-slot"
  dependency-version: 1.2.3
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: "@radix-ui/react-switch"
  dependency-version: 1.2.5
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: "@react-email/render"
  dependency-version: 1.1.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: "@tanstack/react-table"
  dependency-version: 8.21.3
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: arctic
  dependency-version: 3.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: axios
  dependency-version: 1.9.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: better-sqlite3
  dependency-version: 11.10.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: cmdk
  dependency-version: 1.1.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: drizzle-orm
  dependency-version: 0.44.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: eslint
  dependency-version: 9.28.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: eslint-config-next
  dependency-version: 15.3.3
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: helmet
  dependency-version: 8.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: lucide-react
  dependency-version: 0.511.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: next
  dependency-version: 15.3.3
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: npm
  dependency-version: 11.4.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: react
  dependency-version: 19.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: "@types/react"
  dependency-version: 19.1.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: prod-minor-updates
- dependency-name: react-dom
  dependency-version: 19.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: "@types/react-dom"
  dependency-version: 19.1.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: prod-minor-updates
- dependency-name: react-hook-form
  dependency-version: 7.56.4
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: semver
  dependency-version: 7.7.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: "@types/semver"
  dependency-version: 7.7.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: tw-animate-css
  dependency-version: 1.3.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: zod
  dependency-version: 3.25.46
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
...

Signed-off-by: dependabot[bot] <support@github.com>

* modified:   package-lock.json
	modified:   package.json

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Marvin <127591405+Lokowitz@users.noreply.github.com>
2025-06-01 15:07:49 +02:00
dependabot[bot] be0c7444e9 Bump node from 20-alpine to 24-alpine in the major-updates group (#111)
Bumps the major-updates group with 1 update: node.


Updates `node` from 20-alpine to 24-alpine

---
updated-dependencies:
- dependency-name: node
  dependency-version: 24-alpine
  dependency-type: direct:production
  dependency-group: major-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-01 14:12:08 +02:00
dependabot[bot] 858c809514 Bump the dev-patch-updates group with 8 updates (#117)
Bumps the dev-patch-updates group with 8 updates:

| Package | From | To |
| --- | --- | --- |
| [@tailwindcss/postcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-postcss) | `4.1.4` | `4.1.8` |
| [@types/cors](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/cors) | `2.8.17` | `2.8.18` |
| [esbuild](https://github.com/evanw/esbuild) | `0.25.2` | `0.25.5` |
| [postcss](https://github.com/postcss/postcss) | `8.5.1` | `8.5.4` |
| [react-email](https://github.com/resend/react-email/tree/HEAD/packages/react-email) | `4.0.6` | `4.0.15` |
| [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss) | `4.1.4` | `4.1.8` |
| [tsc-alias](https://github.com/justkey007/tsc-alias) | `1.8.10` | `1.8.16` |
| [tsx](https://github.com/privatenumber/tsx) | `4.19.3` | `4.19.4` |


Updates `@tailwindcss/postcss` from 4.1.4 to 4.1.8
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.1.8/packages/@tailwindcss-postcss)

Updates `@types/cors` from 2.8.17 to 2.8.18
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/cors)

Updates `esbuild` from 0.25.2 to 0.25.5
- [Release notes](https://github.com/evanw/esbuild/releases)
- [Changelog](https://github.com/evanw/esbuild/blob/main/CHANGELOG.md)
- [Commits](https://github.com/evanw/esbuild/compare/v0.25.2...v0.25.5)

Updates `postcss` from 8.5.1 to 8.5.4
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.5.1...8.5.4)

Updates `react-email` from 4.0.6 to 4.0.15
- [Release notes](https://github.com/resend/react-email/releases)
- [Changelog](https://github.com/resend/react-email/blob/canary/packages/react-email/CHANGELOG.md)
- [Commits](https://github.com/resend/react-email/commits/react-email@4.0.15/packages/react-email)

Updates `tailwindcss` from 4.1.4 to 4.1.8
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.1.8/packages/tailwindcss)

Updates `tsc-alias` from 1.8.10 to 1.8.16
- [Release notes](https://github.com/justkey007/tsc-alias/releases)
- [Commits](https://github.com/justkey007/tsc-alias/compare/v1.8.10...v1.8.16)

Updates `tsx` from 4.19.3 to 4.19.4
- [Release notes](https://github.com/privatenumber/tsx/releases)
- [Changelog](https://github.com/privatenumber/tsx/blob/master/release.config.cjs)
- [Commits](https://github.com/privatenumber/tsx/compare/v4.19.3...v4.19.4)

---
updated-dependencies:
- dependency-name: "@tailwindcss/postcss"
  dependency-version: 4.1.8
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@types/cors"
  dependency-version: 2.8.18
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: esbuild
  dependency-version: 0.25.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: postcss
  dependency-version: 8.5.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: react-email
  dependency-version: 4.0.15
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: tailwindcss
  dependency-version: 4.1.8
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: tsc-alias
  dependency-version: 1.8.16
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: tsx
  dependency-version: 4.19.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-01 14:11:51 +02:00
dependabot[bot] 10ff2c8a65 Bump the prod-patch-updates group with 19 updates (#120)
Bumps the prod-patch-updates group with 19 updates:

| Package | From | To |
| --- | --- | --- |
| [@asteasolutions/zod-to-openapi](https://github.com/asteasolutions/zod-to-openapi) | `7.3.0` | `7.3.2` |
| [@radix-ui/react-avatar](https://github.com/radix-ui/primitives) | `1.1.2` | `1.1.10` |
| [@radix-ui/react-collapsible](https://github.com/radix-ui/primitives) | `1.1.2` | `1.1.11` |
| [@radix-ui/react-dialog](https://github.com/radix-ui/primitives) | `1.1.4` | `1.1.14` |
| [@radix-ui/react-dropdown-menu](https://github.com/radix-ui/primitives) | `2.1.4` | `2.1.15` |
| [@radix-ui/react-label](https://github.com/radix-ui/primitives) | `2.1.1` | `2.1.7` |
| [@radix-ui/react-popover](https://github.com/radix-ui/primitives) | `1.1.4` | `1.1.14` |
| [@radix-ui/react-progress](https://github.com/radix-ui/primitives) | `1.1.4` | `1.1.7` |
| [@radix-ui/react-separator](https://github.com/radix-ui/primitives) | `1.1.1` | `1.1.7` |
| [@radix-ui/react-tabs](https://github.com/radix-ui/primitives) | `1.1.2` | `1.1.12` |
| [@radix-ui/react-toast](https://github.com/radix-ui/primitives) | `1.2.4` | `1.2.14` |
| [@react-email/components](https://github.com/resend/react-email/tree/HEAD/packages/components) | `0.0.36` | `0.0.41` |
| [@react-email/tailwind](https://github.com/resend/react-email/tree/HEAD/packages/tailwind) | `1.0.4` | `1.0.5` |
| [glob](https://github.com/isaacs/node-glob) | `11.0.0` | `11.0.2` |
| [input-otp](https://github.com/guilhermerodz/input-otp/tree/HEAD/packages/input-otp) | `1.4.1` | `1.4.2` |
| [next-themes](https://github.com/pacocoursey/next-themes) | `0.4.4` | `0.4.6` |
| [ws](https://github.com/websockets/ws) | `8.18.0` | `8.18.2` |
| [@types/ws](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/ws) | `8.5.13` | `8.18.1` |
| [zod-validation-error](https://github.com/causaly/zod-validation-error) | `3.4.0` | `3.4.1` |


Updates `@asteasolutions/zod-to-openapi` from 7.3.0 to 7.3.2
- [Release notes](https://github.com/asteasolutions/zod-to-openapi/releases)
- [Commits](https://github.com/asteasolutions/zod-to-openapi/compare/v7.3.0...v7.3.2)

Updates `@radix-ui/react-avatar` from 1.1.2 to 1.1.10
- [Changelog](https://github.com/radix-ui/primitives/blob/main/release-process.md)
- [Commits](https://github.com/radix-ui/primitives/commits)

Updates `@radix-ui/react-collapsible` from 1.1.2 to 1.1.11
- [Changelog](https://github.com/radix-ui/primitives/blob/main/release-process.md)
- [Commits](https://github.com/radix-ui/primitives/commits)

Updates `@radix-ui/react-dialog` from 1.1.4 to 1.1.14
- [Changelog](https://github.com/radix-ui/primitives/blob/main/release-process.md)
- [Commits](https://github.com/radix-ui/primitives/commits)

Updates `@radix-ui/react-dropdown-menu` from 2.1.4 to 2.1.15
- [Changelog](https://github.com/radix-ui/primitives/blob/main/release-process.md)
- [Commits](https://github.com/radix-ui/primitives/commits)

Updates `@radix-ui/react-label` from 2.1.1 to 2.1.7
- [Changelog](https://github.com/radix-ui/primitives/blob/main/release-process.md)
- [Commits](https://github.com/radix-ui/primitives/commits)

Updates `@radix-ui/react-popover` from 1.1.4 to 1.1.14
- [Changelog](https://github.com/radix-ui/primitives/blob/main/release-process.md)
- [Commits](https://github.com/radix-ui/primitives/commits)

Updates `@radix-ui/react-progress` from 1.1.4 to 1.1.7
- [Changelog](https://github.com/radix-ui/primitives/blob/main/release-process.md)
- [Commits](https://github.com/radix-ui/primitives/commits)

Updates `@radix-ui/react-separator` from 1.1.1 to 1.1.7
- [Changelog](https://github.com/radix-ui/primitives/blob/main/release-process.md)
- [Commits](https://github.com/radix-ui/primitives/commits)

Updates `@radix-ui/react-tabs` from 1.1.2 to 1.1.12
- [Changelog](https://github.com/radix-ui/primitives/blob/main/release-process.md)
- [Commits](https://github.com/radix-ui/primitives/commits)

Updates `@radix-ui/react-toast` from 1.2.4 to 1.2.14
- [Changelog](https://github.com/radix-ui/primitives/blob/main/release-process.md)
- [Commits](https://github.com/radix-ui/primitives/commits)

Updates `@react-email/components` from 0.0.36 to 0.0.41
- [Release notes](https://github.com/resend/react-email/releases)
- [Changelog](https://github.com/resend/react-email/blob/canary/packages/components/CHANGELOG.md)
- [Commits](https://github.com/resend/react-email/commits/@react-email/components@0.0.41/packages/components)

Updates `@react-email/tailwind` from 1.0.4 to 1.0.5
- [Release notes](https://github.com/resend/react-email/releases)
- [Changelog](https://github.com/resend/react-email/blob/canary/packages/tailwind/CHANGELOG.md)
- [Commits](https://github.com/resend/react-email/commits/@react-email/tailwind@1.0.5/packages/tailwind)

Updates `glob` from 11.0.0 to 11.0.2
- [Changelog](https://github.com/isaacs/node-glob/blob/main/changelog.md)
- [Commits](https://github.com/isaacs/node-glob/compare/v11.0.0...v11.0.2)

Updates `input-otp` from 1.4.1 to 1.4.2
- [Changelog](https://github.com/guilhermerodz/input-otp/blob/master/CHANGELOG.md)
- [Commits](https://github.com/guilhermerodz/input-otp/commits/HEAD/packages/input-otp)

Updates `next-themes` from 0.4.4 to 0.4.6
- [Release notes](https://github.com/pacocoursey/next-themes/releases)
- [Commits](https://github.com/pacocoursey/next-themes/compare/v0.4.4...v0.4.6)

Updates `ws` from 8.18.0 to 8.18.2
- [Release notes](https://github.com/websockets/ws/releases)
- [Commits](https://github.com/websockets/ws/compare/8.18.0...8.18.2)

Updates `@types/ws` from 8.5.13 to 8.18.1
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/ws)

Updates `zod-validation-error` from 3.4.0 to 3.4.1
- [Release notes](https://github.com/causaly/zod-validation-error/releases)
- [Changelog](https://github.com/causaly/zod-validation-error/blob/main/CHANGELOG.md)
- [Commits](https://github.com/causaly/zod-validation-error/compare/v3.4.0...v3.4.1)

---
updated-dependencies:
- dependency-name: "@asteasolutions/zod-to-openapi"
  dependency-version: 7.3.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: "@radix-ui/react-avatar"
  dependency-version: 1.1.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: "@radix-ui/react-collapsible"
  dependency-version: 1.1.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: "@radix-ui/react-dialog"
  dependency-version: 1.1.14
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: "@radix-ui/react-dropdown-menu"
  dependency-version: 2.1.15
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: "@radix-ui/react-label"
  dependency-version: 2.1.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: "@radix-ui/react-popover"
  dependency-version: 1.1.14
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: "@radix-ui/react-progress"
  dependency-version: 1.1.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: "@radix-ui/react-separator"
  dependency-version: 1.1.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: "@radix-ui/react-tabs"
  dependency-version: 1.1.12
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: "@radix-ui/react-toast"
  dependency-version: 1.2.14
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: "@react-email/components"
  dependency-version: 0.0.41
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: "@react-email/tailwind"
  dependency-version: 1.0.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: glob
  dependency-version: 11.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: input-otp
  dependency-version: 1.4.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: next-themes
  dependency-version: 0.4.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: ws
  dependency-version: 8.18.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: "@types/ws"
  dependency-version: 8.18.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: prod-patch-updates
- dependency-name: zod-validation-error
  dependency-version: 3.4.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-01 14:08:55 +02:00
PrtmPhlp 167d0b6867 unnecessary file 2025-06-01 12:19:09 +02:00
PrtmPhlp 8c121daf6c docker run command in detached mode 2025-06-01 12:15:14 +02:00
Marvin a23d437bd3 Create dependabot.yml 2025-06-01 11:01:55 +02:00
Owen cd280d1396 Also start the service 2025-05-31 11:02:53 -04:00
Owen d18200739a Check if docker is running 2025-05-31 11:01:03 -04:00
Owen a62b2e8d10 Use 41 for dnf5 2025-05-31 10:56:38 -04:00
Owen Schwartz c92069a1f4 Merge pull request #796 from socheatsok78/non-root-installer
Allow installer to run without requires `sudo`
2025-05-31 10:48:47 -04:00
Damien Rajon c5e37c1608 send user data to badger when authenticated 2025-05-30 20:37:21 +02:00
Rajesh V 948eb7f6d0 docker socket 2025-05-29 22:34:05 +05:30
miloschwartz 62a0104e70 Merge branch 'dev' into postgres 2025-05-29 12:09:56 -04:00
miloschwartz 6dd8db5cd1 add new logo 2025-05-29 12:09:49 -04:00
Socheat Sok 9ea7275371 Ensure installer check if current user is in docker group 2025-05-29 22:49:42 +07:00
Socheat Sok c997b8625f Re: "Allow installer to run without sudo & only need it when need to install Docker" 2025-05-29 21:55:50 +07:00
Socheat Sok 6f3514199a Revert "Allow installer to run without sudo & only need it when need to install Docker"
This reverts commit 56fd366a7d.
2025-05-29 21:45:57 +07:00
Owen 0cfc4d7dad Update for new dnf 2025-05-29 10:40:15 -04:00
Socheat Sok 56fd366a7d Allow installer to run without sudo & only need it when need to install Docker 2025-05-29 16:05:31 +07:00
Owen 1c18b2bffb Create redis connection 2025-05-28 20:59:06 -04:00
Owen 23b5dcfbed Update readme 2025-05-27 20:47:23 -04:00
Owen d523ebe0e0 Merge branch 'dev' into auth-providers-clients 2025-05-27 20:46:09 -04:00
miloschwartz 30ebbaaef0 Merge branch 'dev' into postgres 2025-05-27 17:19:43 -04:00
Marvin dba5a73e0e New Crowdin updates (#28)
* New translations en-us.json (French)

* New translations en-us.json (German)

* New translations en-us.json (Italian)

* New translations en-us.json (Polish)

* New translations en-us.json (Portuguese)

* New translations en-us.json (Turkish)

* New translations en-us.json (French)

* New translations en-us.json (German)

* New translations en-us.json (Italian)

* New translations en-us.json (Polish)

* New translations en-us.json (Portuguese)
2025-05-25 21:09:05 +02:00
Lokowitz f07e8d08c3 update all 2025-05-25 19:01:20 +00:00
vlalx ea24759bb3 I18n components (#27)
* New translation keys in en-US locale

* New translation keys in de-DE locale

* New translation keys in fr-FR locale

* New translation keys in it-IT locale

* New translation keys in pl-PL locale

* New translation keys in pt-PT locale

* New translation keys in tr-TR locale

* Move into function

* Replace string matching to boolean check

* Add FIXIT in UsersTable

* Use localization for size units

* Missed and restored translation keys

* fixup! New translation keys in tr-TR locale

* Add translation keys in components
2025-05-25 16:41:38 +02:00
Owen Schwartz b467d6afa1 Merge pull request #779 from jpgnz/main
README.md - Append https:// to geoblock
2025-05-24 23:59:11 -04:00
James Graham 373441b7ab Fix geolock url in README.md
Geoblock url needed https:// appended
2025-05-25 13:36:44 +12:00
Marvin af3694da34 New Crowdin updates (#26)
* New translations en-us.json (French)

* New translations en-us.json (German)

* New translations en-us.json (Italian)

* New translations en-us.json (Polish)

* New translations en-us.json (Portuguese)

* New translations en-us.json (Turkish)

* New translations en-us.json (French)

* New translations en-us.json (German)

* New translations en-us.json (Italian)

* New translations en-us.json (Polish)

* New translations en-us.json (Portuguese)

* New translations en-us.json (Turkish)

* New translations en-us.json (French)

* New translations en-us.json (German)

* New translations en-us.json (Italian)

* New translations en-us.json (Polish)

* New translations en-us.json (Portuguese)
2025-05-17 22:39:07 +02:00
Lokowitz ae4ef4eb99 modified: messages/en-US.json
modified:   src/components/tags/autocomplete.tsx
2025-05-17 20:34:01 +00:00
Lokowitz 547e777eb0 more fixes 2025-05-17 20:16:26 +00:00
Lokowitz d9ee40c898 more fixes 2025-05-17 20:04:56 +00:00
Lokowitz eff812eaa8 first fixes 2025-05-17 18:17:22 +00:00
vlalx 731ec1da69 I18n app other (#24)
* New translation keys in en-US locale

* New translation keys in de-DE locale

* New translation keys in fr-FR locale

* New translation keys in it-IT locale

* New translation keys in pl-PL locale

* New translation keys in pt-PT locale

* New translation keys in tr-TR locale

* Add translation keys in app/invite, app/setup and other files

* Fix build

---------

Co-authored-by: Lokowitz <marvinlokowitz@gmail.com>
2025-05-17 18:23:34 +02:00
vlalx b8ed5ac1c5 I18n auth (#23)
* New translation keys in en-US locale

* New translation keys in de-DE locale

* New translation keys in fr-FR locale

* New translation keys in it-IT locale

* New translation keys in pl-PL locale

* New translation keys in pt-PT locale

* New translation keys in tr-TR locale

* Add translation keys in app/auth

* Fix build

---------

Co-authored-by: Lokowitz <marvinlokowitz@gmail.com>
2025-05-17 18:11:56 +02:00
vlalx d2d84be99a I18n admin (#22)
* New translation keys in en-US locale

* New translation keys in de-DE locale

* New translation keys in fr-FR locale

* New translation keys in it-IT locale

* New translation keys in pl-PL locale

* New translation keys in pt-PT locale

* New translation keys in tr-TR locale

* Add translation keys in app/admin

* Fix build

---------

Co-authored-by: Lokowitz <marvinlokowitz@gmail.com>
2025-05-17 18:04:19 +02:00
vlalx 96bfc3cf36 I18n orgId/settings (#21)
* New translation keys in en-US locale

* New translation keys in de-DE locale

* New translation keys in fr-FR locale

* New translation keys in it-IT locale

* New translation keys in pl-PL locale

* New translation keys in pt-PT locale

* New translation keys in tr-TR locale

* Add translation keys if settings/resources/resourceId/authentication

* New translation keys in en-US locale

* New translation keys in de-DE locale

* New translation keys in fr-FR locale

* New translation keys in it-IT locale

* New translation keys in pl-PL locale

* New translation keys in pt-PT locale

* New translation keys in tr-TR locale

* Add translation keys if settings/resources/resourceId/general

* Small naming fix

* New translation keys in en-US locale

* New translation keys in de-DE locale

* New translation keys in fr-FR locale

* New translation keys in it-IT locale

* New translation keys in pl-PL locale

* New translation keys in pt-PT locale

* New translation keys in tr-TR locale

* Add translation keys if settings/access/roles

* New translation keys in en-US locale

* New translation keys in de-DE locale

* New translation keys in fr-FR locale

* New translation keys in it-IT locale

* New translation keys in pl-PL locale

* New translation keys in pt-PT locale

* New translation keys in tr-TR locale

* Add translation keys in orgId/settings

* Fixes after merge

* Fixes after merge

* Fixes after merge

* Small fix

* Fix build
2025-05-17 17:49:01 +02:00
Lokowitz 6f54e3da9e New translations en-us.json (German) 2025-05-17 15:39:40 +00:00
Owen Schwartz 825730052b Merge pull request #736 from TuncTaylan/traefik-log-rotation
traefik log rotation with default values
2025-05-16 10:28:48 -04:00
Owen Schwartz edc8716297 Merge pull request #735 from TuncTaylan/traefik-update
update to traefik v3.4.0
2025-05-16 10:27:50 -04:00
Taylan 3ee4aaf194 log rotation with default values 2025-05-16 09:20:40 +02:00
Taylan b9a5d486b9 update to v3.4.0 2025-05-16 09:16:49 +02:00
miloschwartz d3b9363392 Merge branch 'dev' into auth-providers-clients 2025-05-13 15:08:46 -04:00
miloschwartz dc66ebeed6 Merge branch 'dev' into postgres 2025-05-13 15:08:05 -04:00
Milo Schwartz 1f584bf3e8 Merge pull request #717 from fosrl/dev
1.4.0
2025-05-13 11:12:03 -04:00
miloschwartz 5b0200154a add feature parity 2025-05-13 11:09:38 -04:00
miloschwartz 1e55d96376 add different driver 2025-05-12 17:21:03 -04:00
Owen 285b99f1b7 Can adjust sites 2025-05-11 12:29:58 -04:00
Owen 8ad8f98f48 Able to update sites from the frontend 2025-05-11 11:11:27 -04:00
Owen 160a7ff3db Merge branch 'dev' into auth-providers-clients 2025-05-11 10:31:29 -04:00
Lokowitz 1f95d7161a fixes for invitations 2025-05-10 14:20:21 +00:00
Marvin 3a1f4d7545 Merge pull request #17 from vlalx/i18n_invitations
I18n invitations
2025-05-10 16:17:40 +02:00
vlalx 408822ab7f Fix missed translation keys 2025-05-09 20:03:32 +03:00
vlalx 840d5c2b66 Add translation keys in settings/access/invitations 2025-05-07 17:46:16 +03:00
vlalx 491b4e7b18 New translation keys in tr-TR locale 2025-05-07 17:45:12 +03:00
vlalx 89729a451c New translation keys in pt-PT locale 2025-05-07 17:44:56 +03:00
vlalx 0fd3271ef4 New translation keys in pl-PL locale 2025-05-07 17:44:46 +03:00
vlalx fa21934d5d New translation keys in it-IT locale 2025-05-07 17:44:36 +03:00
vlalx f91a4e88d5 New translation keys in fr-FR locale 2025-05-07 17:43:51 +03:00
vlalx 3e9dc4753b New translation keys in de-DE locale 2025-05-07 17:43:42 +03:00
vlalx b03415a0eb New translation keys in en-US locale 2025-05-07 17:43:17 +03:00
Marvin a8e8676b0a Merge pull request #16 from vlalx/i18n_admin_api_keys
i18n in admin/api-keys
2025-05-06 14:10:27 +02:00
vlalx 8242a66b97 Add translation keys in admin/api-keys 2025-05-06 15:02:23 +03:00
vlalx d994a8100d Add missed translation keys in settings/api-keys 2025-05-06 15:02:21 +03:00
vlalx 1ee8561e2a New translation keys in tr-TR locale 2025-05-06 15:00:21 +03:00
vlalx bb7421c54e New translation keys in pt-PT locale 2025-05-06 15:00:07 +03:00
vlalx 99352aa2a9 New translation keys in pl-PL locale 2025-05-06 14:59:52 +03:00
vlalx 31d54eb63c New translation keys in it-IT locale 2025-05-06 14:59:41 +03:00
vlalx 58c12996f1 New translation keys in fr-FR locale 2025-05-06 14:59:24 +03:00
vlalx 3dba4aa36d New translation keys in de-DE locale 2025-05-06 14:59:11 +03:00
vlalx d88fc132cc New translation keys in en-US locale 2025-05-06 14:58:41 +03:00
Lokowitz c6ff868be8 modified: src/app/setup/page.tsx 2025-05-06 10:25:00 +00:00
Marvin e8d2cde465 Merge pull request #15 from Lokowitz/translations_new_i18n
New Crowdin updates
2025-05-06 12:14:20 +02:00
Marvin 2bd06ff493 New translations en-us.json (Turkish) 2025-05-06 12:13:19 +02:00
Marvin 75dc6edd51 New translations en-us.json (Portuguese) 2025-05-06 12:13:18 +02:00
Marvin afc6ee596d New translations en-us.json (Polish) 2025-05-06 12:13:17 +02:00
Marvin d47c2f9dcf New translations en-us.json (Italian) 2025-05-06 12:13:17 +02:00
Marvin 23f9d314df New translations en-us.json (German) 2025-05-06 12:13:16 +02:00
Marvin cae4f5d840 New translations en-us.json (French) 2025-05-06 12:13:15 +02:00
Lokowitz 1e72b0f854 add admin/license i18n 2025-05-06 09:41:44 +00:00
Lokowitz 4dd9f4736d add admin/user i18n 2025-05-06 06:49:47 +00:00
Marvin e38941adf1 Merge pull request #14 from vlalx/support_i18n
api keys
2025-05-06 07:21:55 +02:00
vlalx b9c7c8c966 api keys 2025-05-06 06:33:43 +03:00
Lokowitz 87b95986c3 ... 2025-05-05 19:37:23 +00:00
Marvin e48a0fcabc Merge pull request #12 from Lokowitz/translations_i18n
New Crowdin updates
2025-05-05 21:34:53 +02:00
Marvin e9e9478f6c New translations en-us.json (Portuguese) 2025-05-05 21:33:43 +02:00
Marvin bc050097c3 New translations en-us.json (Polish) 2025-05-05 21:33:41 +02:00
Marvin dde2f45669 New translations en-us.json (Italian) 2025-05-05 21:33:39 +02:00
Marvin f62f2e3b08 New translations en-us.json (French) 2025-05-05 21:33:38 +02:00
Marvin 0b235f985f New translations en-us.json (German) 2025-05-05 21:33:37 +02:00
Marvin bb0c1c839b New translations en-us.json (Turkish) 2025-05-05 21:26:42 +02:00
Marvin 4e02a7712a New translations en-us.json (Portuguese) 2025-05-05 21:26:41 +02:00
Marvin 8df01208e0 New translations en-us.json (Polish) 2025-05-05 21:26:40 +02:00
Marvin 938cc31b8a New translations en-us.json (Italian) 2025-05-05 21:26:39 +02:00
Marvin 08bd3cfd0b New translations en-us.json (French) 2025-05-05 21:26:38 +02:00
Marvin 3bb4b44f19 New translations en-us.json (German) 2025-05-05 21:26:35 +02:00
Lokowitz a058f4acf3 complete sites i18n 2025-05-05 19:24:14 +00:00
Marvin 55222450f3 New translations en-us.json (Turkish) 2025-05-05 18:18:45 +02:00
Marvin 17789ef1a5 New translations en-us.json (Portuguese) 2025-05-05 18:18:44 +02:00
Marvin dd24b4ad74 New translations en-us.json (Polish) 2025-05-05 18:18:43 +02:00
Marvin 6b8fa28308 New translations en-us.json (Italian) 2025-05-05 18:18:42 +02:00
Marvin d9aab7b3ff New translations en-us.json (French) 2025-05-05 18:18:41 +02:00
Marvin 5b44f3552d New translations en-us.json (German) 2025-05-05 18:18:40 +02:00
Lokowitz fa1997adc1 complete share link i18n 2025-05-05 16:10:08 +00:00
Marvin 29375385c0 Create de-DE.json 2025-05-04 19:41:09 +02:00
Marvin 4f5c3a86ff Merge pull request #11 from Lokowitz/translations_i18n
Translations i18n
2025-05-04 19:40:27 +02:00
Marvin 6e5391cb8f Delete messages/de-DE.json 2025-05-04 19:40:10 +02:00
Lokowitz 3d4b9d48e3 modified: src/components/LocaleSwitcher.tsx
modified:   src/i18n/config.ts
2025-05-04 17:20:01 +00:00
Marvin aca1cc0518 New translations en-us.json (Turkish) 2025-05-04 19:15:33 +02:00
Marvin 2543bf356c New translations en-us.json (Portuguese) 2025-05-04 19:15:33 +02:00
Marvin 95fed840d4 New translations en-us.json (Polish) 2025-05-04 19:15:32 +02:00
Marvin 8a377d73fd New translations en-us.json (Italian) 2025-05-04 19:15:31 +02:00
Marvin 576fda2357 New translations en-us.json (French) 2025-05-04 19:15:30 +02:00
Marvin 230c08e541 New translations en-us.json (German) 2025-05-04 19:15:29 +02:00
Lokowitz 9e572685ba deleted: messages/de-DE.json 2025-05-04 17:00:29 +00:00
Marvin 7f4135e0cf New translations en-us.json (German) 2025-05-04 18:58:14 +02:00
Lokowitz 9d68c5666f remove language translation 2025-05-04 16:35:43 +00:00
Lokowitz d460dd35c7 deleted: messages/de-DE.json 2025-05-04 16:29:47 +00:00
Lokowitz 059081ad8b more i18n 2025-05-04 16:23:08 +00:00
Lokowitz 7eb08474ff Add first i18n stuff 2025-05-04 15:11:42 +00:00
Owen a76dd9c9d1 Merge branch 'dev' into auth-providers-clients 2025-05-03 11:45:11 -04:00
Owen 752c474983 Merge branch 'dev' into auth-providers-clients 2025-04-29 11:39:12 -04:00
Owen 02ccb029ae Merge branch 'hp-multi-client' into auth-providers-clients 2025-04-29 11:34:32 -04:00
miloschwartz b01fa82627 Merge branch 'auth-providers' into auth-providers-clients 2025-04-22 22:58:06 -04:00
Owen 0c370e4299 Scope down the allowedIps so there are no conflicts 2025-04-22 22:18:50 -04:00
miloschwartz d737fda8bc Merge branch 'auth-providers' into auth-providers-clients 2025-04-20 22:51:05 -04:00
Owen 475a431859 Add TODO 2025-04-20 21:07:22 -04:00
miloschwartz 490ddfcd88 add clients openapi registries 2025-04-20 17:00:45 -04:00
miloschwartz fa6fc9e80d small clients ui tweaks 2025-04-20 16:49:48 -04:00
miloschwartz f960fb7d67 Merge branch 'hp-multi-client' into auth-providers-clients 2025-04-20 16:15:40 -04:00
Owen f6a19631dc Still working on stability 2025-04-20 14:25:53 -04:00
Owen e2efd0e65a Make sure to add the subnet 2025-04-18 16:44:03 -04:00
Owen 361f487384 Add back removed section 2025-04-18 16:21:06 -04:00
Owen dc49027b30 Edit client page done 2025-04-18 15:32:20 -04:00
Owen 581fdd67b1 Allow picking ips when creating stuff 2025-04-18 14:41:27 -04:00
Owen d664aa204f Handle cidrs correctly 2025-04-16 22:07:07 -04:00
Owen db0328fa71 Allow configuration of client and org subnets 2025-04-16 22:00:24 -04:00
Owen 569635f3ed newts not being on when olm is started 2025-04-13 21:28:11 -04:00
Owen b7ae712b63 Add ping; working on newt tunnel reliability 2025-04-13 17:27:53 -04:00
Owen 8398f7b7c0 Relaying working 2025-04-11 20:52:45 -04:00
Owen e57574ba9c Solve olm not having chance to send hp message 2025-04-11 10:33:20 -04:00
Owen 68ebdda1ff Start new relay method 2025-04-07 09:55:39 -04:00
Owen 410207f3ca Working on htp 2025-04-04 10:59:22 -04:00
Owen 7faf1fba8b Move up client reject 2025-04-01 22:49:08 -04:00
Owen 8c267489c7 Add exit node to create site 2025-04-01 21:52:03 -04:00
Owen fb5c428147 Add logging to not sending because endpoint 2025-04-01 21:28:16 -04:00
Owen 5ff4215bde Able to connect multi site on olm - POC 1 2025-04-01 12:49:02 -04:00
Owen 96d6ad8142 Create clients working again 2025-04-01 10:13:20 -04:00
Owen 875fa215c5 Update create client form 2025-03-31 16:27:40 -04:00
Owen bcd80e19d4 Update list clients 2025-03-31 16:23:02 -04:00
Owen 56e1684e2e Update api endpoints for new association 2025-03-31 16:21:01 -04:00
Owen 1baa02de89 Fix relay ws message 2025-03-31 15:45:51 -04:00
Owen 11cdfa7557 Merge branch 'holepunch' into hp-multi-client 2025-03-31 15:34:35 -04:00
Owen 8fbd8a905f We do not need to send any message back 2025-03-31 15:34:18 -04:00
Owen cd059728fd Put back handle relay message 2025-03-31 15:25:30 -04:00
Owen 473b5bd3db Merge branch 'holepunch' into hp-multi-client 2025-03-31 15:24:33 -04:00
Owen 81c7954e0c Remove unused argon 2025-03-31 15:19:37 -04:00
Owen a665e3aae9 Fix issues with relaying and holepunching 2025-03-27 22:13:57 -04:00
Owen 4b6985718a Fix ip picking from subnet in exclusion 2025-03-27 22:13:39 -04:00
Owen 619cfef1c7 Working on multi client 2025-03-27 14:27:41 -04:00
Owen 15eb666394 Remove olm/wg/relay message 2025-03-26 21:41:20 -04:00
Owen dac49f7fdc Converting more multi site 2025-03-26 21:39:12 -04:00
Owen 926ec831e2 Finish conversion of olm reg to multi site 2025-03-26 21:23:26 -04:00
Owen 87012c47ea Start changes for multi site clients
- Org subnet and assign sites and clients out of the same subnet group
  on each org
- Add join table for client on multiple sites
- Start to handle websocket endpoints for these multiple connections
2025-03-25 22:01:08 -04:00
Owen fbe7e0a427 Merge branch 'dev' into holepunch 2025-03-25 20:42:14 -04:00
Owen 779a1c303f Verify holepunch token and send gerbil pub key 2025-03-15 21:45:53 -04:00
Owen 14e6136683 Send down gerbil pub so it can encrypt 2025-03-14 09:18:13 -04:00
Owen 1f11a1df02 Merge branch 'main' into holepunch 2025-03-10 21:13:05 -04:00
Owen 8e4bccffbf Dont use bytes out for online
Persistant keep alive means that this will always increase
2025-02-27 23:54:24 -05:00
Owen 733e0e07c3 Fix subnet issues 2025-02-24 20:21:57 -05:00
Owen 8ee6a3f134 Add bruno 2025-02-23 21:35:13 -05:00
Owen bacc5e4213 Add relay message 2025-02-23 20:18:03 -05:00
Owen afd87d07a3 Basic relay working! 2025-02-23 16:49:41 -05:00
Owen bebe40c8e8 HP works! 2025-02-22 12:53:35 -05:00
Owen e4c5be4350 Initial hp working? 2025-02-22 11:20:56 -05:00
Owen a9a9391b39 Receive new holepunch info 2025-02-21 22:29:48 -05:00
miloschwartz 9f54f4d81a show site link in clients table 2025-02-21 22:20:19 -05:00
miloschwartz 1a63669805 Merge branch 'clients' of https://github.com/fosrl/pangolin_dg into clients 2025-02-21 18:51:43 -05:00
miloschwartz fcf6abd36e delete client instead of site 2025-02-21 18:51:27 -05:00
Owen b9080a1ec1 Working! 2025-02-21 18:51:16 -05:00
Owen 450b0bf4fa Use the right ip 2025-02-21 18:16:07 -05:00
miloschwartz a4d3a5ad4d don't sent orgId in createClient 2025-02-21 17:30:15 -05:00
miloschwartz 6c22a2aeb4 Merge branch 'clients' of https://github.com/fosrl/pangolin_dg into clients 2025-02-21 17:25:05 -05:00
miloschwartz 2e36c97d1c set checked 2025-02-21 17:24:54 -05:00
Owen f99efbb1e9 Update the public key and the endpoint 2025-02-21 17:23:22 -05:00
Owen 6cf3bf0255 Not optional 2025-02-21 17:22:05 -05:00
Owen a0abe41c8a Fix up ws messages 2025-02-21 17:13:54 -05:00
miloschwartz 3830ad65fc more frontend for clients 2025-02-21 17:13:23 -05:00
miloschwartz 204403da67 Merge branch 'clients' of https://github.com/fosrl/pangolin_dg into clients 2025-02-21 16:58:39 -05:00
miloschwartz 098723b88d clients frontend demo first pass 2025-02-21 16:58:30 -05:00
Owen b21e758eb8 Initial olm test working 2025-02-21 16:19:12 -05:00
Owen b1f4971f25 Get new api endpoints working 2025-02-21 16:12:44 -05:00
miloschwartz 6e1bfdac58 add listClients endpoint 2025-02-21 15:45:34 -05:00
miloschwartz 11920ca997 add deleteClient endpoint 2025-02-21 15:26:48 -05:00
miloschwartz 255e29d9c8 Merge branch 'clients' of https://github.com/fosrl/pangolin_dg into clients 2025-02-21 14:39:31 -05:00
miloschwartz 35ccdd3014 add createClient for testing 2025-02-21 14:39:10 -05:00
Owen 757d628bc8 Handle port correctly 2025-02-21 12:52:24 -05:00
Owen a57d32d05d Add receive bandwidth 2025-02-21 12:41:02 -05:00
Owen ef69bf9256 Update ws paths 2025-02-21 12:34:05 -05:00
Owen bec303821b Handle types in handlers 2025-02-21 12:17:56 -05:00
miloschwartz 346f2db5fb add client olm relationship 2025-02-21 11:57:01 -05:00
Owen b9de0f8e38 Working on handlers 2025-02-21 10:55:38 -05:00
Owen e112fcba29 Move things around; rename to olm 2025-02-21 10:13:41 -05:00
miloschwartz 41983ce356 add wg site get config and pick client defaults 2025-02-20 22:34:51 -05:00
Owen fb49fb8ddd Initial schema 2025-02-20 18:10:52 -05:00
696 changed files with 75573 additions and 19078 deletions
+3
View File
@@ -26,3 +26,6 @@ install/
bruno/
LICENSE
CONTRIBUTING.md
dist
.git
config/
+62
View File
@@ -0,0 +1,62 @@
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "daily"
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: "/"
schedule:
interval: "daily"
groups:
patch-updates:
update-types:
- "patch"
minor-updates:
update-types:
- "minor"
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
- package-ecosystem: "gomod"
directory: "/install"
schedule:
interval: "daily"
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"
+5 -5
View File
@@ -12,13 +12,13 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v3
uses: actions/checkout@v5
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
uses: docker/setup-buildx-action@v3
- name: Log in to Docker Hub
uses: docker/login-action@v2
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
@@ -28,9 +28,9 @@ jobs:
run: echo "TAG=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
- name: Install Go
uses: actions/setup-go@v4
uses: actions/setup-go@v6
with:
go-version: 1.23.0
go-version: 1.24
- name: Update version in package.json
run: |
+34
View File
@@ -0,0 +1,34 @@
name: ESLint
on:
pull_request:
paths:
- '**/*.js'
- '**/*.jsx'
- '**/*.ts'
- '**/*.tsx'
- '.eslintrc*'
- 'package.json'
- 'yarn.lock'
- 'pnpm-lock.yaml'
- 'package-lock.json'
jobs:
Linter:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Set up Node.js
uses: actions/setup-node@v5
with:
node-version: '22'
- name: Install dependencies
run: |
npm ci
- name: Run ESLint
run: |
npx eslint . --ext .js,.jsx,.ts,.tsx
+1 -1
View File
@@ -14,7 +14,7 @@ jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v9
- uses: actions/stale@v10
with:
days-before-stale: 14
days-before-close: 14
+55
View File
@@ -0,0 +1,55 @@
name: Run Tests
on:
pull_request:
branches:
- main
- dev
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/setup-node@v5
with:
node-version: '22'
- name: Copy config file
run: cp config/config.example.yml config/config.yml
- name: Install dependencies
run: npm ci
- name: Create database index.ts
run: echo 'export * from "./sqlite";' > server/db/index.ts
- name: Generate database migrations
run: npm run db:sqlite:generate
- name: Apply database migrations
run: npm run db:sqlite:push
- name: Start app in background
run: nohup npm run dev &
- name: Wait for app availability
run: |
for i in {1..5}; do
if curl --silent --fail http://localhost:3002/auth/login; then
echo "App is up"
exit 0
fi
echo "Waiting for the app... attempt $i"
sleep 5
done
echo "App failed to start"
exit 1
- name: Build Docker image sqlite
run: make build-sqlite
- name: Build Docker image pg
run: make build-pg
+11
View File
@@ -18,6 +18,7 @@ yarn-error.log*
next-env.d.ts
*.db
*.sqlite
!Dockerfile.sqlite
*.sqlite3
*.log
.machinelogs*.json
@@ -25,6 +26,10 @@ next-env.d.ts
migrations
tsconfig.tsbuildinfo
config/config.yml
config/postgres
config/postgres*
config/openapi.yaml
config/key
dist
.dist
installer
@@ -33,3 +38,9 @@ bin
.secrets
test_event.json
.idea/
public/branding
server/db/index.ts
server/build.ts
postgres/
dynamic/
certificates/
+1 -1
View File
@@ -1 +1 @@
20
22
+1 -5
View File
@@ -4,11 +4,7 @@ Contributions are welcome!
Please see the contribution and local development guide on the docs page before getting started:
https://docs.fossorial.io/development
For ideas about what features to work on and our future plans, please see the roadmap:
https://docs.fossorial.io/roadmap
https://docs.digpangolin.com/development/contributing
### Licensing Considerations
+20 -9
View File
@@ -1,18 +1,26 @@
FROM node:20-alpine AS builder
FROM node:22-alpine AS builder
WORKDIR /app
ARG BUILD=oss
ARG DATABASE=sqlite
# COPY package.json package-lock.json ./
COPY package.json ./
RUN npm install
COPY package*.json ./
RUN npm ci
COPY . .
RUN npx drizzle-kit generate --dialect sqlite --schema ./server/db/schemas/ --out init
RUN echo "export * from \"./$DATABASE\";" > server/db/index.ts
RUN npm run build
RUN echo "export const build = \"$BUILD\" as any;" > server/build.ts
FROM node:20-alpine AS runner
RUN if [ "$DATABASE" = "pg" ]; then npx drizzle-kit generate --dialect postgresql --schema ./server/db/pg/schema.ts --out init; else npx drizzle-kit generate --dialect $DATABASE --schema ./server/db/$DATABASE/schema.ts --out init; fi
RUN npm run build:$DATABASE
RUN npm run build:cli
FROM node:22-alpine AS runner
WORKDIR /app
@@ -20,16 +28,19 @@ WORKDIR /app
RUN apk add --no-cache curl
# COPY package.json package-lock.json ./
COPY package.json ./
RUN npm install --only=production && npm cache clean --force
COPY package*.json ./
RUN npm ci --omit=dev && npm cache clean --force
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/init ./dist/init
COPY ./cli/wrapper.sh /usr/local/bin/pangctl
RUN chmod +x /usr/local/bin/pangctl ./dist/cli.mjs
COPY server/db/names.json ./dist/names.json
COPY public ./public
CMD ["npm", "start"]
CMD ["npm", "run", "start"]
+14
View File
@@ -0,0 +1,14 @@
FROM node:22-alpine
WORKDIR /app
COPY package*.json ./
# Install dependencies
RUN npm ci
# Copy source code
COPY . .
# Use tsx watch for development with hot reload
CMD ["npm", "run", "dev"]
-32
View File
@@ -1,35 +1,3 @@
Copyright (c) 2025 Fossorial, LLC.
Portions of this software are licensed as follows:
* All files that include a header specifying they are licensed under the
"Fossorial Commercial License" are governed by the Fossorial Commercial
License terms. The specific terms applicable to each customer depend on the
commercial license tier agreed upon in writing with Fossorial LLC.
Unauthorized use, copying, modification, or distribution is strictly
prohibited.
* All files that include a header specifying they are licensed under the GNU
Affero General Public License, Version 3 ("AGPL-3"), are governed by the
AGPL-3 terms. A full copy of the AGPL-3 license is provided below. However,
these files are also available under the Fossorial Commercial License if a
separate commercial license agreement has been executed between the customer
and Fossorial LLC.
* All files without a license header are, by default, licensed under the GNU
Affero General Public License, Version 3 (AGPL-3). These files may also be
made available under the Fossorial Commercial License upon agreement with
Fossorial LLC.
* All third-party components included in this repository are licensed under
their respective original licenses, as provided by their authors.
Please consult the header of each individual file to determine the applicable
license. For AGPL-3 licensed files, dual-licensing under the Fossorial
Commercial License is available subject to written agreement with Fossorial
LLC.
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
+12 -5
View File
@@ -1,10 +1,14 @@
.PHONY: build build-pg build-release build-arm build-x86 test clean
build-release:
@if [ -z "$(tag)" ]; then \
echo "Error: tag is required. Usage: make build-all tag=<tag>"; \
echo "Error: tag is required. Usage: make build-release tag=<tag>"; \
exit 1; \
fi
docker buildx build --platform linux/arm64,linux/amd64 -t fosrl/pangolin:latest -f Dockerfile --push .
docker buildx build --platform linux/arm64,linux/amd64 -t fosrl/pangolin:$(tag) -f Dockerfile --push .
docker buildx build --build-arg DATABASE=sqlite --platform linux/arm64,linux/amd64 -t fosrl/pangolin:latest --push .
docker buildx build --build-arg DATABASE=sqlite --platform linux/arm64,linux/amd64 -t fosrl/pangolin:$(tag) --push .
docker buildx build --build-arg DATABASE=pg --platform linux/arm64,linux/amd64 -t fosrl/pangolin:postgresql-latest --push .
docker buildx build --build-arg DATABASE=pg --platform linux/arm64,linux/amd64 -t fosrl/pangolin:postgresql-$(tag) --push .
build-arm:
docker buildx build --platform linux/arm64 -t fosrl/pangolin:latest .
@@ -12,8 +16,11 @@ build-arm:
build-x86:
docker buildx build --platform linux/amd64 -t fosrl/pangolin:latest .
build:
docker build -t fosrl/pangolin:latest .
build-sqlite:
docker build --build-arg DATABASE=sqlite -t fosrl/pangolin:latest .
build-pg:
docker build --build-arg DATABASE=pg -t fosrl/pangolin:postgresql-latest .
test:
docker run -it -p 3000:3000 -p 3001:3001 -p 3002:3002 -v ./config:/app/config fosrl/pangolin:latest
+71 -65
View File
@@ -1,53 +1,75 @@
<div align="center">
<h2 align="center"><a href="https://fossorial.io"><img alt="pangolin" src="public/logo//word_mark.png" width="400" /></a></h2>
[![Documentation](https://img.shields.io/badge/docs-latest-blue.svg?style=flat-square)](https://docs.fossorial.io/)
[![Docker](https://img.shields.io/docker/pulls/fosrl/pangolin?style=flat-square)](https://hub.docker.com/r/fosrl/pangolin)
![Stars](https://img.shields.io/github/stars/fosrl/pangolin?style=flat-square)
[![Discord](https://img.shields.io/discord/1325658630518865980?logo=discord&style=flat-square)](https://discord.gg/HCJR8Xhme4)
[![Youtube](https://img.shields.io/badge/YouTube-red?logo=youtube&logoColor=white&style=flat-square)](https://www.youtube.com/@fossorial-app)
<h2>
<picture>
<source media="(prefers-color-scheme: dark)" srcset="public/logo/word_mark_white.png">
<img alt="Pangolin Logo" src="public/logo/word_mark_black.png" width="250">
</picture>
</h2>
</div>
<h3 align="center">Tunneled Mesh Reverse Proxy Server with Access Control</h3>
<h4 align="center">Secure gateway to your private networks</h4>
<div align="center">
_Your own self-hosted zero trust tunnel._
_Pangolin tunnels your services to the internet so you can access anything from anywhere._
</div>
<div align="center">
<h5>
<a href="https://fossorial.io">
<a href="https://digpangolin.com">
Website
</a>
<span> | </span>
<a href="https://docs.fossorial.io/Getting%20Started/quick-install">
Install Guide
<a href="https://docs.digpangolin.com/self-host/quick-install-managed">
Quick Install Guide
</a>
<span> | </span>
<a href="mailto:numbat@fossorial.io">
<a href="mailto:contact@fossorial.io">
Contact Us
</a>
<span> | </span>
<a href="https://digpangolin.com/slack">
Slack
</a>
<span> | </span>
<a href="https://discord.gg/HCJR8Xhme4">
Discord
</a>
</h5>
[![Slack](https://img.shields.io/badge/chat-slack-yellow?style=flat-square&logo=slack)](https://digpangolin.com/slack)
[![Docker](https://img.shields.io/docker/pulls/fosrl/pangolin?style=flat-square)](https://hub.docker.com/r/fosrl/pangolin)
![Stars](https://img.shields.io/github/stars/fosrl/pangolin?style=flat-square)
[![Discord](https://img.shields.io/discord/1325658630518865980?logo=discord&style=flat-square)](https://discord.gg/HCJR8Xhme4)
[![YouTube](https://img.shields.io/badge/YouTube-red?logo=youtube&logoColor=white&style=flat-square)](https://www.youtube.com/@fossorial-app)
</div>
<p align="center">
<strong>
Start testing Pangolin at <a href="https://pangolin.fossorial.io/auth/signup">pangolin.fossorial.io</a>
</strong>
</p>
Pangolin is a self-hosted tunneled reverse proxy server with identity and access control, designed to securely expose private resources on distributed networks. Acting as a central hub, it connects isolated networks — even those behind restrictive firewalls — through encrypted tunnels, enabling easy access to remote services without opening ports.
<img src="public/screenshots/hero.png" alt="Preview"/>
_Resources page of Pangolin dashboard (dark mode) showing multiple resources available to connect._
![gif](public/clip.gif)
## Key Features
### Reverse Proxy Through WireGuard Tunnel
- Expose private resources on your network **without opening ports** (firewall punching).
- Secure and easy to configure site-to-site connectivity via a custom **user space WireGuard client**, [Newt](https://github.com/fosrl/newt).
- Secure and easy to configure private connectivity via a custom **user space WireGuard client**, [Newt](https://github.com/fosrl/newt).
- Built-in support for any WireGuard client.
- Automated **SSL certificates** (https) via [LetsEncrypt](https://letsencrypt.org/).
- Support for HTTP/HTTPS and **raw TCP/UDP services**.
- Load balancing.
- Extend functionality with existing [Traefik](https://github.com/traefik/traefik) plugins, such as [CrowdSec](https://plugins.traefik.io/plugins/6335346ca4caa9ddeffda116/crowdsec-bouncer-traefik-plugin) and [Geoblock](https://github.com/PascalMinder/geoblock).
- **Automatically install and configure Crowdsec via Pangolin's installer script.**
- Attach as many sites to the central server as you wish.
### Identity & Access Management
@@ -61,89 +83,73 @@ _Resources page of Pangolin dashboard (dark mode) showing multiple resources ava
- **Temporary, self-destructing share links.**
- Resource specific pin codes.
- Resource specific passwords.
- Passkeys
- External identity provider (IdP) support with OAuth2/OIDC, such as Authentik, Keycloak, Okta, and others.
- Auto-provision users and roles from your IdP.
### Simple Dashboard UI
<img src="public/auth-diagram1.png" alt="Auth and diagram"/>
- Manage sites, users, and roles with a clean and intuitive UI.
- Monitor site usage and connectivity.
- Light and dark mode options.
- Mobile friendly.
## Use Cases
### Easy Deployment
### Manage Access to Internal Apps
- Run on any cloud provider or on-premises.
- **Docker Compose based setup** for simplified deployment.
- Future-proof installation script for streamlined setup and feature additions.
- Use any WireGuard client to connect, or use **Newt, our custom user space client** for the best experience.
- Use the API to create custom integrations and scripts.
- Fine-grained access control to the API via scoped API keys.
- Comprehensive Swagger documentation for the API.
- Grant users access to your apps from anywhere using just a web browser. No client software required.
### Modular Design
### Developers and DevOps
- Extend functionality with existing [Traefik](https://github.com/traefik/traefik) plugins, such as [CrowdSec](https://plugins.traefik.io/plugins/6335346ca4caa9ddeffda116/crowdsec-bouncer-traefik-plugin) and [Geoblock](github.com/PascalMinder/geoblock).
- **Automatically install and configure Crowdsec via Pangolin's installer script.**
- Attach as many sites to the central server as you wish.
- Expose and test internal tools and dashboards like **Grafana**. Bring localhost or private IPs online for easy access.
<img src="public/screenshots/collage.png" alt="Collage"/>
### Secure API Gateway
## Deployment and Usage Example
- One application load balancer across multiple clouds and on-premises.
1. **Deploy the Central Server**:
### IoT and Edge Devices
- Deploy the Docker Compose stack onto a VPS hosted on a cloud platform like RackNerd, Amazon EC2, DigitalOcean Droplet, or similar. There are many cheap VPS hosting options available to suit your needs.
- Easily expose **IoT devices**, **edge servers**, or **Raspberry Pi** to the internet for field equipment monitoring.
> [!TIP]
> Many of our users have had a great experience with [RackNerd](https://my.racknerd.com/aff.php?aff=13788). Depending on promotions, you can likely get a **VPS with 1 vCPU, 1GB RAM, and ~20GB SSD for just around $12/year**. That's a great deal!
> We are part of the [RackNerd](https://my.racknerd.com/aff.php?aff=13788) affiliate program, so if you purchase through [our link](https://my.racknerd.com/aff.php?aff=13788), we receive a small commission which helps us maintain the project and keep it free for everyone.
<img src="public/screenshots/sites.png" alt="Sites"/>
2. **Domain Configuration**:
## Deployment Options
- Point your domain name to the VPS and configure Pangolin with your preferred settings.
### Fully Self Hosted
3. **Connect Private Sites**:
Host the full application on your own server or on the cloud with a VPS. Take a look at the [documentation](https://docs.digpangolin.com/self-host/quick-install) to get started.
- Install Newt or use another WireGuard client on private sites.
- Automatically establish a connection from these sites to the central server.
> Many of our users have had a great experience with [RackNerd](https://my.racknerd.com/aff.php?aff=13788). Depending on promotions, you can get a [**VPS with 1 vCPU, 1GB RAM, and ~20GB SSD for just around $12/year**](https://my.racknerd.com/aff.php?aff=13788&pid=912). That's a great deal!
4. **Expose Resources**:
### Pangolin Cloud
- Add resources to the central server and configure access control rules.
- Access these resources securely from anywhere.
Easy to use with simple [pay as you go pricing](https://digpangolin.com/pricing). [Check it out here](https://pangolin.fossorial.io/auth/signup).
**Use Case Example - Bypassing Port Restrictions in Home Lab**:
Imagine private sites where the ISP restricts port forwarding. By connecting these sites to Pangolin via WireGuard, you can securely expose HTTP and HTTPS resources on the private network without any networking complexity.
- Everything you get with self hosted Pangolin, but fully managed for you.
**Use Case Example - Deploying Services For Your Business**:
You can use Pangolin as an easy way to expose your business applications to your users behind a safe authentication portal you can integrate into your IdP solution. Expose resources on prem and on the cloud.
### Managed & High Availability
**Use Case Example - IoT Networks**:
IoT networks are often fragmented and difficult to manage. By deploying Pangolin on a central server, you can connect all your IoT sites via Newt or another WireGuard client. This creates a simple, secure, and centralized way to access IoT resources without the need for intricate networking setups.
Managed control plane, your infrastructure
## Similar Projects and Inspirations
- We manage database and control plane.
- You self-host lightweight exit-node.
- Traffic flows through your infra.
- We coordinate failover between your nodes or to Cloud when things go bad.
**Cloudflare Tunnels**:
A similar approach to proxying private resources securely, but Pangolin is a self-hosted alternative, giving you full control over your infrastructure.
Try it out using [Pangolin Cloud](https://pangolin.fossorial.io)
**Authelia**:
This inspired Pangolins centralized authentication system for proxies, enabling robust user and role management.
### Full Enterprise On-Premises
[Contact us](mailto:numbat@fossorial.io) for a full distributed and enterprise deployments on your infrastructure controlled by your team.
## Project Development / Roadmap
> [!NOTE]
> Pangolin is under heavy development. The roadmap is subject to change as we fix bugs, add new features, and make improvements.
View the [project board](https://github.com/orgs/fosrl/projects/1) for more detailed info.
We want to hear your feature requests! Add them to the [discussion board](https://github.com/orgs/fosrl/discussions/categories/feature-requests).
## Licensing
Pangolin is dual licensed under the AGPL-3 and the Fossorial Commercial license. Please see the [LICENSE](./LICENSE) file in the repository for details. For inquiries about commercial licensing, please contact us at [numbat@fossorial.io](mailto:numbat@fossorial.io).
Pangolin is dual licensed under the AGPL-3 and the Fossorial Commercial license. For inquiries about commercial licensing, please contact us at [numbat@fossorial.io](mailto:numbat@fossorial.io).
## Contributions
Looking for something to contribute? Take a look at issues marked with [help wanted](https://github.com/fosrl/pangolin/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22help%20wanted%22). Also take a look through the freature requests in Discussions - any are available and some are marked as a good first issue.
Please see [CONTRIBUTING](./CONTRIBUTING.md) in the repository for guidelines and best practices.
Please post bug reports and other functional issues in the [Issues](https://github.com/fosrl/pangolin/issues) section of the repository.
For all feature requests, or other ideas, please use the [Discussions](https://github.com/orgs/fosrl/discussions) section.
+72
View File
@@ -0,0 +1,72 @@
import requests
import yaml
import json
import base64
# The file path for the YAML file to be read
# You can change this to the path of your YAML file
YAML_FILE_PATH = 'blueprint.yaml'
# The API endpoint and headers from the curl request
API_URL = 'http://localhost:3004/v1/org/test/blueprint'
HEADERS = {
'accept': '*/*',
'Authorization': 'Bearer v7ix7xha1bmq2on.tzsden374mtmkeczm3tx44uzxsljnrst7nmg7ccr',
'Content-Type': 'application/json'
}
def convert_and_send(file_path, url, headers):
"""
Reads a YAML file, converts its content to a JSON payload,
and sends it via a PUT request to a specified URL.
"""
try:
# Read the YAML file content
with open(file_path, 'r') as file:
yaml_content = file.read()
# Parse the YAML string to a Python dictionary
# This will be used to ensure the YAML is valid before sending
parsed_yaml = yaml.safe_load(yaml_content)
# convert the parsed YAML to a JSON string
json_payload = json.dumps(parsed_yaml)
print("Converted JSON payload:")
print(json_payload)
# Encode the JSON string to Base64
encoded_json = base64.b64encode(json_payload.encode('utf-8')).decode('utf-8')
# Create the final payload with the base64 encoded data
final_payload = {
"blueprint": encoded_json
}
print("Sending the following Base64 encoded JSON payload:")
print(final_payload)
print("-" * 20)
# Make the PUT request with the base64 encoded payload
response = requests.put(url, headers=headers, json=final_payload)
# Print the API response for debugging
print(f"API Response Status Code: {response.status_code}")
print("API Response Content:")
print(response.text)
# Raise an exception for bad status codes (4xx or 5xx)
response.raise_for_status()
except FileNotFoundError:
print(f"Error: The file '{file_path}' was not found.")
except yaml.YAMLError as e:
print(f"Error parsing YAML file: {e}")
except requests.exceptions.RequestException as e:
print(f"An error occurred during the API request: {e}")
except Exception as e:
print(f"An unexpected error occurred: {e}")
# Run the function
if __name__ == "__main__":
convert_and_send(YAML_FILE_PATH, API_URL, HEADERS)
+69
View File
@@ -0,0 +1,69 @@
client-resources:
client-resource-nice-id-uno:
name: this is my resource
protocol: tcp
proxy-port: 3001
hostname: localhost
internal-port: 3000
site: lively-yosemite-toad
client-resource-nice-id-duce:
name: this is my resource
protocol: udp
proxy-port: 3000
hostname: localhost
internal-port: 3000
site: lively-yosemite-toad
proxy-resources:
resource-nice-id-uno:
name: this is my resource
protocol: http
full-domain: duce.test.example.com
host-header: example.com
tls-server-name: example.com
# auth:
# pincode: 123456
# password: sadfasdfadsf
# sso-enabled: true
# sso-roles:
# - Member
# sso-users:
# - owen@fossorial.io
# whitelist-users:
# - owen@fossorial.io
headers:
- name: X-Example-Header
value: example-value
- name: X-Another-Header
value: another-value
rules:
- action: allow
match: ip
value: 1.1.1.1
- action: deny
match: cidr
value: 2.2.2.2/32
- action: pass
match: path
value: /admin
targets:
- site: lively-yosemite-toad
path: /path
pathMatchType: prefix
hostname: localhost
method: http
port: 8000
- site: slim-alpine-chipmunk
hostname: localhost
path: /yoman
pathMatchType: exact
method: http
port: 8001
resource-nice-id-duce:
name: this is other resource
protocol: tcp
proxy-port: 3000
targets:
- site: lively-yosemite-toad
hostname: localhost
port: 3000
+22
View File
@@ -0,0 +1,22 @@
meta {
name: createClient
type: http
seq: 1
}
put {
url: http://localhost:3000/api/v1/site/1/client
body: json
auth: none
}
body:json {
{
"siteId": 1,
"name": "test",
"type": "olm",
"subnet": "100.90.129.4/30",
"olmId": "029yzunhx6nh3y5",
"secret": "l0ymp075y3d4rccb25l6sqpgar52k09etunui970qq5gj7x6"
}
}
+11
View File
@@ -0,0 +1,11 @@
meta {
name: pickClientDefaults
type: http
seq: 2
}
get {
url: http://localhost:3000/api/v1/site/1/pick-client-defaults
body: none
auth: none
}
+72
View File
@@ -0,0 +1,72 @@
import { CommandModule } from "yargs";
import { db, users, securityKeys } from "@server/db";
import { eq } from "drizzle-orm";
type ResetUserSecurityKeysArgs = {
email: string;
};
export const resetUserSecurityKeys: CommandModule<
{},
ResetUserSecurityKeysArgs
> = {
command: "reset-user-security-keys",
describe:
"Reset a user's security keys (passkeys) by deleting all their webauthn credentials",
builder: (yargs) => {
return yargs.option("email", {
type: "string",
demandOption: true,
describe: "User email address"
});
},
handler: async (argv: { email: string }) => {
try {
const { email } = argv;
console.log(`Looking for user with email: ${email}`);
// Find the user by email
const [user] = await db
.select()
.from(users)
.where(eq(users.email, email))
.limit(1);
if (!user) {
console.error(`User with email '${email}' not found`);
process.exit(1);
}
console.log(`Found user: ${user.email} (ID: ${user.userId})`);
// Check if user has any security keys
const userSecurityKeys = await db
.select()
.from(securityKeys)
.where(eq(securityKeys.userId, user.userId));
if (userSecurityKeys.length === 0) {
console.log(`User '${email}' has no security keys to reset`);
process.exit(0);
}
console.log(
`Found ${userSecurityKeys.length} security key(s) for user '${email}'`
);
// Delete all security keys for the user
await db
.delete(securityKeys)
.where(eq(securityKeys.userId, user.userId));
console.log(`Successfully reset security keys for user '${email}'`);
console.log(`Deleted ${userSecurityKeys.length} security key(s)`);
process.exit(0);
} catch (error) {
console.error("Error:", error);
process.exit(1);
}
}
};
+143
View File
@@ -0,0 +1,143 @@
import { CommandModule } from "yargs";
import { hashPassword, verifyPassword } from "@server/auth/password";
import { db, resourceSessions, sessions } from "@server/db";
import { users } from "@server/db";
import { eq, inArray } from "drizzle-orm";
import moment from "moment";
import { fromError } from "zod-validation-error";
import { passwordSchema } from "@server/auth/passwordSchema";
import { UserType } from "@server/types/UserTypes";
import { generateRandomString, RandomReader } from "@oslojs/crypto/random";
type SetAdminCredentialsArgs = {
email: string;
password: string;
};
export const setAdminCredentials: CommandModule<{}, SetAdminCredentialsArgs> = {
command: "set-admin-credentials",
describe: "Set the server admin credentials",
builder: (yargs) => {
return yargs
.option("email", {
type: "string",
demandOption: true,
describe: "Admin email address"
})
.option("password", {
type: "string",
demandOption: true,
describe: "Admin password"
});
},
handler: async (argv: { email: string; password: string }) => {
try {
const { password } = argv;
let { email } = argv;
email = email.trim().toLowerCase();
const parsed = passwordSchema.safeParse(password);
if (!parsed.success) {
throw Error(
`Invalid server admin password: ${fromError(parsed.error).toString()}`
);
}
const passwordHash = await hashPassword(password);
await db.transaction(async (trx) => {
try {
const [existing] = await trx
.select()
.from(users)
.where(eq(users.serverAdmin, true));
if (existing) {
const passwordChanged = !(await verifyPassword(
password,
existing.passwordHash!
));
if (passwordChanged) {
await trx
.update(users)
.set({ passwordHash })
.where(eq(users.userId, existing.userId));
await invalidateAllSessions(existing.userId);
console.log("Server admin password updated");
}
if (existing.email !== email) {
await trx
.update(users)
.set({ email, username: email })
.where(eq(users.userId, existing.userId));
console.log("Server admin email updated");
}
} else {
const userId = generateId(15);
await trx.update(users).set({ serverAdmin: false });
await db.insert(users).values({
userId: userId,
email: email,
type: UserType.Internal,
username: email,
passwordHash,
dateCreated: moment().toISOString(),
serverAdmin: true,
emailVerified: true
});
console.log("Server admin created");
}
} catch (e) {
console.error("Failed to set admin credentials", e);
trx.rollback();
throw e;
}
});
console.log("Admin credentials updated successfully");
process.exit(0);
} catch (error) {
console.error("Error:", error);
process.exit(1);
}
}
};
export async function invalidateAllSessions(userId: string): Promise<void> {
try {
await db.transaction(async (trx) => {
const userSessions = await trx
.select()
.from(sessions)
.where(eq(sessions.userId, userId));
await trx.delete(resourceSessions).where(
inArray(
resourceSessions.userSessionId,
userSessions.map((s) => s.sessionId)
)
);
await trx.delete(sessions).where(eq(sessions.userId, userId));
});
} catch (e) {
console.log("Failed to all invalidate user sessions", e);
}
}
const random: RandomReader = {
read(bytes: Uint8Array): void {
crypto.getRandomValues(bytes);
}
};
export function generateId(length: number): string {
const alphabet = "abcdefghijklmnopqrstuvwxyz0123456789";
return generateRandomString(random, alphabet, length);
}
+13
View File
@@ -0,0 +1,13 @@
#!/usr/bin/env node
import yargs from "yargs";
import { hideBin } from "yargs/helpers";
import { setAdminCredentials } from "@cli/commands/setAdminCredentials";
import { resetUserSecurityKeys } from "@cli/commands/resetUserSecurityKeys";
yargs(hideBin(process.argv))
.scriptName("pangctl")
.command(setAdminCredentials)
.command(resetUserSecurityKeys)
.demandCommand()
.help().argv;
+3
View File
@@ -0,0 +1,3 @@
#!/bin/sh
cd /app/
./dist/cli.mjs "$@"
+16 -42
View File
@@ -1,54 +1,28 @@
# To see all available options, please visit the docs:
# https://docs.fossorial.io/Pangolin/Configuration/config
# https://docs.digpangolin.com/self-host/advanced/config-file
app:
dashboard_url: "http://localhost:3002"
log_level: "info"
save_logs: false
dashboard_url: http://localhost:3002
log_level: debug
domains:
domain1:
base_domain: "example.com"
cert_resolver: "letsencrypt"
domain1:
base_domain: example.com
server:
external_port: 3000
internal_port: 3001
next_port: 3002
internal_hostname: "pangolin"
session_cookie_name: "p_session_token"
resource_access_token_param: "p_token"
secret: "your_secret_key_here"
resource_access_token_headers:
id: "P-Access-Token-Id"
token: "P-Access-Token"
resource_session_request_param: "p_session_request"
traefik:
http_entrypoint: "web"
https_entrypoint: "websecure"
secret: my_secret_key
gerbil:
start_port: 51820
base_endpoint: "localhost"
block_size: 24
site_block_size: 30
subnet_group: 100.89.137.0/20
use_subdomain: true
base_endpoint: example.com
rate_limits:
global:
window_minutes: 1
max_requests: 500
users:
server_admin:
email: "admin@example.com"
password: "Password123!"
orgs:
block_size: 24
subnet_group: 100.90.137.0/20
flags:
require_email_verification: false
disable_signup_without_invite: true
disable_user_create_org: true
allow_raw_resources: true
allow_base_domain_resources: true
require_email_verification: false
disable_signup_without_invite: true
disable_user_create_org: true
allow_raw_resources: true
enable_integration_api: true
enable_clients: true
+46
View File
@@ -0,0 +1,46 @@
http:
middlewares:
redirect-to-https:
redirectScheme:
scheme: https
routers:
# HTTP to HTTPS redirect router
main-app-router-redirect:
rule: "Host(`{{.DashboardDomain}}`)"
service: next-service
entryPoints:
- web
middlewares:
- redirect-to-https
# Next.js router (handles everything except API and WebSocket paths)
next-router:
rule: "Host(`{{.DashboardDomain}}`)"
service: next-service
priority: 10
entryPoints:
- websecure
tls:
certResolver: letsencrypt
# API router (handles /api/v1 paths)
api-router:
rule: "Host(`{{.DashboardDomain}}`) && PathPrefix(`/api/v1`)"
service: api-service
priority: 100
entryPoints:
- websecure
tls:
certResolver: letsencrypt
services:
next-service:
loadBalancer:
servers:
- url: "http://pangolin:3002" # Next.js server
api-service:
loadBalancer:
servers:
- url: "http://pangolin:3000" # API/WebSocket server
+34
View File
@@ -0,0 +1,34 @@
api:
insecure: true
dashboard: true
providers:
file:
directory: "/var/dynamic"
watch: true
experimental:
plugins:
badger:
moduleName: "github.com/fosrl/badger"
version: "v1.2.0"
log:
level: "DEBUG"
format: "common"
maxSize: 100
maxBackups: 3
maxAge: 3
compress: true
entryPoints:
web:
address: ":80"
websecure:
address: ":9443"
transport:
respondingTimeouts:
readTimeout: "30m"
serversTransport:
insecureSkipVerify: true
+3
View File
@@ -0,0 +1,3 @@
files:
- source: /messages/en-US.json
translation: /messages/%locale%.json
+4 -3
View File
@@ -22,8 +22,7 @@ services:
command:
- --reachableAt=http://gerbil:3003
- --generateAndSaveKeyTo=/var/config/key
- --remoteConfig=http://pangolin:3001/api/v1/gerbil/get-config
- --reportBandwidthTo=http://pangolin:3001/api/v1/gerbil/receive-bandwidth
- --remoteConfig=http://pangolin:3001/api/v1/
volumes:
- ./config/:/var/config
cap_add:
@@ -31,11 +30,12 @@ services:
- SYS_MODULE
ports:
- 51820:51820/udp
- 21820:21820/udp
- 443:443 # Port for traefik because of the network_mode
- 80:80 # Port for traefik because of the network_mode
traefik:
image: traefik:v3.3.3
image: traefik:v3.5
container_name: traefik
restart: unless-stopped
network_mode: service:gerbil # Ports appear on the gerbil service
@@ -52,3 +52,4 @@ networks:
default:
driver: bridge
name: pangolin
enable_ipv6: true
+14
View File
@@ -0,0 +1,14 @@
services:
# PostgreSQL Service
db:
image: postgres:17 # Use the PostgreSQL 17 image
container_name: dev_postgres # Name your PostgreSQL container
environment:
POSTGRES_DB: postgres # Default database name
POSTGRES_USER: postgres # Default user
POSTGRES_PASSWORD: password # Default password (change for production!)
volumes:
- ./config/postgres:/var/lib/postgresql/data
ports:
- "5432:5432" # Map host port 5432 to container port 5432
restart: no
+32
View File
@@ -0,0 +1,32 @@
name: pangolin
services:
gerbil:
image: gerbil
container_name: gerbil
network_mode: host
restart: unless-stopped
command:
- --reachableAt=http://localhost:3003
- --generateAndSaveKeyTo=/var/config/key
- --remoteConfig=http://localhost:3001/api/v1/
- --sni-port=443
volumes:
- ./config/:/var/config
cap_add:
- NET_ADMIN
- SYS_MODULE
traefik:
image: docker.io/traefik:v3.4.1
container_name: traefik
restart: unless-stopped
network_mode: host
command:
- --configFile=/etc/traefik/traefik_config.yml
volumes:
- ./config/traefik:/etc/traefik:ro # Volume to store the Traefik configuration
- ./config/letsencrypt:/letsencrypt # Volume to store the Let's Encrypt certificates
- ./config/traefik/logs:/var/log/traefik # Volume to store Traefik logs
- ./certificates:/var/certificates:ro
- ./dynamic:/var/dynamic:ro
+29
View File
@@ -0,0 +1,29 @@
services:
# Development application service
app:
build:
context: .
dockerfile: Dockerfile.dev
container_name: dev_pangolin
ports:
- "3000:3000"
- "3001:3001"
- "3002:3002"
- "3003:3003"
environment:
- NODE_ENV=development
- ENVIRONMENT=dev
volumes:
# Mount source code for hot reload
- ./src:/app/src
- ./server:/app/server
- ./public:/app/public
- ./messages:/app/messages
- ./components.json:/app/components.json
- ./next.config.mjs:/app/next.config.mjs
- ./tsconfig.json:/app/tsconfig.json
- ./tailwind.config.js:/app/tailwind.config.js
- ./postcss.config.mjs:/app/postcss.config.mjs
- ./eslint.config.js:/app/eslint.config.js
- ./config:/app/config
restart: no
+12
View File
@@ -0,0 +1,12 @@
import { defineConfig } from "drizzle-kit";
import path from "path";
export default defineConfig({
dialect: "postgresql",
schema: [path.join("server", "db", "pg", "schema.ts")],
out: path.join("server", "migrations"),
verbose: true,
dbCredentials: {
url: process.env.DATABASE_URL as string
}
});
@@ -4,7 +4,7 @@ import path from "path";
export default defineConfig({
dialect: "sqlite",
schema: path.join("server", "db", "schemas"),
schema: path.join("server", "db", "sqlite", "schema.ts"),
out: path.join("server", "migrations"),
verbose: true,
dbCredentials: {
+3 -3
View File
@@ -52,7 +52,7 @@ esbuild
bundle: true,
outfile: argv.out,
format: "esm",
minify: true,
minify: false,
banner: {
js: banner,
},
@@ -63,8 +63,8 @@ esbuild
packagePath: getPackagePaths(),
}),
],
sourcemap: true,
target: "node20",
sourcemap: "inline",
target: "node22",
})
.then(() => {
console.log("Build completed successfully");
+18 -8
View File
@@ -1,9 +1,19 @@
// eslint.config.js
export default [
{
rules: {
semi: "error",
"prefer-const": "error"
}
import tseslint from 'typescript-eslint';
export default tseslint.config({
files: ["**/*.{ts,tsx,js,jsx}"],
languageOptions: {
parser: tseslint.parser,
parserOptions: {
ecmaVersion: "latest",
sourceType: "module",
ecmaFeatures: {
jsx: true
}
}
];
},
rules: {
"semi": "error",
"prefer-const": "warn"
}
});
+15 -2
View File
@@ -1,4 +1,5 @@
all: update-versions go-build-release put-back
dev-all: dev-update-versions dev-build dev-clean
go-build-release:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o bin/installer_linux_amd64
@@ -11,6 +12,12 @@ clean:
update-versions:
@echo "Fetching latest versions..."
cp main.go main.go.bak && \
$(MAKE) dev-update-versions
put-back:
mv main.go.bak main.go
dev-update-versions:
PANGOLIN_VERSION=$$(curl -s https://api.github.com/repos/fosrl/pangolin/tags | jq -r '.[0].name') && \
GERBIL_VERSION=$$(curl -s https://api.github.com/repos/fosrl/gerbil/tags | jq -r '.[0].name') && \
BADGER_VERSION=$$(curl -s https://api.github.com/repos/fosrl/badger/tags | jq -r '.[0].name') && \
@@ -20,5 +27,11 @@ update-versions:
sed -i "s/config.BadgerVersion = \".*\"/config.BadgerVersion = \"$$BADGER_VERSION\"/" main.go && \
echo "Updated main.go with latest versions"
put-back:
mv main.go.bak main.go
dev-build: go-build-release
dev-clean:
@echo "Restoring version values ..."
sed -i "s/config.PangolinVersion = \".*\"/config.PangolinVersion = \"replaceme\"/" main.go && \
sed -i "s/config.GerbilVersion = \".*\"/config.GerbilVersion = \"replaceme\"/" main.go && \
sed -i "s/config.BadgerVersion = \".*\"/config.BadgerVersion = \"replaceme\"/" main.go
@echo "Restored version strings in main.go"
+34 -36
View File
@@ -37,15 +37,28 @@ type DynamicConfig struct {
} `yaml:"http"`
}
// ConfigValues holds the extracted configuration values
type ConfigValues struct {
// TraefikConfigValues holds the extracted configuration values
type TraefikConfigValues struct {
DashboardDomain string
LetsEncryptEmail string
BadgerVersion string
}
// AppConfig represents the app section of the config.yml
type AppConfig struct {
App struct {
DashboardURL string `yaml:"dashboard_url"`
LogLevel string `yaml:"log_level"`
} `yaml:"app"`
}
type AppConfigValues struct {
DashboardURL string
LogLevel string
}
// ReadTraefikConfig reads and extracts values from Traefik configuration files
func ReadTraefikConfig(mainConfigPath, dynamicConfigPath string) (*ConfigValues, error) {
func ReadTraefikConfig(mainConfigPath string) (*TraefikConfigValues, error) {
// Read main config file
mainConfigData, err := os.ReadFile(mainConfigPath)
if err != nil {
@@ -57,48 +70,33 @@ func ReadTraefikConfig(mainConfigPath, dynamicConfigPath string) (*ConfigValues,
return nil, fmt.Errorf("error parsing main config file: %w", err)
}
// Read dynamic config file
dynamicConfigData, err := os.ReadFile(dynamicConfigPath)
if err != nil {
return nil, fmt.Errorf("error reading dynamic config file: %w", err)
}
var dynamicConfig DynamicConfig
if err := yaml.Unmarshal(dynamicConfigData, &dynamicConfig); err != nil {
return nil, fmt.Errorf("error parsing dynamic config file: %w", err)
}
// Extract values
values := &ConfigValues{
values := &TraefikConfigValues{
BadgerVersion: mainConfig.Experimental.Plugins.Badger.Version,
LetsEncryptEmail: mainConfig.CertificatesResolvers.LetsEncrypt.Acme.Email,
}
// Extract DashboardDomain from router rules
// Look for it in the main router rules
for _, router := range dynamicConfig.HTTP.Routers {
if router.Rule != "" {
// Extract domain from Host(`mydomain.com`)
if domain := extractDomainFromRule(router.Rule); domain != "" {
values.DashboardDomain = domain
break
}
}
}
return values, nil
}
// extractDomainFromRule extracts the domain from a router rule
func extractDomainFromRule(rule string) string {
// Look for the Host(`mydomain.com`) pattern
if start := findPattern(rule, "Host(`"); start != -1 {
end := findPattern(rule[start:], "`)")
if end != -1 {
return rule[start+6 : start+end]
}
func ReadAppConfig(configPath string) (*AppConfigValues, error) {
// Read config file
configData, err := os.ReadFile(configPath)
if err != nil {
return nil, fmt.Errorf("error reading config file: %w", err)
}
return ""
var appConfig AppConfig
if err := yaml.Unmarshal(configData, &appConfig); err != nil {
return nil, fmt.Errorf("error parsing config file: %w", err)
}
values := &AppConfigValues{
DashboardURL: appConfig.App.DashboardURL,
LogLevel: appConfig.App.LogLevel,
}
return values, nil
}
// findPattern finds the start of a pattern in a string
+17 -40
View File
@@ -1,10 +1,20 @@
# To see all available options, please visit the docs:
# https://docs.fossorial.io/Pangolin/Configuration/config
# https://docs.digpangolin.com/self-host/advanced/config-file
gerbil:
start_port: 51820
base_endpoint: "{{.DashboardDomain}}"
{{if .HybridMode}}
managed:
id: "{{.HybridId}}"
secret: "{{.HybridSecret}}"
{{else}}
app:
dashboard_url: "https://{{.DashboardDomain}}"
log_level: "info"
save_logs: false
telemetry:
anonymous_usage: true
domains:
domain1:
@@ -12,40 +22,12 @@ domains:
cert_resolver: "letsencrypt"
server:
external_port: 3000
internal_port: 3001
next_port: 3002
internal_hostname: "pangolin"
session_cookie_name: "p_session_token"
resource_access_token_param: "p_token"
resource_access_token_headers:
id: "P-Access-Token-Id"
token: "P-Access-Token"
resource_session_request_param: "p_session_request"
secret: {{.Secret}}
secret: "{{.Secret}}"
cors:
origins: ["https://{{.DashboardDomain}}"]
methods: ["GET", "POST", "PUT", "DELETE", "PATCH"]
headers: ["X-CSRF-Token", "Content-Type"]
allowed_headers: ["X-CSRF-Token", "Content-Type"]
credentials: false
traefik:
cert_resolver: "letsencrypt"
http_entrypoint: "web"
https_entrypoint: "websecure"
gerbil:
start_port: 51820
base_endpoint: "{{.DashboardDomain}}"
use_subdomain: false
block_size: 24
site_block_size: 30
subnet_group: 100.89.137.0/20
rate_limits:
global:
window_minutes: 1
max_requests: 500
{{if .EnableEmail}}
email:
smtp_host: "{{.EmailSMTPHost}}"
@@ -54,14 +36,9 @@ email:
smtp_pass: "{{.EmailSMTPPass}}"
no_reply: "{{.EmailNoReply}}"
{{end}}
users:
server_admin:
email: "{{.AdminUserEmail}}"
password: "{{.AdminUserPassword}}"
flags:
require_email_verification: {{.EnableEmail}}
disable_signup_without_invite: {{.DisableSignupWithoutInvite}}
disable_user_create_org: {{.DisableUserCreateOrg}}
disable_signup_without_invite: true
disable_user_create_org: false
allow_raw_resources: true
allow_base_domain_resources: true
{{end}}
+1 -1
View File
@@ -1,6 +1,6 @@
services:
crowdsec:
image: crowdsecurity/crowdsec:latest
image: docker.io/crowdsecurity/crowdsec:latest
container_name: crowdsec
environment:
GID: "1000"
+5 -1
View File
@@ -16,11 +16,15 @@ experimental:
version: "{{.BadgerVersion}}"
crowdsec: # CrowdSec plugin configuration added
moduleName: "github.com/maxlerebourg/crowdsec-bouncer-traefik-plugin"
version: "v1.4.2"
version: "v1.4.4"
log:
level: "INFO"
format: "json" # Log format changed to json for better parsing
maxSize: 100
maxBackups: 3
maxAge: 3
compress: true
accessLog: # We enable access logs as json
filePath: "/var/log/traefik/access.log"
+16 -7
View File
@@ -1,11 +1,13 @@
name: pangolin
services:
pangolin:
image: fosrl/pangolin:{{.PangolinVersion}}
image: docker.io/fosrl/pangolin:{{.PangolinVersion}}
container_name: pangolin
restart: unless-stopped
volumes:
- ./config:/app/config
- pangolin-data:/var/certificates
- pangolin-data:/var/dynamic
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3001/api/v1/"]
interval: "10s"
@@ -13,7 +15,7 @@ services:
retries: 15
{{if .InstallGerbil}}
gerbil:
image: fosrl/gerbil:{{.GerbilVersion}}
image: docker.io/fosrl/gerbil:{{.GerbilVersion}}
container_name: gerbil
restart: unless-stopped
depends_on:
@@ -22,8 +24,7 @@ services:
command:
- --reachableAt=http://gerbil:3003
- --generateAndSaveKeyTo=/var/config/key
- --remoteConfig=http://pangolin:3001/api/v1/gerbil/get-config
- --reportBandwidthTo=http://pangolin:3001/api/v1/gerbil/receive-bandwidth
- --remoteConfig=http://pangolin:3001/api/v1/
volumes:
- ./config/:/var/config
cap_add:
@@ -31,11 +32,12 @@ services:
- SYS_MODULE
ports:
- 51820:51820/udp
- 443:443 # Port for traefik because of the network_mode
- 80:80 # Port for traefik because of the network_mode
- 21820:21820/udp
- 443:{{if .HybridMode}}8443{{else}}443{{end}}
- 80:80
{{end}}
traefik:
image: traefik:v3.3.6
image: docker.io/traefik:v3.5
container_name: traefik
restart: unless-stopped
{{if .InstallGerbil}}
@@ -54,8 +56,15 @@ services:
- ./config/traefik:/etc/traefik:ro # Volume to store the Traefik configuration
- ./config/letsencrypt:/letsencrypt # Volume to store the Let's Encrypt certificates
- ./config/traefik/logs:/var/log/traefik # Volume to store Traefik logs
# Shared volume for certificates and dynamic config in file mode
- pangolin-data:/var/certificates:ro
- pangolin-data:/var/dynamic:ro
networks:
default:
driver: bridge
name: pangolin
{{if .EnableIPv6}} enable_ipv6: true{{end}}
volumes:
pangolin-data:
+21 -5
View File
@@ -3,12 +3,17 @@ api:
dashboard: true
providers:
{{if not .HybridMode}}
http:
endpoint: "http://pangolin:3001/api/v1/traefik-config"
pollInterval: "5s"
file:
filename: "/etc/traefik/dynamic_config.yml"
{{else}}
file:
directory: "/var/dynamic"
watch: true
{{end}}
experimental:
plugins:
badger:
@@ -18,7 +23,11 @@ experimental:
log:
level: "INFO"
format: "common"
maxSize: 100
maxBackups: 3
maxAge: 3
compress: true
{{if not .HybridMode}}
certificatesResolvers:
letsencrypt:
acme:
@@ -27,18 +36,25 @@ certificatesResolvers:
email: "{{.LetsEncryptEmail}}"
storage: "/letsencrypt/acme.json"
caServer: "https://acme-v02.api.letsencrypt.org/directory"
{{end}}
entryPoints:
web:
address: ":80"
websecure:
address: ":443"
{{if .HybridMode}} proxyProtocol:
trustedIPs:
- 0.0.0.0/0
- ::1/128{{end}}
transport:
respondingTimeouts:
readTimeout: "30m"
http:
{{if not .HybridMode}} http:
tls:
certResolver: "letsencrypt"
certResolver: "letsencrypt"{{end}}
serversTransport:
insecureSkipVerify: true
ping:
entryPoint: "web"
+332
View File
@@ -0,0 +1,332 @@
package main
import (
"bytes"
"fmt"
"os"
"os/exec"
"os/user"
"runtime"
"strconv"
"strings"
"time"
)
func waitForContainer(containerName string, containerType SupportedContainer) error {
maxAttempts := 30
retryInterval := time.Second * 2
for attempt := 0; attempt < maxAttempts; attempt++ {
// Check if container is running
cmd := exec.Command(string(containerType), "container", "inspect", "-f", "{{.State.Running}}", containerName)
var out bytes.Buffer
cmd.Stdout = &out
if err := cmd.Run(); err != nil {
// If the container doesn't exist or there's another error, wait and retry
time.Sleep(retryInterval)
continue
}
isRunning := strings.TrimSpace(out.String()) == "true"
if isRunning {
return nil
}
// Container exists but isn't running yet, wait and retry
time.Sleep(retryInterval)
}
return fmt.Errorf("container %s did not start within %v seconds", containerName, maxAttempts*int(retryInterval.Seconds()))
}
func installDocker() error {
// Detect Linux distribution
cmd := exec.Command("cat", "/etc/os-release")
output, err := cmd.Output()
if err != nil {
return fmt.Errorf("failed to detect Linux distribution: %v", err)
}
osRelease := string(output)
// Detect system architecture
archCmd := exec.Command("uname", "-m")
archOutput, err := archCmd.Output()
if err != nil {
return fmt.Errorf("failed to detect system architecture: %v", err)
}
arch := strings.TrimSpace(string(archOutput))
// Map architecture to Docker's architecture naming
var dockerArch string
switch arch {
case "x86_64":
dockerArch = "amd64"
case "aarch64":
dockerArch = "arm64"
default:
return fmt.Errorf("unsupported architecture: %s", arch)
}
var installCmd *exec.Cmd
switch {
case strings.Contains(osRelease, "ID=ubuntu"):
installCmd = exec.Command("bash", "-c", fmt.Sprintf(`
apt-get update &&
apt-get install -y apt-transport-https ca-certificates curl software-properties-common &&
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg &&
echo "deb [arch=%s signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list &&
apt-get update &&
apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
`, dockerArch))
case strings.Contains(osRelease, "ID=debian"):
installCmd = exec.Command("bash", "-c", fmt.Sprintf(`
apt-get update &&
apt-get install -y apt-transport-https ca-certificates curl software-properties-common &&
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg &&
echo "deb [arch=%s signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list &&
apt-get update &&
apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
`, dockerArch))
case strings.Contains(osRelease, "ID=fedora"):
// Detect Fedora version to handle DNF 5 changes
versionCmd := exec.Command("bash", "-c", "grep VERSION_ID /etc/os-release | cut -d'=' -f2 | tr -d '\"'")
versionOutput, err := versionCmd.Output()
var fedoraVersion int
if err == nil {
if v, parseErr := strconv.Atoi(strings.TrimSpace(string(versionOutput))); parseErr == nil {
fedoraVersion = v
}
}
// Use appropriate DNF syntax based on version
var repoCmd string
if fedoraVersion >= 41 {
// DNF 5 syntax for Fedora 41+
repoCmd = "dnf config-manager addrepo --from-repofile=https://download.docker.com/linux/fedora/docker-ce.repo"
} else {
// DNF 4 syntax for Fedora < 41
repoCmd = "dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo"
}
installCmd = exec.Command("bash", "-c", fmt.Sprintf(`
dnf -y install dnf-plugins-core &&
%s &&
dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
`, repoCmd))
case strings.Contains(osRelease, "ID=opensuse") || strings.Contains(osRelease, "ID=\"opensuse-"):
installCmd = exec.Command("bash", "-c", `
zypper install -y docker docker-compose &&
systemctl enable docker
`)
case strings.Contains(osRelease, "ID=rhel") || strings.Contains(osRelease, "ID=\"rhel"):
installCmd = exec.Command("bash", "-c", `
dnf remove -y runc &&
dnf -y install yum-utils &&
dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo &&
dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin &&
systemctl enable docker
`)
case strings.Contains(osRelease, "ID=amzn"):
installCmd = exec.Command("bash", "-c", `
yum update -y &&
yum install -y docker &&
systemctl enable docker &&
usermod -a -G docker ec2-user
`)
default:
return fmt.Errorf("unsupported Linux distribution")
}
installCmd.Stdout = os.Stdout
installCmd.Stderr = os.Stderr
return installCmd.Run()
}
func startDockerService() error {
if runtime.GOOS == "linux" {
cmd := exec.Command("systemctl", "enable", "--now", "docker")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
return cmd.Run()
} else if runtime.GOOS == "darwin" {
// On macOS, Docker is usually started via the Docker Desktop application
fmt.Println("Please start Docker Desktop manually on macOS.")
return nil
}
return fmt.Errorf("unsupported operating system for starting Docker service")
}
func isDockerInstalled() bool {
return isContainerInstalled("docker")
}
func isPodmanInstalled() bool {
return isContainerInstalled("podman") && isContainerInstalled("podman-compose")
}
func isContainerInstalled(container string) bool {
cmd := exec.Command(container, "--version")
if err := cmd.Run(); err != nil {
return false
}
return true
}
func isUserInDockerGroup() bool {
if runtime.GOOS == "darwin" {
// Docker group is not applicable on macOS
// So we assume that the user can run Docker commands
return true
}
if os.Geteuid() == 0 {
return true // Root user can run Docker commands anyway
}
// Check if the current user is in the docker group
if dockerGroup, err := user.LookupGroup("docker"); err == nil {
if currentUser, err := user.Current(); err == nil {
if currentUserGroupIds, err := currentUser.GroupIds(); err == nil {
for _, groupId := range currentUserGroupIds {
if groupId == dockerGroup.Gid {
return true
}
}
}
}
}
// Eventually, if any of the checks fail, we assume the user cannot run Docker commands
return false
}
// isDockerRunning checks if the Docker daemon is running by using the `docker info` command.
func isDockerRunning() bool {
cmd := exec.Command("docker", "info")
if err := cmd.Run(); err != nil {
return false
}
return true
}
// executeDockerComposeCommandWithArgs executes the appropriate docker command with arguments supplied
func executeDockerComposeCommandWithArgs(args ...string) error {
var cmd *exec.Cmd
var useNewStyle bool
if !isDockerInstalled() {
return fmt.Errorf("docker is not installed")
}
checkCmd := exec.Command("docker", "compose", "version")
if err := checkCmd.Run(); err == nil {
useNewStyle = true
} else {
checkCmd = exec.Command("docker-compose", "version")
if err := checkCmd.Run(); err == nil {
useNewStyle = false
} else {
return fmt.Errorf("neither 'docker compose' nor 'docker-compose' command is available")
}
}
if useNewStyle {
cmd = exec.Command("docker", append([]string{"compose"}, args...)...)
} else {
cmd = exec.Command("docker-compose", args...)
}
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
return cmd.Run()
}
// pullContainers pulls the containers using the appropriate command.
func pullContainers(containerType SupportedContainer) error {
fmt.Println("Pulling the container images...")
if containerType == Podman {
if err := run("podman-compose", "-f", "docker-compose.yml", "pull"); err != nil {
return fmt.Errorf("failed to pull the containers: %v", err)
}
return nil
}
if containerType == Docker {
if err := executeDockerComposeCommandWithArgs("-f", "docker-compose.yml", "pull", "--policy", "always"); err != nil {
return fmt.Errorf("failed to pull the containers: %v", err)
}
return nil
}
return fmt.Errorf("Unsupported container type: %s", containerType)
}
// startContainers starts the containers using the appropriate command.
func startContainers(containerType SupportedContainer) error {
fmt.Println("Starting containers...")
if containerType == Podman {
if err := run("podman-compose", "-f", "docker-compose.yml", "up", "-d", "--force-recreate"); err != nil {
return fmt.Errorf("failed start containers: %v", err)
}
return nil
}
if containerType == Docker {
if err := executeDockerComposeCommandWithArgs("-f", "docker-compose.yml", "up", "-d", "--force-recreate"); err != nil {
return fmt.Errorf("failed to start containers: %v", err)
}
return nil
}
return fmt.Errorf("Unsupported container type: %s", containerType)
}
// stopContainers stops the containers using the appropriate command.
func stopContainers(containerType SupportedContainer) error {
fmt.Println("Stopping containers...")
if containerType == Podman {
if err := run("podman-compose", "-f", "docker-compose.yml", "down"); err != nil {
return fmt.Errorf("failed to stop containers: %v", err)
}
return nil
}
if containerType == Docker {
if err := executeDockerComposeCommandWithArgs("-f", "docker-compose.yml", "down"); err != nil {
return fmt.Errorf("failed to stop containers: %v", err)
}
return nil
}
return fmt.Errorf("Unsupported container type: %s", containerType)
}
// restartContainer restarts a specific container using the appropriate command.
func restartContainer(container string, containerType SupportedContainer) error {
fmt.Println("Restarting containers...")
if containerType == Podman {
if err := run("podman-compose", "-f", "docker-compose.yml", "restart"); err != nil {
return fmt.Errorf("failed to stop the container \"%s\": %v", container, err)
}
return nil
}
if containerType == Docker {
if err := executeDockerComposeCommandWithArgs("-f", "docker-compose.yml", "restart", container); err != nil {
return fmt.Errorf("failed to stop the container \"%s\": %v", container, err)
}
return nil
}
return fmt.Errorf("Unsupported container type: %s", containerType)
}
+6 -6
View File
@@ -13,7 +13,7 @@ import (
func installCrowdsec(config Config) error {
if err := stopContainers(); err != nil {
if err := stopContainers(config.InstallationContainerType); err != nil {
return fmt.Errorf("failed to stop containers: %v", err)
}
@@ -72,12 +72,12 @@ func installCrowdsec(config Config) error {
os.Exit(1)
}
if err := startContainers(); err != nil {
if err := startContainers(config.InstallationContainerType); err != nil {
return fmt.Errorf("failed to start containers: %v", err)
}
// get API key
apiKey, err := GetCrowdSecAPIKey()
apiKey, err := GetCrowdSecAPIKey(config.InstallationContainerType)
if err != nil {
return fmt.Errorf("failed to get API key: %v", err)
}
@@ -87,7 +87,7 @@ func installCrowdsec(config Config) error {
return fmt.Errorf("failed to replace bouncer key: %v", err)
}
if err := restartContainer("traefik"); err != nil {
if err := restartContainer("traefik", config.InstallationContainerType); err != nil {
return fmt.Errorf("failed to restart containers: %v", err)
}
@@ -110,9 +110,9 @@ func checkIsCrowdsecInstalledInCompose() bool {
return bytes.Contains(content, []byte("crowdsec:"))
}
func GetCrowdSecAPIKey() (string, error) {
func GetCrowdSecAPIKey(containerType SupportedContainer) (string, error) {
// First, ensure the container is running
if err := waitForContainer("crowdsec"); err != nil {
if err := waitForContainer("crowdsec", containerType); err != nil {
return "", fmt.Errorf("waiting for container: %w", err)
}
+3 -3
View File
@@ -1,10 +1,10 @@
module installer
go 1.23.0
go 1.24.0
require (
golang.org/x/term v0.28.0
golang.org/x/term v0.35.0
gopkg.in/yaml.v3 v3.0.1
)
require golang.org/x/sys v0.29.0 // indirect
require golang.org/x/sys v0.36.0 // indirect
+4 -4
View File
@@ -1,7 +1,7 @@
golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU=
golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.28.0 h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg=
golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek=
golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k=
golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/term v0.35.0 h1:bZBVKBudEyhRcajGcNc3jIfWPqV4y/Kt2XcoigOWtDQ=
golang.org/x/term v0.35.0/go.mod h1:TPGtkTLesOwf2DE8CgVYiZinHAOuy5AYUYT1lENIZnA=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
+74
View File
@@ -0,0 +1,74 @@
package main
import (
"bufio"
"fmt"
"strings"
"syscall"
"golang.org/x/term"
)
func readString(reader *bufio.Reader, prompt string, defaultValue string) string {
if defaultValue != "" {
fmt.Printf("%s (default: %s): ", prompt, defaultValue)
} else {
fmt.Print(prompt + ": ")
}
input, _ := reader.ReadString('\n')
input = strings.TrimSpace(input)
if input == "" {
return defaultValue
}
return input
}
func readStringNoDefault(reader *bufio.Reader, prompt string) string {
fmt.Print(prompt + ": ")
input, _ := reader.ReadString('\n')
return strings.TrimSpace(input)
}
func readPassword(prompt string, reader *bufio.Reader) string {
if term.IsTerminal(int(syscall.Stdin)) {
fmt.Print(prompt + ": ")
// Read password without echo if we're in a terminal
password, err := term.ReadPassword(int(syscall.Stdin))
fmt.Println() // Add a newline since ReadPassword doesn't add one
if err != nil {
return ""
}
input := strings.TrimSpace(string(password))
if input == "" {
return readPassword(prompt, reader)
}
return input
} else {
// Fallback to reading from stdin if not in a terminal
return readString(reader, prompt, "")
}
}
func readBool(reader *bufio.Reader, prompt string, defaultValue bool) bool {
defaultStr := "no"
if defaultValue {
defaultStr = "yes"
}
input := readString(reader, prompt+" (yes/no)", defaultStr)
return strings.ToLower(input) == "yes"
}
func readBoolNoDefault(reader *bufio.Reader, prompt string) bool {
input := readStringNoDefault(reader, prompt+" (yes/no)")
return strings.ToLower(input) == "yes"
}
func readInt(reader *bufio.Reader, prompt string, defaultValue int) int {
input := readString(reader, prompt, fmt.Sprintf("%d", defaultValue))
if input == "" {
return defaultValue
}
value := defaultValue
fmt.Sscanf(input, "%d", &value)
return value
}
+2
View File
@@ -1,5 +1,7 @@
docker
example.com
pangolin.example.com
yes
admin@example.com
yes
admin@example.com
+431 -385
View File
@@ -7,62 +7,82 @@ import (
"fmt"
"io"
"io/fs"
"math/rand"
"net"
"net/http"
"os"
"os/exec"
"path/filepath"
"runtime"
"strings"
"syscall"
"text/template"
"time"
"unicode"
"math/rand"
"golang.org/x/term"
)
// DO NOT EDIT THIS FUNCTION; IT MATCHED BY REGEX IN CICD
func loadVersions(config *Config) {
config.PangolinVersion = "replaceme"
config.GerbilVersion = "replaceme"
config.BadgerVersion = "replaceme"
config.PangolinVersion = "1.9.4"
config.GerbilVersion = "1.2.1"
config.BadgerVersion = "1.2.0"
}
//go:embed config/*
var configFiles embed.FS
type Config struct {
PangolinVersion string
GerbilVersion string
BadgerVersion string
BaseDomain string
DashboardDomain string
LetsEncryptEmail string
AdminUserEmail string
AdminUserPassword string
DisableSignupWithoutInvite bool
DisableUserCreateOrg bool
EnableEmail bool
EmailSMTPHost string
EmailSMTPPort int
EmailSMTPUser string
EmailSMTPPass string
EmailNoReply string
InstallGerbil bool
TraefikBouncerKey string
DoCrowdsecInstall bool
Secret string
InstallationContainerType SupportedContainer
PangolinVersion string
GerbilVersion string
BadgerVersion string
BaseDomain string
DashboardDomain string
EnableIPv6 bool
LetsEncryptEmail string
EnableEmail bool
EmailSMTPHost string
EmailSMTPPort int
EmailSMTPUser string
EmailSMTPPass string
EmailNoReply string
InstallGerbil bool
TraefikBouncerKey string
DoCrowdsecInstall bool
Secret string
HybridMode bool
HybridId string
HybridSecret string
}
func main() {
reader := bufio.NewReader(os.Stdin)
type SupportedContainer string
// check if the user is root
if os.Geteuid() != 0 {
fmt.Println("This script must be run as root")
os.Exit(1)
const (
Docker SupportedContainer = "docker"
Podman SupportedContainer = "podman"
)
func main() {
// print a banner about prerequisites - opening port 80, 443, 51820, and 21820 on the VPS and firewall and pointing your domain to the VPS IP with a records. Docs are at http://localhost:3000/Getting%20Started/dns-networking
fmt.Println("Welcome to the Pangolin installer!")
fmt.Println("This installer will help you set up Pangolin on your server.")
fmt.Println("\nPlease make sure you have the following prerequisites:")
fmt.Println("- Open TCP ports 80 and 443 and UDP ports 51820 and 21820 on your VPS and firewall.")
fmt.Println("\nLets get started!")
if os.Geteuid() == 0 { // WE NEED TO BE SUDO TO CHECK THIS
for _, p := range []int{80, 443} {
if err := checkPortsAvailable(p); err != nil {
fmt.Fprintln(os.Stderr, err)
fmt.Printf("Please close any services on ports 80/443 in order to run the installation smoothly. If you already have the Pangolin stack running, shut them down before proceeding.\n")
os.Exit(1)
}
}
}
reader := bufio.NewReader(os.Stdin)
var config Config
// check if there is already a config file
@@ -73,6 +93,26 @@ func main() {
config.DoCrowdsecInstall = false
config.Secret = generateRandomSecretKey()
fmt.Println("\n=== Generating Configuration Files ===")
// If the secret and id are not generated then generate them
if config.HybridMode && (config.HybridId == "" || config.HybridSecret == "") {
// fmt.Println("Requesting hybrid credentials from cloud...")
credentials, err := requestHybridCredentials()
if err != nil {
fmt.Printf("Error requesting hybrid credentials: %v\n", err)
fmt.Println("Please obtain credentials manually from the dashboard and run the installer again.")
os.Exit(1)
}
config.HybridId = credentials.RemoteExitNodeId
config.HybridSecret = credentials.Secret
fmt.Printf("Your managed credentials have been obtained successfully.\n")
fmt.Printf(" ID: %s\n", config.HybridId)
fmt.Printf(" Secret: %s\n", config.HybridSecret)
fmt.Println("Take these to the Pangolin dashboard https://pangolin.fossorial.io to adopt your node.")
readBool(reader, "Have you adopted your node?", true)
}
if err := createConfigFiles(config); err != nil {
fmt.Printf("Error creating config files: %v\n", err)
os.Exit(1)
@@ -80,44 +120,77 @@ func main() {
moveFile("config/docker-compose.yml", "docker-compose.yml")
if !isDockerInstalled() && runtime.GOOS == "linux" {
if readBool(reader, "Docker is not installed. Would you like to install it?", true) {
installDocker()
}
}
fmt.Println("\nConfiguration files created successfully!")
fmt.Println("\n=== Starting installation ===")
if isDockerInstalled() {
if readBool(reader, "Would you like to install and start the containers?", true) {
if err := pullContainers(); err != nil {
fmt.Println("Error: ", err)
return
}
if readBool(reader, "Would you like to install and start the containers?", true) {
if err := startContainers(); err != nil {
fmt.Println("Error: ", err)
return
config.InstallationContainerType = podmanOrDocker(reader)
if !isDockerInstalled() && runtime.GOOS == "linux" && config.InstallationContainerType == Docker {
if readBool(reader, "Docker is not installed. Would you like to install it?", true) {
installDocker()
// try to start docker service but ignore errors
if err := startDockerService(); err != nil {
fmt.Println("Error starting Docker service:", err)
} else {
fmt.Println("Docker service started successfully!")
}
// wait 10 seconds for docker to start checking if docker is running every 2 seconds
fmt.Println("Waiting for Docker to start...")
for i := 0; i < 5; i++ {
if isDockerRunning() {
fmt.Println("Docker is running!")
break
}
fmt.Println("Docker is not running yet, waiting...")
time.Sleep(2 * time.Second)
}
if !isDockerRunning() {
fmt.Println("Docker is still not running after 10 seconds. Please check the installation.")
os.Exit(1)
}
fmt.Println("Docker installed successfully!")
}
}
if err := pullContainers(config.InstallationContainerType); err != nil {
fmt.Println("Error: ", err)
return
}
if err := startContainers(config.InstallationContainerType); err != nil {
fmt.Println("Error: ", err)
return
}
}
} else {
fmt.Println("Looks like you already installed, so I am going to do the setup...")
fmt.Println("Looks like you already installed Pangolin!")
}
if !checkIsCrowdsecInstalledInCompose() {
if !checkIsCrowdsecInstalledInCompose() && !checkIsPangolinInstalledWithHybrid() {
fmt.Println("\n=== CrowdSec Install ===")
// check if crowdsec is installed
if readBool(reader, "Would you like to install CrowdSec?", false) {
fmt.Println("This installer constitutes a minimal viable CrowdSec deployment. CrowdSec will add extra complexity to your Pangolin installation and may not work to the best of its abilities out of the box. Users are expected to implement configuration adjustments on their own to achieve the best security posture. Consult the CrowdSec documentation for detailed configuration instructions.")
// BUG: crowdsec installation will be skipped if the user chooses to install on the first installation.
if readBool(reader, "Are you willing to manage CrowdSec?", false) {
if config.DashboardDomain == "" {
traefikConfig, err := ReadTraefikConfig("config/traefik/traefik_config.yml", "config/traefik/dynamic_config.yml")
traefikConfig, err := ReadTraefikConfig("config/traefik/traefik_config.yml")
if err != nil {
fmt.Printf("Error reading config: %v\n", err)
return
}
config.DashboardDomain = traefikConfig.DashboardDomain
appConfig, err := ReadAppConfig("config/config.yml")
if err != nil {
fmt.Printf("Error reading config: %v\n", err)
return
}
config.DashboardDomain = appConfig.DashboardURL
config.LetsEncryptEmail = traefikConfig.LetsEncryptEmail
config.BadgerVersion = traefikConfig.BadgerVersion
@@ -132,66 +205,112 @@ func main() {
}
}
config.InstallationContainerType = podmanOrDocker(reader)
config.DoCrowdsecInstall = true
installCrowdsec(config)
err := installCrowdsec(config)
if (err != nil) {
fmt.Printf("Error installing CrowdSec: %v\n", err)
return
}
fmt.Println("CrowdSec installed successfully!")
return
}
}
}
fmt.Println("Installation complete!")
}
if !config.HybridMode {
// Setup Token Section
fmt.Println("\n=== Setup Token ===")
func readString(reader *bufio.Reader, prompt string, defaultValue string) string {
if defaultValue != "" {
fmt.Printf("%s (default: %s): ", prompt, defaultValue)
} else {
fmt.Print(prompt + ": ")
}
input, _ := reader.ReadString('\n')
input = strings.TrimSpace(input)
if input == "" {
return defaultValue
}
return input
}
func readPassword(prompt string, reader *bufio.Reader) string {
if term.IsTerminal(int(syscall.Stdin)) {
fmt.Print(prompt + ": ")
// Read password without echo if we're in a terminal
password, err := term.ReadPassword(int(syscall.Stdin))
fmt.Println() // Add a newline since ReadPassword doesn't add one
if err != nil {
return ""
// Check if containers were started during this installation
containersStarted := false
if (isDockerInstalled() && config.InstallationContainerType == Docker) ||
(isPodmanInstalled() && config.InstallationContainerType == Podman) {
// Try to fetch and display the token if containers are running
containersStarted = true
printSetupToken(config.InstallationContainerType, config.DashboardDomain)
}
input := strings.TrimSpace(string(password))
if input == "" {
return readPassword(prompt, reader)
// If containers weren't started or token wasn't found, show instructions
if !containersStarted {
showSetupTokenInstructions(config.InstallationContainerType, config.DashboardDomain)
}
return input
}
fmt.Println("\nInstallation complete!")
if !config.HybridMode && !checkIsPangolinInstalledWithHybrid() {
fmt.Printf("\nTo complete the initial setup, please visit:\nhttps://%s/auth/initial-setup\n", config.DashboardDomain)
}
}
func podmanOrDocker(reader *bufio.Reader) SupportedContainer {
inputContainer := readString(reader, "Would you like to run Pangolin as Docker or Podman containers?", "docker")
chosenContainer := Docker
if strings.EqualFold(inputContainer, "docker") {
chosenContainer = Docker
} else if strings.EqualFold(inputContainer, "podman") {
chosenContainer = Podman
} else {
// Fallback to reading from stdin if not in a terminal
return readString(reader, prompt, "")
fmt.Printf("Unrecognized container type: %s. Valid options are 'docker' or 'podman'.\n", inputContainer)
os.Exit(1)
}
}
func readBool(reader *bufio.Reader, prompt string, defaultValue bool) bool {
defaultStr := "no"
if defaultValue {
defaultStr = "yes"
}
input := readString(reader, prompt+" (yes/no)", defaultStr)
return strings.ToLower(input) == "yes"
}
if chosenContainer == Podman {
if !isPodmanInstalled() {
fmt.Println("Podman or podman-compose is not installed. Please install both manually. Automated installation will be available in a later release.")
os.Exit(1)
}
func readInt(reader *bufio.Reader, prompt string, defaultValue int) int {
input := readString(reader, prompt, fmt.Sprintf("%d", defaultValue))
if input == "" {
return defaultValue
if err := exec.Command("bash", "-c", "cat /etc/sysctl.conf | grep 'net.ipv4.ip_unprivileged_port_start='").Run(); err != nil {
fmt.Println("Would you like to configure ports >= 80 as unprivileged ports? This enables podman containers to listen on low-range ports.")
fmt.Println("Pangolin will experience startup issues if this is not configured, because it needs to listen on port 80/443 by default.")
approved := readBool(reader, "The installer is about to execute \"echo 'net.ipv4.ip_unprivileged_port_start=80' >> /etc/sysctl.conf && sysctl -p\". Approve?", true)
if approved {
if os.Geteuid() != 0 {
fmt.Println("You need to run the installer as root for such a configuration.")
os.Exit(1)
}
// Podman containers are not able to listen on privileged ports. The official recommendation is to
// container low-range ports as unprivileged ports.
// Linux only.
if err := run("bash", "-c", "echo 'net.ipv4.ip_unprivileged_port_start=80' >> /etc/sysctl.conf && sysctl -p"); err != nil {
fmt.Sprintf("failed to configure unprivileged ports: %v.\n", err)
os.Exit(1)
}
} else {
fmt.Println("You need to configure port forwarding or adjust the listening ports before running pangolin.")
}
} else {
fmt.Println("Unprivileged ports have been configured.")
}
} else if chosenContainer == Docker {
// check if docker is not installed and the user is root
if !isDockerInstalled() {
if os.Geteuid() != 0 {
fmt.Println("Docker is not installed. Please install Docker manually or run this installer as root.")
os.Exit(1)
}
}
// check if the user is in the docker group (linux only)
if !isUserInDockerGroup() {
fmt.Println("You are not in the docker group.")
fmt.Println("The installer will not be able to run docker commands without running it as root.")
os.Exit(1)
}
} else {
// This shouldn't happen unless there's a third container runtime.
os.Exit(1)
}
value := defaultValue
fmt.Sscanf(input, "%d", &value)
return value
return chosenContainer
}
func collectUserInput(reader *bufio.Reader) Config {
@@ -199,119 +318,82 @@ func collectUserInput(reader *bufio.Reader) Config {
// Basic configuration
fmt.Println("\n=== Basic Configuration ===")
config.BaseDomain = readString(reader, "Enter your base domain (no subdomain e.g. example.com)", "")
config.DashboardDomain = readString(reader, "Enter the domain for the Pangolin dashboard", "pangolin."+config.BaseDomain)
config.LetsEncryptEmail = readString(reader, "Enter email for Let's Encrypt certificates", "")
config.InstallGerbil = readBool(reader, "Do you want to use Gerbil to allow tunneled connections", true)
// Admin user configuration
fmt.Println("\n=== Admin User Configuration ===")
config.AdminUserEmail = readString(reader, "Enter admin user email", "admin@"+config.BaseDomain)
for {
pass1 := readPassword("Create admin user password", reader)
pass2 := readPassword("Confirm admin user password", reader)
response := readString(reader, "Do you want to install Pangolin as a cloud-managed (beta) node? (yes/no)", "")
if strings.EqualFold(response, "yes") || strings.EqualFold(response, "y") {
config.HybridMode = true
break
} else if strings.EqualFold(response, "no") || strings.EqualFold(response, "n") {
config.HybridMode = false
break
}
fmt.Println("Please answer 'yes' or 'no'")
}
if pass1 != pass2 {
fmt.Println("Passwords do not match")
} else {
config.AdminUserPassword = pass1
if valid, message := validatePassword(config.AdminUserPassword); valid {
break
} else {
fmt.Println("Invalid password:", message)
fmt.Println("Password requirements:")
fmt.Println("- At least one uppercase English letter")
fmt.Println("- At least one lowercase English letter")
fmt.Println("- At least one digit")
fmt.Println("- At least one special character")
}
if config.HybridMode {
alreadyHaveCreds := readBool(reader, "Do you already have credentials from the dashboard? If not, we will create them later", false)
if alreadyHaveCreds {
config.HybridId = readString(reader, "Enter your ID", "")
config.HybridSecret = readString(reader, "Enter your secret", "")
}
// Try to get public IP as default
publicIP := getPublicIP()
if publicIP != "" {
fmt.Printf("Detected public IP: %s\n", publicIP)
}
config.DashboardDomain = readString(reader, "The public addressable IP address for this node or a domain pointing to it", publicIP)
config.InstallGerbil = true
} else {
config.BaseDomain = readString(reader, "Enter your base domain (no subdomain e.g. example.com)", "")
// Set default dashboard domain after base domain is collected
defaultDashboardDomain := ""
if config.BaseDomain != "" {
defaultDashboardDomain = "pangolin." + config.BaseDomain
}
config.DashboardDomain = readString(reader, "Enter the domain for the Pangolin dashboard", defaultDashboardDomain)
config.LetsEncryptEmail = readString(reader, "Enter email for Let's Encrypt certificates", "")
config.InstallGerbil = readBool(reader, "Do you want to use Gerbil to allow tunneled connections", true)
// Email configuration
fmt.Println("\n=== Email Configuration ===")
config.EnableEmail = readBool(reader, "Enable email functionality (SMTP)", false)
if config.EnableEmail {
config.EmailSMTPHost = readString(reader, "Enter SMTP host", "")
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", "")
}
// Validate required fields
if config.BaseDomain == "" {
fmt.Println("Error: Domain name is required")
os.Exit(1)
}
if config.LetsEncryptEmail == "" {
fmt.Println("Error: Let's Encrypt email is required")
os.Exit(1)
}
}
// Security settings
fmt.Println("\n=== Security Settings ===")
config.DisableSignupWithoutInvite = readBool(reader, "Disable signup without invite", true)
config.DisableUserCreateOrg = readBool(reader, "Disable users from creating organizations", false)
// Advanced configuration
// Email configuration
fmt.Println("\n=== Email Configuration ===")
config.EnableEmail = readBool(reader, "Enable email functionality", false)
fmt.Println("\n=== Advanced Configuration ===")
if config.EnableEmail {
config.EmailSMTPHost = readString(reader, "Enter SMTP host", "")
config.EmailSMTPPort = readInt(reader, "Enter SMTP port (default 587)", 587)
config.EmailSMTPUser = readString(reader, "Enter SMTP username", "")
config.EmailSMTPPass = readString(reader, "Enter SMTP password", "")
config.EmailNoReply = readString(reader, "Enter no-reply email address", "")
}
config.EnableIPv6 = readBool(reader, "Is your server IPv6 capable?", true)
// Validate required fields
if config.BaseDomain == "" {
fmt.Println("Error: Domain name is required")
os.Exit(1)
}
if config.DashboardDomain == "" {
fmt.Println("Error: Dashboard Domain name is required")
os.Exit(1)
}
if config.LetsEncryptEmail == "" {
fmt.Println("Error: Let's Encrypt email is required")
os.Exit(1)
}
if config.AdminUserEmail == "" || config.AdminUserPassword == "" {
fmt.Println("Error: Admin user email and password are required")
os.Exit(1)
}
return config
}
func validatePassword(password string) (bool, string) {
if len(password) == 0 {
return false, "Password cannot be empty"
}
var (
hasUpper bool
hasLower bool
hasDigit bool
hasSpecial bool
)
for _, char := range password {
switch {
case unicode.IsUpper(char):
hasUpper = true
case unicode.IsLower(char):
hasLower = true
case unicode.IsDigit(char):
hasDigit = true
case unicode.IsPunct(char) || unicode.IsSymbol(char):
hasSpecial = true
}
}
var missing []string
if !hasUpper {
missing = append(missing, "an uppercase letter")
}
if !hasLower {
missing = append(missing, "a lowercase letter")
}
if !hasDigit {
missing = append(missing, "a digit")
}
if !hasSpecial {
missing = append(missing, "a special character")
}
if len(missing) > 0 {
return false, fmt.Sprintf("Password must contain %s", strings.Join(missing, ", "))
}
return true, ""
}
func createConfigFiles(config Config) error {
os.MkdirAll("config", 0755)
os.MkdirAll("config/letsencrypt", 0755)
@@ -337,6 +419,11 @@ func createConfigFiles(config Config) error {
return nil
}
// the hybrid does not need the dynamic config
if config.HybridMode && strings.Contains(path, "dynamic_config.yml") {
return nil
}
// skip .DS_Store
if strings.Contains(path, ".DS_Store") {
return nil
@@ -381,7 +468,6 @@ func createConfigFiles(config Config) error {
return nil
})
if err != nil {
return fmt.Errorf("error walking config files: %v", err)
}
@@ -389,171 +475,6 @@ func createConfigFiles(config Config) error {
return nil
}
func installDocker() error {
// Detect Linux distribution
cmd := exec.Command("cat", "/etc/os-release")
output, err := cmd.Output()
if err != nil {
return fmt.Errorf("failed to detect Linux distribution: %v", err)
}
osRelease := string(output)
// Detect system architecture
archCmd := exec.Command("uname", "-m")
archOutput, err := archCmd.Output()
if err != nil {
return fmt.Errorf("failed to detect system architecture: %v", err)
}
arch := strings.TrimSpace(string(archOutput))
// Map architecture to Docker's architecture naming
var dockerArch string
switch arch {
case "x86_64":
dockerArch = "amd64"
case "aarch64":
dockerArch = "arm64"
default:
return fmt.Errorf("unsupported architecture: %s", arch)
}
var installCmd *exec.Cmd
switch {
case strings.Contains(osRelease, "ID=ubuntu"):
installCmd = exec.Command("bash", "-c", fmt.Sprintf(`
apt-get update &&
apt-get install -y apt-transport-https ca-certificates curl software-properties-common &&
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg &&
echo "deb [arch=%s signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list &&
apt-get update &&
apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
`, dockerArch))
case strings.Contains(osRelease, "ID=debian"):
installCmd = exec.Command("bash", "-c", fmt.Sprintf(`
apt-get update &&
apt-get install -y apt-transport-https ca-certificates curl software-properties-common &&
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg &&
echo "deb [arch=%s signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list &&
apt-get update &&
apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
`, dockerArch))
case strings.Contains(osRelease, "ID=fedora"):
installCmd = exec.Command("bash", "-c", `
dnf -y install dnf-plugins-core &&
dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo &&
dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
`)
case strings.Contains(osRelease, "ID=opensuse") || strings.Contains(osRelease, "ID=\"opensuse-"):
installCmd = exec.Command("bash", "-c", `
zypper install -y docker docker-compose &&
systemctl enable docker
`)
case strings.Contains(osRelease, "ID=rhel") || strings.Contains(osRelease, "ID=\"rhel"):
installCmd = exec.Command("bash", "-c", `
dnf remove -y runc &&
dnf -y install yum-utils &&
dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo &&
dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin &&
systemctl enable docker
`)
case strings.Contains(osRelease, "ID=amzn"):
installCmd = exec.Command("bash", "-c", `
yum update -y &&
yum install -y docker &&
systemctl enable docker &&
usermod -a -G docker ec2-user
`)
default:
return fmt.Errorf("unsupported Linux distribution")
}
installCmd.Stdout = os.Stdout
installCmd.Stderr = os.Stderr
return installCmd.Run()
}
func isDockerInstalled() bool {
cmd := exec.Command("docker", "--version")
if err := cmd.Run(); err != nil {
return false
}
return true
}
// executeDockerComposeCommandWithArgs executes the appropriate docker command with arguments supplied
func executeDockerComposeCommandWithArgs(args ...string) error {
var cmd *exec.Cmd
var useNewStyle bool
if !isDockerInstalled() {
return fmt.Errorf("docker is not installed")
}
checkCmd := exec.Command("docker", "compose", "version")
if err := checkCmd.Run(); err == nil {
useNewStyle = true
} else {
checkCmd = exec.Command("docker-compose", "version")
if err := checkCmd.Run(); err == nil {
useNewStyle = false
} else {
return fmt.Errorf("neither 'docker compose' nor 'docker-compose' command is available")
}
}
if useNewStyle {
cmd = exec.Command("docker", append([]string{"compose"}, args...)...)
} else {
cmd = exec.Command("docker-compose", args...)
}
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
return cmd.Run()
}
// pullContainers pulls the containers using the appropriate command.
func pullContainers() error {
fmt.Println("Pulling the container images...")
if err := executeDockerComposeCommandWithArgs("-f", "docker-compose.yml", "pull", "--policy", "always"); err != nil {
return fmt.Errorf("failed to pull the containers: %v", err)
}
return nil
}
// startContainers starts the containers using the appropriate command.
func startContainers() error {
fmt.Println("Starting containers...")
if err := executeDockerComposeCommandWithArgs("-f", "docker-compose.yml", "up", "-d", "--force-recreate"); err != nil {
return fmt.Errorf("failed to start containers: %v", err)
}
return nil
}
// stopContainers stops the containers using the appropriate command.
func stopContainers() error {
fmt.Println("Stopping containers...")
if err := executeDockerComposeCommandWithArgs("-f", "docker-compose.yml", "down"); err != nil {
return fmt.Errorf("failed to stop containers: %v", err)
}
return nil
}
// restartContainer restarts a specific container using the appropriate command.
func restartContainer(container string) error {
fmt.Println("Restarting containers...")
if err := executeDockerComposeCommandWithArgs("-f", "docker-compose.yml", "restart", container); err != nil {
return fmt.Errorf("failed to stop the container \"%s\": %v", container, err)
}
return nil
}
func copyFile(src, dst string) error {
source, err := os.Open(src)
if err != nil {
@@ -579,32 +500,89 @@ func moveFile(src, dst string) error {
return os.Remove(src)
}
func waitForContainer(containerName string) error {
maxAttempts := 30
retryInterval := time.Second * 2
func printSetupToken(containerType SupportedContainer, dashboardDomain string) {
fmt.Println("Waiting for Pangolin to generate setup token...")
for attempt := 0; attempt < maxAttempts; attempt++ {
// Check if container is running
cmd := exec.Command("docker", "container", "inspect", "-f", "{{.State.Running}}", containerName)
var out bytes.Buffer
cmd.Stdout = &out
if err := cmd.Run(); err != nil {
// If the container doesn't exist or there's another error, wait and retry
time.Sleep(retryInterval)
continue
}
isRunning := strings.TrimSpace(out.String()) == "true"
if isRunning {
return nil
}
// Container exists but isn't running yet, wait and retry
time.Sleep(retryInterval)
// Wait for Pangolin to be healthy
if err := waitForContainer("pangolin", containerType); err != nil {
fmt.Println("Warning: Pangolin container did not become healthy in time.")
return
}
return fmt.Errorf("container %s did not start within %v seconds", containerName, maxAttempts*int(retryInterval.Seconds()))
// Give a moment for the setup token to be generated
time.Sleep(2 * time.Second)
// Fetch logs
var cmd *exec.Cmd
if containerType == Docker {
cmd = exec.Command("docker", "logs", "pangolin")
} else {
cmd = exec.Command("podman", "logs", "pangolin")
}
output, err := cmd.Output()
if err != nil {
fmt.Println("Warning: Could not fetch Pangolin logs to find setup token.")
return
}
// Parse for setup token
lines := strings.Split(string(output), "\n")
for i, line := range lines {
if strings.Contains(line, "=== SETUP TOKEN GENERATED ===") || strings.Contains(line, "=== SETUP TOKEN EXISTS ===") {
// Look for "Token: ..." in the next few lines
for j := i + 1; j < i+5 && j < len(lines); j++ {
trimmedLine := strings.TrimSpace(lines[j])
if strings.Contains(trimmedLine, "Token:") {
// Extract token after "Token:"
tokenStart := strings.Index(trimmedLine, "Token:")
if tokenStart != -1 {
token := strings.TrimSpace(trimmedLine[tokenStart+6:])
fmt.Printf("Setup token: %s\n", token)
fmt.Println("")
fmt.Println("This token is required to register the first admin account in the web UI at:")
fmt.Printf("https://%s/auth/initial-setup\n", dashboardDomain)
fmt.Println("")
fmt.Println("Save this token securely. It will be invalid after the first admin is created.")
return
}
}
}
}
}
fmt.Println("Warning: Could not find a setup token in Pangolin logs.")
}
func showSetupTokenInstructions(containerType SupportedContainer, dashboardDomain string) {
fmt.Println("\n=== Setup Token Instructions ===")
fmt.Println("To get your setup token, you need to:")
fmt.Println("")
fmt.Println("1. Start the containers:")
if containerType == Docker {
fmt.Println(" docker-compose up -d")
} else {
fmt.Println(" podman-compose up -d")
}
fmt.Println("")
fmt.Println("2. Wait for the Pangolin container to start and generate the token")
fmt.Println("")
fmt.Println("3. Check the container logs for the setup token:")
if containerType == Docker {
fmt.Println(" docker logs pangolin | grep -A 2 -B 2 'SETUP TOKEN'")
} else {
fmt.Println(" podman logs pangolin | grep -A 2 -B 2 'SETUP TOKEN'")
}
fmt.Println("")
fmt.Println("4. Look for output like:")
fmt.Println(" === SETUP TOKEN GENERATED ===")
fmt.Println(" Token: [your-token-here]")
fmt.Println(" Use this token on the initial setup page")
fmt.Println("")
fmt.Println("5. Use the token to complete initial setup at:")
fmt.Printf(" https://%s/auth/initial-setup\n", dashboardDomain)
fmt.Println("")
fmt.Println("The setup token is required to register the first admin account.")
fmt.Println("Save it securely - it will be invalid after the first admin is created.")
fmt.Println("================================")
}
func generateRandomSecretKey() string {
@@ -620,3 +598,71 @@ func generateRandomSecretKey() string {
}
return string(b)
}
func getPublicIP() string {
client := &http.Client{
Timeout: 10 * time.Second,
}
resp, err := client.Get("https://ifconfig.io/ip")
if err != nil {
return ""
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
return ""
}
ip := strings.TrimSpace(string(body))
// Validate that it's a valid IP address
if net.ParseIP(ip) != nil {
return ip
}
return ""
}
// Run external commands with stdio/stderr attached.
func run(name string, args ...string) error {
cmd := exec.Command(name, args...)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
return cmd.Run()
}
func checkPortsAvailable(port int) error {
addr := fmt.Sprintf(":%d", port)
ln, err := net.Listen("tcp", addr)
if err != nil {
return fmt.Errorf(
"ERROR: port %d is occupied or cannot be bound: %w\n\n",
port, err,
)
}
if closeErr := ln.Close(); closeErr != nil {
fmt.Fprintf(os.Stderr,
"WARNING: failed to close test listener on port %d: %v\n",
port, closeErr,
)
}
return nil
}
func checkIsPangolinInstalledWithHybrid() bool {
// Check if config/config.yml exists and contains hybrid section
if _, err := os.Stat("config/config.yml"); err != nil {
return false
}
// Read config file to check for hybrid section
content, err := os.ReadFile("config/config.yml")
if err != nil {
return false
}
// Check for hybrid section
return bytes.Contains(content, []byte("managed:"))
}
+110
View File
@@ -0,0 +1,110 @@
package main
import (
"bytes"
"encoding/base64"
"encoding/json"
"fmt"
"io"
"net/http"
"time"
)
const (
FRONTEND_SECRET_KEY = "af4e4785-7e09-11f0-b93a-74563c4e2a7e"
// CLOUD_API_URL = "https://pangolin.fossorial.io/api/v1/remote-exit-node/quick-start"
CLOUD_API_URL = "https://pangolin.fossorial.io/api/v1/remote-exit-node/quick-start"
)
// HybridCredentials represents the response from the cloud API
type HybridCredentials struct {
RemoteExitNodeId string `json:"remoteExitNodeId"`
Secret string `json:"secret"`
}
// APIResponse represents the full response structure from the cloud API
type APIResponse struct {
Data HybridCredentials `json:"data"`
}
// RequestPayload represents the request body structure
type RequestPayload struct {
Token string `json:"token"`
}
func generateValidationToken() string {
timestamp := time.Now().UnixMilli()
data := fmt.Sprintf("%s|%d", FRONTEND_SECRET_KEY, timestamp)
obfuscated := make([]byte, len(data))
for i, char := range []byte(data) {
obfuscated[i] = char + 5
}
return base64.StdEncoding.EncodeToString(obfuscated)
}
// requestHybridCredentials makes an HTTP POST request to the cloud API
// to get hybrid credentials (ID and secret)
func requestHybridCredentials() (*HybridCredentials, error) {
// Generate validation token
token := generateValidationToken()
// Create request payload
payload := RequestPayload{
Token: token,
}
// Marshal payload to JSON
jsonData, err := json.Marshal(payload)
if err != nil {
return nil, fmt.Errorf("failed to marshal request payload: %v", err)
}
// Create HTTP request
req, err := http.NewRequest("POST", CLOUD_API_URL, bytes.NewBuffer(jsonData))
if err != nil {
return nil, fmt.Errorf("failed to create HTTP request: %v", err)
}
// Set headers
req.Header.Set("Content-Type", "application/json")
req.Header.Set("X-CSRF-Token", "x-csrf-protection")
// Create HTTP client with timeout
client := &http.Client{
Timeout: 30 * time.Second,
}
// Make the request
resp, err := client.Do(req)
if err != nil {
return nil, fmt.Errorf("failed to make HTTP request: %v", err)
}
defer resp.Body.Close()
// Check response status
if resp.StatusCode != http.StatusOK {
return nil, fmt.Errorf("API request failed with status code: %d", resp.StatusCode)
}
// Read response body for debugging
body, err := io.ReadAll(resp.Body)
if err != nil {
return nil, fmt.Errorf("failed to read response body: %v", err)
}
// Print the raw JSON response for debugging
// fmt.Printf("Raw JSON response: %s\n", string(body))
// Parse response
var apiResponse APIResponse
if err := json.Unmarshal(body, &apiResponse); err != nil {
return nil, fmt.Errorf("failed to decode API response: %v", err)
}
// Validate response data
if apiResponse.Data.RemoteExitNodeId == "" || apiResponse.Data.Secret == "" {
return nil, fmt.Errorf("invalid response: missing remoteExitNodeId or secret")
}
return &apiResponse.Data, nil
}
-287
View File
@@ -1,287 +0,0 @@
## Authentication Site
| EN | DE | Notes |
| -------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------- |
| Powered by [Pangolin](https://github.com/fosrl/pangolin) | Bereitgestellt von [Pangolin](https://github.com/fosrl/pangolin) | |
| Authentication Required | Authentifizierung erforderlich | |
| Choose your preferred method to access {resource} | Wählen Sie Ihre bevorzugte Methode, um auf {resource} zuzugreifen | |
| PIN | PIN | |
| User | Benutzer | |
| 6-digit PIN Code | 6-stelliger PIN-Code | pin login |
| Login in with PIN | Mit PIN anmelden | pin login |
| Email | E-Mail | user login |
| Enter your email | Geben Sie Ihre E-Mail-Adresse ein | user login |
| Password | Passwort | user login |
| Enter your password | Geben Sie Ihr Passwort ein | user login |
| Forgot your password? | Passwort vergessen? | user login |
| Log in | Anmelden | user login |
---
## Login site
| EN | DE | Notes |
| --------------------- | ---------------------------------- | ----------- |
| Welcome to Pangolin | Willkommen bei Pangolin | |
| Log in to get started | Melden Sie sich an, um zu beginnen | |
| Email | E-Mail | |
| Enter your email | Geben Sie Ihre E-Mail-Adresse ein | placeholder |
| Password | Passwort | |
| Enter your password | Geben Sie Ihr Passwort ein | placeholder |
| Forgot your password? | Passwort vergessen? | |
| Log in | Anmelden | |
# Ogranization site after successful login
| EN | DE | Notes |
| ----------------------------------------- | -------------------------------------------- | ----- |
| Welcome to Pangolin | Willkommen bei Pangolin | |
| You're a member of {number} organization. | Sie sind Mitglied von {number} Organisation. | |
## Shared Header, Navbar and Footer
##### Header
| EN | DE | Notes |
| ------------------- | ------------------- | ----- |
| Documentation | Dokumentation | |
| Support | Support | |
| Organization {name} | Organisation {name} | |
##### Organization selector
| EN | DE | Notes |
| ---------------- | ----------------- | ----- |
| Search… | Suchen… | |
| Create | Erstellen | |
| New Organization | Neue Organisation | |
| Organizations | Organisationen | |
##### Navbar
| EN | DE | Notes |
| --------------- | ----------------- | ----- |
| Sites | Websites | |
| Resources | Ressourcen | |
| User & Roles | Benutzer & Rollen | |
| Shareable Links | Teilbare Links | |
| General | Allgemein | |
##### Footer
| EN | DE | |
| ------------------------- | --------------------------- | ------------------- |
| Page {number} of {number} | Seite {number} von {number} | |
| Rows per page | Zeilen pro Seite | |
| Pangolin | Pangolin | unten auf der Seite |
| Built by Fossorial | Erstellt von Fossorial | unten auf der Seite |
| Open Source | Open Source | unten auf der Seite |
| Documentation | Dokumentation | unten auf der Seite |
| {version} | {version} | unten auf der Seite |
## Main “Sites”
##### “Hero” section
| EN | DE | Notes |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ----- |
| Newt (Recommended) | Newt (empfohlen) | |
| For the best user experience, use Newt. It uses WireGuard under the hood and allows you to address your private resources by their LAN address on your private network from within the Pangolin dashboard. | Für das beste Benutzererlebnis verwenden Sie Newt. Es nutzt WireGuard im Hintergrund und ermöglicht es Ihnen, auf Ihre privaten Ressourcen über ihre LAN-Adresse in Ihrem privaten Netzwerk direkt aus dem Pangolin-Dashboard zuzugreifen. | |
| Runs in Docker | Läuft in Docker | |
| Runs in shell on macOS, Linux, and Windows | Läuft in der Shell auf macOS, Linux und Windows | |
| Install Newt | Newt installieren | |
| Basic WireGuard<br> | Verwenden Sie einen beliebigen WireGuard-Client, um eine Verbindung herzustellen. Sie müssen auf Ihre internen Ressourcen über die Peer-IP-Adresse zugreifen. | |
| Compatible with all WireGuard clients<br> | Kompatibel mit allen WireGuard-Clients<br> | |
| Manual configuration required | Manuelle Konfiguration erforderlich<br> | |
##### Content
| EN | DE | Notes |
| --------------------------------------------------------- | ------------------------------------------------------------ | -------------------------------- |
| Manage Sites | Seiten verwalten | |
| Allow connectivity to your network through secure tunnels | Ermöglichen Sie die Verbindung zu Ihrem Netzwerk über ein sicheren Tunnel | |
| Search sites | Seiten suchen | placeholder |
| Add Site | Seite hinzufügen | |
| Name | Name | table header |
| Online | Status | table header |
| Site | Seite | table header |
| Data In | Eingehende Daten | table header |
| Data Out | Ausgehende Daten | table header |
| Connection Type | Verbindungstyp | table header |
| Online | Online | site state |
| Offline | Offline | site state |
| Edit → | Bearbeiten → | |
| View settings | Einstellungen anzeigen | Popup after clicking “…” on site |
| Delete | Löschen | Popup after clicking “…” on site |
##### Add Site Popup
| EN | DE | Notes |
| ------------------------------------------------------ | ----------------------------------------------------------- | ----------- |
| Create Site | Seite erstellen | |
| Create a new site to start connection for this site | Erstellen Sie eine neue Seite, um die Verbindung zu starten | |
| Name | Name | |
| Site name | Seiten-Name | placeholder |
| This is the name that will be displayed for this site. | So wird Ihre Seite angezeigt | desc |
| Method | Methode | |
| Local | Lokal | |
| Newt | Newt | |
| WireGuard | WireGuard | |
| This is how you will expose connections. | So werden Verbindungen freigegeben. | |
| You will only be able to see the configuration once. | Diese Konfiguration können Sie nur einmal sehen. | |
| Learn how to install Newt on your system | Erfahren Sie, wie Sie Newt auf Ihrem System installieren | |
| I have copied the config | Ich habe die Konfiguration kopiert | |
| Create Site | Website erstellen | |
| Close | Schließen | |
## Main “Resources”
##### “Hero” section
| EN | DE | Notes |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ----- |
| Resources | Ressourcen | |
| Ressourcen sind Proxy-Server für Anwendungen, die in Ihrem privaten Netzwerk laufen. Erstellen Sie eine Ressource für jede HTTP- oder HTTPS-Anwendung in Ihrem privaten Netzwerk. Jede Ressource muss mit einer Website verbunden sein, um eine private und sichere Verbindung über den verschlüsselten WireGuard-Tunnel zu ermöglichen. | Ressourcen sind Proxy-Server für Anwendungen, die in Ihrem privaten Netzwerk laufen. Erstellen Sie eine Ressource für jede HTTP- oder HTTPS-Anwendung in Ihrem privaten Netzwerk. Jede Ressource muss mit einer Website verbunden sein, um eine private und sichere Verbindung über den verschlüsselten WireGuard-Tunnel zu ermöglichen. | |
| Secure connectivity with WireGuard encryption | Sichere Verbindung mit WireGuard-Verschlüsselung | |
| Configure multiple authentication methods | Konfigurieren Sie mehrere Authentifizierungsmethoden | |
| User and role-based access control | Benutzer- und rollenbasierte Zugriffskontrolle | |
##### Content
| EN | DE | Notes |
| -------------------------------------------------- | ---------------------------------------------------------- | -------------------- |
| Manage Resources | Ressourcen verwalten | |
| Create secure proxies to your private applications | Erstellen Sie sichere Proxys für Ihre privaten Anwendungen | |
| Search resources | Ressourcen durchsuchen | placeholder |
| Name | Name | |
| Site | Website | |
| Full URL | Vollständige URL | |
| Authentication | Authentifizierung | |
| Not Protected | Nicht geschützt | authentication state |
| Protected | Geschützt | authentication state |
| Edit → | Bearbeiten → | |
| Add Resource | Ressource hinzufügen | |
##### Add Resource Popup
| EN | DE | Notes |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------- |
| Create Resource | Ressource erstellen | |
| Create a new resource to proxy request to your app | Erstellen Sie eine neue Ressource, um Anfragen an Ihre App zu proxen | |
| Name | Name | |
| My Resource | Neue Ressource | name placeholder |
| This is the name that will be displayed for this resource. | Dies ist der Name, der für diese Ressource angezeigt wird | |
| Subdomain | Subdomain | |
| Enter subdomain | Subdomain eingeben | |
| This is the fully qualified domain name that will be used to access the resource. | Dies ist der vollständige Domainname, der für den Zugriff auf die Ressource verwendet wird. | |
| Site | Website | |
| Search site… | Website suchen… | Site selector popup |
| This is the site that will be used in the dashboard. | Dies ist die Website, die im Dashboard verwendet wird. | |
| Create Resource | Ressource erstellen | |
| Close | Schließen | |
## Main “User & Roles”
##### Content
| EN | DE | Notes |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ----------------------------- |
| Manage User & Roles | Benutzer & Rollen verwalten | |
| Invite users and add them to roles to manage access to your organization | Laden Sie Benutzer ein und weisen Sie ihnen Rollen zu, um den Zugriff auf Ihre Organisation zu verwalten | |
| Users | Benutzer | sidebar item |
| Roles | Rollen | sidebar item |
| **User tab** | | |
| Search users | Benutzer suchen | placeholder |
| Invite User | Benutzer einladen | addbutton |
| Email | E-Mail | table header |
| Status | Status | table header |
| Role | Rolle | table header |
| Confirmed | Bestätigt | account status |
| Not confirmed (?) | Nicht bestätigt (?) | unknown for me account status |
| Owner | Besitzer | role |
| Admin | Administrator | role |
| Member | Mitglied | role |
| **Roles Tab** | | |
| Search roles | Rollen suchen | placeholder |
| Add Role | Rolle hinzufügen | addbutton |
| Name | Name | table header |
| Description | Beschreibung | table header |
| Admin | Administrator | role |
| Member | Mitglied | role |
| Admin role with the most permissions | Administratorrolle mit den meisten Berechtigungen | admin role desc |
| Members can only view resources | Mitglieder können nur Ressourcen anzeigen | member role desc |
##### Invite User popup
| EN | DE | Notes |
| ----------------- | ------------------------------------------------------- | ----------- |
| Invite User | Geben Sie neuen Benutzern Zugriff auf Ihre Organisation | |
| Email | E-Mail | |
| Enter an email | E-Mail eingeben | placeholder |
| Role | Rolle | |
| Select role | Rolle auswählen | placeholder |
| Gültig für | Gültig bis | |
| 1 day | Tag | |
| 2 days | 2 Tage | |
| 3 days | 3 Tage | |
| 4 days | 4 Tage | |
| 5 days | 5 Tage | |
| 6 days | 6 Tage | |
| 7 days | 7 Tage | |
| Create Invitation | Einladung erstellen | |
| Close | Schließen | |
## Main “Shareable Links”
##### “Hero” section
| EN | DE | Notes |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ----- |
| Shareable Links | Teilbare Links | |
| Create shareable links to your resources. Links provide temporary or unlimited access to your resource. You can configure the expiration duration of the link when you create one. | Erstellen Sie teilbare Links zu Ihren Ressourcen. Links bieten temporären oder unbegrenzten Zugriff auf Ihre Ressource. Sie können die Gültigkeitsdauer des Links beim Erstellen konfigurieren. | |
| Easy to create and share | Einfach zu erstellen und zu teilen | |
| Configurable expiration duration | Konfigurierbare Gültigkeitsdauer | |
| Secure and revocable | Sicher und widerrufbar | |
##### Content
| EN | DE | Notes |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ----------------- |
| Manage Shareable Links | Teilbare Links verwalten | |
| Create shareable links to grant temporary or permanent access to your resources | Erstellen Sie teilbare Links, um temporären oder permanenten Zugriff auf Ihre Ressourcen zu gewähren | |
| Search links | Links suchen | placeholder |
| Create Share Link | Neuen Link erstellen | addbutton |
| Resource | Ressource | table header |
| Title | Titel | table header |
| Created | Erstellt | table header |
| Expires | Gültig bis | table header |
| No links. Create one to get started. | Keine Links. Erstellen Sie einen, um zu beginnen. | table placeholder |
##### Create Shareable Link popup
| EN | DE | Notes |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ----------------------- |
| Create Shareable Link | Teilbaren Link erstellen | |
| Anyone with this link can access the resource | Jeder mit diesem Link kann auf die Ressource zugreifen | |
| Resource | Ressource | |
| Select resource | Ressource auswählen | |
| Search resources… | Ressourcen suchen… | resource selector popup |
| Title (optional) | Titel (optional) | |
| Enter title | Titel eingeben | placeholder |
| Expire in | Gültig bis | |
| Minutes | Minuten | |
| Hours | Stunden | |
| Days | Tage | |
| Months | Monate | |
| Years | Jahre | |
| Never expire | Nie ablaufen | |
| Expiration time is how long the link will be usable and provide access to the resource. After this time, the link will no longer work, and users who used this link will lose access to the resource. | Die Gültigkeitsdauer bestimmt, wie lange der Link nutzbar ist und Zugriff auf die Ressource bietet. Nach Ablauf dieser Zeit funktioniert der Link nicht mehr, und Benutzer, die diesen Link verwendet haben, verlieren den Zugriff auf die Ressource. | |
| Create Link | Link erstellen | |
| Close | Schließen | |
## Main “General”
| EN | DE | Notes |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------ |
| General | Allgemein | |
| Configure your organizations general settings | Konfigurieren Sie die allgemeinen Einstellungen Ihrer Organisation | |
| General | Allgemein | sidebar item |
| Organization Settings | Organisationseinstellungen | |
| Manage your organization details and configuration | Verwalten Sie die Details und Konfiguration Ihrer Organisation | |
| Name | Name | |
| This is the display name of the org | Dies ist der Anzeigename Ihrer Organisation | |
| Save Settings | Einstellungen speichern | |
| Danger Zone | Gefahrenzone | |
| Once you delete this org, there is no going back. Please be certain. | Wenn Sie diese Organisation löschen, gibt es kein Zurück. Bitte seien Sie sicher. | |
| Delete Organization Data | Organisationsdaten löschen | |
-291
View File
@@ -1,291 +0,0 @@
## Authentication Site
| EN | ES | Notes |
| -------------------------------------------------------- | ------------------------------------------------------------ | ---------- |
| Powered by [Pangolin](https://github.com/fosrl/pangolin) | Desarrollado por [Pangolin](https://github.com/fosrl/pangolin) | |
| Authentication Required | Se requiere autenticación | |
| Choose your preferred method to access {resource} | Elije tu método requerido para acceder a {resource} | |
| PIN | PIN | |
| User | Usuario | |
| 6-digit PIN Code | Código PIN de 6 dígitos | pin login |
| Login in with PIN | Registrate con PIN | pin login |
| Email | Email | user login |
| Enter your email | Introduce tu email | user login |
| Password | Contraseña | user login |
| Enter your password | Introduce tu contraseña | user login |
| Forgot your password? | ¿Olvidaste tu contraseña? | user login |
| Log in | Iniciar sesión | user login |
## Login site
| EN | ES | Notes |
| --------------------- | ---------------------------------- | ----------- |
| Welcome to Pangolin | Binvenido a Pangolin | |
| Log in to get started | Registrate para comenzar | |
| Email | Email | |
| Enter your email | Introduce tu email | placeholder |
| Password | Contraseña | |
| Enter your password | Introduce tu contraseña | placeholder |
| Forgot your password? | ¿Olvidaste tu contraseña? | |
| Log in | Iniciar sesión | |
# Ogranization site after successful login
| EN | ES | Notes |
| ----------------------------------------- | -------------------------------------------- | ----- |
| Welcome to Pangolin | Binvenido a Pangolin | |
| You're a member of {number} organization. | Eres miembro de la organización {number}. | |
## Shared Header, Navbar and Footer
##### Header
| EN | ES | Notes |
| ------------------- | ------------------- | ----- |
| Documentation | Documentación | |
| Support | Soporte | |
| Organization {name} | Organización {name} | |
##### Organization selector
| EN | ES | Notes |
| ---------------- | ----------------- | ----- |
| Search… | Buscar… | |
| Create | Crear | |
| New Organization | Nueva Organización| |
| Organizations | Organizaciones | |
##### Navbar
| EN | ES | Notes |
| --------------- | -----------------------| ----- |
| Sites | Sitios | |
| Resources | Recursos | |
| User & Roles | Usuarios y roles | |
| Shareable Links | Enlaces para compartir | |
| General | General | |
##### Footer
| EN | ES | |
| ------------------------- | --------------------------- | -------|
| Page {number} of {number} | Página {number} de {number} | footer |
| Rows per page | Filas por página | footer |
| Pangolin | Pangolin | footer |
| Built by Fossorial | Construido por Fossorial | footer |
| Open Source | Código abierto | footer |
| Documentation | Documentación | footer |
| {version} | {version} | footer |
## Main “Sites”
##### “Hero” section
| EN | ES | Notes |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ----- |
| Newt (Recommended) | Newt (Recomendado) | |
| For the best user experience, use Newt. It uses WireGuard under the hood and allows you to address your private resources by their LAN address on your private network from within the Pangolin dashboard. | Para obtener la mejor experiencia de usuario, utiliza Newt. Utiliza WireGuard internamente y te permite abordar tus recursos privados mediante tu dirección LAN en tu red privada desde el panel de Pangolin. | |
| Runs in Docker | Se ejecuta en Docker | |
| Runs in shell on macOS, Linux, and Windows | Se ejecuta en shell en macOS, Linux y Windows | |
| Install Newt | Instalar Newt | |
| Basic WireGuard<br> | WireGuard básico<br> | |
| Compatible with all WireGuard clients<br> | Compatible con todos los clientes WireGuard<br> | |
| Manual configuration required | Se requiere configuración manual | |
##### Content
| EN | ES | Notes |
| --------------------------------------------------------- | ------------------------------------------------------------ | -------------------------------- |
| Manage Sites | Administrar sitios | |
| Allow connectivity to your network through secure tunnels | Permitir la conectividad a tu red a través de túneles seguros| |
| Search sites | Buscar sitios | placeholder |
| Add Site | Agregar sitio | |
| Name | Nombre | table header |
| Online | Conectado | table header |
| Site | Sitio | table header |
| Data In | Datos en | table header |
| Data Out | Datos de salida | table header |
| Connection Type | Tipo de conexión | table header |
| Online | Conectado | site state |
| Offline | Desconectado | site state |
| Edit → | Editar → | |
| View settings | Ver configuración | Popup after clicking “…” on site |
| Delete | Borrar | Popup after clicking “…” on site |
##### Add Site Popup
| EN | ES | Notes |
| ------------------------------------------------------ | ----------------------------------------------------------- | ----------- |
| Create Site | Crear sitio | |
| Create a new site to start connection for this site | Crear un nuevo sitio para iniciar la conexión para este sitio | |
| Name | Nombre | |
| Site name | Nombre del sitio | placeholder |
| This is the name that will be displayed for this site. | Este es el nombre que se mostrará para este sitio. | desc |
| Method | Método | |
| Local | Local | |
| Newt | Newt | |
| WireGuard | WireGuard | |
| This is how you will expose connections. | Así es como expondrás las conexiones. | |
| You will only be able to see the configuration once. | Solo podrás ver la configuración una vez. | |
| Learn how to install Newt on your system | Aprende a instalar Newt en tu sistema | |
| I have copied the config | He copiado la configuración | |
| Create Site | Crear sitio | |
| Close | Cerrar | |
## Main “Resources”
##### “Hero” section
| EN | ES | Notes |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ----- |
| Resources | Recursos | |
| Ressourcen sind Proxy-Server für Anwendungen, die in Ihrem privaten Netzwerk laufen. Erstellen Sie eine Ressource für jede HTTP- oder HTTPS-Anwendung in Ihrem privaten Netzwerk. Jede Ressource muss mit einer Website verbunden sein, um eine private und sichere Verbindung über den verschlüsselten WireGuard-Tunnel zu ermöglichen. |Los recursos son servidores proxy para aplicaciones que se ejecutan en su red privada. Cree un recurso para cada aplicación HTTP o HTTPS en su red privada. Cada recurso debe estar conectado a un sitio web para proporcionar una conexión privada y segura a través del túnel cifrado WireGuard. | |
| Secure connectivity with WireGuard encryption | Conectividad segura con encriptación WireGuard | |
| Configure multiple authentication methods | Configura múltiples métodos de autenticación | |
| User and role-based access control | Control de acceso basado en usuarios y roles | |
##### Content
| EN | ES | Notes |
| -------------------------------------------------- | ---------------------------------------------------------- | -------------------- |
| Manage Resources | Administrar recursos | |
| Create secure proxies to your private applications | Crea servidores proxy seguros para tus aplicaciones privadas | |
| Search resources | Buscar recursos | placeholder |
| Name | Nombre | |
| Site | Sitio | |
| Full URL | URL completa | |
| Authentication | Autenticación | |
| Not Protected | No protegido | authentication state |
| Protected | Protegido | authentication state |
| Edit → | Editar → | |
| Add Resource | Agregar recurso | |
##### Add Resource Popup
| EN | ES | Notes |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------- |
| Create Resource | Crear recurso | |
| Create a new resource to proxy request to your app | Crea un nuevo recurso para enviar solicitudes a tu aplicación | |
| Name | Nombre | |
| My Resource | Mi recurso | name placeholder |
| This is the name that will be displayed for this resource. | Este es el nombre que se mostrará para este recurso. | |
| Subdomain | Subdominio | |
| Enter subdomain | Ingresar subdominio | |
| This is the fully qualified domain name that will be used to access the resource. | Este es el nombre de dominio completo que se utilizará para acceder al recurso. | |
| Site | Sitio | |
| Search site… | Buscar sitio… | Site selector popup |
| This is the site that will be used in the dashboard. | Este es el sitio que se utilizará en el panel de control. | |
| Create Resource | Crear recurso | |
| Close | Cerrar | |
## Main “User & Roles”
##### Content
| EN | ES | Notes |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ----------------------------- |
| Manage User & Roles | Administrar usuarios y roles | |
| Invite users and add them to roles to manage access to your organization | Invita a usuarios y agrégalos a roles para administrar el acceso a tu organización | |
| Users | Usuarios | sidebar item |
| Roles | Roles | sidebar item |
| **User tab** | **Pestaña de usuario** | |
| Search users | Buscar usuarios | placeholder |
| Invite User | Invitar usuario | addbutton |
| Email | Email | table header |
| Status | Estado | table header |
| Role | Role | table header |
| Confirmed | Confirmado | account status |
| Not confirmed (?) | No confirmado (?) | unknown for me account status |
| Owner | Dueño | role |
| Admin | Administrador | role |
| Member | Miembro | role |
| **Roles Tab** | **Pestaña Roles** | |
| Search roles | Buscar roles | placeholder |
| Add Role | Agregar rol | addbutton |
| Name | Nombre | table header |
| Description | Descripción | table header |
| Admin | Administrador | role |
| Member | Miembro | role |
| Admin role with the most permissions | Rol de administrador con más permisos | admin role desc |
| Members can only view resources | Los miembros sólo pueden ver los recursos | member role desc |
##### Invite User popup
| EN | ES | Notes |
| ----------------- | ------------------------------------------------------- | ----------- |
| Invite User | Invitar usuario | |
| Email | Email | |
| Enter an email | Introduzca un email | placeholder |
| Role | Rol | |
| Select role | Seleccionar rol | placeholder |
| Gültig für | Válido para | |
| 1 day | 1 día | |
| 2 days | 2 días | |
| 3 days | 3 días | |
| 4 days | 4 días | |
| 5 days | 5 días | |
| 6 days | 6 días | |
| 7 days | 7 días | |
| Create Invitation | Crear invitación | |
| Close | Cerrar | |
## Main “Shareable Links”
##### “Hero” section
| EN | ES | Notes |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ----- |
| Shareable Links | Enlaces para compartir | |
| Create shareable links to your resources. Links provide temporary or unlimited access to your resource. You can configure the expiration duration of the link when you create one. | Crear enlaces que se puedan compartir a tus recursos. Los enlaces proporcionan acceso temporal o ilimitado a tu recurso. Puedes configurar la duración de caducidad del enlace cuando lo creas. | |
| Easy to create and share | Fácil de crear y compartir | |
| Configurable expiration duration | Duración de expiración configurable | |
| Secure and revocable | Seguro y revocable | |
##### Content
| EN | ES | Notes |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ----------------- |
| Manage Shareable Links | Administrar enlaces compartibles | |
| Create shareable links to grant temporary or permanent access to your resources | Crear enlaces compartibles para otorgar acceso temporal o permanente a tus recursos | |
| Search links | Buscar enlaces | placeholder |
| Create Share Link | Crear enlace para compartir | addbutton |
| Resource | Recurso | table header |
| Title | Título | table header |
| Created | Creado | table header |
| Expires | Caduca | table header |
| No links. Create one to get started. | No hay enlaces. Crea uno para comenzar. | table placeholder |
##### Create Shareable Link popup
| EN | ES | Notes |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ----------------------- |
| Create Shareable Link | Crear un enlace para compartir | |
| Anyone with this link can access the resource | Cualquier persona con este enlace puede acceder al recurso. | |
| Resource | Recurso | |
| Select resource | Seleccionar recurso | |
| Search resources… | Buscar recursos… | resource selector popup |
| Title (optional) | Título (opcional) | |
| Enter title | Introducir título | placeholder |
| Expire in | Caduca en | |
| Minutes | Minutos | |
| Hours | Horas | |
| Days | Días | |
| Months | Meses | |
| Years | Años | |
| Never expire | Nunca caduca | |
| Expiration time is how long the link will be usable and provide access to the resource. After this time, the link will no longer work, and users who used this link will lose access to the resource. | El tiempo de expiración es el tiempo durante el cual el enlace se podrá utilizar y brindará acceso al recurso. Después de este tiempo, el enlace dejará de funcionar y los usuarios que lo hayan utilizado perderán el acceso al recurso. | |
| Create Link | Crear enlace | |
| Close | Cerrar | |
## Main “General”
| EN | ES | Notes |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------ |
| General | General | |
| Configure your organizations general settings | Configura los ajustes generales de tu organización | |
| General | General | sidebar item |
| Organization Settings | Configuración de la organización | |
| Manage your organization details and configuration | Administra los detalles y la configuración de tu organización| |
| Name | Nombre | |
| This is the display name of the org | Este es el nombre para mostrar de la organización. | |
| Save Settings | Guardar configuración | |
| Danger Zone | Zona de peligro | |
| Once you delete this org, there is no going back. Please be certain. | Una vez que elimines esta organización, no habrá vuelta atrás. Asegúrate de hacerlo. | |
| Delete Organization Data | Eliminar datos de la organización | |
-287
View File
@@ -1,287 +0,0 @@
## Authentication Site
| EN | PL | Notes |
| -------------------------------------------------------- | ------------------------------------------------------------ | ---------- |
| Powered by [Pangolin](https://github.com/fosrl/pangolin) | Zasilane przez [Pangolin](https://github.com/fosrl/pangolin) | |
| Authentication Required | Wymagane uwierzytelnienie | |
| Choose your preferred method to access {resource} | Wybierz preferowaną metodę dostępu do {resource} | |
| PIN | PIN | |
| User | Zaloguj | |
| 6-digit PIN Code | 6-cyfrowy kod PIN | pin login |
| Login in with PIN | Zaloguj się PINem | pin login |
| Email | Email | user login |
| Enter your email | Wprowadź swój email | user login |
| Password | Hasło | user login |
| Enter your password | Wprowadź swoje hasło | user login |
| Forgot your password? | Zapomniałeś hasła? | user login |
| Log in | Zaloguj | user login |
## Login site
| EN | PL | Notes |
| --------------------- | ------------------------------ | ----------- |
| Welcome to Pangolin | Witaj w Pangolin | |
| Log in to get started | Zaloguj się, aby rozpocząć<br> | |
| Email | Email | |
| Enter your email | Wprowadź swój adres e-mail<br> | placeholder |
| Password | Hasło | |
| Enter your password | Wprowadź swoje hasło | placeholder |
| Forgot your password? | Nie pamiętasz hasła? | |
| Log in | Zaloguj | |
# Ogranization site after successful login
| EN | PL | Notes |
| ----------------------------------------- | ------------------------------------------ | ----- |
| Welcome to Pangolin | Witaj w Pangolin | |
| You're a member of {number} organization. | Jesteś użytkownikiem {number} organizacji. | |
## Shared Header, Navbar and Footer
##### Header
| EN | PL | Notes |
| ------------------- | ------------------ | ----- |
| Documentation | Dokumentacja | |
| Support | Wsparcie | |
| Organization {name} | Organizacja {name} | |
##### Organization selector
| EN | PL | Notes |
| ---------------- | ---------------- | ----- |
| Search… | Szukaj… | |
| Create | Utwórz | |
| New Organization | Nowa organizacja | |
| Organizations | Organizacje | |
##### Navbar
| EN | PL | Notes |
| --------------- | ---------------------- | ----- |
| Sites | Witryny | |
| Resources | Zasoby | |
| User & Roles | Użytkownicy i Role | |
| Shareable Links | Łącza do udostępniania | |
| General | Ogólne | |
##### Footer
| EN | PL | |
| ------------------------- | -------------------------- | -------------- |
| Page {number} of {number} | Strona {number} z {number} | |
| Rows per page | Wierszy na stronę | |
| Pangolin | Pangolin | bottom of site |
| Built by Fossorial | Stworzone przez Fossorial | bottom of site |
| Open Source | Open source | bottom of site |
| Documentation | Dokumentacja | bottom of site |
| {version} | {version} | bottom of site |
## Main “Sites”
##### “Hero” section
| EN | PL | Notes |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----- |
| Newt (Recommended) | Newt (zalecane) | |
| For the best user experience, use Newt. It uses WireGuard under the hood and allows you to address your private resources by their LAN address on your private network from within the Pangolin dashboard. | Aby zapewnić najlepsze doświadczenie użytkownika, korzystaj z Newt. Wykorzystuje on technologię WireGuard w tle i pozwala na dostęp do Twoich prywatnych zasobów za pomocą ich adresu LAN w prywatnej sieci bezpośrednio z poziomu pulpitu nawigacyjnego Pangolin. | |
| Runs in Docker | Działa w Dockerze | |
| Runs in shell on macOS, Linux, and Windows | Działa w powłoce na systemach macOS, Linux i Windows | |
| Install Newt | Zainstaluj Newt | |
| Podstawowy WireGuard<br> | Użyj dowolnego klienta WireGuard, aby się połączyć. Będziesz musiał uzyskiwać dostęp do swoich wewnętrznych zasobów za pomocą adresu IP równorzędnego | |
| Compatible with all WireGuard clients<br> | Kompatybilny ze wszystkimi klientami WireGuard<br> | |
| Manual configuration required | Wymagana ręczna konfiguracja<br> | |
##### Content
| EN | PL | Notes |
| --------------------------------------------------------- | ------------------------------------------------------------------------ | -------------------------------- |
| Manage Sites | Zarządzanie witrynami | |
| Allow connectivity to your network through secure tunnels | Zezwalaj na łączność z Twoją siecią za pośrednictwem bezpiecznych tuneli | |
| Search sites | Szukaj witryny | placeholder |
| Add Site | Dodaj witrynę | |
| Name | Nazwa | table header |
| Online | Status | table header |
| Site | Witryna | table header |
| Data In | Dane wchodzące | table header |
| Data Out | Dane wychodzące | table header |
| Connection Type | Typ połączenia | table header |
| Online | Online | site state |
| Offline | Poza siecią | site state |
| Edit → | Edytuj → | |
| View settings | Pokaż ustawienia | Popup after clicking “…” on site |
| Delete | Usuń | Popup after clicking “…” on site |
##### Add Site Popup
| EN | PL | Notes |
| ------------------------------------------------------ | --------------------------------------------------- | ----------- |
| Create Site | Utwórz witrynę | |
| Create a new site to start connection for this site | Utwórz nową witrynę aby rozpocząć połączenie | |
| Name | Nazwa | |
| Site name | Nazwa witryny | placeholder |
| This is the name that will be displayed for this site. | Tak będzie wyświetlana twoja witryna | desc |
| Method | Metoda | |
| Local | Lokalna | |
| Newt | Newt | |
| WireGuard | WireGuard | |
| This is how you will expose connections. | Tak będą eksponowane połączenie. | |
| You will only be able to see the configuration once. | Tą konfigurację możesz zobaczyć tylko raz. | |
| Learn how to install Newt on your system | Dowiedz się jak zainstalować Newt na twoim systemie | |
| I have copied the config | Skopiowałem konfigurację | |
| Create Site | Utwórz witrynę | |
| Close | Zamknij | |
## Main “Resources”
##### “Hero” section
| EN | PL | Notes |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----- |
| Resources | Zasoby | |
| Zasoby to serwery proxy dla aplikacji działających w Twojej prywatnej sieci. Utwórz zasób dla dowolnej aplikacji HTTP lub HTTPS w swojej prywatnej sieci. Każdy zasób musi być połączony z witryną, aby umożliwić prywatne i bezpieczne połączenie przez szyfrowany tunel WireGuard. | Zasoby to serwery proxy dla aplikacji działających w Twojej prywatnej sieci. Utwórz zasób dla dowolnej aplikacji HTTP lub HTTPS w swojej prywatnej sieci. Każdy zasób musi być połączony z witryną, aby umożliwić prywatne i bezpieczne połączenie przez szyfrowany tunel WireGuard. | |
| Secure connectivity with WireGuard encryption | Bezpieczna łączność z szyfrowaniem WireGuard | |
| Configure multiple authentication methods | Konfigurowanie wielu metod uwierzytelniania | |
| User and role-based access control | Kontrola dostępu oparta na użytkownikach i rolach | |
##### Content
| EN | PL | Notes |
| -------------------------------------------------- | -------------------------------------------------------------- | -------------------- |
| Manage Resources | Zarządzaj zasobami | |
| Create secure proxies to your private applications | Twórz bezpieczne serwery proxy dla swoich prywatnych aplikacji | |
| Search resources | Szukaj w zasobach | placeholder |
| Name | Nazwa | |
| Site | Witryna | |
| Full URL | Pełny URL | |
| Authentication | Uwierzytelnianie | |
| Not Protected | Niezabezpieczony | authentication state |
| Protected | Zabezpieczony | authentication state |
| Edit → | Edytuj → | |
| Add Resource | Dodaj zasób | |
##### Add Resource Popup
| EN | PL | Notes |
| --------------------------------------------------------------------------------- | ---------------------------------------------------------------------- | ------------------- |
| Create Resource | Utwórz zasób | |
| Create a new resource to proxy request to your app | Utwórz nowy zasób, aby przekazywać żądania do swojej aplikacji | |
| Name | Nazwa | |
| My Resource | Nowy zasób | name placeholder |
| This is the name that will be displayed for this resource. | To jest nazwa, która będzie wyświetlana dla tego zasobu | |
| Subdomain | Subdomena | |
| Enter subdomain | Wprowadź subdomenę | |
| This is the fully qualified domain name that will be used to access the resource. | To jest pełna nazwa domeny, która będzie używana do dostępu do zasobu. | |
| Site | Witryna | |
| Search site… | Szukaj witryny… | Site selector popup |
| This is the site that will be used in the dashboard. | To jest witryna, która będzie używana w pulpicie nawigacyjnym. | |
| Create Resource | Utwórz zasób | |
| Close | Zamknij | |
## Main “User & Roles”
##### Content
| EN | PL | Notes |
| ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ----------------------------- |
| Manage User & Roles | Zarządzanie użytkownikami i rolami | |
| Invite users and add them to roles to manage access to your organization | Zaproś użytkowników i przypisz im role, aby zarządzać dostępem do Twojej organizacji | |
| Users | Użytkownicy | sidebar item |
| Roles | Role | sidebar item |
| **User tab** | | |
| Search users | Wyszukaj użytkownika | placeholder |
| Invite User | Zaproś użytkownika | addbutton |
| Email | Email | table header |
| Status | Status | table header |
| Role | Rola | table header |
| Confirmed | Zatwierdzony | account status |
| Not confirmed (?) | Niezatwierdzony (?) | unknown for me account status |
| Owner | Właściciel | role |
| Admin | Administrator | role |
| Member | Użytkownik | role |
| **Roles Tab** | | |
| Search roles | Wyszukaj role | placeholder |
| Add Role | Dodaj role | addbutton |
| Name | Nazwa | table header |
| Description | Opis | table header |
| Admin | Administrator | role |
| Member | Użytkownik | role |
| Admin role with the most permissions | Rola administratora z najszerszymi uprawnieniami | admin role desc |
| Members can only view resources | Członkowie mogą jedynie przeglądać zasoby | member role desc |
##### Invite User popup
| EN | PL | Notes |
| ----------------- | ------------------------------------------ | ----------- |
| Invite User | Give new users access to your organization | |
| Email | Email | |
| Enter an email | Wprowadź email | placeholder |
| Role | Rola | |
| Select role | Wybierz role | placeholder |
| Vaild for | Ważne do | |
| 1 day | Dzień | |
| 2 days | 2 dni | |
| 3 days | 3 dni | |
| 4 days | 4 dni | |
| 5 days | 5 dni | |
| 6 days | 6 dni | |
| 7 days | 7 dni | |
| Create Invitation | Utwórz zaproszenie | |
| Close | Zamknij | |
## Main “Shareable Links”
##### “Hero” section
| EN | PL | Notes |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |
| Shareable Links | Łącza do udostępniania | |
| Create shareable links to your resources. Links provide temporary or unlimited access to your resource. You can configure the expiration duration of the link when you create one. | Twórz linki do udostępniania swoich zasobów. Linki zapewniają tymczasowy lub nieograniczony dostęp do zasobu. Możesz skonfigurować czas wygaśnięcia linku podczas jego tworzenia. | |
| Easy to create and share | Łatwe tworzenie i udostępnianie | |
| Configurable expiration duration | Konfigurowalny czas wygaśnięcia | |
| Secure and revocable | Bezpieczne i odwołalne | |
##### Content
| EN | PL | Notes |
| ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ----------------- |
| Manage Shareable Links | Zarządzaj łączami do udostępniania | |
| Create shareable links to grant temporary or permament access to your resources | Utwórz łącze do udostępniania w celu przyznania tymczasowego lub stałego dostępu do zasobów | |
| Search links | Szukaj łączy | placeholder |
| Create Share Link | Utwórz nowe łącze | addbutton |
| Resource | Zasób | table header |
| Title | Tytuł | table header |
| Created | Utworzone | table header |
| Expires | Wygasa | table header |
| No links. Create one to get started. | Brak łączy. Utwórz, aby rozpocząć. | table placeholder |
##### Create Shareable Link popup
| EN | PL | Notes |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------- |
| Create Shareable Link | Utwórz łącze do udostępnienia | |
| Anyone with this link can access the resource | Każdy kto ma ten link może korzystać z zasobu | |
| Resource | Zasób | |
| Select resource | Wybierz zasób | |
| Search resources… | Szukaj zasobów… | resource selector popup |
| Title (optional) | Tytuł (opcjonalny) | |
| Enter title | Wprowadź tytuł | placeholder |
| Expire in | Wygasa za | |
| Minutes | Minut | |
| Hours | Godzin | |
| Days | Dni | |
| Months | Miesięcy | |
| Years | Lat | |
| Never expire | Nie wygasa | |
| Expiration time is how long the link will be usable and provide access to the resource. After this time, the link will no longer work, and users who used this link will lose access to the resource. | Czas wygaśnięcia to okres, przez który link będzie aktywny i zapewni dostęp do zasobu. Po upływie tego czasu link przestanie działać, a użytkownicy, którzy go użyli, stracą dostęp do zasobu. | |
| Create Link | Utwórz łącze | |
| Close | Zamknij | |
## Main “General”
| EN | PL | Notes |
| -------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------ |
| General | Ogólne | |
| Configure your organizations general settings | Zarządzaj ogólnymi ustawieniami twoich organizacji | |
| General | Ogólne | sidebar item |
| Organization Settings | Ustawienia organizacji | |
| Manage your organization details and configuration | Zarządzaj szczegółami i konfiguracją organizacji | |
| Name | Nazwa | |
| This is the display name of the org | To jest wyświetlana nazwa Twojej organizacji | |
| Save Settings | Zapisz ustawienia | |
| Danger Zone | Niebezpieczna strefa | |
| Once you delete this org, there is no going back. Please be certain. | Jeśli usuniesz swoją tą organizację, nie ma odwrotu. Bądź ostrożny! | |
| Delete Organization Data | Usuń dane organizacji | |
-310
View File
@@ -1,310 +0,0 @@
## Authentication Site
| EN | TR | Notes |
| -------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------- |
| Powered by [Pangolin](https://github.com/fosrl/pangolin) | Pangolin Tarafından Destekleniyor | |
| Authentication Required | Kimlik Doğrulaması Gerekli | |
| Choose your preferred method to access {resource} | {resource}'a erişmek için tercih ettiğiniz yöntemi seçin | |
| PIN | PIN | |
| User | Kullanıcı | |
| 6-digit PIN Code | 6 haneli PIN Kodu | pin login |
| Login in with PIN | PIN ile Giriş Yap | pin login |
| Email | E-posta | user login |
| Enter your email | E-postanızı girin | user login |
| Password | Şifre | user login |
| Enter your password | Şifrenizi girin | user login |
| Forgot your password? | Şifrenizi mi unuttunuz? | user login |
| Log in | Giriş Yap | user login |
---
## Login site
| EN | TR | Notes |
| --------------------- | ------------------------------------------------------ | ----------- |
| Welcome to Pangolin | Pangolin'e Hoşgeldiniz | |
| Log in to get started | Başlamak için giriş yapın | |
| Email | E-posta | |
| Enter your email | E-posta adresinizi girin | placeholder |
| Password | Şifre | |
| Enter your password | Şifrenizi girin | placeholder |
| Forgot your password? | Şifrenizi mi unuttunuz? | |
| Log in | Giriş Yap | |
---
# Organization site after successful login
| EN | TR | Notes |
| ----------------------------------------- | ------------------------------------------------------------------- | ----- |
| Welcome to Pangolin | Pangolin'e Hoşgeldiniz | |
| You're a member of {number} organization. | {number} organizasyonunun üyesiniz. | |
---
## Shared Header, Navbar and Footer
##### Header
| EN | TR | Notes |
| ------------------- | -------------------------- | ----- |
| Documentation | Dokümantasyon | |
| Support | Destek | |
| Organization {name} | Organizasyon {name} | |
##### Organization selector
| EN | TR | Notes |
| ---------------- | ---------------------- | ----- |
| Search… | Ara… | |
| Create | Oluştur | |
| New Organization | Yeni Organizasyon | |
| Organizations | Organizasyonlar | |
##### Navbar
| EN | TR | Notes |
| --------------- | ------------------------------- | ----- |
| Sites | Siteler | |
| Resources | Kaynaklar | |
| User & Roles | Kullanıcılar ve Roller | |
| Shareable Links | Paylaşılabilir Linkler | |
| General | Genel | |
##### Footer
| EN | TR | Notes |
| ------------------------- | ------------------------------------------------ | -------------------- |
| Page {number} of {number} | Sayfa {number} / {number} | |
| Rows per page | Sayfa başına satırlar | |
| Pangolin | Pangolin | Footer'da yer alır |
| Built by Fossorial | Fossorial tarafından oluşturuldu | Footer'da yer alır |
| Open Source | Açık Kaynak | Footer'da yer alır |
| Documentation | Dokümantasyon | Footer'da yer alır |
| {version} | {version} | Footer'da yer alır |
---
## Main “Sites”
##### “Hero” section
| EN | TR | Notes |
| ------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------- | ----- |
| Newt (Recommended) | Newt (Tavsiye Edilen) | |
| For the best user experience, use Newt. It uses WireGuard under the hood and allows you to address your private resources by their LAN address on your private network from within the Pangolin dashboard. | En iyi kullanıcı deneyimi için Newt'i kullanın. Newt, arka planda WireGuard kullanır ve Pangolin kontrol paneli üzerinden özel ağınızdaki kaynaklarınıza LAN adresleriyle erişmenizi sağlar. | |
| Runs in Docker | Docker üzerinde çalışır | |
| Runs in shell on macOS, Linux, and Windows | macOS, Linux ve Windowsta komut satırında çalışır | |
| Install Newt | Newt'i Yükle | |
| Basic WireGuard<br> | Temel WireGuard<br> | |
| Compatible with all WireGuard clients<br> | Tüm WireGuard istemcileriyle uyumlu<br> | |
| Manual configuration required | Manuel yapılandırma gereklidir | |
##### Content
| EN | TR | Notes |
| --------------------------------------------------------- | --------------------------------------------------------------------------- | ------------ |
| Manage Sites | Siteleri Yönet | |
| Allow connectivity to your network through secure tunnels | Güvenli tüneller aracılığıyla ağınıza bağlantı sağlayın | |
| Search sites | Siteleri ara | placeholder |
| Add Site | Site Ekle | |
| Name | Ad | Table Header |
| Online | Çevrimiçi | Table Header |
| Site | Site | Table Header |
| Data In | Gelen Veri | Table Header |
| Data Out | Giden Veri | Table Header |
| Connection Type | Bağlantı Türü | Table Header |
| Online | Çevrimiçi | Site state |
| Offline | Çevrimdışı | Site state |
| Edit → | Düzenle → | |
| View settings | Ayarları Görüntüle | Popup |
| Delete | Sil | Popup |
##### Add Site Popup
| EN | TR | Notes |
| ------------------------------------------------------ | ------------------------------------------------------------------------------------------- | ----------- |
| Create Site | Site Oluştur | |
| Create a new site to start connection for this site | Bu site için bağlantıyı başlatmak amacıyla yeni bir site oluşturun | |
| Name | Ad | |
| Site name | Site adı | placeholder |
| This is the name that will be displayed for this site. | Bu, site için görüntülenecek addır. | desc |
| Method | Yöntem | |
| Local | Yerel | |
| Newt | Newt | |
| WireGuard | WireGuard | |
| This is how you will expose connections. | Bağlantılarınızı bu şekilde açığa çıkaracaksınız. | |
| You will only be able to see the configuration once. | Yapılandırmayı yalnızca bir kez görüntüleyebilirsiniz. | |
| Learn how to install Newt on your system | Sisteminizde Newt'in nasıl kurulacağını öğrenin | |
| I have copied the config | Yapılandırmayı kopyaladım | |
| Create Site | Site Oluştur | |
| Close | Kapat | |
---
## Main “Resources”
##### “Hero” section
| EN | TR | Notes |
| ------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ----- |
| Resources | Kaynaklar | |
| Ressourcen sind Proxy-Server für Anwendungen, die in Ihrem privaten Netzwerk laufen. Erstellen Sie eine Ressource für jede HTTP- oder HTTPS-Anwendung in Ihrem privaten Netzwerk. Jede Ressource muss mit einer Website verbunden sein, um eine private und sichere Verbindung über den verschlüsselten WireGuard-Tunnel zu ermöglichen. | Kaynaklar, özel ağınızda çalışan uygulamalar için proxy sunucularıdır. Özel ağınızdaki her HTTP veya HTTPS uygulaması için bir kaynak oluşturun. Her kaynağın, şifrelenmiş WireGuard tüneli üzerinden özel ve güvenli bağlantı sağlamak üzere bir siteyle ilişkili olması gerekir. | |
| Secure connectivity with WireGuard encryption | WireGuard şifrelemesiyle güvenli bağlantı | |
| Configure multiple authentication methods | Birden çok kimlik doğrulama yöntemini yapılandırın | |
| User and role-based access control | Kullanıcı ve role dayalı erişim kontrolü | |
##### Content
| EN | TR | Notes |
| -------------------------------------------------- | ------------------------------------------------------------- | -------------------- |
| Manage Resources | Kaynakları Yönet | |
| Create secure proxies to your private applications | Özel uygulamalarınız için güvenli proxyler oluşturun | |
| Search resources | Kaynakları ara | placeholder |
| Name | Ad | |
| Site | Site | |
| Full URL | Tam URL | |
| Authentication | Kimlik Doğrulama | |
| Not Protected | Korunmayan | authentication state |
| Protected | Korunan | authentication state |
| Edit → | Düzenle → | |
| Add Resource | Kaynak Ekle | |
##### Add Resource Popup
| EN | TR | Notes |
| ------------------------------------------------------------ | ----------------------------------------------------------------------------------------------- | ------------- |
| Create Resource | Kaynak Oluştur | |
| Create a new resource to proxy request to your app | Uygulamanıza gelen istekleri yönlendirmek için yeni bir kaynak oluşturun | |
| Name | Ad | |
| My Resource | Kaynağım | name placeholder |
| This is the name that will be displayed for this resource. | Bu, kaynağın görüntülenecek adıdır. | |
| Subdomain | Alt alan adı | |
| Enter subdomain | Alt alan adını girin | |
| This is the fully qualified domain name that will be used to access the resource. | Kaynağa erişmek için kullanılacak tam nitelikli alan adıdır. | |
| Site | Site | |
| Search site… | Site ara… | Site selector popup |
| This is the site that will be used in the dashboard. | Kontrol panelinde kullanılacak sitedir. | |
| Create Resource | Kaynak Oluştur | |
| Close | Kapat | |
---
## Main “User & Roles”
##### Content
| EN | TR | Notes |
| ------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ----------------------------- |
| Manage User & Roles | Kullanıcılar ve Rolleri Yönet | |
| Invite users and add them to roles to manage access to your organization | Organizasyonunuza erişimi yönetmek için kullanıcıları davet edin ve rollere atayın | |
| Users | Kullanıcılar | sidebar item |
| Roles | Roller | sidebar item |
| **User tab** | **Kullanıcı Sekmesi** | |
| Search users | Kullanıcıları ara | placeholder |
| Invite User | Kullanıcı Davet Et | addbutton |
| Email | E-posta | table header |
| Status | Durum | table header |
| Role | Rol | table header |
| Confirmed | Onaylandı | account status |
| Not confirmed (?) | Onaylanmadı (?) | account status |
| Owner | Sahip | role |
| Admin | Yönetici | role |
| Member | Üye | role |
| **Roles Tab** | **Roller Sekmesi** | |
| Search roles | Rolleri ara | placeholder |
| Add Role | Rol Ekle | addbutton |
| Name | Ad | table header |
| Description | Açıklama | table header |
| Admin | Yönetici | role |
| Member | Üye | role |
| Admin role with the most permissions | En fazla yetkiye sahip yönetici rolü | admin role desc |
| Members can only view resources | Üyeler yalnızca kaynakları görüntüleyebilir | member role desc |
##### Invite User popup
| EN | TR | Notes |
| ----------------- | ----------------------------------------------------------------------- | ----------- |
| Invite User | Kullanıcı Davet Et | |
| Email | E-posta | |
| Enter an email | Bir e-posta adresi girin | placeholder |
| Role | Rol | |
| Select role | Rol seçin | placeholder |
| Gültig für | Geçerlilik Süresi | |
| 1 day | 1 gün | |
| 2 days | 2 gün | |
| 3 days | 3 gün | |
| 4 days | 4 gün | |
| 5 days | 5 gün | |
| 6 days | 6 gün | |
| 7 days | 7 gün | |
| Create Invitation | Davetiye Oluştur | |
| Close | Kapat | |
---
## Main “Shareable Links”
##### “Hero” section
| EN | TR | Notes |
| ------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------- | ----- |
| Shareable Links | Paylaşılabilir Bağlantılar | |
| Create shareable links to your resources. Links provide temporary or unlimited access to your resource. You can configure the expiration duration of the link when you create one. | Kaynaklarınıza paylaşılabilir bağlantılar oluşturun. Bağlantılar, kaynağınıza geçici veya sınırsız erişim sağlar. Oluştururken bağlantının geçerlilik süresini ayarlayabilirsiniz. | |
| Easy to create and share | Oluşturması ve paylaşması kolay | |
| Configurable expiration duration | Yapılandırılabilir geçerlilik süresi | |
| Secure and revocable | Güvenli ve iptal edilebilir | |
##### Content
| EN | TR | Notes |
| ------------------------------------------------------------ | ---------------------------------------------------------------------------------------- | -------------- |
| Manage Shareable Links | Paylaşılabilir Bağlantıları Yönet | |
| Create shareable links to grant temporary or permanent access to your resources | Kaynaklarınıza geçici veya kalıcı erişim sağlamak için paylaşılabilir bağlantılar oluşturun | |
| Search links | Bağlantıları ara | placeholder |
| Create Share Link | Bağlantı Oluştur | addbutton |
| Resource | Kaynak | table header |
| Title | Başlık | table header |
| Created | Oluşturulma Tarihi | table header |
| Expires | Son Kullanma Tarihi | table header |
| No links. Create one to get started. | Bağlantı yok. Başlamak için bir tane oluşturun. | table placeholder |
##### Create Shareable Link popup
| EN | TR | Notes |
| ------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------- | ----------------------- |
| Create Shareable Link | Paylaşılabilir Bağlantı Oluştur | |
| Anyone with this link can access the resource | Bu bağlantıya sahip olan herkes kaynağa erişebilir | |
| Resource | Kaynak | |
| Select resource | Kaynak seçin | |
| Search resources… | Kaynak ara… | resource selector popup |
| Title (optional) | Başlık (isteğe bağlı) | |
| Enter title | Başlık girin | placeholder |
| Expire in | Sona Erme Süresi | |
| Minutes | Dakika | |
| Hours | Saat | |
| Days | Gün | |
| Months | Ay | |
| Years | Yıl | |
| Never expire | Asla sona erme | |
| Expiration time is how long the link will be usable and provide access to the resource. After this time, the link will no longer work, and users who used this link will lose access to the resource. | Bağlantının geçerlilik süresi, bağlantının ne kadar süreyle kullanılabilir olacağını ve kaynağa erişim sağlayacağını belirler. Bu sürenin sonunda bağlantı çalışmaz hale gelir ve bağlantıyı kullananlar kaynağa erişimini kaybeder. | |
| Create Link | Bağlantı Oluştur | |
| Close | Kapat | |
---
## Main “General”
| EN | TR | Notes |
| ------------------------------------------------------------ | ------------------------------------------------------------------------------------------- | ------------ |
| General | Genel | |
| Configure your organizations general settings | Organizasyonunuzun genel ayarlarını yapılandırın | |
| General | Genel | sidebar item |
| Organization Settings | Organizasyon Ayarları | |
| Manage your organization details and configuration | Organizasyonunuzun detaylarını ve yapılandırmasını yönetin | |
| Name | Ad | |
| This is the display name of the org | Bu, organizasyonunuzun görüntülenecek adıdır. | |
| Save Settings | Ayarları Kaydet | |
| Danger Zone | Tehlikeli Bölge | |
| Once you delete this org, there is no going back. Please be certain. | Bu organizasyonu sildikten sonra geri dönüş yoktur. Lütfen emin olun. | |
| Delete Organization Data | Organizasyon Verilerini Sil | |
+1523
View File
File diff suppressed because it is too large Load Diff
+1523
View File
File diff suppressed because it is too large Load Diff
+1523
View File
File diff suppressed because it is too large Load Diff
+1523
View File
File diff suppressed because it is too large Load Diff
+1523
View File
File diff suppressed because it is too large Load Diff
+1523
View File
File diff suppressed because it is too large Load Diff
+1523
View File
File diff suppressed because it is too large Load Diff
+1523
View File
File diff suppressed because it is too large Load Diff
+1523
View File
File diff suppressed because it is too large Load Diff
+1523
View File
File diff suppressed because it is too large Load Diff
+1523
View File
File diff suppressed because it is too large Load Diff
+1523
View File
File diff suppressed because it is too large Load Diff
+1523
View File
File diff suppressed because it is too large Load Diff
+1523
View File
File diff suppressed because it is too large Load Diff
+1523
View File
File diff suppressed because it is too large Load Diff
+7 -3
View File
@@ -1,9 +1,13 @@
/** @type {import('next').NextConfig} */
import createNextIntlPlugin from "next-intl/plugin";
const withNextIntl = createNextIntlPlugin();
/** @type {import("next").NextConfig} */
const nextConfig = {
eslint: {
ignoreDuringBuilds: true,
ignoreDuringBuilds: true
},
output: "standalone"
};
export default nextConfig;
export default withNextIntl(nextConfig);
+5985 -3137
View File
File diff suppressed because it is too large Load Diff
+90 -74
View File
@@ -12,123 +12,139 @@
"license": "SEE LICENSE IN LICENSE AND README.md",
"scripts": {
"dev": "NODE_ENV=development ENVIRONMENT=dev tsx watch server/index.ts",
"db:generate": "drizzle-kit generate",
"db:push": "npx tsx server/db/migrate.ts",
"db:studio": "drizzle-kit studio",
"build": "mkdir -p dist && next build && node esbuild.mjs -e server/index.ts -o dist/server.mjs && node esbuild.mjs -e server/setup/migrations.ts -o dist/migrations.mjs",
"start": "NODE_OPTIONS=--enable-source-maps NODE_ENV=development ENVIRONMENT=prod sh -c 'node dist/migrations.mjs && node dist/server.mjs'",
"email": "email dev --dir server/emails/templates --port 3005"
"db:pg:generate": "drizzle-kit generate --config=./drizzle.pg.config.ts",
"db:sqlite:generate": "drizzle-kit generate --config=./drizzle.sqlite.config.ts",
"db:pg:push": "npx tsx server/db/pg/migrate.ts",
"db:sqlite:push": "npx tsx server/db/sqlite/migrate.ts",
"db:sqlite:studio": "drizzle-kit studio --config=./drizzle.sqlite.config.ts",
"db:pg:studio": "drizzle-kit studio --config=./drizzle.pg.config.ts",
"db:clear-migrations": "rm -rf server/migrations",
"build:sqlite": "mkdir -p dist && next build && node esbuild.mjs -e server/index.ts -o dist/server.mjs && node esbuild.mjs -e server/setup/migrationsSqlite.ts -o dist/migrations.mjs",
"build:pg": "mkdir -p dist && next build && node esbuild.mjs -e server/index.ts -o dist/server.mjs && node esbuild.mjs -e server/setup/migrationsPg.ts -o dist/migrations.mjs",
"start": "ENVIRONMENT=prod node dist/migrations.mjs && ENVIRONMENT=prod NODE_ENV=development node --enable-source-maps dist/server.mjs",
"email": "email dev --dir server/emails/templates --port 3005",
"build:cli": "node esbuild.mjs -e cli/index.ts -o dist/cli.mjs"
},
"dependencies": {
"@asteasolutions/zod-to-openapi": "^7.3.0",
"@hookform/resolvers": "3.9.1",
"@node-rs/argon2": "2.0.2",
"@asteasolutions/zod-to-openapi": "^7.3.4",
"@hookform/resolvers": "4.1.3",
"@node-rs/argon2": "^2.0.2",
"@oslojs/crypto": "1.0.1",
"@oslojs/encoding": "1.1.0",
"@radix-ui/react-avatar": "1.1.2",
"@radix-ui/react-checkbox": "1.1.3",
"@radix-ui/react-collapsible": "1.1.2",
"@radix-ui/react-dialog": "1.1.4",
"@radix-ui/react-dropdown-menu": "2.1.4",
"@radix-ui/react-avatar": "1.1.10",
"@radix-ui/react-checkbox": "1.3.3",
"@radix-ui/react-collapsible": "1.1.12",
"@radix-ui/react-dialog": "1.1.15",
"@radix-ui/react-dropdown-menu": "2.1.16",
"@radix-ui/react-icons": "1.3.2",
"@radix-ui/react-label": "2.1.1",
"@radix-ui/react-popover": "1.1.4",
"@radix-ui/react-progress": "^1.1.4",
"@radix-ui/react-radio-group": "1.2.2",
"@radix-ui/react-select": "2.1.4",
"@radix-ui/react-separator": "1.1.1",
"@radix-ui/react-slot": "1.1.1",
"@radix-ui/react-switch": "1.1.2",
"@radix-ui/react-tabs": "1.1.2",
"@radix-ui/react-toast": "1.2.4",
"@react-email/components": "0.0.36",
"@react-email/render": "^1.0.6",
"@react-email/tailwind": "1.0.4",
"@radix-ui/react-label": "2.1.7",
"@radix-ui/react-popover": "1.1.15",
"@radix-ui/react-progress": "^1.1.7",
"@radix-ui/react-radio-group": "1.3.8",
"@radix-ui/react-scroll-area": "^1.2.10",
"@radix-ui/react-select": "2.2.6",
"@radix-ui/react-separator": "1.1.7",
"@radix-ui/react-slot": "1.2.3",
"@radix-ui/react-switch": "1.2.6",
"@radix-ui/react-tabs": "1.1.13",
"@radix-ui/react-toast": "1.2.15",
"@radix-ui/react-tooltip": "^1.2.8",
"@react-email/components": "0.5.3",
"@react-email/render": "^1.2.0",
"@react-email/tailwind": "1.2.2",
"@simplewebauthn/browser": "^13.1.2",
"@simplewebauthn/server": "^9.0.3",
"@tailwindcss/forms": "^0.5.10",
"@tanstack/react-table": "8.20.6",
"arctic": "^3.6.0",
"axios": "1.8.4",
"@tanstack/react-table": "8.21.3",
"arctic": "^3.7.0",
"axios": "^1.12.2",
"better-sqlite3": "11.7.0",
"canvas-confetti": "1.9.3",
"class-variance-authority": "0.7.1",
"class-variance-authority": "^0.7.1",
"clsx": "2.1.1",
"cmdk": "1.0.4",
"cmdk": "1.1.1",
"cookie": "^1.0.2",
"cookie-parser": "1.4.7",
"cookies": "^0.9.1",
"cors": "2.8.5",
"crypto-js": "^4.2.0",
"drizzle-orm": "0.38.3",
"eslint": "9.17.0",
"eslint-config-next": "15.1.3",
"express": "4.21.2",
"express-rate-limit": "7.5.0",
"glob": "11.0.0",
"helmet": "8.0.0",
"drizzle-orm": "0.44.5",
"eslint": "9.35.0",
"eslint-config-next": "15.5.3",
"express": "5.1.0",
"express-rate-limit": "8.1.0",
"glob": "11.0.3",
"helmet": "8.1.0",
"http-errors": "2.0.0",
"i": "^0.3.7",
"input-otp": "1.4.1",
"input-otp": "1.4.2",
"jmespath": "^0.16.0",
"js-yaml": "4.1.0",
"jsonwebtoken": "^9.0.2",
"lucide-react": "0.469.0",
"lucide-react": "^0.544.0",
"moment": "2.30.1",
"next": "15.2.4",
"next-themes": "0.4.4",
"next": "15.5.3",
"next-intl": "^4.3.9",
"next-themes": "0.4.6",
"node-cache": "5.1.2",
"node-fetch": "3.3.2",
"nodemailer": "6.9.16",
"npm": "^11.2.0",
"nodemailer": "7.0.6",
"npm": "^11.6.0",
"oslo": "1.2.1",
"pg": "^8.16.2",
"posthog-node": "^5.8.4",
"qrcode.react": "4.2.0",
"react": "19.0.0",
"react-dom": "19.0.0",
"react-easy-sort": "^1.6.0",
"react-hook-form": "7.54.2",
"react": "19.1.1",
"react-dom": "19.1.1",
"react-easy-sort": "^1.7.0",
"react-hook-form": "7.62.0",
"react-icons": "^5.5.0",
"rebuild": "0.1.2",
"semver": "7.6.3",
"semver": "^7.7.2",
"swagger-ui-express": "^5.0.1",
"tailwind-merge": "2.6.0",
"tw-animate-css": "^1.2.5",
"uuid": "^11.1.0",
"tailwind-merge": "3.3.1",
"tw-animate-css": "^1.3.8",
"uuid": "^13.0.0",
"vaul": "1.1.2",
"winston": "3.17.0",
"winston-daily-rotate-file": "5.0.0",
"ws": "8.18.0",
"zod": "3.24.1",
"zod-validation-error": "3.4.0"
"ws": "8.18.3",
"yargs": "18.0.0",
"zod": "3.25.76",
"zod-validation-error": "3.5.2"
},
"devDependencies": {
"@dotenvx/dotenvx": "1.32.0",
"@dotenvx/dotenvx": "1.49.1",
"@esbuild-plugins/tsconfig-paths": "0.1.2",
"@tailwindcss/postcss": "^4.1.3",
"@tailwindcss/postcss": "^4.1.13",
"@types/better-sqlite3": "7.6.12",
"@types/cookie-parser": "1.4.8",
"@types/cors": "2.8.17",
"@types/cookie-parser": "1.4.9",
"@types/cors": "2.8.19",
"@types/crypto-js": "^4.2.2",
"@types/express": "5.0.0",
"@types/express": "5.0.3",
"@types/express-session": "^1.18.2",
"@types/jmespath": "^0.15.2",
"@types/js-yaml": "4.0.9",
"@types/jsonwebtoken": "^9.0.9",
"@types/node": "^22",
"@types/nodemailer": "6.4.17",
"@types/react": "19.1.1",
"@types/react-dom": "19.1.2",
"@types/semver": "7.5.8",
"@types/jsonwebtoken": "^9.0.10",
"@types/node": "24.5.2",
"@types/nodemailer": "7.0.1",
"@types/pg": "8.15.5",
"@types/react": "19.1.13",
"@types/react-dom": "19.1.9",
"@types/semver": "^7.7.1",
"@types/swagger-ui-express": "^4.1.8",
"@types/ws": "8.5.13",
"@types/ws": "8.18.1",
"@types/yargs": "17.0.33",
"drizzle-kit": "0.30.6",
"esbuild": "0.25.2",
"drizzle-kit": "0.31.4",
"esbuild": "0.25.10",
"esbuild-node-externals": "1.18.0",
"postcss": "^8",
"react-email": "4.0.6",
"react-email": "4.2.11",
"tailwindcss": "^4.1.4",
"tsc-alias": "1.8.10",
"tsx": "4.19.3",
"tsc-alias": "1.8.16",
"tsx": "4.20.5",
"typescript": "^5",
"yargs": "17.7.2"
"typescript-eslint": "^8.44.0"
},
"overrides": {
"emblor": {
+1 -1
View File
@@ -1,7 +1,7 @@
/** @type {import('postcss-load-config').Config} */
const config = {
plugins: {
'@tailwindcss/postcss': {},
"@tailwindcss/postcss": {},
},
};
Binary file not shown.

After

Width:  |  Height:  |  Size: 647 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 500 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 52 KiB

+132
View File
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

+27 -25
View File
@@ -1,22 +1,21 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="900.82861"
height="955.20648"
viewBox="0 0 238.34422 252.7317"
version="1.1"
x="0px"
y="0px"
viewBox="0 0 399.99999 400.00002"
enable-background="new 0 0 419.528 419.528"
xml:space="preserve"
id="svg52"
sodipodi:docname="noun-pangolin-1798092.svg"
width="400"
height="400"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
id="svg420"
inkscape:export-filename="logo.svg"
inkscape:export-xdpi="221.14999"
inkscape:export-ydpi="221.14999"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs56" /><sodipodi:namedview
id="namedview54"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview422"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
@@ -24,15 +23,18 @@
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="1.9583914"
inkscape:cx="209.86611"
inkscape:cy="262.20499"
inkscape:window-width="3840"
inkscape:window-height="2136"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg52" /><path
d="m 62.232921,184.91974 c 0,2.431 -1.97,4.402 -4.399,4.402 -2.429,0 -4.399,-1.972 -4.399,-4.402 0,-2.429 1.97,-4.399 4.399,-4.399 2.429,-10e-4 4.399,1.97 4.399,4.399 z m 58.993999,-4.821 c -25.943999,-2.826 -38.978999,7.453 -71.181999,31.357 -27.572,20.467 -32.767,4.381 -31.748,-2.614 1.499,-10.282 25.222,-58.573 48.079,-88.461 28.273,7.34 49.869999,30.727 54.850999,59.718 z m -55.915999,4.821 c 0,-4.131 -3.349,-7.478 -7.478,-7.478 -4.129,0 -7.478,3.347 -7.478,7.478 0,4.131 3.349,7.481 7.478,7.481 4.13,0 7.478,-3.35 7.478,-7.481 z m -15.032,48.424 -0.234,14.041 20.413,22.687 -9.818,7.353 33.306,27.492 -11.759,8.124 42.631999,19.939 -10.825,9.747 48.291,8.078 -7.526,10.307 48.758,-4.531 -3.997,11.725 53.916,-18.153 -2.76,13.357 48.077,-34.345 1.479,13.562 34.087,-48.576 7.478,14.206 15.187,-58.89 10.391,8.533 -2.14,-57.884 13.814,5.13 -21.082,-51.204 13.404,0.048 -33.696,-42.131 15.312,-1.366 -47.026,-32.831002 14.255,-8.399 -54.817,-14.682 9.257,-11.695 -49.625,0.352 0.6,-13.337 -38.537,14.084 -1.597,-12.689 -29.984,21.429 -6.446,-10.852 -22.59,26.504 -7.021,-9.572 -18.923,30.294 -9.595999,-8.744 -16.754,30.138002 c 31.509999,10.197 54.979999,37.951 59.126999,71.547 0.404,0.087 -22.37,31.257 10.955,57.85 -0.576,-2.985 -6.113,-53.902 47.496,-57.61 26.668,-1.844 48.4,21.666 48.4,48.399 0,8.184 -2.05,15.883 -5.636,22.64 -15.927,29.611 -64.858,30.755 -80.429,30.596 -45.154,-0.459 -104.051999,-51.521 -104.051999,-51.521 z"
id="path46" /></svg>
inkscape:document-units="mm"
showgrid="false" />
<defs
id="defs417" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-13.119542,-5.9258171)">
<path
d="m 213.66176,90.072122 c 4.95655,0 8.97383,4.018046 8.97383,8.973827 0,4.956581 -4.01728,8.974621 -8.97383,8.974621 -4.95657,0 -8.97462,-4.01804 -8.97462,-8.974621 0,-4.955781 4.01805,-8.973827 8.97462,-8.973827 z m 35.2316,37.450998 c -0.90048,29.80928 -23.66033,69.21262 -54.51292,79.34466 -36.04206,11.836 -63.40991,-5.92226 -72.08409,-26.74061 -6.75754,-16.21966 -1.65117,-35.62363 10.96266,-43.83669 10.6506,-6.93533 30.48543,-8.76736 47.15454,2.19144 -5.85627,-15.34246 -21.62491,-25.4256 -35.59101,-28.49424 -13.96613,-3.06867 -28.38324,0.43858 -38.74504,5.69946 13.29071,-14.68572 44.40801,-28.946049 78.24077,-10.95958 22.67676,12.05491 32.43775,28.93208 42.0489,51.72763 C 251.59637,117.87858 234.026,71.411066 203.39074,43.794029 172.15544,15.636686 129.95516,4.340214 97.668803,6.103155 108.32483,12.678273 120.84625,22.06586 132.41209,33.053363 81.298533,26.697169 39.174705,38.314245 13.119542,73.749217 27.67508,70.878527 46.868833,69.073666 65.974711,70.016861 28.737658,96.252107 7.1124298,140.38147 18.105298,186.43137 c 6.718497,-11.74129 16.767711,-25.84558 28.726275,-38.62863 -3.677175,34.36994 1.42836,80.83745 45.62293,110.85478 -2.25587,-9.42394 -4.08014,-20.88443 -4.91466,-33.0154 20.673197,16.1282 50.685067,29.42205 87.917917,20.24096 65.77679,-16.21975 83.34719,-79.78335 73.4356,-118.35996"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.0776283"
id="path32" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

+18 -35
View File
@@ -1,39 +1,22 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="900.82861"
height="955.20648"
viewBox="0 0 238.34422 252.7317"
version="1.1"
x="0px"
y="0px"
viewBox="0 0 399.99999 400.00002"
enable-background="new 0 0 419.528 419.528"
xml:space="preserve"
id="svg52"
sodipodi:docname="pangolin_orange.svg"
width="400"
height="400"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
id="svg420"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs56" /><sodipodi:namedview
id="namedview54"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="1.9583914"
inkscape:cx="127.40048"
inkscape:cy="262.71561"
inkscape:window-width="1436"
inkscape:window-height="1236"
inkscape:window-x="2208"
inkscape:window-y="511"
inkscape:window-maximized="0"
inkscape:current-layer="svg52" /><path
d="m 62.232921,184.91974 c 0,2.431 -1.97,4.402 -4.399,4.402 -2.429,0 -4.399,-1.972 -4.399,-4.402 0,-2.429 1.97,-4.399 4.399,-4.399 2.429,-10e-4 4.399,1.97 4.399,4.399 z m 58.993999,-4.821 c -25.943999,-2.826 -38.978999,7.453 -71.181999,31.357 -27.572,20.467 -32.767,4.381 -31.748,-2.614 1.499,-10.282 25.222,-58.573 48.079,-88.461 28.273,7.34 49.869999,30.727 54.850999,59.718 z m -55.915999,4.821 c 0,-4.131 -3.349,-7.478 -7.478,-7.478 -4.129,0 -7.478,3.347 -7.478,7.478 0,4.131 3.349,7.481 7.478,7.481 4.13,0 7.478,-3.35 7.478,-7.481 z m -15.032,48.424 -0.234,14.041 20.413,22.687 -9.818,7.353 33.306,27.492 -11.759,8.124 42.631999,19.939 -10.825,9.747 48.291,8.078 -7.526,10.307 48.758,-4.531 -3.997,11.725 53.916,-18.153 -2.76,13.357 48.077,-34.345 1.479,13.562 34.087,-48.576 7.478,14.206 15.187,-58.89 10.391,8.533 -2.14,-57.884 13.814,5.13 -21.082,-51.204 13.404,0.048 -33.696,-42.131 15.312,-1.366 -47.026,-32.831002 14.255,-8.399 -54.817,-14.682 9.257,-11.695 -49.625,0.352 0.6,-13.337 -38.537,14.084 -1.597,-12.689 -29.984,21.429 -6.446,-10.852 -22.59,26.504 -7.021,-9.572 -18.923,30.294 -9.595999,-8.744 -16.754,30.138002 c 31.509999,10.197 54.979999,37.951 59.126999,71.547 0.404,0.087 -22.37,31.257 10.955,57.85 -0.576,-2.985 -6.113,-53.902 47.496,-57.61 26.668,-1.844 48.4,21.666 48.4,48.399 0,8.184 -2.05,15.883 -5.636,22.64 -15.927,29.611 -64.858,30.755 -80.429,30.596 -45.154,-0.459 -104.051999,-51.521 -104.051999,-51.521 z"
id="path46"
style="fill:#f97315;fill-opacity:1" /></svg>
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs417" />
<g
id="layer1"
transform="translate(-13.119542,-5.9258171)">
<path
d="m 213.66176,90.072122 c 4.95655,0 8.97383,4.018046 8.97383,8.973827 0,4.956581 -4.01728,8.974621 -8.97383,8.974621 -4.95657,0 -8.97462,-4.01804 -8.97462,-8.974621 0,-4.955781 4.01805,-8.973827 8.97462,-8.973827 z m 35.2316,37.450998 c -0.90048,29.80928 -23.66033,69.21262 -54.51292,79.34466 -36.04206,11.836 -63.40991,-5.92226 -72.08409,-26.74061 -6.75754,-16.21966 -1.65117,-35.62363 10.96266,-43.83669 10.6506,-6.93533 30.48543,-8.76736 47.15454,2.19144 -5.85627,-15.34246 -21.62491,-25.4256 -35.59101,-28.49424 -13.96613,-3.06867 -28.38324,0.43858 -38.74504,5.69946 13.29071,-14.68572 44.40801,-28.946049 78.24077,-10.95958 22.67676,12.05491 32.43775,28.93208 42.0489,51.72763 C 251.59637,117.87858 234.026,71.411066 203.39074,43.794029 172.15544,15.636686 129.95516,4.340214 97.668803,6.103155 108.32483,12.678273 120.84625,22.06586 132.41209,33.053363 81.298533,26.697169 39.174705,38.314245 13.119542,73.749217 27.67508,70.878527 46.868833,69.073666 65.974711,70.016861 28.737658,96.252107 7.1124298,140.38147 18.105298,186.43137 c 6.718497,-11.74129 16.767711,-25.84558 28.726275,-38.62863 -3.677175,34.36994 1.42836,80.83745 45.62293,110.85478 -2.25587,-9.42394 -4.08014,-20.88443 -4.91466,-33.0154 20.673197,16.1282 50.685067,29.42205 87.917917,20.24096 65.77679,-16.21975 83.34719,-79.78335 73.4356,-118.35996"
style="fill:#f36118;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.0776283"
id="path32" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 574 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 748 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 688 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 687 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 669 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 713 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 636 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 434 KiB

After

Width:  |  Height:  |  Size: 713 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 356 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 707 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 713 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 556 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 585 KiB

Some files were not shown because too many files have changed in this diff Show More