Compare commits

...

792 commits
1.3.0 ... main

Author SHA1 Message Date
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
92e69f561f
Org is not optional 2025-07-31 11:05:24 -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
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
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
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
Milo Schwartz
a512148348
Merge pull request #701 from fosrl/dev
1.3.2
2025-05-10 11:30:07 -04:00
miloschwartz
d9eccd6c13
bump version 2025-05-10 11:28:22 -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
miloschwartz
492669f68a
set default congig values 2025-05-09 18:32:14 -04:00
miloschwartz
caded23b51
allow root path 2025-05-09 17:37:55 -04:00
miloschwartz
e9cc48a3ae
fix bug causing duplicate targets 2025-05-09 17:18:42 -04:00
miloschwartz
4ed98c227b
fix setting tlsServerName and hostHeader conflict 2025-05-09 17:12:01 -04:00
miloschwartz
f66fb7d4a3
fix justification for profile icon 2025-05-09 17:09:22 -04:00
miloschwartz
f25990a9a7
add id token and claims to debug logs 2025-05-09 16:46:51 -04:00
miloschwartz
21d5b67ef1
Merge branch 'main' into dev 2025-05-09 16:44:09 -04:00
Milo Schwartz
198810121c
Update README.md 2025-05-09 16:44:01 -04: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
83c0379c6b
Merge branch 'dev' of github.com:fosrl/pangolin into dev 2025-05-03 22:04:29 -04:00
Milo Schwartz
21f1326045
Merge pull request #651 from fosrl/dev
Dev
2025-05-03 13:07:18 -04:00
miloschwartz
f62e32724c
Merge branch 'main' into dev 2025-05-03 12:43:50 -04:00
miloschwartz
5e052a446a
1.3.1 2025-05-03 12:25:02 -04:00
Owen
a76dd9c9d1
Merge branch 'dev' into auth-providers-clients 2025-05-03 11:45:11 -04:00
Owen
9a167b5acb
Dont overwrite the secret and crowdsec vars 2025-05-02 14:16:10 -04:00
Milo Schwartz
5d2f3186cc
Update README.md 2025-05-02 12:25:49 -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
605 changed files with 49510 additions and 14331 deletions

View file

@ -26,3 +26,5 @@ install/
bruno/
LICENSE
CONTRIBUTING.md
dist
.git

40
.github/dependabot.yml vendored Normal file
View file

@ -0,0 +1,40 @@
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"

View file

@ -12,13 +12,13 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v3
uses: actions/checkout@v4
- 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,7 +28,7 @@ jobs:
run: echo "TAG=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
- name: Install Go
uses: actions/setup-go@v4
uses: actions/setup-go@v5
with:
go-version: 1.23.0

34
.github/workflows/linting.yml vendored Normal file
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@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install dependencies
run: |
npm ci
- name: Run ESLint
run: |
npx eslint . --ext .js,.jsx,.ts,.tsx

55
.github/workflows/test.yml vendored Normal file
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@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- 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

4
.gitignore vendored
View file

@ -18,6 +18,7 @@ yarn-error.log*
next-env.d.ts
*.db
*.sqlite
!Dockerfile.sqlite
*.sqlite3
*.log
.machinelogs*.json
@ -32,4 +33,5 @@ installer
bin
.secrets
test_event.json
.idea/
.idea/
server/db/index.ts

View file

@ -6,10 +6,6 @@ Please see the contribution and local development guide on the docs page before
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
### Licensing Considerations
Please note that your contributions will be distributed under the AGPLv3 and the Fossorial Commercial license. For inquiries about commercial licensing, please contact us.
@ -21,4 +17,4 @@ By creating this pull request, I grant the project maintainers an unlimited,
perpetual license to use, modify, and redistribute these contributions under any terms they
choose, including both the AGPLv3 and the Fossorial Commercial license terms. I
represent that I have the right to grant this license for all contributed content.
```
```

14
Dockerfile.dev Normal file
View file

@ -0,0 +1,14 @@
FROM node:20-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"]

41
Dockerfile.pg Normal file
View file

@ -0,0 +1,41 @@
FROM node:20-alpine AS builder
WORKDIR /app
# COPY package.json package-lock.json ./
COPY package*.json ./
RUN npm ci
COPY . .
RUN echo 'export * from "./pg";' > server/db/index.ts
RUN npx drizzle-kit generate --dialect postgresql --schema ./server/db/pg/schema.ts --out init
RUN npm run build:pg
RUN npm run build:cli
FROM node:20-alpine AS runner
WORKDIR /app
# Curl used for the health checks
RUN apk add --no-cache curl
# COPY package.json package-lock.json ./
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", "run", "start:pg"]

View file

@ -3,14 +3,17 @@ FROM node:20-alpine AS builder
WORKDIR /app
# 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 "./sqlite";' > server/db/index.ts
RUN npm run build
RUN npx drizzle-kit generate --dialect sqlite --schema ./server/db/sqlite/schema.ts --out init
RUN npm run build:sqlite
RUN npm run build:cli
FROM node:20-alpine AS runner
@ -20,16 +23,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:sqlite"]

32
LICENSE
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

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 --platform linux/arm64,linux/amd64 -t fosrl/pangolin:latest -f Dockerfile.sqlite --push .
docker buildx build --platform linux/arm64,linux/amd64 -t fosrl/pangolin:$(tag) -f Dockerfile.sqlite --push .
docker buildx build --platform linux/arm64,linux/amd64 -t fosrl/pangolin:postgresql-latest -f Dockerfile.pg --push .
docker buildx build --platform linux/arm64,linux/amd64 -t fosrl/pangolin:postgresql-$(tag) -f Dockerfile.pg --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 -t fosrl/pangolin:latest -f Dockerfile.sqlite .
build-pg:
docker build -t fosrl/pangolin:postgresql-latest -f Dockerfile.pg .
test:
docker run -it -p 3000:3000 -p 3001:3001 -p 3002:3002 -v ./config:/app/config fosrl/pangolin:latest

121
README.md
View file

@ -1,24 +1,22 @@
<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>
@ -30,24 +28,39 @@ _Your own self-hosted zero trust tunnel._
Contact Us
</a>
</h5>
[![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,91 +74,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.fossorial.io/Getting%20Started/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.
### Hybrid & 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
_Resources page of Pangolin dashboard (dark mode) showing HTTPS and TCP resources with access control rules._
- 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.
## Similar Projects and Inspirations
If interested, [contact us](mailto:numbat@fossorial.io).
**Cloudflare Tunnels**:
A similar approach to proxying private resources securely, but Pangolin is a self-hosted alternative, giving you full control over your infrastructure.
### Full Enterprise On-Premises
**Authelia**:
This inspired Pangolins centralized authentication system for proxies, enabling robust user and role management.
[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).
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.

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"
}
}

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
}

View file

@ -0,0 +1,141 @@
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 { email, password } = argv;
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);
}

11
cli/index.ts Normal file
View file

@ -0,0 +1,11 @@
#!/usr/bin/env node
import yargs from "yargs";
import { hideBin } from "yargs/helpers";
import { setAdminCredentials } from "@cli/commands/setAdminCredentials";
yargs(hideBin(process.argv))
.scriptName("pangctl")
.command(setAdminCredentials)
.demandCommand()
.help().argv;

3
cli/wrapper.sh Normal file
View file

@ -0,0 +1,3 @@
#!/bin/sh
cd /app/
./dist/cli.mjs "$@"

View file

@ -41,14 +41,8 @@ rate_limits:
window_minutes: 1
max_requests: 500
users:
server_admin:
email: "admin@example.com"
password: "Password123!"
flags:
require_email_verification: false
disable_signup_without_invite: true
disable_user_create_org: true
allow_raw_resources: true
allow_base_domain_resources: true

BIN
config/db/db.sqlite.bak Normal file

Binary file not shown.

3
crowdin.yml Normal file
View file

@ -0,0 +1,3 @@
files:
- source: /messages/en-US.json
translation: /messages/%locale%.json

View file

@ -31,11 +31,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.4.0
container_name: traefik
restart: unless-stopped
network_mode: service:gerbil # Ports appear on the gerbil service
@ -51,4 +52,5 @@ services:
networks:
default:
driver: bridge
name: pangolin
name: pangolin
enable_ipv6: true

12
docker-compose.pg.yml Normal file
View file

@ -0,0 +1,12 @@
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!)
ports:
- "5432:5432" # Map host port 5432 to container port 5432
restart: no

29
docker-compose.yml Normal file
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"
environment:
- NODE_ENV=development
- ENVIRONMENT=dev
- DB_TYPE=pg
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
drizzle.pg.config.ts Normal file
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
}
});

View file

@ -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: {

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"
}
});

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"

View file

@ -4,7 +4,6 @@
app:
dashboard_url: "https://{{.DashboardDomain}}"
log_level: "info"
save_logs: false
domains:
domain1:
@ -12,40 +11,17 @@ 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 +30,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

View file

@ -1,6 +1,6 @@
services:
crowdsec:
image: crowdsecurity/crowdsec:latest
image: docker.io/crowdsecurity/crowdsec:latest
container_name: crowdsec
environment:
GID: "1000"

View file

@ -22,4 +22,4 @@ filters:
decisions:
- type: ban
duration: 4h
on_success: break
on_success: break

View file

@ -21,6 +21,10 @@ experimental:
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"

View file

@ -1,7 +1,7 @@
name: pangolin
services:
pangolin:
image: fosrl/pangolin:{{.PangolinVersion}}
image: docker.io/fosrl/pangolin:{{.PangolinVersion}}
container_name: pangolin
restart: unless-stopped
volumes:
@ -13,7 +13,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:
@ -31,11 +31,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
{{end}}
traefik:
image: traefik:v3.3.6
image: docker.io/traefik:v3.4.1
container_name: traefik
restart: unless-stopped
{{if .InstallGerbil}}
@ -58,4 +59,5 @@ services:
networks:
default:
driver: bridge
name: pangolin
name: pangolin
enable_ipv6: true

View file

@ -18,6 +18,10 @@ experimental:
log:
level: "INFO"
format: "common"
maxSize: 100
maxBackups: 3
maxAge: 3
compress: true
certificatesResolvers:
letsencrypt:

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)
}

View file

@ -1,3 +1,4 @@
docker
example.com
pangolin.example.com
admin@example.com

View file

@ -7,16 +7,17 @@ import (
"fmt"
"io"
"io/fs"
"math/rand"
"os"
"os/exec"
"os/user"
"path/filepath"
"runtime"
"strconv"
"strings"
"syscall"
"text/template"
"time"
"unicode"
"math/rand"
"golang.org/x/term"
)
@ -32,46 +33,122 @@ func loadVersions(config *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
LetsEncryptEmail string
EnableEmail bool
EmailSMTPHost string
EmailSMTPPort int
EmailSMTPUser string
EmailSMTPPass string
EmailNoReply string
InstallGerbil bool
TraefikBouncerKey string
DoCrowdsecInstall bool
Secret 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")
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("")
fmt.Println("Please 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("- Point your domain to the VPS IP with A records.")
fmt.Println("")
fmt.Println("http://docs.fossorial.io/Getting%20Started/dns-networking")
fmt.Println("")
fmt.Println("Lets get started!")
fmt.Println("")
reader := bufio.NewReader(os.Stdin)
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 {
fmt.Printf("Unrecognized container type: %s. Valid options are 'docker' or 'podman'.\n", inputContainer)
os.Exit(1)
}
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)
}
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)
}
var config Config
config.DoCrowdsecInstall = false
config.Secret = generateRandomSecretKey()
config.InstallationContainerType = chosenContainer
// check if there is already a config file
if _, err := os.Stat("config/config.yml"); err != nil {
config = collectUserInput(reader)
loadVersions(&config)
config.DoCrowdsecInstall = false
config.Secret = generateRandomSecretKey()
if err := createConfigFiles(config); err != nil {
fmt.Printf("Error creating config files: %v\n", err)
@ -80,22 +157,44 @@ func main() {
moveFile("config/docker-compose.yml", "docker-compose.yml")
if !isDockerInstalled() && runtime.GOOS == "linux" {
if !isDockerInstalled() && runtime.GOOS == "linux" && chosenContainer == 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!")
}
}
fmt.Println("\n=== Starting installation ===")
if isDockerInstalled() {
if (isDockerInstalled() && chosenContainer == Docker) ||
(isPodmanInstalled() && chosenContainer == Podman) {
if readBool(reader, "Would you like to install and start the containers?", true) {
if err := pullContainers(); err != nil {
if err := pullContainers(chosenContainer); err != nil {
fmt.Println("Error: ", err)
return
}
if err := startContainers(); err != nil {
if err := startContainers(chosenContainer); err != nil {
fmt.Println("Error: ", err)
return
}
@ -110,6 +209,8 @@ func main() {
// 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")
@ -139,6 +240,7 @@ func main() {
}
fmt.Println("Installation complete!")
fmt.Printf("\nTo complete the initial setup, please visit:\nhttps://%s/auth/initial-setup\n", config.DashboardDomain)
}
func readString(reader *bufio.Reader, prompt string, defaultValue string) string {
@ -204,44 +306,15 @@ func collectUserInput(reader *bufio.Reader) Config {
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)
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")
}
}
}
// 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)
// Email configuration
fmt.Println("\n=== Email Configuration ===")
config.EnableEmail = readBool(reader, "Enable email functionality", false)
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", "")
config.EmailSMTPPass = readString(reader, "Enter SMTP password", "") // Should this be readPassword?
config.EmailNoReply = readString(reader, "Enter no-reply email address", "")
}
@ -258,60 +331,10 @@ func collectUserInput(reader *bufio.Reader) Config {
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)
@ -381,7 +404,6 @@ func createConfigFiles(config Config) error {
return nil
})
if err != nil {
return fmt.Errorf("error walking config files: %v", err)
}
@ -438,11 +460,31 @@ func installDocker() error {
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", `
// 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 &&
dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo &&
%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 &&
@ -466,13 +508,73 @@ func installDocker() error {
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 {
cmd := exec.Command("docker", "--version")
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
}
@ -499,59 +601,105 @@ func executeDockerComposeCommandWithArgs(args ...string) error {
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()
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
return cmd.Run()
}
// pullContainers pulls the containers using the appropriate command.
func pullContainers() error {
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)
}
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 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() error {
func startContainers(containerType SupportedContainer) 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)
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
}
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() error {
func stopContainers(containerType SupportedContainer) error {
fmt.Println("Stopping containers...")
if err := executeDockerComposeCommandWithArgs("-f", "docker-compose.yml", "down"); err != nil {
return fmt.Errorf("failed to stop containers: %v", err)
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
}
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) error {
func restartContainer(container string, containerType SupportedContainer) 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)
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
}
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)
}
func copyFile(src, dst string) error {
@ -579,13 +727,13 @@ func moveFile(src, dst string) error {
return os.Remove(src)
}
func waitForContainer(containerName string) error {
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("docker", "container", "inspect", "-f", "{{.State.Running}}", containerName)
cmd := exec.Command(string(containerType), "container", "inspect", "-f", "{{.State.Running}}", containerName)
var out bytes.Buffer
cmd.Stdout = &out
@ -619,4 +767,12 @@ func generateRandomSecretKey() string {
b[i] = charset[seededRand.Intn(len(charset))]
}
return string(b)
}
}
// 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()
}

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 | |

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 | |

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 | |

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 | |

1322
messages/cs-CZ.json Normal file

File diff suppressed because it is too large Load diff

1322
messages/de-DE.json Normal file

File diff suppressed because it is too large Load diff

1322
messages/en-US.json Normal file

File diff suppressed because it is too large Load diff

1322
messages/es-ES.json Normal file

File diff suppressed because it is too large Load diff

1322
messages/fr-FR.json Normal file

File diff suppressed because it is too large Load diff

1322
messages/it-IT.json Normal file

File diff suppressed because it is too large Load diff

1322
messages/ko-KR.json Normal file

File diff suppressed because it is too large Load diff

1322
messages/nl-NL.json Normal file

File diff suppressed because it is too large Load diff

1322
messages/pl-PL.json Normal file

File diff suppressed because it is too large Load diff

1322
messages/pt-PT.json Normal file

File diff suppressed because it is too large Load diff

1322
messages/ru-RU.json Normal file

File diff suppressed because it is too large Load diff

1322
messages/tr-TR.json Normal file

File diff suppressed because it is too large Load diff

1322
messages/zh-CN.json Normal file

File diff suppressed because it is too large Load diff

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);

7079
package-lock.json generated

File diff suppressed because it is too large Load diff

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:sqlite": "DB_TYPE=sqlite NODE_OPTIONS=--enable-source-maps NODE_ENV=development ENVIRONMENT=prod sh -c 'node dist/migrations.mjs && node dist/server.mjs'",
"start:pg": "DB_TYPE=pg 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",
"build:cli": "node esbuild.mjs -e cli/index.ts -o dist/cli.mjs"
},
"dependencies": {
"@asteasolutions/zod-to-openapi": "^7.3.0",
"@asteasolutions/zod-to-openapi": "^7.3.4",
"@hookform/resolvers": "3.9.1",
"@node-rs/argon2": "2.0.2",
"@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.2",
"@radix-ui/react-collapsible": "1.1.11",
"@radix-ui/react-dialog": "1.1.14",
"@radix-ui/react-dropdown-menu": "2.1.15",
"@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.14",
"@radix-ui/react-progress": "^1.1.7",
"@radix-ui/react-radio-group": "1.3.7",
"@radix-ui/react-scroll-area": "^1.2.9",
"@radix-ui/react-select": "2.2.5",
"@radix-ui/react-separator": "1.1.7",
"@radix-ui/react-slot": "1.2.3",
"@radix-ui/react-switch": "1.2.5",
"@radix-ui/react-tabs": "1.1.12",
"@radix-ui/react-toast": "1.2.14",
"@radix-ui/react-tooltip": "^1.2.7",
"@react-email/components": "0.3.1",
"@react-email/render": "^1.1.2",
"@simplewebauthn/browser": "^13.1.0",
"@simplewebauthn/server": "^9.0.3",
"@react-email/tailwind": "1.2.1",
"@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.10.0",
"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",
"drizzle-orm": "0.44.2",
"eslint": "9.31.0",
"eslint-config-next": "15.3.5",
"express": "4.21.2",
"express-rate-limit": "7.5.0",
"glob": "11.0.0",
"helmet": "8.0.0",
"express-rate-limit": "7.5.1",
"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.525.0",
"moment": "2.30.1",
"next": "15.2.4",
"next-themes": "0.4.4",
"next": "15.3.5",
"next-intl": "^4.3.4",
"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.5",
"npm": "^11.4.2",
"oslo": "1.2.1",
"pg": "^8.16.2",
"qrcode.react": "4.2.0",
"react": "19.0.0",
"react-dom": "19.0.0",
"react": "19.1.0",
"react-dom": "19.1.0",
"react-easy-sort": "^1.6.0",
"react-hook-form": "7.54.2",
"react-hook-form": "7.60.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",
"tailwind-merge": "3.3.1",
"tw-animate-css": "^1.3.5",
"uuid": "^11.1.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",
"zod": "3.25.76",
"zod-validation-error": "3.5.2",
"yargs": "18.0.0"
},
"devDependencies": {
"@dotenvx/dotenvx": "1.32.0",
"@dotenvx/dotenvx": "1.47.6",
"@esbuild-plugins/tsconfig-paths": "0.1.2",
"@tailwindcss/postcss": "^4.1.3",
"@tailwindcss/postcss": "^4.1.10",
"@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-session": "^1.18.2",
"@types/jmespath": "^0.15.2",
"@types/js-yaml": "4.0.9",
"@types/jsonwebtoken": "^9.0.9",
"@types/node": "^22",
"@types/jsonwebtoken": "^9.0.10",
"@types/node": "^24",
"@types/nodemailer": "6.4.17",
"@types/react": "19.1.1",
"@types/react-dom": "19.1.2",
"@types/semver": "7.5.8",
"@types/pg": "8.15.4",
"@types/react": "19.1.8",
"@types/react-dom": "19.1.6",
"@types/semver": "^7.7.0",
"@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.6",
"esbuild-node-externals": "1.18.0",
"postcss": "^8",
"react-email": "4.0.6",
"react-email": "4.1.0",
"tailwindcss": "^4.1.4",
"tsc-alias": "1.8.10",
"tsx": "4.19.3",
"tsc-alias": "1.8.16",
"tsx": "4.20.3",
"typescript": "^5",
"yargs": "17.7.2"
"typescript-eslint": "^8.36.0"
},
"overrides": {
"emblor": {

View file

@ -1,7 +1,7 @@
/** @type {import('postcss-load-config').Config} */
const config = {
plugins: {
'@tailwindcss/postcss': {},
"@tailwindcss/postcss": {},
},
};

BIN
public/auth-diagram1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 647 KiB

BIN
public/clip.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 500 KiB

132
public/diagram-dark.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 52 KiB

132
public/diagram.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 52 KiB

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

Before After
Before After

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

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 7.4 KiB

Before After
Before After

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

Before After
Before After

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

Before After
Before After

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 456 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 674 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 597 KiB

View file

@ -5,23 +5,29 @@ import config from "@server/lib/config";
import logger from "@server/logger";
import {
errorHandlerMiddleware,
notFoundMiddleware,
rateLimitMiddleware
notFoundMiddleware
} from "@server/middlewares";
import { authenticated, unauthenticated } from "@server/routers/external";
import { router as wsRouter, handleWSUpgrade } from "@server/routers/ws";
import { logIncomingMiddleware } from "./middlewares/logIncoming";
import { csrfProtectionMiddleware } from "./middlewares/csrfProtection";
import helmet from "helmet";
import rateLimit from "express-rate-limit";
import createHttpError from "http-errors";
import HttpCode from "./types/HttpCode";
import requestTimeoutMiddleware from "./middlewares/requestTimeout";
import { createStore } from "./lib/rateLimitStore";
const dev = config.isDev;
const externalPort = config.getRawConfig().server.external_port;
export function createApiServer() {
const apiServer = express();
const prefix = `/api/v1`;
if (config.getRawConfig().server.trust_proxy) {
apiServer.set("trust proxy", 1);
const trustProxy = config.getRawConfig().server.trust_proxy;
if (trustProxy) {
apiServer.set("trust proxy", trustProxy);
}
const corsConfig = config.getRawConfig().server.cors;
@ -53,19 +59,30 @@ export function createApiServer() {
apiServer.use(cookieParser());
apiServer.use(express.json());
// Add request timeout middleware
apiServer.use(requestTimeoutMiddleware(60000)); // 60 second timeout
if (!dev) {
apiServer.use(
rateLimitMiddleware({
windowMin:
config.getRawConfig().rate_limits.global.window_minutes,
rateLimit({
windowMs:
config.getRawConfig().rate_limits.global.window_minutes *
60 *
1000,
max: config.getRawConfig().rate_limits.global.max_requests,
type: "IP_AND_PATH"
keyGenerator: (req) => `apiServerGlobal:${req.ip}:${req.path}`,
handler: (req, res, next) => {
const message = `Rate limit exceeded. You can make ${config.getRawConfig().rate_limits.global.max_requests} requests every ${config.getRawConfig().rate_limits.global.window_minutes} minute(s).`;
return next(
createHttpError(HttpCode.TOO_MANY_REQUESTS, message)
);
},
store: createStore()
})
);
}
// API routes
const prefix = `/api/v1`;
apiServer.use(logIncomingMiddleware);
apiServer.use(prefix, unauthenticated);
apiServer.use(prefix, authenticated);

View file

@ -1,6 +1,6 @@
import { Request } from "express";
import { db } from "@server/db";
import { userActions, roleActions, userOrgs } from "@server/db/schemas";
import { userActions, roleActions, userOrgs } from "@server/db";
import { and, eq } from "drizzle-orm";
import createHttpError from "http-errors";
import HttpCode from "@server/types/HttpCode";
@ -56,6 +56,8 @@ export enum ActionsEnum {
// removeUserAction = "removeUserAction",
// removeUserSite = "removeUserSite",
getOrgUser = "getOrgUser",
updateUser = "updateUser",
getUser = "getUser",
setResourcePassword = "setResourcePassword",
setResourcePincode = "setResourcePincode",
setResourceWhitelist = "setResourceWhitelist",
@ -67,6 +69,11 @@ export enum ActionsEnum {
deleteResourceRule = "deleteResourceRule",
listResourceRules = "listResourceRules",
updateResourceRule = "updateResourceRule",
createClient = "createClient",
deleteClient = "deleteClient",
updateClient = "updateClient",
listClients = "listClients",
getClient = "getClient",
listOrgDomains = "listOrgDomains",
createNewt = "createNewt",
createIdp = "createIdp",
@ -85,7 +92,10 @@ export enum ActionsEnum {
setApiKeyOrgs = "setApiKeyOrgs",
listApiKeyActions = "listApiKeyActions",
listApiKeys = "listApiKeys",
getApiKey = "getApiKey"
getApiKey = "getApiKey",
createOrgDomain = "createOrgDomain",
deleteOrgDomain = "deleteOrgDomain",
restartOrgDomain = "restartOrgDomain"
}
export async function checkUserActionPermission(

View file

@ -1,6 +1,6 @@
import db from "@server/db";
import { db } from "@server/db";
import { and, eq } from "drizzle-orm";
import { roleResources, userResources } from "@server/db/schemas";
import { roleResources, userResources } from "@server/db";
export async function canUserAccessResource({
userId,

View file

@ -1,5 +1,5 @@
import db from "@server/db";
import { UserInvite, userInvites } from "@server/db/schemas";
import { db } from "@server/db";
import { UserInvite, userInvites } from "@server/db";
import { isWithinExpirationDate } from "oslo";
import { verifyPassword } from "./password";
import { eq } from "drizzle-orm";

View file

@ -1,40 +0,0 @@
import { db } from '@server/db';
import { limitsTable } from '@server/db/schemas';
import { and, eq } from 'drizzle-orm';
import createHttpError from 'http-errors';
import HttpCode from '@server/types/HttpCode';
interface CheckLimitOptions {
orgId: string;
limitName: string;
currentValue: number;
increment?: number;
}
export async function checkOrgLimit({ orgId, limitName, currentValue, increment = 0 }: CheckLimitOptions): Promise<boolean> {
try {
const limit = await db.select()
.from(limitsTable)
.where(
and(
eq(limitsTable.orgId, orgId),
eq(limitsTable.name, limitName)
)
)
.limit(1);
if (limit.length === 0) {
throw createHttpError(HttpCode.NOT_FOUND, `Limit "${limitName}" not found for organization`);
}
const limitValue = limit[0].value;
// Check if the current value plus the increment is within the limit
return (currentValue + increment) <= limitValue;
} catch (error) {
if (error instanceof Error) {
throw createHttpError(HttpCode.INTERNAL_SERVER_ERROR, `Error checking limit: ${error.message}`);
}
throw createHttpError(HttpCode.INTERNAL_SERVER_ERROR, 'Unknown error occurred while checking limit');
}
}

View file

@ -1,5 +1,5 @@
import db from "@server/db";
import { resourceOtp } from "@server/db/schemas";
import { db } from "@server/db";
import { resourceOtp } from "@server/db";
import { and, eq } from "drizzle-orm";
import { createDate, isWithinExpirationDate, TimeSpan } from "oslo";
import { alphabet, generateRandomString, sha256 } from "oslo/crypto";

View file

@ -1,7 +1,7 @@
import { TimeSpan, createDate } from "oslo";
import { generateRandomString, alphabet } from "oslo/crypto";
import db from "@server/db";
import { users, emailVerificationCodes } from "@server/db/schemas";
import { db } from "@server/db";
import { users, emailVerificationCodes } from "@server/db";
import { eq } from "drizzle-orm";
import { sendEmail } from "@server/emails";
import config from "@server/lib/config";

View file

@ -9,8 +9,8 @@ import {
sessions,
User,
users
} from "@server/db/schemas";
import db from "@server/db";
} from "@server/db";
import { db } from "@server/db";
import { eq, inArray } from "drizzle-orm";
import config from "@server/lib/config";
import type { RandomReader } from "@oslojs/crypto/random";

View file

@ -2,8 +2,8 @@ import {
encodeHexLowerCase,
} from "@oslojs/encoding";
import { sha256 } from "@oslojs/crypto/sha2";
import { Newt, newts, newtSessions, NewtSession } from "@server/db/schemas";
import db from "@server/db";
import { Newt, newts, newtSessions, NewtSession } from "@server/db";
import { db } from "@server/db";
import { eq } from "drizzle-orm";
export const EXPIRES = 1000 * 60 * 60 * 24 * 30;

View file

@ -0,0 +1,72 @@
import {
encodeHexLowerCase,
} from "@oslojs/encoding";
import { sha256 } from "@oslojs/crypto/sha2";
import { Olm, olms, olmSessions, OlmSession } from "@server/db";
import { db } from "@server/db";
import { eq } from "drizzle-orm";
export const EXPIRES = 1000 * 60 * 60 * 24 * 30;
export async function createOlmSession(
token: string,
olmId: string,
): Promise<OlmSession> {
const sessionId = encodeHexLowerCase(
sha256(new TextEncoder().encode(token)),
);
const session: OlmSession = {
sessionId: sessionId,
olmId,
expiresAt: new Date(Date.now() + EXPIRES).getTime(),
};
await db.insert(olmSessions).values(session);
return session;
}
export async function validateOlmSessionToken(
token: string,
): Promise<SessionValidationResult> {
const sessionId = encodeHexLowerCase(
sha256(new TextEncoder().encode(token)),
);
const result = await db
.select({ olm: olms, session: olmSessions })
.from(olmSessions)
.innerJoin(olms, eq(olmSessions.olmId, olms.olmId))
.where(eq(olmSessions.sessionId, sessionId));
if (result.length < 1) {
return { session: null, olm: null };
}
const { olm, session } = result[0];
if (Date.now() >= session.expiresAt) {
await db
.delete(olmSessions)
.where(eq(olmSessions.sessionId, session.sessionId));
return { session: null, olm: null };
}
if (Date.now() >= session.expiresAt - (EXPIRES / 2)) {
session.expiresAt = new Date(
Date.now() + EXPIRES,
).getTime();
await db
.update(olmSessions)
.set({
expiresAt: session.expiresAt,
})
.where(eq(olmSessions.sessionId, session.sessionId));
}
return { session, olm };
}
export async function invalidateOlmSession(sessionId: string): Promise<void> {
await db.delete(olmSessions).where(eq(olmSessions.sessionId, sessionId));
}
export async function invalidateAllOlmSessions(olmId: string): Promise<void> {
await db.delete(olmSessions).where(eq(olmSessions.olmId, olmId));
}
export type SessionValidationResult =
| { session: OlmSession; olm: Olm }
| { session: null; olm: null };

View file

@ -1,7 +1,7 @@
import { encodeHexLowerCase } from "@oslojs/encoding";
import { sha256 } from "@oslojs/crypto/sha2";
import { resourceSessions, ResourceSession } from "@server/db/schemas";
import db from "@server/db";
import { resourceSessions, ResourceSession } from "@server/db";
import { db } from "@server/db";
import { eq, and } from "drizzle-orm";
import config from "@server/lib/config";

View file

@ -1,6 +1,6 @@
import { verify } from "@node-rs/argon2";
import db from "@server/db";
import { twoFactorBackupCodes } from "@server/db/schemas";
import { db } from "@server/db";
import { twoFactorBackupCodes } from "@server/db";
import { eq } from "drizzle-orm";
import { decodeHex } from "oslo/encoding";
import { TOTPController } from "oslo/otp";

View file

@ -1,10 +1,10 @@
import db from "@server/db";
import { db } from "@server/db";
import {
Resource,
ResourceAccessToken,
resourceAccessToken,
resources
} from "@server/db/schemas";
} from "@server/db";
import { and, eq } from "drizzle-orm";
import { isWithinExpirationDate } from "oslo";
import { verifyPassword } from "./password";

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