Compare commits

..

1531 Commits

Author SHA1 Message Date
Owen Schwartz
451f3d24a8 New translations en-us.json (French)
[ci skip]
2026-05-06 17:13:33 -07:00
Owen
7dce4500ec Merge branch 'dev' of github.com:fosrl/pangolin into dev 2026-05-06 16:58:39 -07:00
Owen
72e48a56df Remove explicit call 2026-05-06 16:58:28 -07:00
Owen Schwartz
45a2a07747 Merge pull request #3012 from fosrl/crowdin_dev
New Crowdin updates
2026-05-06 16:21:45 -07:00
Owen Schwartz
181bcffe7d New translations en-us.json (Spanish)
[ci skip]
2026-05-06 16:17:46 -07:00
Owen Schwartz
ed35d25598 New translations en-us.json (Norwegian Bokmal)
[ci skip]
2026-05-06 16:17:44 -07:00
Owen Schwartz
05e738e0f4 New translations en-us.json (Chinese Simplified)
[ci skip]
2026-05-06 16:17:42 -07:00
Owen Schwartz
c95e66d531 New translations en-us.json (Turkish)
[ci skip]
2026-05-06 16:17:40 -07:00
Owen Schwartz
cc2a416a92 New translations en-us.json (Russian)
[ci skip]
2026-05-06 16:17:39 -07:00
Owen Schwartz
70bb42f1fc New translations en-us.json (Portuguese)
[ci skip]
2026-05-06 16:17:37 -07:00
Owen Schwartz
10d2bc1e9e New translations en-us.json (Polish)
[ci skip]
2026-05-06 16:17:35 -07:00
Owen Schwartz
385f57ec93 New translations en-us.json (Dutch)
[ci skip]
2026-05-06 16:17:33 -07:00
Owen Schwartz
9c8ffdb661 New translations en-us.json (Korean)
[ci skip]
2026-05-06 16:17:32 -07:00
Owen Schwartz
5a5feccc76 New translations en-us.json (Italian)
[ci skip]
2026-05-06 16:17:30 -07:00
Owen Schwartz
36e7054386 New translations en-us.json (German)
[ci skip]
2026-05-06 16:17:28 -07:00
Owen Schwartz
19de12b12e New translations en-us.json (Czech)
[ci skip]
2026-05-06 16:17:26 -07:00
Owen Schwartz
d96e930679 New translations en-us.json (Bulgarian)
[ci skip]
2026-05-06 16:17:25 -07:00
Owen Schwartz
5e51b8ad74 New translations en-us.json (French)
[ci skip]
2026-05-06 16:17:23 -07:00
Owen Schwartz
885b9e638d New translations en-us.json (Spanish)
[ci skip]
2026-05-06 16:15:56 -07:00
Owen Schwartz
56ef3a934a New translations en-us.json (Norwegian Bokmal)
[ci skip]
2026-05-06 16:15:55 -07:00
Owen Schwartz
98bc199c8e New translations en-us.json (Chinese Simplified)
[ci skip]
2026-05-06 16:15:53 -07:00
Owen Schwartz
0444d3490b New translations en-us.json (Turkish)
[ci skip]
2026-05-06 16:15:51 -07:00
Owen Schwartz
54820d1db0 New translations en-us.json (Russian)
[ci skip]
2026-05-06 16:15:49 -07:00
Owen Schwartz
961cbfcacc New translations en-us.json (Portuguese)
[ci skip]
2026-05-06 16:15:47 -07:00
Owen Schwartz
a784cd307e New translations en-us.json (Polish)
[ci skip]
2026-05-06 16:15:46 -07:00
Owen Schwartz
b46c948522 New translations en-us.json (Dutch)
[ci skip]
2026-05-06 16:15:44 -07:00
Owen Schwartz
7eab2cc0bb New translations en-us.json (Korean)
[ci skip]
2026-05-06 16:15:42 -07:00
Owen Schwartz
5ff2569ece New translations en-us.json (Italian)
[ci skip]
2026-05-06 16:15:40 -07:00
Owen Schwartz
c59505be8d New translations en-us.json (German)
[ci skip]
2026-05-06 16:15:38 -07:00
Owen Schwartz
2b0e6649fa New translations en-us.json (Czech)
[ci skip]
2026-05-06 16:15:37 -07:00
Owen Schwartz
428e9b546e New translations en-us.json (Bulgarian)
[ci skip]
2026-05-06 16:15:35 -07:00
Owen Schwartz
5089660381 New translations en-us.json (French)
[ci skip]
2026-05-06 16:15:33 -07:00
Owen
998364b09d Properly respect flags.disableEnterpriseFeatures 2026-05-06 16:13:07 -07:00
Owen
ac0d88d9b7 Merge branch 'dev' of github.com:fosrl/pangolin into dev 2026-05-06 16:02:31 -07:00
Owen Schwartz
401f04b53e Merge pull request #3011 from fosrl/copilot/fix-create-alert-visibility
Hide alerting UI when disable_enterprise_features is true
2026-05-06 16:02:22 -07:00
Owen
b046ab7513 Add locks to allocations 2026-05-06 15:58:51 -07:00
Owen
65ee9b9544 Add transaction to alias address picking 2026-05-06 15:53:46 -07:00
Owen
49c7319342 Format and make the error a warning 2026-05-06 15:51:05 -07:00
Owen
ce7df5ddaa Update log message 2026-05-06 15:19:13 -07:00
Owen
af1739fbcb Bump version 2026-05-06 15:15:03 -07:00
Owen
f01c9ee41c Try to fix time issue
Fixes #3007
2026-05-06 14:45:18 -07:00
Owen
19f8956218 Support flattened data fields 2026-05-06 14:30:57 -07:00
Owen
a8c50b8618 Add clear certificates pangctl command 2026-05-06 14:08:28 -07:00
Owen
e86a381ed5 Fix the input to be tags 2026-05-06 14:05:18 -07:00
Owen
dd18375f23 Fix org selectors 2026-05-06 13:57:17 -07:00
Owen Schwartz
46b72b9e8c New translations en-us.json (Spanish)
[ci skip]
2026-05-06 11:14:54 -07:00
Owen Schwartz
7bb2a5a0a5 New translations en-us.json (Norwegian Bokmal)
[ci skip]
2026-05-06 11:14:52 -07:00
Owen Schwartz
4b777b1488 New translations en-us.json (Chinese Simplified)
[ci skip]
2026-05-06 11:14:50 -07:00
Owen Schwartz
428f91b5fa New translations en-us.json (Turkish)
[ci skip]
2026-05-06 11:14:48 -07:00
Owen Schwartz
caaae77f74 New translations en-us.json (Russian)
[ci skip]
2026-05-06 11:14:46 -07:00
Owen Schwartz
4df27b316c New translations en-us.json (Portuguese)
[ci skip]
2026-05-06 11:14:43 -07:00
Owen Schwartz
8f52a48937 New translations en-us.json (Polish)
[ci skip]
2026-05-06 11:14:41 -07:00
Owen Schwartz
a53da85fb4 New translations en-us.json (Dutch)
[ci skip]
2026-05-06 11:14:39 -07:00
Owen Schwartz
08a5785cc5 New translations en-us.json (Korean)
[ci skip]
2026-05-06 11:14:37 -07:00
Owen Schwartz
ff928b846d New translations en-us.json (Italian)
[ci skip]
2026-05-06 11:14:35 -07:00
Owen Schwartz
47b3d26d0e New translations en-us.json (German)
[ci skip]
2026-05-06 11:14:32 -07:00
Owen Schwartz
6270dce86a New translations en-us.json (Czech)
[ci skip]
2026-05-06 11:14:30 -07:00
Owen Schwartz
864d1d5cc4 New translations en-us.json (Bulgarian)
[ci skip]
2026-05-06 11:14:28 -07:00
Owen Schwartz
b63eda64f4 New translations en-us.json (French)
[ci skip]
2026-05-06 11:14:26 -07:00
Owen Schwartz
b8e942478d New translations en-us.json (Spanish)
[ci skip]
2026-05-06 11:09:41 -07:00
Owen Schwartz
6d9bfbf08f New translations en-us.json (Norwegian Bokmal)
[ci skip]
2026-05-06 11:09:39 -07:00
Owen Schwartz
35ce947e19 New translations en-us.json (Chinese Simplified)
[ci skip]
2026-05-06 11:09:37 -07:00
Owen Schwartz
b17ba96235 New translations en-us.json (Turkish)
[ci skip]
2026-05-06 11:09:35 -07:00
Owen Schwartz
f1bdb25497 New translations en-us.json (Russian)
[ci skip]
2026-05-06 11:09:33 -07:00
Owen Schwartz
e11527b430 New translations en-us.json (Portuguese)
[ci skip]
2026-05-06 11:09:31 -07:00
Owen Schwartz
31d3b314e9 New translations en-us.json (Polish)
[ci skip]
2026-05-06 11:09:29 -07:00
Owen Schwartz
3bce57c65c New translations en-us.json (Dutch)
[ci skip]
2026-05-06 11:09:27 -07:00
Owen Schwartz
d649a83535 New translations en-us.json (Korean)
[ci skip]
2026-05-06 11:09:25 -07:00
Owen Schwartz
3c6b1781bc New translations en-us.json (Italian)
[ci skip]
2026-05-06 11:09:23 -07:00
Owen Schwartz
7dd50f65fc New translations en-us.json (German)
[ci skip]
2026-05-06 11:09:20 -07:00
Owen Schwartz
342b4aeddf New translations en-us.json (Czech)
[ci skip]
2026-05-06 11:09:18 -07:00
Owen Schwartz
65908fa00f New translations en-us.json (Bulgarian)
[ci skip]
2026-05-06 11:09:16 -07:00
Owen Schwartz
223e0d0706 New translations en-us.json (French)
[ci skip]
2026-05-06 11:09:14 -07:00
Owen
5426031cd4 Remove duplicate ssl toggle 2026-05-06 11:05:08 -07:00
Owen
adf4a1ffda Link to http private resources 2026-05-06 11:03:38 -07:00
Owen
780feba19c Translate the member page 2026-05-06 10:26:20 -07:00
copilot-swe-agent[bot]
3ac315b52e Fix useEffect dependency array in create alert page
Agent-Logs-Url: https://github.com/fosrl/pangolin/sessions/4337e8e4-2110-45ae-bbf9-63f273d2a9a3

Co-authored-by: oschwartz10612 <4999704+oschwartz10612@users.noreply.github.com>
2026-05-06 16:55:38 +00:00
copilot-swe-agent[bot]
1b183d32c0 Hide alerting features when disable_enterprise_features is set
Agent-Logs-Url: https://github.com/fosrl/pangolin/sessions/4337e8e4-2110-45ae-bbf9-63f273d2a9a3

Co-authored-by: oschwartz10612 <4999704+oschwartz10612@users.noreply.github.com>
2026-05-06 16:54:58 +00:00
copilot-swe-agent[bot]
0c643e91a6 Initial plan 2026-05-06 16:52:05 +00:00
Owen
fab53ba26a Dont show the link if not the org owner 2026-05-05 20:40:59 -07:00
Owen
62e19a2f4e Remove the hover effect 2026-05-05 20:10:14 -07:00
Owen
7d67fb9984 Make sure the domain is defined on a http resource 2026-05-05 20:07:06 -07:00
Owen Schwartz
7436aebca7 Merge pull request #2893 from Fredkiss3/feat/roles-and-user-multi-selectors
feat: roles & users selector
2026-05-05 17:36:40 -07:00
miloschwartz
66fda553e4 introduce caching in calculate func 2026-05-05 14:12:02 -07:00
Owen Schwartz
432dc81875 Merge pull request #3006 from fosrl/dev
don't await second calculate func
2026-05-05 13:46:05 -07:00
miloschwartz
2ecf076c0f don't await second calculate func 2026-05-05 12:37:52 -07:00
Owen Schwartz
9b71c426c7 Merge pull request #3005 from fosrl/dev
1.18.2-s.4
2026-05-05 12:12:09 -07:00
miloschwartz
e06dda27cb dont wait rebuild 2026-05-05 12:10:55 -07:00
miloschwartz
18f6e0f75d add subscribed check back 2026-05-05 11:52:31 -07:00
miloschwartz
3b232bcc58 set orgId to undefined 2026-05-05 11:31:58 -07:00
Owen
c575bb76e7 Fix only using acme.json in dir
Ref #2978
2026-05-05 11:11:43 -07:00
Owen Schwartz
87e6c7ba36 Merge pull request #3003 from fosrl/dev
1.18.2-s.3
2026-05-05 10:54:48 -07:00
Owen
c8e7e0ee1e WAL off default ENABLE_SQLITE_WAL_MODE to enable 2026-05-04 17:54:28 -07:00
Owen Schwartz
0e7aafd364 Merge pull request #2998 from Josh-Voyles/mem-fix-2
fix: deterministically finalize SQLite prepared statements to prevent native memory leak (#2120)
2026-05-04 17:29:45 -07:00
miloschwartz
91f1bae3e9 fix alignement in info sections 2026-05-04 14:51:17 -07:00
miloschwartz
53c138ce3e use consistent button spacing 2026-05-04 14:34:32 -07:00
miloschwartz
969db14a3c remove delay in oidc validate 2026-05-04 13:14:35 -07:00
Fred KISSIE
1ca1059673 ♻️ 10 users/roles per page 2026-05-04 20:59:46 +02:00
Owen Schwartz
9410a18404 Merge pull request #2997 from fosrl/dev
Translations
2026-05-04 11:49:26 -07:00
Owen Schwartz
c1c387bdd8 Merge pull request #2996 from fosrl/crowdin_dev
New Crowdin updates
2026-05-04 11:48:58 -07:00
Owen Schwartz
6e83d77a87 New translations en-us.json (Spanish)
[ci skip]
2026-05-04 11:48:00 -07:00
Owen Schwartz
ba9a1efa4c New translations en-us.json (Norwegian Bokmal)
[ci skip]
2026-05-04 11:47:58 -07:00
Owen Schwartz
9e046b9608 New translations en-us.json (Chinese Simplified)
[ci skip]
2026-05-04 11:47:56 -07:00
Owen Schwartz
37794eb299 New translations en-us.json (Turkish)
[ci skip]
2026-05-04 11:47:55 -07:00
Owen Schwartz
4e66b0e74b New translations en-us.json (Russian)
[ci skip]
2026-05-04 11:47:53 -07:00
Owen Schwartz
44fa873977 New translations en-us.json (Portuguese)
[ci skip]
2026-05-04 11:47:51 -07:00
Owen Schwartz
505461a533 New translations en-us.json (Polish)
[ci skip]
2026-05-04 11:47:49 -07:00
Owen Schwartz
a88c5b1428 New translations en-us.json (Dutch)
[ci skip]
2026-05-04 11:47:47 -07:00
Owen Schwartz
97ef1d605c New translations en-us.json (Korean)
[ci skip]
2026-05-04 11:47:45 -07:00
Owen Schwartz
3fc1c9d948 New translations en-us.json (Italian)
[ci skip]
2026-05-04 11:47:44 -07:00
Owen Schwartz
68bd37ab6c New translations en-us.json (German)
[ci skip]
2026-05-04 11:47:42 -07:00
Owen Schwartz
5c317c535b New translations en-us.json (Czech)
[ci skip]
2026-05-04 11:47:40 -07:00
Owen Schwartz
37c6b11899 New translations en-us.json (Bulgarian)
[ci skip]
2026-05-04 11:47:38 -07:00
Owen Schwartz
45c567ffa0 New translations en-us.json (French)
[ci skip]
2026-05-04 11:47:36 -07:00
Fred KISSIE
49d22498fc ♻️ only select one role in CE and if user is non paying 2026-05-04 20:47:00 +02:00
Owen Schwartz
23f4302186 Merge pull request #2995 from fosrl/dev
1.18.2-s.2
2026-05-04 11:43:24 -07:00
Owen Schwartz
775ea64b55 Merge pull request #2977 from fosrl/newt-install-commands
fix(newt): update Helm install credentials and client flag handling
2026-05-04 11:40:19 -07:00
Owen
64ad7641af Add migration
Fixes #2968
Fixes #2990
2026-05-04 11:35:07 -07:00
Owen
d724f5bb5d Add missing redirects and threshold to api
Fixes #2987
2026-05-04 10:46:11 -07:00
Fred KISSIE
30e627cca8 Merge branch 'dev' into feat/roles-and-user-multi-selectors 2026-05-04 18:49:19 +02:00
Fred KISSIE
53c1e2e742 ♻️ refactor 2026-05-04 18:45:31 +02:00
Owen Schwartz
fb4bda077b Merge pull request #2983 from fosrl/dev
1.18.2-s.1
2026-05-03 14:59:12 -07:00
Owen
d4f7c4a9c4 Merge branch 'dev' of github.com:fosrl/pangolin into dev 2026-05-03 14:46:59 -07:00
miloschwartz
1cc0e9b689 consolidate org idps in login form 2026-05-03 14:46:48 -07:00
Owen
584be4dbd2 Add badge 2026-05-03 14:45:42 -07:00
Owen
c33e295ce7 Add a banner showing that you are on a trial 2026-05-03 14:42:43 -07:00
Owen
1a926a7127 Handle trial limit lifecycle 2026-05-03 14:31:05 -07:00
miloschwartz
eb515a8f7f consolidate orgidps in import list 2026-05-03 14:16:36 -07:00
Owen
81b8a8a9e3 Fix ns cert generation 2026-05-03 12:29:48 -07:00
Owen
bcd164219f Try to speed up 2026-05-03 12:29:48 -07:00
Owen Schwartz
c90e405105 Merge pull request #2843 from Blacks-Army/dev
Exclude local/private/CGNAT IPs from geo-block rules (fixes  issue #2239)
2026-05-03 11:19:36 -07:00
Mustafa
b2c8311b26 Merge branch 'fosrl:dev' into dev 2026-05-03 18:53:48 +02:00
Josh Voyles
2154811ffb removed possible introduced HA Redis bug; improved comment 2026-05-03 09:39:27 -04:00
Marc Schäfer
1772ac220f fix(newt): update Helm install credentials and client flag handling
Use a Kubernetes Secret for Newt Helm chart credentials and configure the chart
with auth.existingSecretName instead of passing credential values through
auth.keys.*.

Add Helm-specific acceptClients handling so the generated Kubernetes command sets
newtInstances[0].acceptClients=true when client connections are enabled.
2026-05-03 15:07:42 +02:00
Josh Voyles
9bd33072f4 cleaned comments - more concise 2026-05-03 00:00:11 -04:00
Owen Schwartz
cf596d980f Merge pull request #2971 from fosrl/dev
1.18.2
2026-05-02 20:59:51 -07:00
Owen Schwartz
70f619b726 Merge pull request #2970 from fosrl/crowdin_dev
New Crowdin updates
2026-05-02 20:59:16 -07:00
Owen Schwartz
7743e3890b New translations en-us.json (Spanish)
[ci skip]
2026-05-02 20:57:57 -07:00
Owen Schwartz
d8df250555 New translations en-us.json (Norwegian Bokmal)
[ci skip]
2026-05-02 20:57:55 -07:00
Owen Schwartz
45c9f217c6 New translations en-us.json (Chinese Simplified)
[ci skip]
2026-05-02 20:57:54 -07:00
Owen Schwartz
8371692cc5 New translations en-us.json (Turkish)
[ci skip]
2026-05-02 20:57:52 -07:00
Owen Schwartz
5377dc7a1c New translations en-us.json (Russian)
[ci skip]
2026-05-02 20:57:51 -07:00
Owen Schwartz
02649468e0 New translations en-us.json (Portuguese)
[ci skip]
2026-05-02 20:57:49 -07:00
Owen Schwartz
c5ef00fb0e New translations en-us.json (Polish)
[ci skip]
2026-05-02 20:57:48 -07:00
Owen Schwartz
6f4325e9a0 New translations en-us.json (Dutch)
[ci skip]
2026-05-02 20:57:45 -07:00
Owen Schwartz
a2a031dfe7 New translations en-us.json (Korean)
[ci skip]
2026-05-02 20:57:44 -07:00
Owen Schwartz
e34a4c82eb New translations en-us.json (Italian)
[ci skip]
2026-05-02 20:57:42 -07:00
Owen Schwartz
52fd7df727 New translations en-us.json (German)
[ci skip]
2026-05-02 20:57:41 -07:00
Owen Schwartz
d5f08437d7 New translations en-us.json (Czech)
[ci skip]
2026-05-02 20:57:39 -07:00
Owen Schwartz
9ee07ba343 New translations en-us.json (Bulgarian)
[ci skip]
2026-05-02 20:57:38 -07:00
Owen Schwartz
4baaa5fc14 New translations en-us.json (French)
[ci skip]
2026-05-02 20:57:36 -07:00
Owen
61de100630 Fix imports 2026-05-02 20:46:52 -07:00
miloschwartz
3694f43ae8 dont early return on multi org 2026-05-02 20:38:14 -07:00
Owen
279211142d Bump version 2026-05-02 13:48:25 -07:00
Owen
b8822b4d25 Fix CE not processing alert status
Fixes #2968
2026-05-02 13:38:05 -07:00
Josh Voyles
0655ba9423 fix: revert investigative changes, keep root cause fixes only
Reverts diagnostic instrumentation and defensive hardening added during
memory leak investigation. Only root cause fixes survive.

Root causes fixed:
- SQLite driver: auto-finalize wrapper + PRAGMAs
- WS routers: delete clientConfigVersions on disconnect (unbounded Map leak)
- WS private router: same + Redis key cleanup

Reverted:
- Memory monitor, rate limiting, request timeouts (diagnostic/hardening)
- shutdownAuditLogger wiring, audit re-queue change, debug logs (cleanup/secondary)
- package-lock.json drift
2026-05-02 16:33:13 -04:00
Owen
e1afbc226c Allow configuring the webhook body 2026-05-02 13:26:54 -07:00
miloschwartz
96c450fd08 update private resources screenshot 2026-05-02 13:19:00 -07:00
Owen Schwartz
587e4d104b New translations en-us.json (Spanish)
[ci skip]
2026-05-02 13:16:28 -07:00
Owen Schwartz
368c5c374f New translations en-us.json (Norwegian Bokmal)
[ci skip]
2026-05-02 13:16:26 -07:00
Owen Schwartz
7675b6409c New translations en-us.json (Chinese Simplified)
[ci skip]
2026-05-02 13:16:24 -07:00
Owen Schwartz
d31da1a41e New translations en-us.json (Turkish)
[ci skip]
2026-05-02 13:16:23 -07:00
Owen Schwartz
49e259e259 New translations en-us.json (Russian)
[ci skip]
2026-05-02 13:16:21 -07:00
Owen Schwartz
f4684c1858 New translations en-us.json (Portuguese)
[ci skip]
2026-05-02 13:16:19 -07:00
Owen Schwartz
6e223bb363 New translations en-us.json (Polish)
[ci skip]
2026-05-02 13:16:18 -07:00
Owen Schwartz
22e7038b2c New translations en-us.json (Dutch)
[ci skip]
2026-05-02 13:16:16 -07:00
Owen Schwartz
76ba4c1fdf New translations en-us.json (Korean)
[ci skip]
2026-05-02 13:16:14 -07:00
Owen Schwartz
7f25d94a83 New translations en-us.json (Italian)
[ci skip]
2026-05-02 13:16:13 -07:00
Owen Schwartz
769ba27e3a New translations en-us.json (German)
[ci skip]
2026-05-02 13:16:11 -07:00
Owen Schwartz
a188552ba0 New translations en-us.json (Czech)
[ci skip]
2026-05-02 13:16:09 -07:00
Owen Schwartz
208132082e New translations en-us.json (Bulgarian)
[ci skip]
2026-05-02 13:16:08 -07:00
Owen Schwartz
fcd5789221 New translations en-us.json (French)
[ci skip]
2026-05-02 13:16:06 -07:00
Josh Voyles
2c85bcd06b fix(db): deterministically finalize prepared statements after execution
Wrap Statement .all()/.get()/.run() via autoFinalizeStatement() with
try/finally calling stmt.finalize() post-execution, releasing native
sqlite3_stmt memory immediately instead of waiting for GC.

Safe because:
- Drizzle one-time queries invoke each statement once only
- Drizzle does not access statement after .all()/.get()/.run() returns
- Migration scripts use isolated new Database() instances (unpatched)
- No app code holds persistent .prepare() refs on main db
2026-05-02 15:50:54 -04:00
miloschwartz
c6a8b09cff log in page improvements 2026-05-02 12:46:39 -07:00
miloschwartz
380ff381fc fix credenza scroll extra spacing above footer 2026-05-02 12:19:00 -07:00
Owen Schwartz
5eb3951f00 New translations en-us.json (Spanish)
[ci skip]
2026-05-02 12:13:08 -07:00
Owen Schwartz
c30e94da98 New translations en-us.json (Norwegian Bokmal)
[ci skip]
2026-05-02 12:13:06 -07:00
Owen Schwartz
6ca24d51a1 New translations en-us.json (Chinese Simplified)
[ci skip]
2026-05-02 12:13:05 -07:00
Owen Schwartz
13f512aed6 New translations en-us.json (Turkish)
[ci skip]
2026-05-02 12:13:03 -07:00
Owen Schwartz
2bdbc9d688 New translations en-us.json (Russian)
[ci skip]
2026-05-02 12:13:02 -07:00
Owen Schwartz
8e2f30d8de New translations en-us.json (Portuguese)
[ci skip]
2026-05-02 12:13:00 -07:00
Owen Schwartz
a84e1cc9e0 New translations en-us.json (Polish)
[ci skip]
2026-05-02 12:12:58 -07:00
Owen Schwartz
6b28f0c81e New translations en-us.json (Dutch)
[ci skip]
2026-05-02 12:12:56 -07:00
Owen Schwartz
d28d3ba6ea New translations en-us.json (Korean)
[ci skip]
2026-05-02 12:12:55 -07:00
Owen Schwartz
6efaf9f40d New translations en-us.json (Italian)
[ci skip]
2026-05-02 12:12:53 -07:00
Owen Schwartz
5379b32959 New translations en-us.json (German)
[ci skip]
2026-05-02 12:12:51 -07:00
Owen Schwartz
9bb936a40d New translations en-us.json (Czech)
[ci skip]
2026-05-02 12:12:50 -07:00
Owen Schwartz
960fe760f1 New translations en-us.json (Bulgarian)
[ci skip]
2026-05-02 12:12:48 -07:00
Owen Schwartz
2f2105a085 New translations en-us.json (French)
[ci skip]
2026-05-02 12:12:46 -07:00
miloschwartz
de92a28435 update mac models 2026-05-02 12:09:55 -07:00
Owen
d8c3484ed5 Have to import from private 2026-05-02 12:00:51 -07:00
Owen
726e000154 Show remote nodes update in table 2026-05-02 11:55:01 -07:00
Josh Voyles
d6abe83fdc fix: memory improvements
- SQLite: enable WAL mode and PRAGMA performance settings

- ws.ts (public + private): fix clientConfigVersions memory leak

- internal server: add rate limiting and request timeouts

- audit log: fix flush re-queue feedback loop

- memory: add monitoring instrumentation

- security: remove debug log of full request body
2026-05-02 07:37:18 -04:00
Owen Schwartz
9df46f7014 Merge pull request #2966 from fosrl/dev
Try to pull domains from host regex
2026-05-01 20:54:09 -07:00
Owen
908f0d54e2 Try to pull domains from host regex 2026-05-01 20:53:39 -07:00
Milo Schwartz
f0010ea12a Merge pull request #2965 from fosrl/dev
add new screenshots
2026-05-01 17:35:29 -07:00
miloschwartz
cab8be1a9a add new screenshots 2026-05-01 17:34:05 -07:00
Owen Schwartz
0a9dab7cca Merge pull request #2964 from fosrl/dev
Update translations
2026-05-01 17:02:41 -07:00
Owen Schwartz
889ab1f8a8 Merge pull request #2963 from fosrl/crowdin_dev
New Crowdin updates
2026-05-01 17:02:10 -07:00
Owen Schwartz
a9019cfb23 New translations en-us.json (Spanish)
[ci skip]
2026-05-01 17:00:49 -07:00
Owen Schwartz
441d4bce6e New translations en-us.json (Norwegian Bokmal)
[ci skip]
2026-05-01 17:00:47 -07:00
Owen Schwartz
dd1e681a9c New translations en-us.json (Chinese Simplified)
[ci skip]
2026-05-01 17:00:45 -07:00
Owen Schwartz
a882619eaf New translations en-us.json (Turkish)
[ci skip]
2026-05-01 17:00:43 -07:00
Owen Schwartz
f43baaaf1f New translations en-us.json (Russian)
[ci skip]
2026-05-01 17:00:41 -07:00
Owen Schwartz
c3dc0bd015 New translations en-us.json (Portuguese)
[ci skip]
2026-05-01 17:00:39 -07:00
Owen Schwartz
1fd2a0fae2 New translations en-us.json (Polish)
[ci skip]
2026-05-01 17:00:37 -07:00
Owen Schwartz
8ba5b43569 New translations en-us.json (Dutch)
[ci skip]
2026-05-01 17:00:35 -07:00
Owen Schwartz
6deefcd003 New translations en-us.json (Korean)
[ci skip]
2026-05-01 17:00:33 -07:00
Owen Schwartz
4d6cea5fcd New translations en-us.json (Italian)
[ci skip]
2026-05-01 17:00:31 -07:00
Owen Schwartz
f175ac774f New translations en-us.json (German)
[ci skip]
2026-05-01 17:00:29 -07:00
Owen Schwartz
0fe2b24f6b New translations en-us.json (Czech)
[ci skip]
2026-05-01 17:00:27 -07:00
Owen Schwartz
6ad06e6faf New translations en-us.json (Bulgarian)
[ci skip]
2026-05-01 17:00:25 -07:00
Owen Schwartz
d47faeced1 New translations en-us.json (French)
[ci skip]
2026-05-01 17:00:23 -07:00
Owen Schwartz
498f586eeb New translations en-us.json (Spanish)
[ci skip]
2026-05-01 16:57:38 -07:00
Owen Schwartz
e94fc6bc65 New translations en-us.json (Norwegian Bokmal)
[ci skip]
2026-05-01 16:57:37 -07:00
Owen Schwartz
0a1fe1b725 New translations en-us.json (Chinese Simplified)
[ci skip]
2026-05-01 16:57:35 -07:00
Owen Schwartz
eb40b04b43 New translations en-us.json (Turkish)
[ci skip]
2026-05-01 16:57:33 -07:00
Owen Schwartz
6685afdcf9 New translations en-us.json (Russian)
[ci skip]
2026-05-01 16:57:32 -07:00
Owen Schwartz
49232e32bf New translations en-us.json (Portuguese)
[ci skip]
2026-05-01 16:57:30 -07:00
Owen Schwartz
aec0aed211 New translations en-us.json (Polish)
[ci skip]
2026-05-01 16:57:28 -07:00
Owen Schwartz
d43b3176f5 New translations en-us.json (Dutch)
[ci skip]
2026-05-01 16:57:26 -07:00
Owen Schwartz
190074ea0c New translations en-us.json (Korean)
[ci skip]
2026-05-01 16:57:24 -07:00
Owen Schwartz
c5a7719239 New translations en-us.json (Italian)
[ci skip]
2026-05-01 16:57:22 -07:00
Owen Schwartz
5eac131d2e New translations en-us.json (German)
[ci skip]
2026-05-01 16:57:21 -07:00
Owen Schwartz
0bc3276ee2 New translations en-us.json (Czech)
[ci skip]
2026-05-01 16:57:18 -07:00
Owen Schwartz
5073507b90 New translations en-us.json (Bulgarian)
[ci skip]
2026-05-01 16:57:16 -07:00
Owen Schwartz
805e6f856a New translations en-us.json (French)
[ci skip]
2026-05-01 16:57:14 -07:00
Owen Schwartz
412a9b5294 Merge pull request #2962 from fosrl/dev
1.18.1-s.6
2026-05-01 16:54:37 -07:00
Owen
fbf95c5363 Start creating ns one level down 2026-05-01 16:51:42 -07:00
Owen
b907850344 Add missing heading 2026-05-01 16:51:42 -07:00
miloschwartz
22116373e3 increase target site selector width 2026-05-01 16:33:40 -07:00
miloschwartz
9757c3d8b6 show newt version on site 2026-05-01 16:26:45 -07:00
miloschwartz
f8b85d4b4e fix sidebar product updates spacing 2026-05-01 16:14:06 -07:00
Owen
4651f19c53 Support acme_json_path as a directory of acme file
Fixes #2961
2026-05-01 16:06:37 -07:00
Owen
4524bdc094 Add http cert syncing for use with the controller 2026-05-01 15:42:38 -07:00
Owen Schwartz
741850880e Merge pull request #2959 from fosrl/dev
1.18.1-s.4
2026-05-01 15:05:59 -07:00
Owen
53e096f7cb Allow deleting account with trial 2026-05-01 15:01:48 -07:00
Owen
3dfd7e8a43 Update limits 2026-05-01 11:47:14 -07:00
Owen
db6e60d0a3 Adjust language 2026-05-01 10:48:09 -07:00
Owen
54d2d689c1 Run messaging for delete in the background as well 2026-04-30 14:38:03 -07:00
Owen Schwartz
bb5853827b Merge pull request #2948 from fosrl/dev
1.18.1-s.3
2026-04-30 14:11:16 -07:00
Owen
68f5512732 Handle messaging in the background; dont time out 2026-04-30 14:00:32 -07:00
Fred KISSIE
657072dd17 💄 fix input styles for tags 2026-04-30 22:06:36 +02:00
Fred KISSIE
443a19165f ♻️ refactor 2026-04-30 22:02:23 +02:00
Fred KISSIE
b4906ec9ba ♻️ replace roles tag with roles selector in role config fields 2026-04-30 22:01:46 +02:00
Owen
416e124c02 Rotate the secret on the new things using it 2026-04-30 11:53:55 -07:00
Owen
d3e4d8cda8 Fix pr blueprints not picking up site 2026-04-30 11:39:37 -07:00
Owen
81972dbb73 Add name to migration
Fixes #2943
2026-04-30 10:56:12 -07:00
Fred KISSIE
39bf64bc35 Merge branch 'dev' into feat/roles-and-user-multi-selectors 2026-04-30 16:55:25 +02:00
Owen Schwartz
b715786a1e Merge pull request #2939 from fosrl/dev
1.18.1-s.2
2026-04-29 21:33:03 -07:00
Owen
ae24eb2d2c Disable the alerts and hc when downgrading 2026-04-29 21:31:02 -07:00
Owen
20fc59dcda Delete trial when upgrading 2026-04-29 21:25:58 -07:00
Owen
93b09de425 Adjust cloud api endpoints 2026-04-29 21:04:11 -07:00
Owen
bacc130453 Clean up sign and verify 2026-04-29 17:14:22 -07:00
Owen Schwartz
79541ec7b8 Merge pull request #2936 from fosrl/dev
1.18.1 patch over
2026-04-29 16:43:06 -07:00
Owen
81197f8a86 Update the database if the wildcard changes 2026-04-29 16:42:10 -07:00
miloschwartz
dcfc7822f4 hide cert in public resources col on oss 2026-04-29 16:03:59 -07:00
Owen Schwartz
269bd9aa0f Merge pull request #2934 from fosrl/dev
1.18.1-s.1
2026-04-29 15:18:28 -07:00
Owen
0a0817b860 Restrict alerting 2026-04-29 15:15:53 -07:00
Owen Schwartz
b7a903ab32 Merge pull request #2933 from fosrl/dev
1.18.1
2026-04-29 15:00:29 -07:00
Owen Schwartz
ab60438aa7 Merge pull request #2917 from fosrl/crowdin_dev
New Crowdin updates
2026-04-29 14:55:53 -07:00
Owen Schwartz
b9f3f90de6 New translations en-us.json (Spanish)
[ci skip]
2026-04-29 14:54:32 -07:00
Owen Schwartz
b53cc397be New translations en-us.json (Norwegian Bokmal)
[ci skip]
2026-04-29 14:54:30 -07:00
Owen Schwartz
994fb456c2 New translations en-us.json (Chinese Simplified)
[ci skip]
2026-04-29 14:54:29 -07:00
Owen Schwartz
b36927c7a0 New translations en-us.json (Turkish)
[ci skip]
2026-04-29 14:54:27 -07:00
Owen Schwartz
1c57473b6d New translations en-us.json (Russian)
[ci skip]
2026-04-29 14:54:25 -07:00
Owen Schwartz
c02c3eaa4a New translations en-us.json (Portuguese)
[ci skip]
2026-04-29 14:54:23 -07:00
Owen Schwartz
3c265ee577 New translations en-us.json (Polish)
[ci skip]
2026-04-29 14:54:22 -07:00
Owen Schwartz
98dfd05f06 New translations en-us.json (Dutch)
[ci skip]
2026-04-29 14:54:20 -07:00
Owen Schwartz
faa2e97530 New translations en-us.json (Korean)
[ci skip]
2026-04-29 14:54:18 -07:00
Owen Schwartz
175f10a51d New translations en-us.json (Italian)
[ci skip]
2026-04-29 14:54:16 -07:00
Owen Schwartz
6284930fce New translations en-us.json (German)
[ci skip]
2026-04-29 14:54:15 -07:00
Owen Schwartz
6c93aca444 New translations en-us.json (Czech)
[ci skip]
2026-04-29 14:54:13 -07:00
Owen Schwartz
d83318cbfc New translations en-us.json (Bulgarian)
[ci skip]
2026-04-29 14:54:11 -07:00
Owen Schwartz
143f362a48 New translations en-us.json (French)
[ci skip]
2026-04-29 14:54:09 -07:00
miloschwartz
698cd868a8 show cert status in public reosurces table 2026-04-29 14:47:34 -07:00
Owen
a55842ffff Scrape certs from ALL resolvers 2026-04-29 14:29:15 -07:00
Owen
2ffe254879 Dont include site resources on the cloud 2026-04-29 14:08:42 -07:00
miloschwartz
e173f59d89 visual improvements 2026-04-29 13:44:35 -07:00
miloschwartz
d3870f4920 cert status in priv resources table first pass 2026-04-29 13:05:26 -07:00
miloschwartz
227501d8f8 fix rounded buttons in target input 2026-04-29 12:39:08 -07:00
miloschwartz
a16f805709 fix style for unknown status 2026-04-29 12:36:47 -07:00
miloschwartz
a029b107ae dont show site online status for local sites 2026-04-29 12:35:08 -07:00
miloschwartz
f03389a9a0 fix cert styling 2026-04-29 12:18:52 -07:00
Owen
78fff6bfde Filter to only allow newt sites 2026-04-29 12:18:28 -07:00
Owen
bc585c24fc Calculate actual resource status
Fixes #2930
2026-04-29 12:07:32 -07:00
miloschwartz
0f6c66dc67 use localfont and updated mona sans closes #2924 2026-04-29 11:58:06 -07:00
Owen
6be150bafe Handle possible not null for tcp, udp, and icmp
Fixes #2929
2026-04-29 11:42:18 -07:00
Owen
1eac7741a5 Show the certs elsewhere when required 2026-04-29 11:34:10 -07:00
Owen
b8ca0499af Dont show the cert box oss and dont check license 2026-04-29 11:28:30 -07:00
Owen
b39a2bcfb1 Quiet logs 2026-04-29 11:25:43 -07:00
Owen
d45b727dca Dont show cert status because not saved yet 2026-04-29 11:06:14 -07:00
Owen
5c31d35e28 Handle sans in the acme.json 2026-04-29 10:59:49 -07:00
Owen
8c645315f3 Handle when siteIds is not provided 2026-04-29 10:59:36 -07:00
Milo Schwartz
ab6377e086 Merge pull request #2923 from fosrl/miloschwartz-patch-2
Update README.md
2026-04-28 23:03:31 -07:00
Milo Schwartz
8685cf4208 Update README.md 2026-04-29 02:03:18 -04:00
Fred KISSIE
a3f30eff02 ♻️ remove unused code and imports 2026-04-29 07:29:20 +02:00
Fred KISSIE
081940dff8 replace roles & users in uptime alert section 2026-04-29 07:29:05 +02:00
Owen Schwartz
26fe1259da Merge pull request #2922 from fosrl/dev
1.18.0-s.2
2026-04-28 22:28:35 -07:00
Owen
3bcbeb24f3 Query the right column 2026-04-28 22:27:35 -07:00
Owen
1d0a92c83e Its in the transaction so we wait 2026-04-28 22:22:06 -07:00
Owen
a44100c2bd Handle deleting client and orphaning resources 2026-04-28 22:19:22 -07:00
Fred KISSIE
c4cf4cdec4 ♻️ show idp name in user selector 2026-04-29 06:57:49 +02:00
miloschwartz
2203ebf723 show user idp in devices 2026-04-28 21:27:11 -07:00
Owen Schwartz
70958185bd Merge pull request #2921 from fosrl/dev
1.18.0-s.1
2026-04-28 21:03:36 -07:00
Owen
7e374baee9 Update if the ssl toggle changes 2026-04-28 20:45:20 -07:00
Owen
4cf6ca1d55 Force tcp and udp ports when http mode 2026-04-28 20:27:27 -07:00
Fred KISSIE
85f2165a1e ♻️ refactor multi select components 2026-04-29 05:19:36 +02:00
Fred KISSIE
1bc7175dd4 replace user select in resource auth and alert rule field 2026-04-29 05:19:23 +02:00
Owen Schwartz
2957d6592d Merge pull request #2919 from fosrl/dev
Add missing imports
2026-04-28 16:52:53 -07:00
Owen
de2a22aad8 Add missing imports 2026-04-28 16:52:35 -07:00
Owen Schwartz
b96db4f133 Merge pull request #2918 from fosrl/dev
Use logsDb for the status history
2026-04-28 16:38:43 -07:00
Owen
2a29062659 Use logsDb for the status history 2026-04-28 16:38:13 -07:00
Owen Schwartz
8ed9adbfae New translations en-us.json (German)
[ci skip]
2026-04-28 16:21:16 -07:00
Owen Schwartz
98406f63af Merge pull request #2916 from fosrl/dev
1.18.0
2026-04-28 15:53:31 -07:00
Owen
85415176ab Clean imports 2026-04-28 15:41:00 -07:00
Owen
b81ae3d998 Seed satatus data for resources, sites, and hc 2026-04-28 15:15:09 -07:00
Owen
208289f498 Select all networks to prevent delete issues 2026-04-28 12:02:21 -07:00
Owen
8783c47a3c Dont allow clicking the wildcard resource link 2026-04-28 11:21:32 -07:00
Owen
592ca64253 Fix delete 2026-04-28 09:57:46 -07:00
Owen Schwartz
1de6e58eef Merge pull request #2912 from fosrl/crowdin_dev
New Crowdin updates
2026-04-27 21:23:34 -07:00
Owen Schwartz
92822a20e8 New translations en-us.json (Spanish) 2026-04-27 20:25:22 -07:00
Owen Schwartz
4a3035d597 New translations en-us.json (Norwegian Bokmal) 2026-04-27 20:25:20 -07:00
Owen Schwartz
bd866a5fd2 New translations en-us.json (Chinese Simplified) 2026-04-27 20:25:18 -07:00
Owen Schwartz
1c6cd57c31 New translations en-us.json (Turkish) 2026-04-27 20:25:16 -07:00
Owen Schwartz
a0619868be New translations en-us.json (Russian) 2026-04-27 20:25:15 -07:00
Owen Schwartz
6c2dd4331a New translations en-us.json (Portuguese) 2026-04-27 20:25:13 -07:00
Owen Schwartz
5e6171263b New translations en-us.json (Polish) 2026-04-27 20:25:11 -07:00
Owen Schwartz
d33c704f76 New translations en-us.json (Dutch) 2026-04-27 20:25:09 -07:00
Owen Schwartz
3cb1cd9f2f New translations en-us.json (Korean) 2026-04-27 20:25:07 -07:00
Owen Schwartz
926fe5e474 New translations en-us.json (Italian) 2026-04-27 20:25:06 -07:00
Owen Schwartz
243da6379b New translations en-us.json (German) 2026-04-27 20:25:04 -07:00
Owen Schwartz
68ea7d1d98 New translations en-us.json (Czech) 2026-04-27 20:25:02 -07:00
Owen Schwartz
c0a4541455 New translations en-us.json (Bulgarian) 2026-04-27 20:25:00 -07:00
Owen Schwartz
e4bf2da2e5 New translations en-us.json (French) 2026-04-27 20:24:58 -07:00
Fred KISSIE
ddaa9c32a7 ♻️ replace roles & user selectors in machines & create user 2026-04-28 05:08:20 +02:00
Owen
85334f082c Only support alerts and newt sync on saas 2026-04-27 18:20:30 -07:00
Owen
c771722127 Dont include rewrite to 2026-04-27 17:52:41 -07:00
Owen
f89b0a17ac Set the default to unknown 2026-04-27 17:15:44 -07:00
Owen
81a6fb8d00 Dont import from postgres 2026-04-27 17:04:04 -07:00
Owen
dbee049ac8 Fix oss build issues 2026-04-27 16:30:54 -07:00
Owen
c03519b7f5 Send updates when the full domain changes 2026-04-27 16:19:37 -07:00
Owen
7affaf63d0 Update get cert to now allow restarting 2026-04-27 16:19:37 -07:00
Owen
08e9cb862d Fix deleting resource 2026-04-27 16:19:36 -07:00
miloschwartz
cbb2388a46 add multi site help link 2026-04-27 15:38:19 -07:00
Owen
24f437e260 Cap degraded in the mail 2026-04-27 15:24:16 -07:00
Owen
3439a3690f Fix site offline not respecting hc enabled 2026-04-27 15:24:16 -07:00
Owen
b88469f901 Hide the icmp and snmp for now 2026-04-27 15:24:16 -07:00
miloschwartz
e573125934 update wildcard resources link 2026-04-27 15:14:29 -07:00
Owen
c5072bed80 Fix healthcheck not showing data 2026-04-27 14:33:28 -07:00
Owen
28dd06c41f Add caching to the hc and fix resource stuff 2026-04-27 14:29:57 -07:00
Owen
61aaa5a832 Wrap in transactions 2026-04-27 13:46:15 -07:00
Owen
512ba2150b Fix sanitizing the domain causing problems 2026-04-27 13:46:15 -07:00
Owen
d1f7a9c6df Add health to the resource 2026-04-27 13:46:15 -07:00
miloschwartz
1cdb261f7e add loading indicator to resources 2026-04-27 12:31:31 -07:00
Owen
17631599a2 Remove delay 2026-04-26 21:25:53 -07:00
Owen
7563b37cd0 Add missing health column 2026-04-26 21:25:14 -07:00
Owen
7318c86cca Fix display and query issues 2026-04-26 20:33:58 -07:00
Owen
467cd70b72 Handle delete correctly 2026-04-26 20:26:03 -07:00
Owen
8ca72a39da Handle deleting targets 2026-04-26 17:55:26 -07:00
Owen
4ff811c5bd Use http by default 2026-04-26 17:38:24 -07:00
Owen
ca2370e31d Add logging when manually changing the hc status 2026-04-26 17:29:20 -07:00
miloschwartz
06af53c4d6 increase refresh rate 2026-04-26 16:57:10 -07:00
miloschwartz
6befdfe01e improve cert restart button style 2026-04-26 16:50:52 -07:00
Owen
5695137280 Dont create alerts with 300 second cooldowns 2026-04-26 16:43:28 -07:00
miloschwartz
e2e0936f43 improve cert status style 2026-04-26 11:27:53 -07:00
miloschwartz
32d8bde96d adjust wildcard placeholder 2026-04-26 11:15:23 -07:00
miloschwartz
f24f867684 add hyphens to random blueprint name 2026-04-26 11:11:31 -07:00
miloschwartz
491636851f Merge branch 'dev' of https://github.com/fosrl/pangolin into dev 2026-04-26 10:23:36 -07:00
Owen
bf1870608b Exclude wildcard resources 2026-04-25 15:51:39 -07:00
miloschwartz
6f6c24b6df use semibold 2026-04-25 15:42:19 -07:00
Owen
7c7d1f641e Support unknown and degraded status 2026-04-25 15:34:04 -07:00
Owen
82212af643 Add resource degraded 2026-04-25 15:34:04 -07:00
miloschwartz
8e16ff07a9 move switch toggle above tabs on health check dialog 2026-04-25 15:23:22 -07:00
miloschwartz
56816c7584 change column order on sites table 2026-04-25 15:17:39 -07:00
miloschwartz
477712b73c show site resources 2026-04-25 15:08:08 -07:00
Fred KISSIE
27b2ec309d 🚧 users selector 2026-04-25 06:18:13 +02:00
Fred KISSIE
91ce8bea4b 🔨 add local mailer for catching emails 2026-04-25 05:59:43 +02:00
Fred KISSIE
2ea9d27237 machine selector 2026-04-25 05:26:41 +02:00
Fred KISSIE
95cbaaae21 new multi select tag input 2026-04-25 04:47:31 +02:00
Fred KISSIE
955aa41f53 revert changes modifying existing tag input 2026-04-25 04:47:17 +02:00
Fred KISSIE
cb3fa028c3 ♻️ create custom autocomplete tag input 2026-04-25 04:10:54 +02:00
Owen
ecacb26445 Merge branch 'dev' of github.com:fosrl/pangolin into dev 2026-04-24 17:32:28 -07:00
Owen
cca7cea2f1 Handeling the different health status 2026-04-24 17:30:54 -07:00
miloschwartz
07154d2a16 add links to view resources on site 2026-04-24 17:07:11 -07:00
miloschwartz
b509c8aeec dont distribute info section cols 2026-04-24 16:57:53 -07:00
miloschwartz
a2c76cbb24 set standard filter popover width 2026-04-24 16:44:57 -07:00
miloschwartz
960ada4d66 add site column and filter to public resources 2026-04-24 16:24:26 -07:00
Owen
34296e5f40 Fix health check status 2026-04-24 16:19:35 -07:00
miloschwartz
33f1662c91 support site filter in private resources table 2026-04-24 16:12:15 -07:00
Owen
29f26021df Add the right pending record 2026-04-24 16:07:44 -07:00
Owen
15f02cf79a Quiet up messages 2026-04-24 16:06:19 -07:00
Owen
2a5d836747 Fix gear icon 2026-04-24 16:06:04 -07:00
Owen
593a7fdd69 Merge branch 'dev' of github.com:fosrl/pangolin into dev 2026-04-24 15:13:25 -07:00
miloschwartz
99f9b68efe fix full sudo mode calculation 2026-04-24 14:53:11 -07:00
miloschwartz
9655f119a5 fix text 2026-04-24 13:47:54 -07:00
Owen
48ddc700a0 Catch the domains the right way 2026-04-24 13:40:31 -07:00
Owen
0473d5f639 Get the cert correctly 2026-04-24 12:18:50 -07:00
Owen
537f9ae66b Always update the domain even if wildcard changes 2026-04-24 12:14:06 -07:00
Owen
d08f276794 Use the provided host in the cookie 2026-04-24 11:55:09 -07:00
Fred KISSIE
c746e1bc8d 🚧 wip 2026-04-24 08:33:43 +02:00
Owen
6a96f743aa Update exchange session to support wildcards 2026-04-23 21:38:12 -07:00
Owen
b4f0b4e285 Handle matching wildcards 2026-04-23 21:25:13 -07:00
Owen
07c7501669 New columns 2026-04-23 20:30:34 -07:00
Owen
009bac64bf Adding guiderails 2026-04-23 18:02:32 -07:00
Owen
5e293e8364 Handle getting resources 2026-04-23 17:14:05 -07:00
Fred KISSIE
da4dd88fdd Merge branch 'dev' into feat/roles-and-user-multi-selectors 2026-04-24 00:40:17 +02:00
Owen
1ba7fca798 Update traefik config 2026-04-23 15:08:55 -07:00
Owen
e7a9a19816 Basic crud working? 2026-04-23 15:01:43 -07:00
Owen
fa117198a0 Pass one at getting it into the db 2026-04-23 14:05:08 -07:00
Owen
f03d0cd47f Merge branch 'dev' of github.com:fosrl/pangolin into dev 2026-04-23 13:37:44 -07:00
Owen Schwartz
925a59c080 Merge pull request #2873 from sidd190/fix/crowdsec-traefik-logrotate
(fix): Added a logrotate function to the crowdsec.go installer file
2026-04-23 12:18:00 -07:00
Owen
a7c7319407 Deprecated sites should be optional 2026-04-23 12:09:22 -07:00
Fred KISSIE
b9bee2836b 🚧 wip 2026-04-23 06:33:57 +02:00
Owen
230f77118a Also check when getting the cert 2026-04-22 21:11:52 -07:00
Owen
bcb5b7b4a7 Show status in messages 2026-04-22 20:44:35 -07:00
Owen
90a2ed2f10 Create pending cert 2026-04-22 20:39:04 -07:00
Owen
fc69364feb Show cert status 2026-04-22 20:36:00 -07:00
Fred KISSIE
53c48e6f04 🌐 update french translations 2026-04-23 05:17:33 +02:00
Fred KISSIE
9db5ff9ff7 ♻️ small refactor 2026-04-23 04:22:18 +02:00
Owen
245755a140 Use transactions 2026-04-22 18:13:15 -07:00
Owen
dcbd22b4ad Handle all of the alerting from the functions 2026-04-22 18:13:15 -07:00
miloschwartz
8481b0a073 dont filter admin role in role selector for alerts 2026-04-22 17:52:31 -07:00
miloschwartz
f651ca84fa remove empty table state lines 2026-04-22 17:43:29 -07:00
miloschwartz
6b83d3c3f1 add meta titles to alert pages 2026-04-22 17:27:30 -07:00
Owen
d463a578c2 Handle *. wildcard domains in the db 2026-04-22 17:06:22 -07:00
Owen
9d0a8ecb09 Update placeholder and handle wildcard certs 2026-04-22 16:48:51 -07:00
Owen
af5394d464 Add more information about caches 2026-04-22 16:48:51 -07:00
miloschwartz
c956e0d401 add meta titles to auth pages 2026-04-22 16:09:16 -07:00
miloschwartz
2a281ec002 update telemetry 2026-04-22 15:06:37 -07:00
miloschwartz
4c000c1d49 add site online indicator to selector 2026-04-22 14:33:28 -07:00
miloschwartz
ea4ff75552 cosmetic adjustments 2026-04-22 14:25:06 -07:00
Owen
c78b866087 Add translations 2026-04-22 14:04:21 -07:00
miloschwartz
48b6e98bbc visual improvements 2026-04-22 12:25:01 -07:00
Owen
3d5260b13e Fix strings and local sites 2026-04-22 12:23:59 -07:00
miloschwartz
d0b0d95b9a fix squished alert card when disabled 2026-04-22 12:16:39 -07:00
miloschwartz
c2c8b7a631 disable overflow on header row for tables 2026-04-22 12:08:57 -07:00
Owen
9bc11b8717 Merge branch 'main' into dev 2026-04-22 11:38:14 -07:00
miloschwartz
1d53211fe0 fix logo size 2026-04-21 23:16:06 -07:00
Owen Schwartz
81922f54d5 Merge pull request #2889 from fosrl/dev
Fix type imports
2026-04-21 22:18:14 -07:00
Owen
9474792e14 Fix type imports 2026-04-21 22:17:49 -07:00
Owen
0c6acfe282 Fix types 2026-04-21 22:11:06 -07:00
Owen Schwartz
0ae20c0b25 Merge pull request #2888 from fosrl/dev
Fix imports
2026-04-21 22:05:41 -07:00
Owen
bcd3bee148 Properly resolve import issues 2026-04-21 22:05:01 -07:00
Owen
e2814517d6 Fix stub wrong function name 2026-04-21 21:54:46 -07:00
Owen Schwartz
c24db3df0e Merge pull request #2887 from fosrl/dev
Fix cert vars issue in stub
2026-04-21 21:49:31 -07:00
Owen
7ecfc9cbd3 Fix cert vars issue in stub 2026-04-21 21:48:54 -07:00
Owen Schwartz
0b18194397 Merge pull request #2885 from fosrl/dev
1.18.0-rc.0
2026-04-21 21:41:23 -07:00
Owen Schwartz
18dfc21197 Merge pull request #2884 from fosrl/crowdin_dev
New Crowdin updates
2026-04-21 21:36:27 -07:00
Owen Schwartz
e178ed12ab New translations en-us.json (Spanish) 2026-04-21 21:35:26 -07:00
Owen Schwartz
7a0b7dc17b New translations en-us.json (Norwegian Bokmal) 2026-04-21 21:35:24 -07:00
Owen Schwartz
c40dd7bb43 New translations en-us.json (Chinese Simplified) 2026-04-21 21:35:22 -07:00
Owen Schwartz
059ea57b88 New translations en-us.json (Turkish) 2026-04-21 21:35:20 -07:00
Owen Schwartz
1ce11d0f5f New translations en-us.json (Russian) 2026-04-21 21:35:18 -07:00
Owen Schwartz
cba1a67b8f New translations en-us.json (Portuguese) 2026-04-21 21:35:16 -07:00
Owen Schwartz
a218f5dc82 New translations en-us.json (Polish) 2026-04-21 21:35:15 -07:00
Owen Schwartz
a83126a67e New translations en-us.json (Dutch) 2026-04-21 21:35:13 -07:00
Owen Schwartz
0620fed9c1 New translations en-us.json (Korean) 2026-04-21 21:35:11 -07:00
Owen Schwartz
87e09dd407 New translations en-us.json (Italian) 2026-04-21 21:35:10 -07:00
Owen Schwartz
77b38c757a New translations en-us.json (German) 2026-04-21 21:35:08 -07:00
Owen Schwartz
5e29572f49 New translations en-us.json (Czech) 2026-04-21 21:35:06 -07:00
Owen Schwartz
520cc0d0bf New translations en-us.json (Bulgarian) 2026-04-21 21:35:04 -07:00
Owen Schwartz
ebb4630472 New translations en-us.json (French) 2026-04-21 21:35:02 -07:00
Owen Schwartz
c7b8e9c5b9 Merge pull request #2792 from fosrl/dependabot/github_actions/actions/setup-go-6.4.0
Bump actions/setup-go from 6.3.0 to 6.4.0
2026-04-21 21:34:26 -07:00
Owen Schwartz
0a65e200b6 Merge pull request #2793 from fosrl/dependabot/github_actions/docker/login-action-4.1.0
Bump docker/login-action from 4.0.0 to 4.1.0
2026-04-21 21:34:19 -07:00
Owen Schwartz
70b87c04aa Merge pull request #2810 from fosrl/dependabot/npm_and_yarn/drizzle-orm-0.45.2
Bump drizzle-orm from 0.45.1 to 0.45.2
2026-04-21 21:33:43 -07:00
Owen Schwartz
1a8e9072b4 Merge pull request #2814 from fosrl/dependabot/npm_and_yarn/nodemailer-8.0.5
Bump nodemailer from 8.0.4 to 8.0.5
2026-04-21 21:33:17 -07:00
Owen Schwartz
55261c43f8 Merge pull request #2820 from fosrl/dependabot/go_modules/install/minor-updates-f42dbfae3f
Bump golang.org/x/term from 0.41.0 to 0.42.0 in /install in the minor-updates group across 1 directory
2026-04-21 21:33:04 -07:00
Owen Schwartz
e02545ada7 Merge pull request #2822 from fosrl/dependabot/npm_and_yarn/lodash-4.18.1
Bump lodash from 4.17.23 to 4.18.1
2026-04-21 21:32:52 -07:00
Owen Schwartz
4edeb26e32 Merge pull request #2838 from fosrl/dependabot/npm_and_yarn/axios-1.15.0
Bump axios from 1.13.5 to 1.15.0
2026-04-21 21:32:05 -07:00
Owen Schwartz
6f007da609 Merge pull request #2844 from fosrl/dependabot/github_actions/actions/upload-artifact-7.0.1
Bump actions/upload-artifact from 7.0.0 to 7.0.1
2026-04-21 21:31:28 -07:00
Owen Schwartz
c3e59b73b9 Merge pull request #2855 from fosrl/dependabot/npm_and_yarn/next-15.5.15
Bump next from 15.5.14 to 15.5.15
2026-04-21 21:31:14 -07:00
miloschwartz
cc44b46d91 fix url parse error 2026-04-21 21:30:38 -07:00
Owen Schwartz
dfe4888123 Merge pull request #2863 from fosrl/dependabot/npm_and_yarn/follow-redirects-1.16.0
Bump follow-redirects from 1.15.11 to 1.16.0
2026-04-21 21:29:59 -07:00
Owen
45fb24d0c8 Remove hardcoding 2026-04-21 21:20:47 -07:00
Owen
3f1c5d305b Merge branch 'dev' of github.com:fosrl/pangolin into dev 2026-04-21 21:20:24 -07:00
Owen
c9caa44c06 Making the alerts work 2026-04-21 21:13:31 -07:00
miloschwartz
19e0452d84 remove arrow icon on server admin 2026-04-21 20:54:57 -07:00
miloschwartz
7f5c164e16 change logging 2026-04-21 20:51:59 -07:00
miloschwartz
4df3613df7 add table empty state 2026-04-21 20:40:56 -07:00
miloschwartz
4f9f235398 add way to reject a pending site 2026-04-21 20:29:05 -07:00
miloschwartz
a7c212ffa4 badge fixes 2026-04-21 20:20:33 -07:00
miloschwartz
320543f7f8 change titles 2026-04-21 19:37:38 -07:00
miloschwartz
88eb1649e4 add server filters to health check table 2026-04-21 18:35:38 -07:00
miloschwartz
6f07156075 adjust email template for alerts 2026-04-21 18:19:38 -07:00
Owen
b3aafa5fe6 Handle toggles 2026-04-21 18:05:17 -07:00
miloschwartz
f71355fe7a remove domain picker modal 2026-04-21 17:48:45 -07:00
Owen
6ea3f69fea Fix cache 2026-04-21 17:40:39 -07:00
miloschwartz
95fc30f21d Merge branch 'dev' of https://github.com/fosrl/pangolin into dev 2026-04-21 17:39:24 -07:00
miloschwartz
a2d8386b4a fix uptime graph styles 2026-04-21 17:39:16 -07:00
Owen
73a59bc1de Fix missing arg 2026-04-21 17:23:36 -07:00
miloschwartz
0434b1a656 fix site and resource filters on alert 2026-04-21 17:22:50 -07:00
Owen
13afa90d28 Fix the linking out and deleting for target ones 2026-04-21 17:02:21 -07:00
Owen
90eb6d66c0 Merge branch 'dev' of github.com:fosrl/pangolin into dev 2026-04-21 16:55:42 -07:00
miloschwartz
22a6dabeb2 fix alerting layout 2026-04-21 16:54:28 -07:00
Owen
84346fc23e Add missing header 2026-04-21 16:52:45 -07:00
Owen
09744cf2f0 Make paid feature 2026-04-21 16:52:45 -07:00
Owen
38f1387db1 Update package lock 2026-04-21 16:52:44 -07:00
miloschwartz
db2942447a make alerts and health checks table server side 2026-04-21 16:49:54 -07:00
Owen
b22ac17178 Remove self call 2026-04-21 16:45:55 -07:00
miloschwartz
709f2c187d remove loading state on the alert rule 2026-04-21 16:27:27 -07:00
miloschwartz
ccfa165632 show all sites|resources|health-checks in alert table 2026-04-21 16:23:08 -07:00
miloschwartz
a68ba9e04d Merge branch 'dev' of https://github.com/fosrl/pangolin into dev 2026-04-21 16:23:03 -07:00
Owen
23293da845 Fix the insert 2026-04-21 16:19:48 -07:00
miloschwartz
b5dd20e499 fix cant save form 2026-04-21 16:19:32 -07:00
Owen
38243ad887 Create the new networks for each site resource 2026-04-21 16:13:39 -07:00
Owen
5b18612426 Only works on saas 2026-04-21 16:13:39 -07:00
miloschwartz
8dbe0a4bfe add server side filter and sort to alerts 2026-04-21 15:57:23 -07:00
Owen
7d9a0cd0cc Add 1.18 migrations 2026-04-21 15:46:27 -07:00
miloschwartz
e1efae7426 add help banners to alerts 2026-04-21 15:35:55 -07:00
miloschwartz
f9a4e25dc9 more cosmetic changes to alert rules 2026-04-21 15:30:49 -07:00
Owen
85029ff518 Merge branch 'trial' into dev 2026-04-21 15:05:23 -07:00
Owen
adf15bdc87 Merge branch 'alerting-rules' into dev 2026-04-21 15:05:12 -07:00
miloschwartz
a20111043f Merge branch 'alerting-rules' of https://github.com/fosrl/pangolin into alerting-rules 2026-04-21 15:03:10 -07:00
miloschwartz
177ce20dda remove graph 2026-04-21 15:02:56 -07:00
Owen
1a0bde2ee9 Merge branch 'alerting-rules' into trial 2026-04-21 14:57:25 -07:00
Owen
ff1ca7eafb Just use the targetHealthCheckId as the id 2026-04-21 14:56:25 -07:00
Owen
dc299a740b Add the site to the ui and allow picking 2026-04-21 14:34:28 -07:00
Owen
7b3c10c7b0 Handle crud to newt with new hcs 2026-04-21 14:21:58 -07:00
Owen
b1293e6f56 Add siteId to api 2026-04-21 14:12:05 -07:00
Owen
6969671fc4 Log status inside of the trigger api calls 2026-04-21 14:04:38 -07:00
Owen
e765f661a7 Fix errors 2026-04-21 12:17:24 -07:00
Owen
7da3719a00 Add descriptions and adjust ui 2026-04-21 12:09:19 -07:00
Owen
206b3a7d22 Adding external actions 2026-04-21 11:52:15 -07:00
Owen
4ce4e63a0a Accept nice id when creating 2026-04-21 09:57:22 -07:00
Owen
ed327626bb Working on newt compat 2026-04-21 09:47:20 -07:00
Milo Schwartz
30c4010c8b Merge pull request #2696 from Fredkiss3/feat/paginate-user-roles-table
feat: paginate users & roles table
2026-04-20 22:06:01 -07:00
miloschwartz
85f7c1e87b support server side table for admin users table 2026-04-20 22:05:29 -07:00
miloschwartz
6f06f98cc1 add filter by idp and role in users table 2026-04-20 21:51:53 -07:00
miloschwartz
e3aabc6b2d Merge branch 'dev' into feat/paginate-user-roles-table 2026-04-20 21:27:51 -07:00
Owen
b59262b7af Merge branch 'dev' into alerting-rules 2026-04-20 21:21:03 -07:00
Owen
8093904d47 Adjust ui 2026-04-20 21:20:45 -07:00
miloschwartz
66c0ed5bf0 slightly improve add user form 2026-04-20 21:15:55 -07:00
Owen
725603101b Support the all types in the schema and engine 2026-04-20 21:00:28 -07:00
miloschwartz
7f0264dec3 fix collapsed sidebar bottom padding issue 2026-04-20 20:48:50 -07:00
Owen
5e88862e29 Support all resources,sites,health checks 2026-04-20 20:48:14 -07:00
miloschwartz
b3bc70875b fix count on list domains endpoint 2026-04-20 20:46:38 -07:00
miloschwartz
34dc4c2d07 remove tcp/udp text to reduce cloud confusion 2026-04-20 20:41:38 -07:00
miloschwartz
2ef7a709d3 use new tabs in devices modal 2026-04-20 20:36:15 -07:00
Owen
d7a9e1a517 Polish the create and link to table 2026-04-20 20:14:25 -07:00
Owen
f938e9c3c0 Paginate the tables with queries 2026-04-20 20:05:59 -07:00
Owen
c8d560d78f Reorder sidebar 2026-04-20 18:25:04 -07:00
Owen
3641969dd4 Remove bruno 2026-04-20 18:23:43 -07:00
Owen
49b3163bbe Making form and lang better 2026-04-20 18:14:30 -07:00
Owen
1a36475afa Add inline creation 2026-04-20 18:02:14 -07:00
miloschwartz
335de04a4e adjust theme 2026-04-20 18:00:22 -07:00
Owen
f38069623b Add resource 2026-04-20 17:48:44 -07:00
Owen
0a70896080 Add toggle types 2026-04-20 17:37:01 -07:00
Owen
5a09062070 roleIds are numbers 2026-04-20 17:19:44 -07:00
miloschwartz
47be3dbdf9 hide add idp button when no mode set 2026-04-20 17:06:56 -07:00
Owen
9f5f89c9eb Remove debug log 2026-04-20 17:05:47 -07:00
Owen
2e8d170114 Hide protocol by default 2026-04-20 17:05:12 -07:00
Owen
bf1787acd5 Merge branch 'dev' into alerting-rules 2026-04-20 16:54:20 -07:00
miloschwartz
78ff835ac9 Merge branch 'dev' of https://github.com/fosrl/pangolin into dev 2026-04-20 16:50:00 -07:00
miloschwartz
3c005c9ab1 rename log tabls for clarity and update font 2026-04-20 16:49:45 -07:00
Owen
54adcd2c56 Show the endpoint if its there 2026-04-20 15:08:48 -07:00
Owen
9a6408d28c Refresh domains for latest status 2026-04-20 14:57:24 -07:00
Owen
2dad97cb6b Add ability to predefine a root api key 2026-04-20 12:19:21 -07:00
Siddharth Bansal
473bce856d Pass installdir as a parameter 2026-04-20 21:36:42 +05:30
dependabot[bot]
86ec8eedac Bump golang.org/x/term in /install in the minor-updates group
Bumps the minor-updates group in /install with 1 update: [golang.org/x/term](https://github.com/golang/term).


Updates `golang.org/x/term` from 0.41.0 to 0.42.0
- [Commits](https://github.com/golang/term/compare/v0.41.0...v0.42.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-20 01:36:49 +00:00
Owen Schwartz
0ac97ecd5e Merge pull request #2877 from fosrl/dev
Fix import
2026-04-19 11:33:08 -07:00
Owen
387049beac Dynamic -> private import 2026-04-19 11:31:48 -07:00
Owen Schwartz
c9240ecb84 Merge pull request #2876 from fosrl/dev
Update translations
2026-04-19 11:27:17 -07:00
Owen Schwartz
b87e71c557 Merge pull request #2875 from fosrl/crowdin_dev
New Crowdin updates
2026-04-19 11:26:34 -07:00
Owen Schwartz
866293aa5a New translations en-us.json (Spanish) 2026-04-19 11:25:02 -07:00
Owen Schwartz
e142dd32b4 New translations en-us.json (Norwegian Bokmal) 2026-04-19 11:25:00 -07:00
Owen Schwartz
949786dab5 New translations en-us.json (Chinese Simplified) 2026-04-19 11:24:59 -07:00
Owen Schwartz
2dd142b0e9 New translations en-us.json (Turkish) 2026-04-19 11:24:57 -07:00
Owen Schwartz
dfd16a6752 New translations en-us.json (Russian) 2026-04-19 11:24:55 -07:00
Owen Schwartz
f4454d4d48 New translations en-us.json (Portuguese) 2026-04-19 11:24:54 -07:00
Owen Schwartz
e7efc917f0 New translations en-us.json (Polish) 2026-04-19 11:24:52 -07:00
Owen Schwartz
5ffe1ba07d New translations en-us.json (Dutch) 2026-04-19 11:24:51 -07:00
Owen Schwartz
b56e2972c4 New translations en-us.json (Korean) 2026-04-19 11:24:49 -07:00
Owen Schwartz
ca1a084397 New translations en-us.json (Italian) 2026-04-19 11:24:47 -07:00
Owen Schwartz
a7a1f81e9d New translations en-us.json (German) 2026-04-19 11:24:46 -07:00
Owen Schwartz
9c09f17dc5 New translations en-us.json (Czech) 2026-04-19 11:24:44 -07:00
Owen Schwartz
21e2c022c7 New translations en-us.json (Bulgarian) 2026-04-19 11:24:42 -07:00
Owen Schwartz
222cbc886d New translations en-us.json (French) 2026-04-19 11:24:41 -07:00
miloschwartz
db2e76bd31 Merge branch 'dev' of https://github.com/fosrl/pangolin into dev 2026-04-19 11:22:46 -07:00
Owen Schwartz
bf32cc150d Merge pull request #2874 from fosrl/dev
1.17.1-s.5
2026-04-19 11:21:41 -07:00
miloschwartz
967de0b79f fix metadata for public resources 2026-04-19 11:19:23 -07:00
Owen
22231e6c45 Dont show home 2026-04-19 11:18:43 -07:00
Siddharth Bansal
2c8b7b5ca5 (fix): Added a logrotate function to the crowdsec.go installer file 2026-04-19 12:33:59 +05:30
Owen
55989c2019 Add trial system 2026-04-18 13:40:50 -07:00
miloschwartz
20ed9966b9 add better page metadata titles 2026-04-18 12:05:54 -07:00
Owen
b2d5a1ffdf Remove weird extra status history component 2026-04-17 17:45:49 -07:00
Owen
a5b8a44e78 Add the status to the resources and ajust location 2026-04-17 17:40:00 -07:00
miloschwartz
dddf060e1a Merge branch 'cross-org-idp' into dev 2026-04-17 17:27:34 -07:00
Owen
df8104fe56 Write the resource status as well 2026-04-17 17:25:51 -07:00
miloschwartz
a569054e94 dont set org mapping by default 2026-04-17 17:25:21 -07:00
Owen
8214700eaa More refreshing and status history displays 2026-04-17 17:18:15 -07:00
miloschwartz
5885e8eb39 dont allow import idp if not paid 2026-04-17 17:14:21 -07:00
Owen
74165aa1cc Cleaning up ui 2026-04-17 17:01:55 -07:00
Owen
0872fd5818 Make the healch checks tabs 2026-04-17 15:38:38 -07:00
Owen
008ad0a1de Showing the paid feature 2026-04-17 15:33:26 -07:00
Owen
f74791111e Paywalling 2026-04-17 15:14:01 -07:00
miloschwartz
22964cff0f fix sidebar footer on member page 2026-04-17 14:42:10 -07:00
miloschwartz
e952c2d34a fix styles on enterprise edition banners 2026-04-17 14:36:10 -07:00
Owen
408eaf55f6 Merge branch 'dev' into alerting-rules 2026-04-17 14:29:36 -07:00
Owen
0a043af482 Delete update usage on orgs when user deletes
Fixes #2839
2026-04-17 14:28:43 -07:00
miloschwartz
8324445895 add auto provsion section back to create global idp 2026-04-17 10:59:24 -07:00
miloschwartz
796d14a9e4 support org mapping on org idp 2026-04-16 22:12:15 -07:00
Owen
bd89867ecb Fix form not updating correctly 2026-04-16 21:42:48 -07:00
Owen
3645cc5759 Update websocket to be consistant with streaming 2026-04-16 21:27:06 -07:00
miloschwartz
707cc4b275 move idp mode check to a middleware 2026-04-16 21:00:48 -07:00
miloschwartz
93400ace27 import and unassocaite org idp 2026-04-16 20:58:18 -07:00
Owen
f932cc7aca Fix status history and show on the health check 2026-04-16 20:55:21 -07:00
Owen
c1782a2650 Add uptime tracking 2026-04-16 18:25:25 -07:00
Owen
d6c15c8b81 Add resource column to hc and remove — 2026-04-16 17:42:30 -07:00
Owen
b958537f3e Adjust the form 2026-04-16 17:05:25 -07:00
Owen
597cae2b78 Poll for status to show updates 2026-04-16 16:53:18 -07:00
Owen
c4308aaa69 Working on ui 2026-04-16 16:30:28 -07:00
miloschwartz
6fb8dae966 adjust sidebar 2026-04-16 16:26:13 -07:00
Owen
a9d68bd0cf Standardize the healch check form between the two 2026-04-16 16:20:30 -07:00
Owen
5fcb80a193 Merge branch 'dev' into alerting-rules 2026-04-16 15:53:43 -07:00
Owen
a27a169160 Keep the cert around for a couple of cycles 2026-04-16 15:51:47 -07:00
Owen
f0a1de3474 Show picker only when have remote node 2026-04-16 15:33:29 -07:00
Owen Schwartz
79c6fcac95 Merge pull request #2864 from fosrl/dev
1.17.1-s.4
2026-04-16 15:07:29 -07:00
Owen
50697e32c2 Simplify create site 2026-04-16 15:06:30 -07:00
Owen
6fe74a9f8d Allow clearing the instance name on the licenses 2026-04-16 14:44:16 -07:00
Owen
a246de2b1f Allow create portal session for enterprise too 2026-04-16 14:44:16 -07:00
miloschwartz
5ac8e4e098 remove redundant pangolin text in footer in saas 2026-04-16 12:05:17 -07:00
Owen
57579e635c Working on alerting 2026-04-16 11:49:48 -07:00
Owen
1a1d1cfb83 Not null removed 2026-04-15 20:40:23 -07:00
Owen
1397e61643 Create hcs freely 2026-04-15 20:32:02 -07:00
Owen
a04e2a5e00 Transititioning the hc table and firing the alerts 2026-04-15 17:46:04 -07:00
Owen
b169a872a7 Fix header 2026-04-15 16:40:15 -07:00
Owen
1d4b2b1da1 seperate out the offline checker logic 2026-04-15 16:40:04 -07:00
Owen
ad15b7c3c6 Add new intervals and tcp mode to health checks 2026-04-15 16:31:15 -07:00
Owen
b070570cb6 Sites and health checks are many to one 2026-04-15 15:57:25 -07:00
Owen
55595ec042 Trying to use more consistant components 2026-04-15 15:51:41 -07:00
Owen
5e505224d0 Basic ui is working 2026-04-15 15:26:27 -07:00
Owen
3c6775992d Merge branch 'private-http-ha' into alerting-rules 2026-04-15 14:59:50 -07:00
Owen
bf64e226d3 Many to one on sites and health checks 2026-04-15 14:58:33 -07:00
Owen
f379986a59 Allow many to one on the receipients on the rules 2026-04-15 14:48:50 -07:00
Owen
22ead84aa7 Update license year 2026-04-15 14:42:48 -07:00
Owen
570ff75164 Merge branch 'dev' into alerting-rules 2026-04-15 14:41:29 -07:00
Owen
aa95e5bb86 Update year 2026-04-15 14:41:13 -07:00
Owen
87a554b6ef Add crud 2026-04-15 14:33:55 -07:00
Owen
cf741a6f87 Add stub 2026-04-15 14:26:34 -07:00
dependabot[bot]
06e7c1d6cb Bump follow-redirects from 1.15.11 to 1.16.0
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.11 to 1.16.0.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.11...v1.16.0)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-version: 1.16.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-15 19:35:30 +00:00
Owen
7d50703c26 First pass 2026-04-14 21:58:36 -07:00
Owen
33182bcf85 Add init alert schema 2026-04-14 21:43:16 -07:00
Owen
fb29efeff3 Merge branch 'dev' into alerting-rules 2026-04-14 21:10:10 -07:00
Owen Schwartz
7d13ed79b2 Merge pull request #2862 from fosrl/dev
1.17.3
2026-04-14 20:33:04 -07:00
Owen Schwartz
c1f65c802c Merge pull request #2861 from fosrl/crowdin_dev
New Crowdin updates
2026-04-14 20:32:03 -07:00
Owen Schwartz
bcc429221e New translations en-us.json (Spanish) 2026-04-14 20:30:58 -07:00
Owen Schwartz
bd73609b9e New translations en-us.json (Norwegian Bokmal) 2026-04-14 20:30:56 -07:00
Owen Schwartz
2dbb21a7f2 New translations en-us.json (Chinese Simplified) 2026-04-14 20:30:55 -07:00
Owen Schwartz
fe68533ff2 New translations en-us.json (Turkish) 2026-04-14 20:30:53 -07:00
Owen Schwartz
01a40daf38 New translations en-us.json (Russian) 2026-04-14 20:30:51 -07:00
Owen Schwartz
097744275f New translations en-us.json (Portuguese) 2026-04-14 20:30:49 -07:00
Owen Schwartz
e481a4d847 New translations en-us.json (Polish) 2026-04-14 20:30:48 -07:00
Owen Schwartz
95c6bb4de6 New translations en-us.json (Dutch) 2026-04-14 20:30:46 -07:00
Owen Schwartz
18e194e152 New translations en-us.json (Korean) 2026-04-14 20:30:44 -07:00
Owen Schwartz
b2f391307b New translations en-us.json (Italian) 2026-04-14 20:30:43 -07:00
Owen Schwartz
a4da3c7ba2 New translations en-us.json (German) 2026-04-14 20:30:41 -07:00
Owen Schwartz
af3abef3bf New translations en-us.json (Czech) 2026-04-14 20:30:39 -07:00
Owen Schwartz
f7633a43ce New translations en-us.json (Bulgarian) 2026-04-14 20:30:38 -07:00
Owen Schwartz
ffd345f044 New translations en-us.json (French) 2026-04-14 20:30:36 -07:00
Owen
ae36d3228f Remove journal 2026-04-14 20:23:56 -07:00
Owen
1c78a6b483 Adjust self serve 2026-04-14 20:21:34 -07:00
Owen Schwartz
b6c6590aad New translations en-us.json (Norwegian Bokmal) 2026-04-14 19:48:12 -07:00
Owen Schwartz
5a792e9913 New translations en-us.json (Chinese Simplified) 2026-04-14 19:48:11 -07:00
Owen Schwartz
a2f822889d New translations en-us.json (Turkish) 2026-04-14 19:48:09 -07:00
Owen Schwartz
83ba463a34 New translations en-us.json (Russian) 2026-04-14 19:48:07 -07:00
Owen Schwartz
a909c5cbe0 New translations en-us.json (Portuguese) 2026-04-14 19:48:06 -07:00
Owen Schwartz
d615f34f94 New translations en-us.json (Polish) 2026-04-14 19:48:04 -07:00
Owen Schwartz
37378895cf New translations en-us.json (Dutch) 2026-04-14 19:48:02 -07:00
Owen Schwartz
19ef055296 New translations en-us.json (Korean) 2026-04-14 19:48:00 -07:00
Owen Schwartz
599fa5eb30 New translations en-us.json (Italian) 2026-04-14 19:47:59 -07:00
Owen Schwartz
4d82b37cab New translations en-us.json (German) 2026-04-14 19:47:57 -07:00
Owen Schwartz
77d01d50db New translations en-us.json (Czech) 2026-04-14 19:47:55 -07:00
Owen Schwartz
013c1ab92c New translations en-us.json (Bulgarian) 2026-04-14 19:47:53 -07:00
Owen Schwartz
d4fc60f2f4 New translations en-us.json (Spanish) 2026-04-14 19:47:52 -07:00
Owen Schwartz
cd25cde47f New translations en-us.json (French) 2026-04-14 19:47:50 -07:00
Owen
af709331fb Add missing DnsRecords type 2026-04-14 19:46:25 -07:00
Owen
e20a21bacd Contact support 2026-04-14 19:46:19 -07:00
Owen
49ae5eecb6 Filter only approved sites 2026-04-13 21:56:35 -07:00
Owen
74b3b283f7 Fix #2848 2026-04-13 21:30:19 -07:00
Owen Schwartz
9fe4f78269 Merge pull request #2857 from fosrl/dev
Proxy targets returns an array
2026-04-13 20:57:15 -07:00
Owen
646e440dec Merge branch 'dev' into private-http-ha 2026-04-13 20:52:47 -07:00
Owen
03d95874e6 Proxy targets returns an array 2026-04-13 20:44:35 -07:00
Milo Schwartz
bd3d6994c1 Merge pull request #2856 from fosrl/update-readme
fix image
2026-04-13 20:29:36 -07:00
miloschwartz
5fd78817a8 fix image 2026-04-13 20:28:05 -07:00
Owen
1b9a395432 Add logging for debugging 2026-04-13 17:56:55 -07:00
Owen
3996e14e70 Add comment 2026-04-13 17:56:51 -07:00
Owen
7a40084bf4 Rename for better understanding 2026-04-13 17:21:34 -07:00
Owen
30fd48a14a HA site crud working 2026-04-13 17:17:28 -07:00
dependabot[bot]
1c95d46eaa Bump next from 15.5.14 to 15.5.15
Bumps [next](https://github.com/vercel/next.js) from 15.5.14 to 15.5.15.
- [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.5.14...v15.5.15)

---
updated-dependencies:
- dependency-name: next
  dependency-version: 15.5.15
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-14 00:05:43 +00:00
Owen Schwartz
72bc125f84 Merge pull request #2854 from fosrl/dev
Rename script
2026-04-13 16:23:39 -07:00
Owen
5d51af4330 Rename script 2026-04-13 16:22:53 -07:00
Owen
173a81ead8 Fixing up the crud for multiple sites 2026-04-13 16:22:22 -07:00
Owen
676eacc9cf Invert logic for pangolin dns 2026-04-13 16:06:23 -07:00
Owen Schwartz
b18ea66def Merge pull request #2853 from fosrl/dev
1.17.1-s.1
2026-04-13 12:28:08 -07:00
Owen
93998f9fd5 Fix ts issue 2026-04-13 12:27:29 -07:00
Owen
c554e69514 Fill the width 2026-04-13 12:11:15 -07:00
Owen
a6e10e55cc Handle grandfather on the front end 2026-04-13 12:08:30 -07:00
Owen Schwartz
41f541a531 Merge pull request #2852 from fosrl/dev
1.17.1-s.0
2026-04-13 11:36:36 -07:00
Owen
9cb1043545 Push back date 2026-04-13 11:33:51 -07:00
Owen Schwartz
96e33d33b0 Merge pull request #2851 from fosrl/crowdin_dev
New Crowdin updates
2026-04-13 11:25:53 -07:00
Owen Schwartz
ccc7003ac1 New translations en-us.json (Spanish) 2026-04-13 11:24:32 -07:00
Owen Schwartz
93cbd47b5d New translations en-us.json (Norwegian Bokmal) 2026-04-13 11:24:30 -07:00
Owen Schwartz
8b808e44b6 New translations en-us.json (Chinese Simplified) 2026-04-13 11:24:28 -07:00
Owen Schwartz
0644e26297 New translations en-us.json (Turkish) 2026-04-13 11:24:27 -07:00
Owen Schwartz
682653b977 New translations en-us.json (Russian) 2026-04-13 11:24:25 -07:00
Owen Schwartz
0053cfc8fc New translations en-us.json (Portuguese) 2026-04-13 11:24:23 -07:00
Owen Schwartz
5cb62a30cc New translations en-us.json (Polish) 2026-04-13 11:24:21 -07:00
Owen Schwartz
e596a63058 New translations en-us.json (Dutch) 2026-04-13 11:24:19 -07:00
Owen Schwartz
3ec32afb37 New translations en-us.json (Korean) 2026-04-13 11:24:17 -07:00
Owen Schwartz
0189a86757 New translations en-us.json (Italian) 2026-04-13 11:24:15 -07:00
Owen Schwartz
ee32307654 New translations en-us.json (German) 2026-04-13 11:24:14 -07:00
Owen Schwartz
2f08e6b838 New translations en-us.json (Czech) 2026-04-13 11:24:12 -07:00
Owen Schwartz
c8a3fc350d New translations en-us.json (Bulgarian) 2026-04-13 11:24:10 -07:00
Owen Schwartz
dc63ef1284 New translations en-us.json (French) 2026-04-13 11:24:07 -07:00
Owen
92332fb02f Hide the home unless you have it 2026-04-13 11:17:14 -07:00
miloschwartz
acc6a26654 update readme 2026-04-13 11:12:09 -07:00
Owen
2bd4d2faaf Merge branch 'main' into dev 2026-04-13 10:50:12 -07:00
Owen
1e77ead488 Adjust functioning of ee button 2026-04-13 10:49:57 -07:00
Owen
561a9ab379 Merge branch 'private-site-ha' into private-http-ha 2026-04-13 10:25:49 -07:00
Milo Schwartz
c008ef7c1b Merge pull request #2850 from fosrl/miloschwartz-patch-1
Update README.md
2026-04-13 10:04:55 -07:00
Milo Schwartz
02dfeed3ce Update README.md 2026-04-13 13:03:53 -04:00
Owen Schwartz
34cc2e0ed1 Merge pull request #2841 from AdnanSilajdzic/fix/worldmap-typescript-followup
fix(worldmap): correct topojson feature typing
2026-04-13 09:42:05 -07:00
dependabot[bot]
7a483ab1e2 Bump actions/upload-artifact from 7.0.0 to 7.0.1
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 7.0.0 to 7.0.1.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](bbbca2ddaa...043fb46d1a)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: 7.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-13 01:35:57 +00:00
Owen
71497a7887 Merge branch 'dev' into private-site-ha 2026-04-12 17:54:07 -07:00
Owen
aa41a63430 Dont run the acme in saas or when we control dns 2026-04-12 17:50:27 -07:00
Owen
0db55daff6 Merge branch 'private-http' of github.com:fosrl/pangolin into private-http 2026-04-12 17:47:59 -07:00
Owen
9b271950d2 Push down certs when they are detected 2026-04-12 17:31:51 -07:00
Owen
89b6b1fb56 Placeholder screen and certs are working 2026-04-12 16:49:49 -07:00
miloschwartz
f5d0694574 change user devices column name from online to connected 2026-04-12 15:27:14 -07:00
miloschwartz
f91da2ec46 fix no default idp selector showing on ce closes #2813 2026-04-12 15:20:09 -07:00
miloschwartz
89471a0174 include site name in target dropdown in public resources table 2026-04-12 15:09:40 -07:00
Owen
789b991c56 Logging and http working 2026-04-12 15:08:17 -07:00
miloschwartz
0cbcc0c29c remove extra sites query 2026-04-12 14:58:55 -07:00
miloschwartz
b5e239d1ad adjust button size 2026-04-12 12:24:52 -07:00
miloschwartz
5f79e8ebbd Merge branch 'private-http' of https://github.com/fosrl/pangolin into private-http 2026-04-12 12:17:57 -07:00
miloschwartz
1564c4bee7 add multi site selector for ha on private resources 2026-04-12 12:17:45 -07:00
Owen
0cf385b718 CRUD and newt mode http mostly working 2026-04-12 12:15:29 -07:00
Mustafa
8e1905a695 Exclude local/private/CGNAT IPs from COUNTRY=ALL and ASN=ALL/AS0 geo-blocking rules 2026-04-12 20:19:32 +02:00
Adnan Silajdzic
0cb04d0290 fix(worldmap): correct topojson feature typing 2026-04-12 17:05:53 +00:00
dependabot[bot]
63a38de059 Bump axios from 1.13.5 to 1.15.0
Bumps [axios](https://github.com/axios/axios) from 1.13.5 to 1.15.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.13.5...v1.15.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.15.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-12 10:39:44 +00:00
Owen
83ecf53776 Add logging 2026-04-11 21:56:39 -07:00
Owen
5803da4893 Crud working 2026-04-11 21:09:12 -07:00
miloschwartz
e118e5b047 add list alises endpoint 2026-04-11 21:03:35 -07:00
miloschwartz
7e4e8ea266 add niceId to list user resources 2026-04-11 17:56:16 -07:00
Owen
fc4633db91 Add domain component to the site resource 2026-04-11 17:19:18 -07:00
Owen
2f386f8e47 Grandfather in old users 2026-04-11 16:59:43 -07:00
Owen
f4ea572f6b Fix #2828 2026-04-11 16:50:28 -07:00
Owen Schwartz
825df7da63 Merge pull request #2806 from jbelke/fix-invite-email-encoding
Fix invite email encoding
2026-04-11 16:37:49 -07:00
Owen Schwartz
cd34f0a7b0 Merge pull request #2799 from LaurenceJJones/fix/proxy-target-deletion
fix: use targetId as row identifier
2026-04-11 16:35:09 -07:00
Owen Schwartz
b1b22c439a Merge pull request #2825 from AdnanSilajdzic/fix/worldmap-hover-stuck-public
fix(analytics): prevent countries from getting stuck highlighted on world map
2026-04-11 16:32:32 -07:00
Owen
eac747849b Restrict namespaces to paid plans due to abuse 2026-04-11 14:22:00 -07:00
Owen
9e50569c31 Merge branch 'private-http' of github.com:fosrl/pangolin into private-http 2026-04-10 17:23:06 -04:00
Owen
a19f0acfb9 Working 2026-04-10 17:21:54 -04:00
Adnan Silajdzic
1aedf9da0a fix(worldmap): avoid stuck country hover state 2026-04-10 14:37:48 +00:00
dependabot[bot]
4430042419 Bump lodash from 4.17.23 to 4.18.1
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.23 to 4.18.1.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.23...4.18.1)

---
updated-dependencies:
- dependency-name: lodash
  dependency-version: 4.18.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-10 03:58:55 +00:00
miloschwartz
8a47d69d0d fix domain picker 2026-04-09 22:48:43 -04:00
miloschwartz
73482c2a05 disable ssh access tab on http mode 2026-04-09 22:38:04 -04:00
miloschwartz
79751c208d basic ui working 2026-04-09 22:24:39 -04:00
Owen
510931e7d6 Add ssl to schema 2026-04-09 21:02:20 -04:00
Owen
584a8e7d1d Generate certs and add placeholder screen 2026-04-09 20:53:03 -04:00
miloschwartz
a74378e1d3 show domain and destination with port in table 2026-04-09 18:17:08 -04:00
miloschwartz
840684aeba dont show wildcard in domain picker 2026-04-09 17:54:25 -04:00
Owen
c027c8958b Add scheme 2026-04-09 17:54:17 -04:00
miloschwartz
a730f4da1d dont show wildcard in domain picker 2026-04-09 17:54:08 -04:00
miloschwartz
d73796b92e add new modes, port input, and domain picker 2026-04-09 17:49:22 -04:00
Owen
96b9123306 Merge branch 'dev' into private-site-ha 2026-04-09 17:39:45 -04:00
Owen
e4cbf088b4 Working on defining the schema to send down 2026-04-09 17:23:24 -04:00
Owen
333ccb8438 Restrict to make sure there is an alias 2026-04-09 17:10:48 -04:00
miloschwartz
f57012eb90 dont show international domain warning when capital letter present 2026-04-09 17:06:04 -04:00
miloschwartz
34387d9859 simplify wildcard domain on non pangolin-dns 2026-04-09 17:04:28 -04:00
Owen
eb771ceda4 Add http to mode and put destinationPort back 2026-04-09 17:02:08 -04:00
miloschwartz
80f5914fdd add pluto 2026-04-09 16:15:19 -04:00
miloschwartz
eaa70da4dd add pluto 2026-04-09 16:14:46 -04:00
Owen
1efd2af44b Sync acme certs into the database 2026-04-09 15:38:36 -04:00
Owen
466f137590 Fix migration by testing for orphans 2026-04-09 10:29:51 -04:00
dependabot[bot]
efc1f67017 Bump nodemailer from 8.0.4 to 8.0.5
Bumps [nodemailer](https://github.com/nodemailer/nodemailer) from 8.0.4 to 8.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/v8.0.4...v8.0.5)

---
updated-dependencies:
- dependency-name: nodemailer
  dependency-version: 8.0.5
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-09 00:15:55 +00:00
dependabot[bot]
3dc819eb31 Bump drizzle-orm from 0.45.1 to 0.45.2
Bumps [drizzle-orm](https://github.com/drizzle-team/drizzle-orm) from 0.45.1 to 0.45.2.
- [Release notes](https://github.com/drizzle-team/drizzle-orm/releases)
- [Commits](https://github.com/drizzle-team/drizzle-orm/compare/0.45.1...0.45.2)

---
updated-dependencies:
- dependency-name: drizzle-orm
  dependency-version: 0.45.2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-08 06:57:05 +00:00
Joshua Belke
028df8bf27 fix: remove encodeURIComponent from invite link email parameter
The @ symbol in email addresses was being encoded as %40 when
constructing invite URLs, causing broken or garbled links when
copied/shared by users.

- Remove encodeURIComponent(email) from server-side invite link
  construction in inviteUser.ts (both new invite and regenerate paths)
- Remove encodeURIComponent(email) from client-side redirect URLs in
  InviteStatusCard.tsx (login, signup, and useEffect redirect paths)
- Valid Zod-validated email addresses do not contain characters that
  require URL encoding for safe query parameter use (@ is permitted
  in query strings per RFC 3986 §3.4)
2026-04-07 14:58:27 -04:00
Owen
28ef5238c9 Add CODEOWNERS 2026-04-07 11:36:02 -04:00
Laurence
7d3d5b2b22 use targetid also on proxy create as that also has same issue 2026-04-06 14:17:04 +01:00
Laurence
81eba50c9a fix: use targetId as row identifier
fix: 2797
2026-04-06 14:03:33 +01:00
dependabot[bot]
e8d1b779cc Bump docker/login-action from 4.0.0 to 4.1.0
Bumps [docker/login-action](https://github.com/docker/login-action) from 4.0.0 to 4.1.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](b45d80f862...4907a6ddec)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-version: 4.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-06 01:35:40 +00:00
dependabot[bot]
d9000b55e3 Bump actions/setup-go from 6.3.0 to 6.4.0
Bumps [actions/setup-go](https://github.com/actions/setup-go) from 6.3.0 to 6.4.0.
- [Release notes](https://github.com/actions/setup-go/releases)
- [Commits](4b73464bb3...4a3601121d)

---
updated-dependencies:
- dependency-name: actions/setup-go
  dependency-version: 6.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-06 01:35:36 +00:00
Owen Schwartz
3436105bec Merge pull request #2784 from fosrl/dev
Try to prevent deadlocks
2026-04-03 23:01:09 -04:00
Owen
d948d2ec33 Try to prevent deadlocks 2026-04-03 22:55:04 -04:00
Owen Schwartz
4b3375ab8e Merge pull request #2783 from fosrl/dev
Fix 1.17.0
2026-04-03 22:42:03 -04:00
Owen
6b8a3c8d77 Revert #2570
Fix #2782
2026-04-03 22:37:42 -04:00
Owen
ba9794c067 Put middleware back
Fix #2781
2026-04-03 22:16:26 -04:00
Owen Schwartz
6ce165bfd5 Merge pull request #2780 from fosrl/dev
1.17.0
2026-04-03 18:19:40 -04:00
Owen
eb4b2daaab Use the right encryption 2026-04-03 17:59:21 -04:00
Owen
8cbc8dec89 Generate address 2026-04-03 17:25:39 -04:00
Owen
e89e60d50b Encrypt the streaming data 2026-04-03 15:33:29 -04:00
Owen
c45308f234 Send to the right place 2026-04-03 15:33:29 -04:00
Owen Schwartz
40205c40c5 Merge pull request #2779 from fosrl/crowdin_dev
New Crowdin updates
2026-04-03 15:00:11 -04:00
Owen Schwartz
f3fe2dd33b New translations en-us.json (Spanish) 2026-04-03 14:58:56 -04:00
Owen Schwartz
8edcc45033 New translations en-us.json (Norwegian Bokmal) 2026-04-03 14:58:55 -04:00
Owen Schwartz
91471a4aca New translations en-us.json (Chinese Simplified) 2026-04-03 14:58:53 -04:00
Owen Schwartz
ae2c37a2f6 New translations en-us.json (Turkish) 2026-04-03 14:58:52 -04:00
Owen Schwartz
c8208f0a88 New translations en-us.json (Russian) 2026-04-03 14:58:50 -04:00
Owen Schwartz
e11dfbd29c New translations en-us.json (Portuguese) 2026-04-03 14:58:49 -04:00
Owen Schwartz
b375d20598 New translations en-us.json (Polish) 2026-04-03 14:58:48 -04:00
Owen Schwartz
c4b82c69f8 New translations en-us.json (Dutch) 2026-04-03 14:58:47 -04:00
Owen Schwartz
c9a00420a0 New translations en-us.json (Korean) 2026-04-03 14:58:45 -04:00
Owen Schwartz
36ef9cd442 New translations en-us.json (Italian) 2026-04-03 14:58:44 -04:00
Owen Schwartz
5e08779ab0 New translations en-us.json (German) 2026-04-03 14:58:42 -04:00
Owen Schwartz
16a0e1ce7b New translations en-us.json (Czech) 2026-04-03 14:58:41 -04:00
Owen Schwartz
8b03484ade New translations en-us.json (Bulgarian) 2026-04-03 14:58:39 -04:00
Owen Schwartz
9da9974adf New translations en-us.json (French) 2026-04-03 14:58:38 -04:00
Owen Schwartz
6f80cf3db2 New translations en-us.json (Spanish) 2026-04-03 13:03:44 -04:00
Owen Schwartz
76d8f44779 New translations en-us.json (Norwegian Bokmal) 2026-04-03 13:03:43 -04:00
Owen Schwartz
700c92efcb New translations en-us.json (Chinese Simplified) 2026-04-03 13:03:41 -04:00
Owen Schwartz
d17e0c9f50 New translations en-us.json (Turkish) 2026-04-03 13:03:39 -04:00
Owen Schwartz
f00b9794f5 New translations en-us.json (Russian) 2026-04-03 13:03:38 -04:00
Owen Schwartz
daff59c93f New translations en-us.json (Portuguese) 2026-04-03 13:03:36 -04:00
Owen Schwartz
aa8954366c New translations en-us.json (Polish) 2026-04-03 13:03:35 -04:00
Owen Schwartz
87464d53bd New translations en-us.json (Dutch) 2026-04-03 13:03:33 -04:00
Owen Schwartz
e04f17c9aa New translations en-us.json (Korean) 2026-04-03 13:03:32 -04:00
Owen Schwartz
b25e3499d8 New translations en-us.json (Italian) 2026-04-03 13:03:30 -04:00
Owen Schwartz
2e6f74a6f8 New translations en-us.json (German) 2026-04-03 13:03:28 -04:00
Owen Schwartz
8eee0ca5a5 New translations en-us.json (Czech) 2026-04-03 13:03:26 -04:00
Owen Schwartz
c2ebc0a0ff New translations en-us.json (Bulgarian) 2026-04-03 13:03:24 -04:00
Owen Schwartz
03c905a7af New translations en-us.json (French) 2026-04-03 13:03:22 -04:00
Owen Schwartz
035644eaf7 Merge pull request #2778 from fosrl/dev
1.17.0-s.2
2026-04-03 12:35:03 -04:00
Owen
8ce45a1acd Update casting again 2026-04-03 12:34:37 -04:00
Owen Schwartz
16e7233a3e Merge pull request #2777 from fosrl/dev
1.17.0-s.1
2026-04-03 12:19:23 -04:00
Owen
a331dd3fb4 Merge branch 'dev' of github.com:fosrl/pangolin into dev 2026-04-03 12:18:33 -04:00
Owen Schwartz
e3e2938b28 Merge pull request #2761 from fosrl/crowdin_dev
New Crowdin updates
2026-04-03 12:16:31 -04:00
Owen
73e96b1b28 Type cast data 2026-04-03 12:15:39 -04:00
miloschwartz
b8194295ec fix translation syntax err 2026-04-03 11:47:54 -04:00
miloschwartz
382a46dfff fix text formatting in delete dialog 2026-04-03 11:44:56 -04:00
Owen Schwartz
1f74e1b320 Merge pull request #2776 from fosrl/dev
1.17.0-s.0
2026-04-03 11:39:35 -04:00
Owen
fee780cb81 Add siem to migration 2026-04-03 11:32:02 -04:00
Owen
5056cba85d Add siem to migration 2026-04-03 11:32:02 -04:00
miloschwartz
dab38ff82c use debug log on log stream start 2026-04-03 11:16:56 -04:00
Owen
d83fa63af5 Fix to null out the rewrite on the frontend too 2026-04-02 21:58:14 -04:00
Owen
d5837ab718 Fix to use the stored data 2026-04-02 21:57:59 -04:00
Owen Schwartz
f85cfc4c68 New translations en-us.json (Spanish) 2026-04-02 18:35:13 -04:00
Owen Schwartz
0b2aceafe0 New translations en-us.json (Norwegian Bokmal) 2026-04-02 18:35:11 -04:00
Owen Schwartz
059db34a53 New translations en-us.json (Chinese Simplified) 2026-04-02 18:35:10 -04:00
Owen Schwartz
bc1ea86b4e New translations en-us.json (Turkish) 2026-04-02 18:35:09 -04:00
Owen Schwartz
9f2ced1933 New translations en-us.json (Russian) 2026-04-02 18:35:08 -04:00
Owen Schwartz
013cff9b6e New translations en-us.json (Portuguese) 2026-04-02 18:35:06 -04:00
Owen Schwartz
aa19437031 New translations en-us.json (Polish) 2026-04-02 18:35:05 -04:00
Owen Schwartz
e848ef848b New translations en-us.json (Dutch) 2026-04-02 18:35:03 -04:00
Owen Schwartz
bb6605337f New translations en-us.json (Korean) 2026-04-02 18:35:02 -04:00
Owen Schwartz
8df8383468 New translations en-us.json (Italian) 2026-04-02 18:35:01 -04:00
Owen Schwartz
a7e9de3ac4 New translations en-us.json (German) 2026-04-02 18:34:59 -04:00
Owen Schwartz
8df41f514e New translations en-us.json (Czech) 2026-04-02 18:34:58 -04:00
Owen Schwartz
c2bf50b121 New translations en-us.json (Bulgarian) 2026-04-02 18:34:56 -04:00
Owen Schwartz
4e7dcbd7b5 New translations en-us.json (French) 2026-04-02 18:34:55 -04:00
Owen
b7ccb92236 Merge branch 'main' into dev 2026-04-02 17:39:25 -04:00
Owen Schwartz
23a151dd45 Merge pull request #2771 from LaurenceJJones/feature/systemd-install-instructions
enhance: Systemd newt instructions
2026-04-02 12:13:44 -04:00
Laurence
122079ddb2 split unix to linux and macos, show method everything other than windows, change nixos all to flake so makes sense under method 2026-04-02 17:05:50 +01:00
Owen Schwartz
1d0b0ae6ec Merge pull request #2770 from fosrl/revert-2766-feature/systemd-install-instructions
Revert "enhance: Systemd newt unit instructions"
2026-04-02 11:43:15 -04:00
Owen Schwartz
a55dd769cf Revert "enhance: Systemd newt unit instructions" 2026-04-02 11:43:01 -04:00
Owen Schwartz
f1a0bc97e3 New translations en-us.json (Spanish) 2026-04-02 11:42:52 -04:00
Owen Schwartz
a57dfd1d12 New translations en-us.json (Norwegian Bokmal) 2026-04-02 11:42:50 -04:00
Owen Schwartz
c0a8304b91 New translations en-us.json (Chinese Simplified) 2026-04-02 11:42:48 -04:00
Owen Schwartz
ab7b968e28 New translations en-us.json (Turkish) 2026-04-02 11:42:47 -04:00
Owen Schwartz
f10b40c3b0 New translations en-us.json (Russian) 2026-04-02 11:42:45 -04:00
Owen Schwartz
7878ac9c76 New translations en-us.json (Portuguese) 2026-04-02 11:42:43 -04:00
Owen Schwartz
0752951842 New translations en-us.json (Polish) 2026-04-02 11:42:41 -04:00
Owen Schwartz
06bb6636a1 New translations en-us.json (Dutch) 2026-04-02 11:42:39 -04:00
Owen Schwartz
2fdd332a31 New translations en-us.json (Korean) 2026-04-02 11:42:38 -04:00
Owen Schwartz
98b1e9546a New translations en-us.json (Italian) 2026-04-02 11:42:36 -04:00
Owen Schwartz
184aa65c6d New translations en-us.json (German) 2026-04-02 11:42:34 -04:00
Owen Schwartz
70b3a432a4 New translations en-us.json (Czech) 2026-04-02 11:42:33 -04:00
Owen Schwartz
fb4fc75bd8 New translations en-us.json (Bulgarian) 2026-04-02 11:42:31 -04:00
Owen Schwartz
0479ed9e7f New translations en-us.json (French) 2026-04-02 11:42:29 -04:00
Owen Schwartz
1dc3409135 Merge pull request #2766 from LaurenceJJones/feature/systemd-install-instructions
enhance: Systemd newt unit instructions
2026-04-02 11:40:50 -04:00
Laurence
1bb89fce26 enhance: Systemd newt unit
Add a systemd unit option directly from dashboard to prevent copy and paste mistakes
2026-04-02 12:21:53 +01:00
Owen Schwartz
8f3fbb94d2 New translations en-us.json (Spanish) 2026-04-01 09:58:52 -07:00
Owen Schwartz
e8c35bec1c New translations en-us.json (Norwegian Bokmal) 2026-04-01 09:58:50 -07:00
Owen Schwartz
728e7252eb New translations en-us.json (Chinese Simplified) 2026-04-01 09:58:49 -07:00
Owen Schwartz
1218507f7d New translations en-us.json (Turkish) 2026-04-01 09:58:47 -07:00
Owen Schwartz
a2dff0a35d New translations en-us.json (Russian) 2026-04-01 09:58:46 -07:00
Owen Schwartz
f411180908 New translations en-us.json (Portuguese) 2026-04-01 09:58:44 -07:00
Owen Schwartz
231a19b679 New translations en-us.json (Polish) 2026-04-01 09:58:43 -07:00
Owen Schwartz
58a87a986a New translations en-us.json (Dutch) 2026-04-01 09:58:41 -07:00
Owen Schwartz
61a78ef352 New translations en-us.json (Korean) 2026-04-01 09:58:39 -07:00
Owen Schwartz
e28e5ebb4e New translations en-us.json (Italian) 2026-04-01 09:58:38 -07:00
Owen Schwartz
19cef8c453 New translations en-us.json (German) 2026-04-01 09:58:36 -07:00
Owen Schwartz
1290d6cd5c New translations en-us.json (Czech) 2026-04-01 09:58:35 -07:00
Owen Schwartz
ad301074db New translations en-us.json (Bulgarian) 2026-04-01 09:58:33 -07:00
Owen Schwartz
30a756d254 New translations en-us.json (French) 2026-04-01 09:58:32 -07:00
Owen
363c13c387 Impvove communication 2026-04-01 09:53:49 -07:00
Owen
08e4afaef0 Update hp log message 2026-03-31 17:06:56 -07:00
Owen
69aa6e2d1d Prevent increase in writes on reconnect 2026-03-31 17:00:06 -07:00
Owen
547865e0da Mark targets unhealthy when site is down
Fix #2675
Fix #2700
Fix #1742
2026-03-31 16:24:53 -07:00
Owen
3a9e79e6d5 Filter only newt sites on private resources 2026-03-31 16:17:17 -07:00
Owen Schwartz
0fc1aa9191 Merge pull request #2755 from fosrl/dev
Update go version
2026-03-31 16:04:11 -07:00
Owen
f34a3559be Update go version 2026-03-31 16:03:22 -07:00
Owen Schwartz
ddf417f4ca Merge pull request #2753 from fosrl/dev
Update security
2026-03-31 15:27:47 -07:00
Owen
f2abbf01e5 Update security 2026-03-31 15:26:39 -07:00
Owen Schwartz
d08be59055 Merge pull request #2752 from fosrl/dev
1.17.0-rc.0
2026-03-31 15:24:25 -07:00
Owen Schwartz
44bb87e4ac Merge pull request #2751 from fosrl/crowdin_dev
New Crowdin updates
2026-03-31 15:21:34 -07:00
Owen Schwartz
1d2f1405aa New translations en-us.json (Norwegian Bokmal) 2026-03-31 15:20:05 -07:00
Owen Schwartz
ff64a79014 New translations en-us.json (Chinese Simplified) 2026-03-31 15:20:04 -07:00
Owen Schwartz
f6cdadbc2d New translations en-us.json (Turkish) 2026-03-31 15:20:02 -07:00
Owen Schwartz
546769ca66 New translations en-us.json (Spanish) 2026-03-31 15:20:00 -07:00
Owen Schwartz
d07996d435 New translations en-us.json (Russian) 2026-03-31 15:19:59 -07:00
Owen Schwartz
467808f174 New translations en-us.json (Portuguese) 2026-03-31 15:19:57 -07:00
Owen Schwartz
64d3c6b2d9 New translations en-us.json (Polish) 2026-03-31 15:19:56 -07:00
Owen Schwartz
75193bb0a2 New translations en-us.json (Dutch) 2026-03-31 15:19:54 -07:00
Owen Schwartz
82ba2bd809 New translations en-us.json (Korean) 2026-03-31 15:19:52 -07:00
Owen Schwartz
8559942c5c New translations en-us.json (Italian) 2026-03-31 15:19:51 -07:00
Owen Schwartz
a7fefc84a8 New translations en-us.json (German) 2026-03-31 15:19:49 -07:00
Owen Schwartz
c8e83fedeb New translations en-us.json (Czech) 2026-03-31 15:19:48 -07:00
Owen Schwartz
4bf148a4bf New translations en-us.json (Bulgarian) 2026-03-31 15:19:46 -07:00
Owen Schwartz
44664faf3c New translations en-us.json (French) 2026-03-31 15:19:45 -07:00
Owen Schwartz
322c136d1f Merge pull request #2748 from jaydeep-pipaliya/fix/empty-targets-toast-message
fix: show contextual toast when saving with no targets
2026-03-31 15:11:12 -07:00
Owen
3b8dd45a73 Translate siem 2026-03-31 15:09:14 -07:00
Owen
c1bd36231d Default to approved 2026-03-31 14:46:23 -07:00
Owen
2cee723f0e Handle online and offline for wireguard sites 2026-03-31 14:41:02 -07:00
Owen
edfeec900d Define db type 2026-03-31 14:25:47 -07:00
Owen
958bde2090 Merge branch 'siem' into dev 2026-03-31 14:20:46 -07:00
Owen
29b272f5d5 Restrict saas 2026-03-31 14:08:50 -07:00
Owen
9162ac6d91 Add missing headers 2026-03-31 14:07:28 -07:00
Owen
fe30bb280e Add option for how to batch 2026-03-31 14:04:58 -07:00
Owen
a1e9396999 Handle backlog better 2026-03-31 13:47:32 -07:00
Fred KISSIE
543542713b ♻️ refactor 2026-03-31 22:44:18 +02:00
miloschwartz
2a1c290dff dont show identifier on create private resource 2026-03-31 12:32:03 -07:00
Owen
d155d7e31b Update formatting 2026-03-31 12:26:31 -07:00
Owen
3dc258da16 Log streaming manager pass 1 2026-03-31 12:22:37 -07:00
Fred KISSIE
a4d8789c20 ♻️ move from react.forwardref to normal ref prop 2026-03-31 21:13:23 +02:00
Owen
0db1397f2f Add log connection audit dedicated file 2026-03-31 12:02:02 -07:00
Owen
0254fb1695 Small ui tweaks 2026-03-31 11:56:19 -07:00
Owen
954b492aa9 Fix imports 2026-03-31 11:52:08 -07:00
Owen
8aadc10530 Merge branch 'main' into dev 2026-03-31 11:44:31 -07:00
Owen
6ea719c50f Pin 2026-03-31 11:44:18 -07:00
Owen
b50886179a Implement fixes to ui 2026-03-31 11:43:52 -07:00
Fred KISSIE
152b452bee Merge branch 'dev' into feat/paginate-user-roles-table 2026-03-31 18:55:21 +02:00
jaydeep-pipaliya
e06f2f47b1 fix: show contextual toast when saving with no targets
Instead of always showing "Settings updated" when saving, show
"Targets cleared" when the target list is empty. This gives the user
accurate feedback without blocking the save action.

Fixes #586
2026-03-31 11:48:56 +05:30
Owen
ed8c8bedcd Add picker 2026-03-30 21:46:11 -07:00
Owen
1711e39219 Add logos 2026-03-30 21:42:41 -07:00
Owen
a73879ec7a Fix formatting 2026-03-30 21:35:37 -07:00
Owen
45c613dec4 Tweaking the ui 2026-03-30 21:09:14 -07:00
Owen
5150a2c386 Basic ui done 2026-03-30 21:00:05 -07:00
Owen
ca0dd09964 Add crud 2026-03-30 20:35:00 -07:00
Owen
5e0e4f1452 Update book a demo 2026-03-30 20:16:35 -07:00
Owen
3ed72dd96b Add missing colums to migrations 2026-03-30 18:16:22 -07:00
Owen
b8d7d5c910 Add name to provisioning 2026-03-30 17:18:38 -07:00
Owen
673b8b7af5 Add userInviteRoles migration 2026-03-30 17:03:12 -07:00
Owen
a651e50759 Fix merge from main 2026-03-30 16:59:05 -07:00
Owen
6484e8e302 Make work for demo 2026-03-30 16:57:36 -07:00
Owen
b01d266629 Migration 1.17 first pass 2026-03-30 16:55:37 -07:00
Owen
4465b05404 Merge branch 'provisioning-room' into dev 2026-03-30 16:19:11 -07:00
Owen
d1182c3a59 Merge branch 'main' into dev 2026-03-30 15:53:46 -07:00
Owen
cb6c47678b Add regions to blueprints 2026-03-30 14:43:49 -07:00
Owen Schwartz
8106620a19 Merge pull request #2149 from infiniteWays/feature/region-rules
Region-based Resource Rules
2026-03-30 14:37:17 -07:00
Owen
be3e066843 Merge branch 'dev' into feature/region-rules 2026-03-30 14:36:50 -07:00
Owen Schwartz
e345c6ee6e Merge pull request #2627 from shreyaspapi/fix/1547-persist-user-locale
fix: persist user locale preference to database (#1547)
2026-03-30 14:29:15 -07:00
Owen
073b89b355 make path the default 2026-03-30 14:18:10 -07:00
Owen Schwartz
5cad07f8ad Merge pull request #2623 from rodneyosodo/fix/errcheck
refactor(install): improve resource cleanup and remove unused funcs
2026-03-30 14:12:41 -07:00
Owen Schwartz
f9d872558e Merge pull request #2624 from fosrl/dependabot/go_modules/install/github.com/charmbracelet/huh-1.0.0
Bump github.com/charmbracelet/huh from 0.8.0 to 1.0.0 in /install
2026-03-30 14:08:26 -07:00
Owen Schwartz
c5015d02ae Merge pull request #2646 from LaurenceJJones/feature/installer-default-dir
feat(installer): add default install directory with existing install …
2026-03-30 14:08:00 -07:00
Owen Schwartz
48013228c1 Merge pull request #2653 from shleeable/patch-1
feat(installer): Update docker-compose.yml with HTTPS/3 + QUIC support via traefik
2026-03-30 14:07:34 -07:00
Owen
dbafffe73d Update crowdsec and add comment 2026-03-30 14:06:56 -07:00
Owen Schwartz
61cbcb2a06 Merge pull request #2741 from fosrl/dependabot/npm_and_yarn/multi-0b8106bf31
Bump fast-xml-parser and @aws-sdk/xml-builder
2026-03-30 13:58:19 -07:00
Owen Schwartz
89c1ad5d98 Merge pull request #2738 from fosrl/dependabot/github_actions/sigstore/cosign-installer-4.1.1
Bump sigstore/cosign-installer from 4.1.0 to 4.1.1
2026-03-30 13:55:27 -07:00
Owen Schwartz
b343ca6290 Merge pull request #2687 from fosrl/dependabot/npm_and_yarn/next-15.5.14
Bump next from 15.5.12 to 15.5.14
2026-03-30 13:55:19 -07:00
dependabot[bot]
b913466671 Bump next from 15.5.12 to 15.5.14
Bumps [next](https://github.com/vercel/next.js) from 15.5.12 to 15.5.14.
- [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.5.12...v15.5.14)

---
updated-dependencies:
- dependency-name: next
  dependency-version: 15.5.14
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-30 20:37:38 +00:00
Owen Schwartz
9054f4f9c3 Merge pull request #2683 from fosrl/dependabot/npm_and_yarn/flatted-3.4.2
Bump flatted from 3.3.3 to 3.4.2
2026-03-30 13:37:18 -07:00
Owen Schwartz
3915024d9a Merge pull request #2714 from fosrl/dependabot/npm_and_yarn/dev-patch-updates-3753551584
Bump the dev-patch-updates group across 1 directory with 3 updates
2026-03-30 13:36:49 -07:00
dependabot[bot]
7d1085b43f Bump fast-xml-parser and @aws-sdk/xml-builder
Bumps [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser) and [@aws-sdk/xml-builder](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/packages-internal/xml-builder). These dependencies needed to be updated together.

Updates `fast-xml-parser` from 5.5.6 to 5.5.8
- [Release notes](https://github.com/NaturalIntelligence/fast-xml-parser/releases)
- [Changelog](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/NaturalIntelligence/fast-xml-parser/compare/v5.5.6...v5.5.8)

Updates `@aws-sdk/xml-builder` from 3.972.12 to 3.972.16
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/packages-internal/xml-builder/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/HEAD/packages-internal/xml-builder)

---
updated-dependencies:
- dependency-name: fast-xml-parser
  dependency-version: 5.5.8
  dependency-type: indirect
- dependency-name: "@aws-sdk/xml-builder"
  dependency-version: 3.972.16
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-30 20:36:35 +00:00
Owen Schwartz
7c2477cccc Merge pull request #2717 from fosrl/dependabot/npm_and_yarn/multi-bf05dc1ecf
Bump picomatch
2026-03-30 13:36:21 -07:00
Owen Schwartz
5aecb5fb90 Merge pull request #2727 from fosrl/dependabot/npm_and_yarn/yaml-2.8.3
Bump yaml from 2.8.2 to 2.8.3
2026-03-30 13:36:06 -07:00
Owen Schwartz
f86d040ee4 Merge pull request #2728 from fosrl/dependabot/npm_and_yarn/nodemailer-8.0.4
Bump nodemailer from 8.0.1 to 8.0.4
2026-03-30 13:35:48 -07:00
Owen Schwartz
ed32717b3f Merge pull request #2730 from fosrl/dependabot/npm_and_yarn/multi-95b84c9cdf
Bump brace-expansion
2026-03-30 13:35:31 -07:00
Owen Schwartz
aab8462134 Merge pull request #2733 from fosrl/dependabot/npm_and_yarn/path-to-regexp-8.4.0
Bump path-to-regexp from 8.3.0 to 8.4.0
2026-03-30 13:34:56 -07:00
Owen
04943fb4a6 Fix access log 2026-03-30 11:58:48 -07:00
Owen
e0c96e7224 Configure connection log retention time 2026-03-30 11:31:46 -07:00
Owen
caacd1e677 Remove rewrite if match is removed 2026-03-30 11:11:18 -07:00
Owen
c995c5a674 Dont batch set on sqlite 2026-03-30 11:02:09 -07:00
Owen
1e9544af07 Customize table a little more 2026-03-29 20:29:31 -07:00
miloschwartz
4cce6e0820 add node graph and editor 2026-03-29 20:25:17 -07:00
dependabot[bot]
c20dfdabfb Bump the dev-patch-updates group across 1 directory with 3 updates
Bumps the dev-patch-updates group with 3 updates in the / directory: [@tailwindcss/postcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-postcss), [esbuild](https://github.com/evanw/esbuild) and [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss).


Updates `@tailwindcss/postcss` from 4.2.1 to 4.2.2
- [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.2.2/packages/@tailwindcss-postcss)

Updates `esbuild` from 0.27.3 to 0.27.4
- [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.27.3...v0.27.4)

Updates `tailwindcss` from 4.2.1 to 4.2.2
- [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.2.2/packages/tailwindcss)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-30 01:35:59 +00:00
dependabot[bot]
11a6f1f47f Bump sigstore/cosign-installer from 4.1.0 to 4.1.1
Bumps [sigstore/cosign-installer](https://github.com/sigstore/cosign-installer) from 4.1.0 to 4.1.1.
- [Release notes](https://github.com/sigstore/cosign-installer/releases)
- [Commits](ba7bc0a3fe...cad07c2e89)

---
updated-dependencies:
- dependency-name: sigstore/cosign-installer
  dependency-version: 4.1.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-30 01:34:28 +00:00
Owen
fcf92d4e2c Add basic provisioning room v1 and update keys 2026-03-29 16:28:51 -07:00
Owen
77cef554be Provisioning room basics done 2026-03-29 14:20:58 -07:00
miloschwartz
2841c5ed4e basic rules 2026-03-29 14:19:26 -07:00
Owen
9dc9b6a2c3 Merge branch 'logging-provision' into dev 2026-03-29 13:59:14 -07:00
Owen
9808a48da0 Merge branch 'multi-role' into dev 2026-03-29 13:55:23 -07:00
Milo Schwartz
8a6960d9c3 Merge pull request #2670 from Fredkiss3/feat/selector-filtering
Feat: selector filtering
2026-03-29 12:26:51 -07:00
Milo Schwartz
d966ef66e1 Merge pull request #2643 from Fredkiss3/fix/wireguard-site-ip
fix: Display actual values for WireGuard site credentials
2026-03-29 12:23:16 -07:00
Milo Schwartz
ed97cf5d97 Merge pull request #2697 from Fredkiss3/feat/modify-private-resource-niceid
feat: edit niceid in private resources
2026-03-29 12:18:21 -07:00
Owen
a3b088f8d2 Merge branch 'dev' into logging-provision 2026-03-29 12:18:13 -07:00
miloschwartz
2828dee94c support multi role on create user and invites 2026-03-29 12:11:22 -07:00
Owen Schwartz
bdc45887f9 Add chainId to dedup messages (#2737)
* ChainId send through on sensitive messages
2026-03-29 12:08:29 -07:00
miloschwartz
ee6fb34906 Merge branch 'multi-role' of https://github.com/fosrl/pangolin into multi-role 2026-03-29 12:01:55 -07:00
miloschwartz
bff2ba7cc2 add learn more link 2026-03-29 11:34:07 -07:00
Owen
8e821b397f Add migration 2026-03-28 21:41:21 -07:00
Owen
6f71af278e Add basic migration files 2026-03-28 21:29:32 -07:00
Owen
757bb39622 Support overriding badger for testing 2026-03-28 21:24:13 -07:00
Owen
00ef6d617f Handle the roles better in the verify session 2026-03-28 21:24:13 -07:00
miloschwartz
d1b2105c80 support search in tags input 2026-03-28 18:29:40 -07:00
miloschwartz
50ee28b1f7 fix no admin user in roles dropdown 2026-03-28 18:23:07 -07:00
miloschwartz
ba529ad14e hide google and azure idp properly 2026-03-28 18:20:56 -07:00
miloschwartz
6ab0555148 respect full rbac feature in auto provisioning 2026-03-28 18:09:36 -07:00
miloschwartz
c6f269b3fa set roles 1:1 on auto provision 2026-03-28 17:29:01 -07:00
dependabot[bot]
8e160902af Bump path-to-regexp from 8.3.0 to 8.4.0
Bumps [path-to-regexp](https://github.com/pillarjs/path-to-regexp) from 8.3.0 to 8.4.0.
- [Release notes](https://github.com/pillarjs/path-to-regexp/releases)
- [Changelog](https://github.com/pillarjs/path-to-regexp/blob/master/History.md)
- [Commits](https://github.com/pillarjs/path-to-regexp/compare/v8.3.0...v8.4.0)

---
updated-dependencies:
- dependency-name: path-to-regexp
  dependency-version: 8.4.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-28 18:37:06 +00:00
miloschwartz
7bcb852dba add google and azure templates to global idp 2026-03-27 18:10:19 -07:00
miloschwartz
ed604c8810 Merge branch 'multi-role' of https://github.com/fosrl/pangolin into multi-role 2026-03-27 17:35:50 -07:00
miloschwartz
bea20674a8 support policy buildiner in global idp 2026-03-27 17:35:35 -07:00
Owen
177926932b Update hybrid for multi role 2026-03-27 17:07:58 -07:00
Owen
04dfbd0a14 Chainid send through 2026-03-27 12:04:41 -07:00
dependabot[bot]
06f840a680 Bump brace-expansion
Bumps  and [brace-expansion](https://github.com/juliangruber/brace-expansion). These dependencies needed to be updated together.

Updates `brace-expansion` from 5.0.4 to 5.0.5
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](https://github.com/juliangruber/brace-expansion/compare/v5.0.4...v5.0.5)

Updates `brace-expansion` from 1.1.12 to 1.1.13
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](https://github.com/juliangruber/brace-expansion/compare/v5.0.4...v5.0.5)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-27 14:43:09 +00:00
dependabot[bot]
5ddcfeb506 Bump nodemailer from 8.0.1 to 8.0.4
Bumps [nodemailer](https://github.com/nodemailer/nodemailer) from 8.0.1 to 8.0.4.
- [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/v8.0.1...v8.0.4)

---
updated-dependencies:
- dependency-name: nodemailer
  dependency-version: 8.0.4
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-27 06:56:52 +00:00
Owen
a143b7de7c Merge branch 'multi-role' of github.com:fosrl/pangolin into multi-role 2026-03-26 21:47:13 -07:00
Owen
63372b174f Merge branch 'dev' into multi-role 2026-03-26 21:46:29 -07:00
miloschwartz
ad7d68d2b4 basic idp mapping builder 2026-03-26 21:46:01 -07:00
Owen
e05af54f76 Use standard component 2026-03-26 21:36:51 -07:00
dependabot[bot]
914e95e47f Bump yaml from 2.8.2 to 2.8.3
Bumps [yaml](https://github.com/eemeli/yaml) from 2.8.2 to 2.8.3.
- [Release notes](https://github.com/eemeli/yaml/releases)
- [Commits](https://github.com/eemeli/yaml/compare/v2.8.2...v2.8.3)

---
updated-dependencies:
- dependency-name: yaml
  dependency-version: 2.8.3
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-27 02:36:44 +00:00
miloschwartz
13eadeaa8f support legacy one role per user 2026-03-26 18:19:10 -07:00
Owen
19a686b3e4 Add restrictions around provisioning key 2026-03-26 16:49:43 -07:00
miloschwartz
d046084e84 delete role move to new role 2026-03-26 16:44:30 -07:00
miloschwartz
e13a076939 ui improvements 2026-03-26 16:37:31 -07:00
Owen
b4ca6432db Fix double id 2026-03-26 16:24:44 -07:00
dependabot[bot]
5b9efc3c5f Bump picomatch
Bumps  and [picomatch](https://github.com/micromatch/picomatch). These dependencies needed to be updated together.

Updates `picomatch` from 2.3.1 to 2.3.2
- [Release notes](https://github.com/micromatch/picomatch/releases)
- [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/picomatch/compare/2.3.1...2.3.2)

Updates `picomatch` from 4.0.3 to 4.0.4
- [Release notes](https://github.com/micromatch/picomatch/releases)
- [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/picomatch/compare/2.3.1...2.3.2)

---
updated-dependencies:
- dependency-name: picomatch
  dependency-version: 2.3.2
  dependency-type: indirect
- dependency-name: picomatch
  dependency-version: 4.0.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-26 08:51:09 +00:00
Owen Schwartz
6d7a19b0a0 Merge pull request #2716 from fosrl/patch-1
Add typecasts
2026-03-25 22:12:59 -07:00
Owen
6b3a6fa380 Add typecasts 2026-03-25 22:11:56 -07:00
Owen Schwartz
e2a65b4b74 Merge pull request #2715 from fosrl/batch-band
Batch set bandwidth
2026-03-25 21:54:44 -07:00
Owen
1f01108b62 Batch set bandwidth 2026-03-25 21:53:20 -07:00
Owen
c80c7df1d0 Batch set bandwidth 2026-03-25 20:44:08 -07:00
Owen
99a064b77a Fix import problems 2026-03-25 20:44:08 -07:00
Owen
9b84623d0c Cache token for thundering hurd 2026-03-25 20:44:08 -07:00
Owen
6bb6cf8a48 Clean up 2026-03-25 20:44:08 -07:00
Owen
348fcbcabf Try to solve th problem 2026-03-25 20:44:08 -07:00
Owen
1f4cde5f7f Add license script 2026-03-25 20:44:08 -07:00
Owen
3e3b02021c Add ssh access log 2026-03-25 20:44:08 -07:00
Owen
17eb93d045 Add better pooling controls 2026-03-25 20:44:08 -07:00
Owen
660420ddef Disable everything if not paid 2026-03-25 20:44:08 -07:00
Owen
395cab795c Batch set bandwidth 2026-03-25 20:35:21 -07:00
miloschwartz
0fecbe704b Merge branch 'dev' into multi-role 2026-03-24 22:01:13 -07:00
Owen
ce59a8a52b Merge branch 'main' into dev 2026-03-24 20:38:16 -07:00
miloschwartz
2091b5f359 Merge branch 'logging-provision' of https://github.com/fosrl/pangolin into logging-provision 2026-03-24 20:30:14 -07:00
Owen Schwartz
62c63ddcaa Merge pull request #2710 from fosrl/thundering-herd
thundering herd
2026-03-24 20:29:01 -07:00
Owen
dfd604c781 Fix import problems 2026-03-24 20:27:34 -07:00
miloschwartz
3525b367b3 move to private routes 2026-03-24 20:27:15 -07:00
Owen
0b5b6ed5a3 Adjust register endpoint 2026-03-24 18:26:10 -07:00
Owen
6fe9494df4 Merge branch 'logging-provision' of github.com:fosrl/pangolin into logging-provision 2026-03-24 18:17:42 -07:00
Owen
b2eab95a3b Pass at first endpoints 2026-03-24 18:17:33 -07:00
Owen
38d30b0214 Add license script 2026-03-24 18:13:57 -07:00
Owen
c96c5e8ae8 Cache token for thundering hurd 2026-03-24 18:12:51 -07:00
Owen
6f71e9f0f2 Clean up 2026-03-24 17:55:14 -07:00
Owen
d17ec6dc1f Try to solve th problem 2026-03-24 17:39:43 -07:00
miloschwartz
212b7a104f Merge branch 'logging-provision' of https://github.com/fosrl/pangolin into logging-provision 2026-03-24 17:01:36 -07:00
miloschwartz
d21dfb750e ui for provisioning key 2026-03-24 17:01:20 -07:00
Owen Schwartz
c36a019f5d Merge pull request #2709 from fosrl/pool-update
Update pool and disable idp
2026-03-24 16:48:28 -07:00
Owen
cf2dfdea5b Add better pooling controls 2026-03-24 16:38:50 -07:00
Owen
985e1bb9ab Disable everything if not paid 2026-03-24 16:38:46 -07:00
Owen
fff38aac85 Add ssh access log 2026-03-24 16:26:56 -07:00
miloschwartz
7db58f920c add site provisioning key crud 2026-03-24 16:19:00 -07:00
Fred KISSIE
e9b16b8801 Merge branch 'dev' into feat/modify-private-resource-niceid 2026-03-25 00:13:35 +01:00
Owen
5a2a97b23a Add better pooling controls 2026-03-24 16:12:13 -07:00
Owen
5b894e8682 Disable everything if not paid 2026-03-24 16:01:54 -07:00
Fred KISSIE
84925f724d 💄 update UI 2026-03-24 23:43:01 +01:00
Owen
7b78b91449 Fix resource link 2026-03-23 22:00:53 -07:00
Owen
f9bff5954f Add filters and refine table and query 2026-03-23 21:49:22 -07:00
Owen
2c6e9507b5 Connection log page working 2026-03-23 21:41:53 -07:00
Owen
6471571bc6 Add ui for connection logs 2026-03-23 20:18:03 -07:00
Owen
fe40ea58c1 Source client info into schema 2026-03-23 20:05:54 -07:00
Owen
0d4edcd1c7 make private 2026-03-23 17:23:51 -07:00
Owen
7d8797840a Add connection log 2026-03-23 17:01:34 -07:00
Owen Schwartz
19f8c1772f Merge pull request #2698 from fosrl/msg-opt
Improve proxy list message size
2026-03-23 16:05:24 -07:00
Owen
37d331e813 Update version 2026-03-23 16:05:05 -07:00
Owen
c660df55cd Merge branch 'dev' into msg-opt 2026-03-23 16:00:50 -07:00
Fred KISSIE
60982bf19f 🚧 edit niceid in private resources 2026-03-23 22:55:59 +01:00
Fred KISSIE
efb2e78d9d 🐛 fix imports 2026-03-23 21:34:58 +01:00
Fred KISSIE
294532ecbb roles table 2026-03-23 21:34:44 +01:00
Fred KISSIE
062bec23b6 🌐 update translation for single user edit 2026-03-23 21:11:12 +01:00
Fred KISSIE
0461b5a764 finish users table 2026-03-23 21:09:49 +01:00
Fred KISSIE
6d0e10a4aa 🚧 user table pagination 2026-03-23 20:02:53 +01:00
Owen Schwartz
7c8b865379 Merge pull request #2695 from noe-charmet/redis-password-env
Allow setting Redis password from env
2026-03-23 12:02:45 -07:00
Owen
02033f611f First pass at HA 2026-03-23 11:44:02 -07:00
Fred KISSIE
b648aa605c 🔧 un comment volumes in docker compose 2026-03-23 18:50:09 +01:00
Noe Charmet
3cca0c09c0 Allow setting Redis password from env 2026-03-23 11:18:55 +01:00
Owen
1366901e24 Adjust build functions 2026-03-22 14:40:57 -07:00
Owen
c4f48f5748 WIP - more conversion 2026-03-22 14:29:47 -07:00
Owen
c48bc71443 Update crud endpoints and ui 2026-03-22 14:18:34 -07:00
Owen Schwartz
85335bfecc Merge pull request #2685 from fosrl/dev
1.16.2-s.16
2026-03-21 10:47:18 -07:00
Owen
7c2b4f422a Merge branch 'main' into dev 2026-03-21 10:45:13 -07:00
Owen
ad2a0ae127 Use the log database in hybrid as well 2026-03-21 10:42:31 -07:00
Owen
d85496453f Change SSH WIP 2026-03-21 10:40:12 -07:00
dependabot[bot]
871f14ef3a Bump flatted from 3.3.3 to 3.4.2
Bumps [flatted](https://github.com/WebReflection/flatted) from 3.3.3 to 3.4.2.
- [Commits](https://github.com/WebReflection/flatted/compare/v3.3.3...v3.4.2)

---
updated-dependencies:
- dependency-name: flatted
  dependency-version: 3.4.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-21 11:17:41 +00:00
miloschwartz
6c2c620c99 set cache ttl and default ttl 2026-03-20 17:52:07 -07:00
Owen
21b91374a3 Merge branch 'private-site-ha' of github.com:fosrl/pangolin into private-site-ha 2026-03-20 17:24:27 -07:00
miloschwartz
f643abf19a dont show create org for oidc users 2026-03-20 16:04:00 -07:00
Owen Schwartz
a1729033cf Merge pull request #2682 from fosrl/dev
Fix offline issue
2026-03-20 15:31:38 -07:00
Owen
7311766512 Fix offline issue 2026-03-20 15:30:41 -07:00
Owen Schwartz
17105f3a51 Merge pull request #2681 from fosrl/dev
Extend santize into hybrid
2026-03-20 14:33:23 -07:00
Owen
edcfbd26e4 Merge branch 'dev' of github.com:fosrl/pangolin into dev 2026-03-20 14:31:27 -07:00
Owen
0c4d9ea164 Extend santize into hybrid 2026-03-20 14:31:12 -07:00
Owen Schwartz
a5a5224f5c Merge pull request #2680 from fosrl/dev
Translation updates
2026-03-20 13:52:11 -07:00
Owen Schwartz
8773f7c0a7 Merge pull request #2679 from fosrl/crowdin_dev
New Crowdin updates
2026-03-20 13:51:16 -07:00
Owen Schwartz
f385bc2d22 Merge pull request #2678 from fosrl/dev
1.16.2-s.14
2026-03-20 11:25:03 -07:00
Owen Schwartz
a8c9d2e7e6 New translations en-us.json (Spanish) 2026-03-20 11:16:17 -07:00
Owen Schwartz
db3f90318b New translations en-us.json (Norwegian Bokmal) 2026-03-20 11:16:15 -07:00
Owen Schwartz
2d4d0df5ca New translations en-us.json (Chinese Simplified) 2026-03-20 11:16:14 -07:00
Owen Schwartz
569ebc671d New translations en-us.json (Turkish) 2026-03-20 11:16:12 -07:00
Owen Schwartz
8c8e4e6233 New translations en-us.json (Russian) 2026-03-20 11:16:11 -07:00
Owen Schwartz
c7901ef74b New translations en-us.json (Portuguese) 2026-03-20 11:16:09 -07:00
Owen Schwartz
be3bd72c1b New translations en-us.json (Polish) 2026-03-20 11:16:08 -07:00
Owen Schwartz
73d1f9288d New translations en-us.json (Dutch) 2026-03-20 11:16:06 -07:00
Owen Schwartz
fb7e9f6898 New translations en-us.json (Korean) 2026-03-20 11:16:05 -07:00
Owen Schwartz
38e4b3077f New translations en-us.json (Italian) 2026-03-20 11:16:03 -07:00
Owen Schwartz
312cdc563b New translations en-us.json (German) 2026-03-20 11:16:02 -07:00
Owen Schwartz
48ff6dd705 New translations en-us.json (Czech) 2026-03-20 11:16:01 -07:00
Owen Schwartz
695e831090 New translations en-us.json (Bulgarian) 2026-03-20 11:15:59 -07:00
Owen Schwartz
046b431bb8 New translations en-us.json (French) 2026-03-20 11:15:58 -07:00
Owen
ce2704fc1a Merge branch 'dev' of github.com:fosrl/pangolin into dev 2026-03-20 11:04:45 -07:00
Owen Schwartz
7e89b36188 Merge pull request #2677 from fosrl/crowdin_dev
New Crowdin updates
2026-03-20 11:04:37 -07:00
Owen
222dd6bba3 Santize inserts 2026-03-20 10:27:18 -07:00
Owen
a1ce7f54a0 Continue to rebase 2026-03-20 09:17:10 -07:00
Owen
87524fe8ae Remove siteSiteResources 2026-03-19 21:53:52 -07:00
Owen
2093bb5357 Remove siteSiteResources 2026-03-19 21:44:59 -07:00
Owen Schwartz
ca9ab65228 New translations en-us.json (Spanish) 2026-03-19 21:38:08 -07:00
Owen Schwartz
ee4e8f7029 New translations en-us.json (Norwegian Bokmal) 2026-03-19 21:38:07 -07:00
Owen Schwartz
f86a1eb32b New translations en-us.json (Chinese Simplified) 2026-03-19 21:38:06 -07:00
Owen Schwartz
ffd648ed74 New translations en-us.json (Turkish) 2026-03-19 21:38:05 -07:00
Owen Schwartz
b2b72169fd New translations en-us.json (Russian) 2026-03-19 21:38:03 -07:00
Owen Schwartz
76746fb6e1 New translations en-us.json (Portuguese) 2026-03-19 21:38:02 -07:00
Owen Schwartz
6258787c73 New translations en-us.json (Polish) 2026-03-19 21:38:00 -07:00
Owen Schwartz
720080e487 New translations en-us.json (Dutch) 2026-03-19 21:37:59 -07:00
Owen Schwartz
46ad1317e4 New translations en-us.json (Korean) 2026-03-19 21:37:58 -07:00
Owen Schwartz
cd28720e46 New translations en-us.json (Italian) 2026-03-19 21:37:56 -07:00
Owen Schwartz
38af02ad3c New translations en-us.json (German) 2026-03-19 21:37:55 -07:00
Owen Schwartz
5eed547f91 New translations en-us.json (Czech) 2026-03-19 21:37:54 -07:00
Owen Schwartz
d363ee02ed New translations en-us.json (Bulgarian) 2026-03-19 21:37:53 -07:00
Owen Schwartz
594ee31f43 New translations en-us.json (French) 2026-03-19 21:37:51 -07:00
Owen
6f2e37948c Its many to one now 2026-03-19 21:30:00 -07:00
Owen
b7421e47cc Switch to using networks 2026-03-19 21:22:04 -07:00
Owen
56e25d01ae Fix spelling mistake 2026-03-19 20:54:05 -07:00
Fred KISSIE
e0fa5607e5 push 2026-03-20 04:37:57 +01:00
Fred KISSIE
572c9bf319 Merge branch 'dev' into feat/selector-filtering 2026-03-20 04:24:48 +01:00
Fred KISSIE
52cac4aa21 🚚 rename component 2026-03-20 04:17:35 +01:00
Fred KISSIE
e358d12765 ♻️ submit 2026-03-20 04:15:18 +01:00
Fred KISSIE
02697e27a4 ♻️ refactor 2026-03-20 04:02:51 +01:00
Fred KISSIE
ce58e71c44 ♻️ make machine selector a multi-combobox 2026-03-20 03:59:10 +01:00
Owen Schwartz
d9766b0f99 New translations en-us.json (Spanish) 2026-03-19 14:39:09 -07:00
Owen Schwartz
eeaa1d56ad New translations en-us.json (Norwegian Bokmal) 2026-03-19 14:39:07 -07:00
Owen Schwartz
e7f5bc585c New translations en-us.json (Chinese Simplified) 2026-03-19 14:39:06 -07:00
Owen Schwartz
4f26fb7750 New translations en-us.json (Turkish) 2026-03-19 14:39:04 -07:00
Owen Schwartz
cdbc190bfc New translations en-us.json (Russian) 2026-03-19 14:39:03 -07:00
Owen Schwartz
1b1f9ab4cf New translations en-us.json (Portuguese) 2026-03-19 14:39:02 -07:00
Owen Schwartz
2efe6cfdb3 New translations en-us.json (Polish) 2026-03-19 14:39:00 -07:00
Owen Schwartz
517c607ecf New translations en-us.json (Dutch) 2026-03-19 14:38:59 -07:00
Owen Schwartz
802e8f7a22 New translations en-us.json (Korean) 2026-03-19 14:38:57 -07:00
Owen Schwartz
c7cfe2efcb New translations en-us.json (Italian) 2026-03-19 14:38:56 -07:00
Owen Schwartz
ae1f36f39a New translations en-us.json (German) 2026-03-19 14:38:54 -07:00
Owen Schwartz
a479ef28ac New translations en-us.json (Czech) 2026-03-19 14:38:53 -07:00
Owen Schwartz
ce2cf50b5a New translations en-us.json (Bulgarian) 2026-03-19 14:38:52 -07:00
Owen Schwartz
f48d01acde New translations en-us.json (French) 2026-03-19 14:38:50 -07:00
Owen
991fed93ee Add warning when creating resource with provided 2026-03-19 14:26:14 -07:00
Owen
26ab63d0e4 Adjust remote node language 2026-03-19 12:10:58 -07:00
Owen
7cbe3d42a1 Working on refactoring 2026-03-19 12:10:04 -07:00
Owen
d8b511b198 Adjust create and update to be many to one 2026-03-18 20:54:49 -07:00
Owen
102a235407 Adjust schema for many to one site resources 2026-03-18 20:54:38 -07:00
Fred KISSIE
e15703164d ♻️ resource selector in create share link form 2026-03-19 04:44:24 +01:00
Fred KISSIE
8f33e25782 ♻️ use site selector on private resources 2026-03-19 01:18:27 +01:00
Fred KISSIE
722595c131 ♻️ make site selector popover its own component 2026-03-19 00:35:26 +01:00
Owen Schwartz
4843268537 Merge pull request #2552 from huzky-v/feat-add-bandwidth-reset-api
feat: Adding an organization sites bandwidth reset API
2026-03-18 16:17:43 -07:00
Fred KISSIE
c9be84a8a8 Merge branch 'dev' into feat/selector-filtering 2026-03-18 23:38:25 +01:00
Owen Schwartz
03288d2a60 Merge pull request #2667 from LaurenceJJones/feature/newt-ipv6-format-endpoint
fix(newt): Format ipv6 targets for go
2026-03-18 15:34:36 -07:00
Owen Schwartz
f60ae13e4e Merge pull request #2668 from LaurenceJJones/docs/improve-cloud-messaging
chore(readme): Reorder and promote cloud
2026-03-18 15:32:53 -07:00
Owen Schwartz
e72697f8b8 Merge pull request #2669 from fosrl/dependabot/npm_and_yarn/multi-577d045ab6
Bump fast-xml-parser and @aws-sdk/xml-builder
2026-03-18 15:30:46 -07:00
dependabot[bot]
0c3dc1ad14 Bump fast-xml-parser and @aws-sdk/xml-builder
Bumps [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser) and [@aws-sdk/xml-builder](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/packages-internal/xml-builder). These dependencies needed to be updated together.

Updates `fast-xml-parser` from 5.4.1 to 5.5.6
- [Release notes](https://github.com/NaturalIntelligence/fast-xml-parser/releases)
- [Changelog](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/NaturalIntelligence/fast-xml-parser/compare/v5.4.1...v5.5.6)

Updates `@aws-sdk/xml-builder` from 3.972.10 to 3.972.12
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/packages-internal/xml-builder/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/HEAD/packages-internal/xml-builder)

---
updated-dependencies:
- dependency-name: fast-xml-parser
  dependency-version: 5.5.6
  dependency-type: indirect
- dependency-name: "@aws-sdk/xml-builder"
  dependency-version: 3.972.12
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-18 22:30:09 +00:00
Owen Schwartz
840fe86f78 Merge pull request #2633 from fosrl/dependabot/npm_and_yarn/eslint-10.0.3
Bump eslint from 9.39.2 to 10.0.3
2026-03-18 15:28:51 -07:00
Owen Schwartz
e079927a5b Merge pull request #2579 from fosrl/dependabot/github_actions/actions/setup-go-6.3.0
Bump actions/setup-go from 6.2.0 to 6.3.0
2026-03-18 15:28:26 -07:00
dependabot[bot]
63379964fa Bump eslint from 9.39.2 to 10.0.3
Bumps [eslint](https://github.com/eslint/eslint) from 9.39.2 to 10.0.3.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/compare/v9.39.2...v10.0.3)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 10.0.3
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-18 22:28:22 +00:00
Owen Schwartz
0cfaf6ed7f Merge pull request #2580 from fosrl/dependabot/github_actions/actions/upload-artifact-7.0.0
Bump actions/upload-artifact from 6.0.0 to 7.0.0
2026-03-18 15:28:12 -07:00
Owen Schwartz
043ee9e9d2 Merge pull request #2620 from fosrl/dependabot/github_actions/actions/setup-node-6.3.0
Bump actions/setup-node from 6.2.0 to 6.3.0
2026-03-18 15:27:52 -07:00
dependabot[bot]
1d5dfd6db2 Bump github.com/charmbracelet/huh from 0.8.0 to 1.0.0 in /install
Bumps [github.com/charmbracelet/huh](https://github.com/charmbracelet/huh) from 0.8.0 to 1.0.0.
- [Release notes](https://github.com/charmbracelet/huh/releases)
- [Commits](https://github.com/charmbracelet/huh/compare/v0.8.0...v1.0.0)

---
updated-dependencies:
- dependency-name: github.com/charmbracelet/huh
  dependency-version: 1.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-18 22:27:43 +00:00
Owen Schwartz
b63e3e5888 Merge pull request #2621 from fosrl/dependabot/github_actions/docker/login-action-4.0.0
Bump docker/login-action from 3.7.0 to 4.0.0
2026-03-18 15:27:26 -07:00
Owen Schwartz
4f82470506 Merge pull request #2629 from fosrl/dependabot/npm_and_yarn/prod-minor-updates-47a8475ba0
Bump the prod-minor-updates group across 1 directory with 3 updates
2026-03-18 15:26:14 -07:00
Owen Schwartz
40e21b6f28 Merge pull request #2641 from fosrl/dependabot/go_modules/install/minor-updates-a98db8910e
Bump golang.org/x/term from 0.40.0 to 0.41.0 in /install in the minor-updates group
2026-03-18 15:25:44 -07:00
Owen Schwartz
67fab1928d Merge pull request #2656 from fosrl/dependabot/github_actions/sigstore/cosign-installer-4.1.0
Bump sigstore/cosign-installer from 4.0.0 to 4.1.0
2026-03-18 15:25:31 -07:00
Owen Schwartz
eb98374566 Merge pull request #2666 from fosrl/dependabot/npm_and_yarn/dev-patch-updates-6a5ea32984
Bump the dev-patch-updates group across 1 directory with 5 updates
2026-03-18 15:25:14 -07:00
miloschwartz
1169b68619 fix more info content on member page 2026-03-18 12:18:18 -07:00
Laurence
6c83e78256 chore(readme): Reorder and promote cloud
Simply moving the items around and improve the messaging around the cloud
2026-03-18 16:06:50 +00:00
Laurence
d3bfd67738 fix(newt): Format ipv6 targets for go
We added support https://github.com/fosrl/newt/releases/tag/1.10.3 for ipv6 targets from newt -> application, but we need to ensure that we handle if user provides a none bracketed ipv6 string
2026-03-18 13:26:38 +00:00
dependabot[bot]
0908f0f057 Bump the prod-minor-updates group across 1 directory with 3 updates
Bumps the prod-minor-updates group with 3 updates in the / directory: [@aws-sdk/client-s3](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-s3), [@simplewebauthn/browser](https://github.com/MasterKale/SimpleWebAuthn/tree/HEAD/packages/browser) and [@simplewebauthn/server](https://github.com/MasterKale/SimpleWebAuthn/tree/HEAD/packages/server).


Updates `@aws-sdk/client-s3` from 3.1004.0 to 3.1006.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-s3/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1006.0/clients/client-s3)

Updates `@simplewebauthn/browser` from 13.2.2 to 13.3.0
- [Release notes](https://github.com/MasterKale/SimpleWebAuthn/releases)
- [Changelog](https://github.com/MasterKale/SimpleWebAuthn/blob/master/CHANGELOG.md)
- [Commits](https://github.com/MasterKale/SimpleWebAuthn/commits/v13.3.0/packages/browser)

Updates `@simplewebauthn/server` from 13.2.3 to 13.3.0
- [Release notes](https://github.com/MasterKale/SimpleWebAuthn/releases)
- [Changelog](https://github.com/MasterKale/SimpleWebAuthn/blob/master/CHANGELOG.md)
- [Commits](https://github.com/MasterKale/SimpleWebAuthn/commits/v13.3.0/packages/server)

---
updated-dependencies:
- dependency-name: "@aws-sdk/client-s3"
  dependency-version: 3.1006.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: "@simplewebauthn/browser"
  dependency-version: 13.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: "@simplewebauthn/server"
  dependency-version: 13.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-18 01:37:21 +00:00
dependabot[bot]
2785449c7a Bump the dev-patch-updates group across 1 directory with 5 updates
Bumps the dev-patch-updates group with 5 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [@react-email/preview-server](https://github.com/resend/react-email/tree/HEAD/packages/preview-server) | `5.2.8` | `5.2.10` |
| [drizzle-kit](https://github.com/drizzle-team/drizzle-orm) | `0.31.9` | `0.31.10` |
| [eslint-config-next](https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next) | `16.1.6` | `16.1.7` |
| [postcss](https://github.com/postcss/postcss) | `8.5.6` | `8.5.8` |
| [react-email](https://github.com/resend/react-email/tree/HEAD/packages/react-email) | `5.2.8` | `5.2.10` |



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

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

Updates `eslint-config-next` from 16.1.6 to 16.1.7
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/commits/v16.1.7/packages/eslint-config-next)

Updates `postcss` from 8.5.6 to 8.5.8
- [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.6...8.5.8)

Updates `react-email` from 5.2.8 to 5.2.10
- [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@5.2.10/packages/react-email)

---
updated-dependencies:
- dependency-name: "@react-email/preview-server"
  dependency-version: 5.2.10
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: drizzle-kit
  dependency-version: 0.31.10
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: eslint-config-next
  dependency-version: 16.1.7
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: postcss
  dependency-version: 8.5.8
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: react-email
  dependency-version: 5.2.10
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-18 01:36:08 +00:00
dependabot[bot]
d2419ba572 Bump golang.org/x/term in /install in the minor-updates group
Bumps the minor-updates group in /install with 1 update: [golang.org/x/term](https://github.com/golang/term).


Updates `golang.org/x/term` from 0.40.0 to 0.41.0
- [Commits](https://github.com/golang/term/compare/v0.40.0...v0.41.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-18 01:34:08 +00:00
miloschwartz
d44292cf33 pass access token params to badger 2026-03-17 16:57:31 -07:00
Fred KISSIE
435cae06a2 ♻️ refactor 2026-03-17 04:16:24 +01:00
Fred KISSIE
18ed38889f ♻️ filter sites server side in resource target 2026-03-17 04:07:02 +01:00
Owen Schwartz
aed86ce4ba Merge pull request #2663 from fosrl/dev
change route name
2026-03-16 20:03:56 -07:00
miloschwartz
2c2be50b19 change route name 2026-03-16 20:02:57 -07:00
Owen Schwartz
e2db4c6246 Merge pull request #2662 from fosrl/batch-add-client-to-resources
batch add client to resources
2026-03-16 19:53:47 -07:00
miloschwartz
c4839fee08 Merge branch 'dev' into batch-add-client-to-resources 2026-03-16 17:58:37 -07:00
miloschwartz
965b7026f0 add batch endpoint 2026-03-16 17:58:20 -07:00
Owen
e14e15fcbb Revert: Also update lastPing for legacy 2026-03-16 17:47:06 -07:00
Owen Schwartz
4ca5acf158 Merge pull request #2660 from fosrl/dev
Also update lastPing for legacy
2026-03-16 17:13:10 -07:00
Owen
ea41fcc566 Also update lastPing for legacy 2026-03-16 17:12:37 -07:00
Owen Schwartz
5736c1d8ce Merge pull request #2659 from fosrl/dev
Small improvements
2026-03-16 16:37:26 -07:00
Owen
d142366dd9 Merge branch 'main' into dev 2026-03-16 16:32:28 -07:00
Owen
bab09dff95 Add better metadata to ssh 2026-03-16 15:33:21 -07:00
Owen
23d3345ab9 Reduce writes 2026-03-16 14:37:27 -07:00
Owen Schwartz
09a64815d4 Merge pull request #2657 from fosrl/hotfix-jit
Fix jit on by default
2026-03-15 22:02:12 -07:00
Owen
6d5f969798 Fix jit on by default 2026-03-15 22:01:39 -07:00
dependabot[bot]
10349932f4 Bump sigstore/cosign-installer from 4.0.0 to 4.1.0
Bumps [sigstore/cosign-installer](https://github.com/sigstore/cosign-installer) from 4.0.0 to 4.1.0.
- [Release notes](https://github.com/sigstore/cosign-installer/releases)
- [Commits](faadad0cce...ba7bc0a3fe)

---
updated-dependencies:
- dependency-name: sigstore/cosign-installer
  dependency-version: 4.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-16 01:35:18 +00:00
Owen Schwartz
9c430b37aa Merge pull request #2655 from fosrl/dev
1.16.2-s.8
2026-03-15 16:47:09 -07:00
Shlee
ad3fe2fa76 Update traefik_config.yml 2026-03-15 19:39:36 +10:30
Shlee
863eb8efe9 Update docker-compose.yml 2026-03-15 19:37:15 +10:30
Owen
86bba494fe Disable intervals in saas 2026-03-14 16:03:43 -07:00
Owen
1a43f1ef4b Handle newt online offline with websocket 2026-03-14 11:59:20 -07:00
Owen
75ab074805 Attempt to improve handling bandwidth tracking 2026-03-13 12:06:01 -07:00
Owen
dc4e0253de Add message compression for large messages 2026-03-13 11:46:03 -07:00
Laurence
47a99e35ee feat(installer): add default install directory with existing install detection
- Default to /opt/pangolin for new installations
  - Check current directory and /opt/pangolin for existing installs
  - Prompt to use existing install if found at default location
  - Offer to change directory ownership when running via sudo
  - Create installation directory if it doesn't exist
2026-03-13 11:38:00 +00:00
Owen
cccf236042 Add optional compression 2026-03-12 17:49:21 -07:00
Owen
63fd63c65c Send less data down 2026-03-12 17:27:15 -07:00
Owen
beee1d692d revert: telemetry comment 2026-03-12 17:11:13 -07:00
Owen
fde786ca84 Add todo 2026-03-12 17:10:46 -07:00
Owen
3086fdd064 Merge branch 'dev' into jit 2026-03-12 16:58:23 -07:00
Owen
6c30f6db31 Dont send site if it missing public key 2026-03-12 16:33:33 -07:00
Fred KISSIE
84b082e194 ♻️ show actual values for wireguard site credentials whenever possible 2026-03-12 23:36:35 +01:00
Owen
f021b73458 Add alert about domain error 2026-03-11 18:00:23 -07:00
Owen
74f4751bcc Dont show raw resource option unless remote node 2026-03-11 17:47:15 -07:00
Owen
e5bce4e180 Merge branch 'main' into dev 2026-03-11 15:55:59 -07:00
Owen
9b0e7b381c Fix error to gerbil 2026-03-11 15:49:03 -07:00
Owen
90afe5a7ac Log errors 2026-03-11 15:42:40 -07:00
Owen
b24de85157 Handle gerbil rejecting 0
Closes #2605
2026-03-11 15:06:26 -07:00
Owen
eda43dffe1 Fix not pulling wildcard cert updates 2026-03-11 15:06:26 -07:00
Owen
82c9a1eb70 Add demo link 2026-03-11 15:06:26 -07:00
Owen
a3d4553d14 Merge branch 'main' into dev 2026-03-11 14:53:55 -07:00
Owen
1cc5f59f66 Implement email and ip banning 2026-03-11 11:42:31 -07:00
Owen
4e2d88efdd Add some logging to debug 2026-03-11 11:42:28 -07:00
Owen
4975cabb2c Use native drizzle count 2026-03-11 11:42:28 -07:00
Owen
225591094f Clean up 2026-03-11 11:42:28 -07:00
Owen
82f88f2cd3 Reorder delete 2026-03-11 11:42:28 -07:00
Owen
99e6bd31b6 Bump dompurify 2026-03-10 16:47:03 -07:00
Owen
5c50590d7b Bump esbuild 2026-03-10 16:47:03 -07:00
Owen
072c89e704 Bump dompurify 2026-03-10 16:43:40 -07:00
Owen
dbdff6812d Bump esbuild 2026-03-10 16:31:19 -07:00
dependabot[bot]
42b9d5158d Bump the prod-minor-updates group across 1 directory with 10 updates
Bumps the prod-minor-updates group with 10 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [@aws-sdk/client-s3](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-s3) | `3.989.0` | `3.1003.0` |
| [express-rate-limit](https://github.com/express-rate-limit/express-rate-limit) | `8.2.1` | `8.3.0` |
| [ioredis](https://github.com/luin/ioredis) | `5.9.3` | `5.10.0` |
| [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) | `0.563.0` | `0.577.0` |
| [pg](https://github.com/brianc/node-postgres/tree/HEAD/packages/pg) | `8.19.0` | `8.20.0` |
| [posthog-node](https://github.com/PostHog/posthog-js/tree/HEAD/packages/node) | `5.26.0` | `5.28.0` |
| [react-day-picker](https://github.com/gpbl/react-day-picker) | `9.13.2` | `9.14.0` |
| [react-icons](https://github.com/react-icons/react-icons) | `5.5.0` | `5.6.0` |
| reodotdev | `1.0.0` | `1.1.0` |
| [stripe](https://github.com/stripe/stripe-node) | `20.3.1` | `20.4.0` |



Updates `@aws-sdk/client-s3` from 3.989.0 to 3.1003.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-s3/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1003.0/clients/client-s3)

Updates `express-rate-limit` from 8.2.1 to 8.3.0
- [Release notes](https://github.com/express-rate-limit/express-rate-limit/releases)
- [Commits](https://github.com/express-rate-limit/express-rate-limit/compare/v8.2.1...v8.3.0)

Updates `ioredis` from 5.9.3 to 5.10.0
- [Release notes](https://github.com/luin/ioredis/releases)
- [Changelog](https://github.com/redis/ioredis/blob/main/CHANGELOG.md)
- [Commits](https://github.com/luin/ioredis/compare/v5.9.3...v5.10.0)

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

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

Updates `posthog-node` from 5.26.0 to 5.28.0
- [Release notes](https://github.com/PostHog/posthog-js/releases)
- [Changelog](https://github.com/PostHog/posthog-js/blob/main/packages/node/CHANGELOG.md)
- [Commits](https://github.com/PostHog/posthog-js/commits/posthog-node@5.28.0/packages/node)

Updates `react-day-picker` from 9.13.2 to 9.14.0
- [Release notes](https://github.com/gpbl/react-day-picker/releases)
- [Changelog](https://github.com/gpbl/react-day-picker/blob/main/CHANGELOG.md)
- [Commits](https://github.com/gpbl/react-day-picker/compare/v9.13.2...v9.14.0)

Updates `react-icons` from 5.5.0 to 5.6.0
- [Release notes](https://github.com/react-icons/react-icons/releases)
- [Commits](https://github.com/react-icons/react-icons/compare/v5.5.0...v5.6.0)

Updates `reodotdev` from 1.0.0 to 1.1.0

Updates `stripe` from 20.3.1 to 20.4.0
- [Release notes](https://github.com/stripe/stripe-node/releases)
- [Changelog](https://github.com/stripe/stripe-node/blob/master/CHANGELOG.md)
- [Commits](https://github.com/stripe/stripe-node/compare/v20.3.1...v20.4.0)

---
updated-dependencies:
- dependency-name: "@aws-sdk/client-s3"
  dependency-version: 3.1003.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: express-rate-limit
  dependency-version: 8.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: ioredis
  dependency-version: 5.10.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: lucide-react
  dependency-version: 0.577.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: pg
  dependency-version: 8.20.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: posthog-node
  dependency-version: 5.28.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: react-day-picker
  dependency-version: 9.14.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: react-icons
  dependency-version: 5.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: reodotdev
  dependency-version: 1.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: stripe
  dependency-version: 20.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-10 16:30:13 -07:00
dependabot[bot]
2ba225299e Bump the dev-minor-updates group across 1 directory with 5 updates
Bumps the dev-minor-updates group with 5 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [@dotenvx/dotenvx](https://github.com/dotenvx/dotenvx) | `1.52.0` | `1.53.0` |
| [@tailwindcss/postcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-postcss) | `4.1.18` | `4.2.1` |
| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `25.2.3` | `25.3.5` |
| [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss) | `4.1.18` | `4.2.1` |
| [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) | `8.55.0` | `8.56.1` |



Updates `@dotenvx/dotenvx` from 1.52.0 to 1.53.0
- [Release notes](https://github.com/dotenvx/dotenvx/releases)
- [Changelog](https://github.com/dotenvx/dotenvx/blob/main/CHANGELOG.md)
- [Commits](https://github.com/dotenvx/dotenvx/compare/v1.52.0...v1.53.0)

Updates `@tailwindcss/postcss` from 4.1.18 to 4.2.1
- [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.2.1/packages/@tailwindcss-postcss)

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

Updates `tailwindcss` from 4.1.18 to 4.2.1
- [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.2.1/packages/tailwindcss)

Updates `typescript-eslint` from 8.55.0 to 8.56.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.56.1/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: "@dotenvx/dotenvx"
  dependency-version: 1.53.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-minor-updates
- dependency-name: "@tailwindcss/postcss"
  dependency-version: 4.2.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-minor-updates
- dependency-name: "@types/node"
  dependency-version: 25.3.5
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-minor-updates
- dependency-name: tailwindcss
  dependency-version: 4.2.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-minor-updates
- dependency-name: typescript-eslint
  dependency-version: 8.56.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-minor-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-10 16:30:00 -07:00
Owen
cc841d5640 Add some logging to debug 2026-03-10 14:24:57 -07:00
Shreyas Papinwar
fa0818d3fa fix: ensure Credenza dialog max-height 2026-03-10 10:07:36 -07:00
Owen
dec358c4cd Use native drizzle count 2026-03-10 10:03:49 -07:00
Shreyas Papinwar
5455d1c118 fix: add locale to myDevice user query to fix type error 2026-03-10 12:33:05 +05:30
Shreyas Papinwar
ae39084a75 fix: persist user locale preference to database (#1547) 2026-03-10 12:21:06 +05:30
Owen
e98f873f81 Clean up 2026-03-09 21:16:37 -07:00
Owen
e9a2a7e752 Reorder delete 2026-03-09 20:46:27 -07:00
Owen
06015d5191 Handle gerbil rejecting 0
Closes #2605
2026-03-09 17:35:25 -07:00
Owen
af688d2a23 Add demo link 2026-03-09 17:35:04 -07:00
Owen
7d0b3ec6b5 Fix not pulling wildcard cert updates 2026-03-09 17:34:48 -07:00
Owen
cf5fb8dc33 Working on jit 2026-03-09 16:36:13 -07:00
Rodney Osodo
27d20eb1bc refactor(install): improve resource cleanup and remove unused funcs
Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>
2026-03-09 11:17:36 +03:00
dependabot[bot]
2e2684c695 Bump docker/login-action from 3.7.0 to 4.0.0
Bumps [docker/login-action](https://github.com/docker/login-action) from 3.7.0 to 4.0.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](c94ce9fb46...b45d80f862)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-09 01:36:08 +00:00
dependabot[bot]
7e2fd8f49d Bump actions/setup-node from 6.2.0 to 6.3.0
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 6.2.0 to 6.3.0.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](6044e13b5d...53b83947a5)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: 6.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-09 01:36:02 +00:00
Owen Schwartz
9a0a255445 Merge pull request #2524 from shreyaspapi/fix/2294-path-based-routing
fix: path-based routing broken due to key collisions in sanitize()
2026-03-07 21:18:59 -08:00
Owen Schwartz
91b7ceb2cf Merge pull request #2603 from Fizza-Mukhtar/fix/prevent-dashboard-domain-conflict-2595
fix: prevent resource from being created with dashboard's domain to avoid redirect loop
2026-03-07 21:15:53 -08:00
Owen Schwartz
d5a37436c0 Merge pull request #2616 from LaurenceJJones/fix/issue-240-hcStatus-missing
fix(newt): missing hcStatus in hc config on reconnect
2026-03-07 21:14:27 -08:00
Laurence
be609b5000 Fix missing hcStatus field in health check config on reconnect
The buildTargetConfigurationForNewtClient function was not including the
  hcStatus field when building health check targets for the newt/wg/connect
  message. This caused custom expected response codes (e.g., 409) to revert
  to the default 2xx range check after Pangolin server restart.

  Added hcStatus to both the database select query and the returned health
  check target object, matching the behavior in targets.ts addTargets.
2026-03-07 06:28:10 +00:00
Owen
0503c6e66e Handle JIT for ssh 2026-03-06 15:49:17 -08:00
Owen Schwartz
d4b830b9bb Merge pull request #2613 from fosrl/dependabot/npm_and_yarn/multi-43b302174d
Bump fast-xml-parser and @aws-sdk/xml-builder
2026-03-06 14:16:27 -08:00
dependabot[bot]
14d6ff25a7 Bump fast-xml-parser and @aws-sdk/xml-builder
Bumps [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser) and [@aws-sdk/xml-builder](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/packages-internal/xml-builder). These dependencies needed to be updated together.

Updates `fast-xml-parser` from 5.3.6 to 5.4.1
- [Release notes](https://github.com/NaturalIntelligence/fast-xml-parser/releases)
- [Changelog](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/NaturalIntelligence/fast-xml-parser/compare/v5.3.6...v5.4.1)

Updates `@aws-sdk/xml-builder` from 3.972.5 to 3.972.10
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/packages-internal/xml-builder/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/HEAD/packages-internal/xml-builder)

---
updated-dependencies:
- dependency-name: fast-xml-parser
  dependency-version: 5.4.1
  dependency-type: indirect
- dependency-name: "@aws-sdk/xml-builder"
  dependency-version: 3.972.10
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-06 22:14:56 +00:00
Owen Schwartz
1f62f305ce Merge pull request #2611 from fosrl/dependabot/npm_and_yarn/express-rate-limit-8.2.2
Bump express-rate-limit from 8.2.1 to 8.2.2
2026-03-06 14:13:32 -08:00
Owen
9405b0b70a Force jit above site limit 2026-03-06 14:09:57 -08:00
Owen
a26ee4ac1a Adjust billing upgrade language 2026-03-06 12:17:26 -08:00
dependabot[bot]
cebcf3e337 Bump express-rate-limit from 8.2.1 to 8.2.2
Bumps [express-rate-limit](https://github.com/express-rate-limit/express-rate-limit) from 8.2.1 to 8.2.2.
- [Release notes](https://github.com/express-rate-limit/express-rate-limit/releases)
- [Commits](https://github.com/express-rate-limit/express-rate-limit/compare/v8.2.1...v8.2.2)

---
updated-dependencies:
- dependency-name: express-rate-limit
  dependency-version: 8.2.2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-06 18:40:41 +00:00
Fizza-Mukhtar
4cfcc64481 fix: use config instead of process.env for dashboard URL check 2026-03-05 01:07:30 -08:00
Fizza-Mukhtar
1a2069a6d9 fix: prevent resource creation with dashboard domain to avoid redirect loop 2026-03-05 00:39:03 -08:00
Owen
2a5c9465e9 Add chainId field passthrough 2026-03-04 22:17:58 -08:00
Owen
f36b66e397 Merge branch 'dev' into jit 2026-03-04 17:58:50 -08:00
Owen
8c6d44677d Update lock 2026-03-04 17:48:58 -08:00
Owen
1bfff630bf Jit working for sites 2026-03-04 17:46:58 -08:00
miloschwartz
ebcef28b05 remove resend from config 2026-03-04 17:45:48 -08:00
miloschwartz
e87e12898c remove resend 2026-03-04 17:45:22 -08:00
miloschwartz
d60ab281cf remove resend from package.json 2026-03-04 17:42:25 -08:00
Owen Schwartz
483d54a9f0 Merge pull request #2598 from fosrl/marketing-consetn
add consent boolean to schema
2026-03-04 15:52:08 -08:00
miloschwartz
0ab6ff9148 add consent boolean to schema 2026-03-04 15:50:42 -08:00
Owen
c73a39f797 Allow JIT based on site or resource 2026-03-04 15:44:27 -08:00
Owen Schwartz
c87b6872e5 Merge pull request #2594 from fosrl/dev
Translations
2026-03-03 21:37:56 -08:00
Owen Schwartz
f315c8bc43 Merge pull request #2569 from fosrl/crowdin_dev
New Crowdin updates
2026-03-03 21:34:23 -08:00
Owen Schwartz
20fa1519fd New translations en-us.json (French) 2026-03-03 21:33:01 -08:00
Owen Schwartz
54430afc40 New translations en-us.json (Norwegian Bokmal) 2026-03-03 21:32:59 -08:00
Owen Schwartz
7990d08fee New translations en-us.json (Chinese Simplified) 2026-03-03 21:32:58 -08:00
Owen Schwartz
e9042d9e2e New translations en-us.json (Turkish) 2026-03-03 21:32:57 -08:00
Owen Schwartz
24a15841e4 New translations en-us.json (Russian) 2026-03-03 21:32:55 -08:00
Owen Schwartz
bb8f6e09fd New translations en-us.json (Portuguese) 2026-03-03 21:32:54 -08:00
Owen Schwartz
04bc8ab694 New translations en-us.json (Polish) 2026-03-03 21:32:52 -08:00
Owen Schwartz
6ac8335cf2 New translations en-us.json (Dutch) 2026-03-03 21:32:51 -08:00
Owen Schwartz
4c6144f8fb New translations en-us.json (Korean) 2026-03-03 21:32:50 -08:00
Owen Schwartz
255003794e New translations en-us.json (Italian) 2026-03-03 21:32:48 -08:00
Owen Schwartz
119d5c79a0 New translations en-us.json (German) 2026-03-03 21:32:47 -08:00
Owen Schwartz
8e2d7c25df New translations en-us.json (Czech) 2026-03-03 21:32:46 -08:00
Owen Schwartz
753dee3023 New translations en-us.json (Bulgarian) 2026-03-03 21:32:44 -08:00
Owen Schwartz
cac0272952 New translations en-us.json (Spanish) 2026-03-03 21:32:43 -08:00
Owen Schwartz
ee5b74f9fc Merge pull request #2593 from fosrl/dev
1.16.2-s.2
2026-03-03 21:17:10 -08:00
Owen
1362b72cd3 Restrict what can be a header 2026-03-03 21:10:52 -08:00
Owen Schwartz
35b1566962 New translations en-us.json (French) 2026-03-03 20:42:42 -08:00
Owen Schwartz
a4bcce5a0c New translations en-us.json (Norwegian Bokmal) 2026-03-03 20:42:40 -08:00
Owen Schwartz
c03f1946e8 New translations en-us.json (Chinese Simplified) 2026-03-03 20:42:39 -08:00
Owen Schwartz
c11e107758 New translations en-us.json (Turkish) 2026-03-03 20:42:37 -08:00
Owen Schwartz
3b4e49f63a New translations en-us.json (Russian) 2026-03-03 20:42:36 -08:00
Owen Schwartz
ea7253f7e8 New translations en-us.json (Portuguese) 2026-03-03 20:42:34 -08:00
Owen Schwartz
8a529f7946 New translations en-us.json (Polish) 2026-03-03 20:42:33 -08:00
Owen Schwartz
e76612e018 New translations en-us.json (Dutch) 2026-03-03 20:42:31 -08:00
Owen Schwartz
e1f99985d8 New translations en-us.json (Korean) 2026-03-03 20:42:30 -08:00
Owen Schwartz
e0c2735635 New translations en-us.json (Italian) 2026-03-03 20:42:28 -08:00
Owen Schwartz
8e6b4e243d New translations en-us.json (German) 2026-03-03 20:42:27 -08:00
Owen Schwartz
2623fa8f02 New translations en-us.json (Czech) 2026-03-03 20:42:25 -08:00
Owen Schwartz
7ff92d32cd New translations en-us.json (Bulgarian) 2026-03-03 20:42:24 -08:00
Owen Schwartz
c7f691b20a New translations en-us.json (Spanish) 2026-03-03 20:42:23 -08:00
Owen
db042e520e Adjust language 2026-03-03 20:34:56 -08:00
miloschwartz
4cab693cfc openapi and swagger ui improvements and cleanup 2026-03-03 14:54:17 -08:00
Owen
c9515ae77c Add comment about not needing exit node 2026-03-03 14:54:17 -08:00
miloschwartz
d14de86f65 fix org selector spacing on mobile 2026-03-03 14:54:17 -08:00
Laurence
f6ee9db730 enhance(sidebar): make mobile org selector sticky
Make org selector sticky on mobile sidebar

  Move OrgSelector outside the scrollable container so it stays fixed
  at the top while menu items scroll, matching the desktop sidebar
  behavior introduced in 9b2c0d0b.
2026-03-03 14:54:17 -08:00
ChanningHe
94353aea44 feat(integration): add domain CRUD endpoints to integration API 2026-03-03 14:54:17 -08:00
Owen
b01fcc70fe Fix ts and add note about ipv4 2026-03-03 14:45:18 -08:00
miloschwartz
ed95f10fcc openapi and swagger ui improvements and cleanup 2026-03-02 21:59:41 -08:00
Owen
35fed74e49 Merge branch 'dev' into msg-opt 2026-03-02 18:52:35 -08:00
Owen
64bae5b142 Merge branch 'main' into dev 2026-03-02 18:52:20 -08:00
Owen
6cf1b9b010 Support improved targets msg v2 2026-03-02 18:51:48 -08:00
Owen
dae169540b Fix defaults for orgs 2026-03-02 16:49:17 -08:00
Owen
19f9dda490 Add comment about not needing exit node 2026-03-02 16:28:01 -08:00
dependabot[bot]
a060c8029f Bump actions/upload-artifact from 6.0.0 to 7.0.0
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 6.0.0 to 7.0.0.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](b7c566a772...bbbca2ddaa)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: 7.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-02 01:36:11 +00:00
dependabot[bot]
aca9d1e070 Bump actions/setup-go from 6.2.0 to 6.3.0
Bumps [actions/setup-go](https://github.com/actions/setup-go) from 6.2.0 to 6.3.0.
- [Release notes](https://github.com/actions/setup-go/releases)
- [Commits](7a3fe6cf4c...4b73464bb3)

---
updated-dependencies:
- dependency-name: actions/setup-go
  dependency-version: 6.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-02 01:36:05 +00:00
Owen Schwartz
cdf79edb00 Merge pull request #2570 from Fizza-Mukhtar/fix/mixed-target-failover-2448
fix: local targets ignored when newt site is unhealthy (mixed target failover)
2026-03-01 15:58:25 -08:00
Owen Schwartz
df53dfc936 New translations en-us.json (French) 2026-03-01 11:17:30 -08:00
Owen Schwartz
8e2e09ab81 New translations en-us.json (Norwegian Bokmal) 2026-03-01 11:17:28 -08:00
Owen Schwartz
1eac7cbccd New translations en-us.json (Chinese Simplified) 2026-03-01 11:17:27 -08:00
Owen Schwartz
ddaaed65e4 New translations en-us.json (Turkish) 2026-03-01 11:17:26 -08:00
Owen Schwartz
8e633c21c7 New translations en-us.json (Russian) 2026-03-01 11:17:24 -08:00
Owen Schwartz
e7c4ef44d8 New translations en-us.json (Portuguese) 2026-03-01 11:17:23 -08:00
Owen Schwartz
3d71470bd2 New translations en-us.json (Polish) 2026-03-01 11:17:21 -08:00
Owen Schwartz
dd627a222e New translations en-us.json (Dutch) 2026-03-01 11:17:20 -08:00
Owen Schwartz
62cc20fa1c New translations en-us.json (Korean) 2026-03-01 11:17:19 -08:00
Owen Schwartz
0450fc9f57 New translations en-us.json (Italian) 2026-03-01 11:17:17 -08:00
Owen Schwartz
c58aaf5ba6 New translations en-us.json (German) 2026-03-01 11:17:16 -08:00
Owen Schwartz
655522d4e2 New translations en-us.json (Czech) 2026-03-01 11:17:15 -08:00
Owen Schwartz
225475dcae New translations en-us.json (Bulgarian) 2026-03-01 11:17:13 -08:00
Owen Schwartz
ccb977fdfb New translations en-us.json (Spanish) 2026-03-01 11:17:12 -08:00
Milo Schwartz
280cbb6e22 Merge pull request #2553 from LaurenceJJones/explore/static-org-dropdown
enhance(sidebar): make mobile org selector sticky
2026-03-01 11:14:16 -08:00
miloschwartz
c20babcb53 fix org selector spacing on mobile 2026-03-01 11:13:49 -08:00
Owen Schwartz
768eebe2cd Merge pull request #2432 from ChanningHe/feat-integration-api-domain-crud
feat(integration): add domain CRUD endpoints to integration API
2026-03-01 11:12:05 -08:00
Owen Schwartz
44e3eedffa Merge pull request #2567 from marcschaeferger/fix-kubernetes-install
feat(kubernetes): enable newtInstances by default and update installation instructions
2026-03-01 10:56:18 -08:00
Marc Schäfer
bb189874cb fix(newt-install): conditionally display Kubernetes installation info
Signed-off-by: Marc Schäfer <git@marcschaeferger.de>
2026-03-01 10:55:58 -08:00
Marc Schäfer
34dadd0e16 feat(kubernetes): enable newtInstances by default and update installation instructions
Signed-off-by: Marc Schäfer <git@marcschaeferger.de>
2026-03-01 10:55:58 -08:00
Owen Schwartz
87b5cd9988 Merge pull request #2573 from Fizza-Mukhtar/fix/container-search-excludes-labels-2228
fix: exclude labels from container search to prevent false positives
2026-03-01 10:52:50 -08:00
Marc Schäfer
6a537a23e8 fix(newt-install): conditionally display Kubernetes installation info
Signed-off-by: Marc Schäfer <git@marcschaeferger.de>
2026-03-01 18:17:45 +01:00
Fizza-Mukhtar
e63a6e9b77 fix: treat local and wireguard sites as online for failover 2026-03-01 07:56:47 -08:00
Fizza-Mukhtar
7ce589c4f2 fix: exclude labels from container search to prevent false positives 2026-03-01 06:50:03 -08:00
Shreyas Papinwar
75a909784a fix: simplify path encoding per review — inline utils, use single key scheme
Address PR review comments:
- Remove pathUtils.ts and move sanitize/encodePath directly into utils.ts
- Simplify dual-key approach to single key using encodePath for map keys
- Remove backward-compat logic (not needed per reviewer)
- Update tests to match simplified approach
2026-03-01 15:48:26 +05:30
Shreyas
244f497a9c test: add comprehensive backward compatibility tests for path routing fix 2026-03-01 15:48:26 +05:30
Shreyas
e58f0c9f07 fix: preserve backward-compatible router names while fixing path collisions
Use encodePath only for internal map key grouping (collision-free) and
sanitize for Traefik-facing router/service names (unchanged for existing
users). Extract pure functions into pathUtils.ts so tests can run without
DB dependencies.
2026-03-01 15:48:26 +05:30
Shreyas
5f18c06e03 fix: use collision-free path encoding for Traefik router key generation 2026-03-01 15:48:26 +05:30
Fizza-Mukhtar
f36cf06e26 fix: fallback to local targets when newt targets are unhealthy 2026-03-01 01:43:15 -08:00
Owen Schwartz
27d52646a0 New translations en-us.json (Norwegian Bokmal) 2026-02-28 20:13:31 -08:00
Owen Schwartz
4dd8080c55 New translations en-us.json (Chinese Simplified) 2026-02-28 20:13:29 -08:00
Owen Schwartz
0b35d4f2e3 New translations en-us.json (Turkish) 2026-02-28 20:13:28 -08:00
Owen Schwartz
54a9fb9e54 New translations en-us.json (Russian) 2026-02-28 20:13:27 -08:00
Owen Schwartz
60a9e68f02 New translations en-us.json (Portuguese) 2026-02-28 20:13:25 -08:00
Owen Schwartz
ad374298e3 New translations en-us.json (Polish) 2026-02-28 20:13:24 -08:00
Owen Schwartz
c5dc4e6127 New translations en-us.json (Dutch) 2026-02-28 20:13:22 -08:00
Owen Schwartz
291ad831c5 New translations en-us.json (Korean) 2026-02-28 20:13:21 -08:00
Owen Schwartz
0a018f0ca8 New translations en-us.json (Italian) 2026-02-28 20:13:20 -08:00
Owen Schwartz
6673eeb1bb New translations en-us.json (German) 2026-02-28 20:13:18 -08:00
Owen Schwartz
4641f0b9ef New translations en-us.json (Czech) 2026-02-28 20:13:17 -08:00
Owen Schwartz
a4487964e5 New translations en-us.json (Bulgarian) 2026-02-28 20:13:15 -08:00
Owen Schwartz
fe42fdd1ec New translations en-us.json (Spanish) 2026-02-28 20:13:14 -08:00
Marc Schäfer
375211f184 feat(kubernetes): enable newtInstances by default and update installation instructions
Signed-off-by: Marc Schäfer <git@marcschaeferger.de>
2026-02-28 23:56:28 +01:00
Owen
66c377a5c9 Merge branch 'main' into dev 2026-02-28 12:14:41 -08:00
Owen
50c2aa0111 Add default memory limits 2026-02-28 12:14:27 -08:00
Owen
fdeb891137 Fix pagination effecting drop downs 2026-02-28 12:07:42 -08:00
Owen Schwartz
6a6e3a43b1 Merge pull request #2562 from LaurenceJJones/fix/zod-openapi-catch-error
fix(zod): Add openapi call after catch
2026-02-28 11:04:10 -08:00
Laurence
b0a34fa21b fix(openapi): Add openapi call after catch
fix: #2561
without making an explicit call to openapi a runtime error happens because it cannot infer the type, the call to openapi is the same across the codebase
2026-02-28 11:27:19 +00:00
Jacky Fong
5c4de03588 add reset bandwidth api for site
Change endpoint

update to reset all site in the organization

move the logic to organization

move the permission to organization
2026-02-28 15:47:03 +08:00
Owen
72bf6f3c41 Comma seperated 2026-02-27 17:53:44 -08:00
miloschwartz
ad9289e0c1 sort by name by default 2026-02-27 15:53:27 -08:00
Owen Schwartz
b0cb0e5a99 Merge pull request #2559 from fosrl/dev
1.16.1
2026-02-27 12:40:23 -08:00
miloschwartz
8347203bbe add sort to name col 2026-02-27 12:39:26 -08:00
miloschwartz
4aa1186aed fix machine client pagination 2026-02-27 11:59:55 -08:00
Owen
eed87af61d Use ecr base to build 2026-02-26 21:43:14 -08:00
Owen
daeea8e7ea Add alises to quieries
Fixes #2556
2026-02-26 21:37:47 -08:00
Owen
0d63a15715 Merge branch 'main' into dev 2026-02-26 20:14:41 -08:00
miloschwartz
fa2e229ada support authPath in device login 2026-02-26 14:59:34 -08:00
Laurence
81c1a1da9c enhance(sidebar): make mobile org selector sticky
Make org selector sticky on mobile sidebar

  Move OrgSelector outside the scrollable container so it stays fixed
  at the top while menu items scroll, matching the desktop sidebar
  behavior introduced in 9b2c0d0b.
2026-02-26 15:45:41 +00:00
Owen
5d9700d84c Update sum 2026-02-25 16:46:20 -08:00
Owen
f8a8cdaa5f Show enterprise tier 2026-02-25 16:45:35 -08:00
Owen
e23e446476 Fix rule violations of dynamic import 2026-02-25 16:35:57 -08:00
Owen
fa097df50b Dont maxmind on oss or enterprise 2026-02-25 16:26:33 -08:00
Owen
75f34ff127 Stub cache 2026-02-25 16:17:06 -08:00
Owen
c9586b4d93 Remove postgres logs from private config file 2026-02-25 16:09:26 -08:00
Owen
52937a6d90 Make sshCA GA 2026-02-25 16:04:47 -08:00
Owen Schwartz
186c131cce Merge pull request #2543 from fosrl/dev
1.16.0-rc.0
2026-02-25 15:51:42 -08:00
Owen Schwartz
8de3f9a440 Merge pull request #2542 from fosrl/crowdin_dev
New Crowdin updates
2026-02-25 15:49:34 -08:00
Owen Schwartz
ea49e179f9 New translations en-us.json (Norwegian Bokmal) 2026-02-25 15:48:16 -08:00
Owen Schwartz
485f4f1c8e New translations en-us.json (Chinese Simplified) 2026-02-25 15:48:15 -08:00
Owen Schwartz
5fb35d12d7 New translations en-us.json (Turkish) 2026-02-25 15:48:13 -08:00
Owen Schwartz
ec8a9fe3d2 New translations en-us.json (Russian) 2026-02-25 15:48:12 -08:00
Owen Schwartz
411a34e15e New translations en-us.json (Portuguese) 2026-02-25 15:48:11 -08:00
Owen Schwartz
3df71fd2bc New translations en-us.json (Polish) 2026-02-25 15:48:09 -08:00
Owen Schwartz
5e1f6085e3 New translations en-us.json (Dutch) 2026-02-25 15:48:08 -08:00
Owen Schwartz
53fc7ab6e3 New translations en-us.json (Korean) 2026-02-25 15:48:07 -08:00
Owen Schwartz
7779ed24fe New translations en-us.json (Italian) 2026-02-25 15:48:05 -08:00
Owen Schwartz
6e4193dae3 New translations en-us.json (German) 2026-02-25 15:48:04 -08:00
Owen Schwartz
f138609f48 New translations en-us.json (Czech) 2026-02-25 15:48:02 -08:00
Owen Schwartz
98154b5de3 New translations en-us.json (Bulgarian) 2026-02-25 15:48:01 -08:00
Owen Schwartz
6322fd9eef New translations en-us.json (Spanish) 2026-02-25 15:47:59 -08:00
Owen Schwartz
1c0949e957 New translations en-us.json (French) 2026-02-25 15:47:58 -08:00
ChanningHe
52f26396ac feat(integration): add domain CRUD endpoints to integration API 2026-02-26 08:44:55 +09:00
Owen
c3847e6001 Prefix usernames 2026-02-25 15:36:22 -08:00
Owen
5cf13a963d Add missing saving username 2026-02-25 15:30:34 -08:00
miloschwartz
b017877826 hide ssh access tab for cidr resources 2026-02-25 14:49:28 -08:00
Owen
959f68b520 Restrict cidr resource 2026-02-25 14:43:47 -08:00
Owen
14cab3fdb8 Update phrase 2026-02-25 14:37:52 -08:00
Owen
b8d468f6de Bump version 2026-02-25 14:22:24 -08:00
Owen
fc66394243 Merge branch 'main' into dev 2026-02-25 14:18:22 -08:00
miloschwartz
8fca243c9a update tierMatrix 2026-02-25 11:59:16 -08:00
miloschwartz
388f710379 add pg migration 2026-02-25 11:37:31 -08:00
Owen Schwartz
ba3ab4362b Merge pull request #2539 from fosrl/dependabot/npm_and_yarn/prod-minor-updates-22e7e52815
Bump the prod-minor-updates group across 1 directory with 3 updates
2026-02-25 11:32:19 -08:00
miloschwartz
e18c9afc2d add sqlite migration 2026-02-25 11:24:32 -08:00
Owen Schwartz
a9b4a86c4a Merge pull request #2470 from fosrl/dependabot/npm_and_yarn/qs-6.14.2
Bump qs from 6.14.1 to 6.14.2
2026-02-25 11:05:46 -08:00
Owen Schwartz
200ea502dd Merge pull request #2484 from fosrl/dependabot/go_modules/install/minor-updates-80eb8af454
Bump golang.org/x/term from 0.39.0 to 0.40.0 in /install in the minor-updates group
2026-02-25 11:05:34 -08:00
dependabot[bot]
de36db97eb Bump the prod-minor-updates group across 1 directory with 3 updates
Bumps the prod-minor-updates group with 3 updates in the / directory: [pg](https://github.com/brianc/node-postgres/tree/HEAD/packages/pg), [posthog-node](https://github.com/PostHog/posthog-js/tree/HEAD/packages/node) and [tailwind-merge](https://github.com/dcastil/tailwind-merge).


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

Updates `posthog-node` from 5.24.15 to 5.26.0
- [Release notes](https://github.com/PostHog/posthog-js/releases)
- [Changelog](https://github.com/PostHog/posthog-js/blob/main/packages/node/CHANGELOG.md)
- [Commits](https://github.com/PostHog/posthog-js/commits/posthog-node@5.26.0/packages/node)

Updates `tailwind-merge` from 3.4.0 to 3.5.0
- [Release notes](https://github.com/dcastil/tailwind-merge/releases)
- [Commits](https://github.com/dcastil/tailwind-merge/compare/v3.4.0...v3.5.0)

---
updated-dependencies:
- dependency-name: pg
  dependency-version: 8.19.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: posthog-node
  dependency-version: 5.26.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
- dependency-name: tailwind-merge
  dependency-version: 3.5.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: prod-minor-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-25 19:03:51 +00:00
dependabot[bot]
30283b044f Bump golang.org/x/term in /install in the minor-updates group
Bumps the minor-updates group in /install with 1 update: [golang.org/x/term](https://github.com/golang/term).


Updates `golang.org/x/term` from 0.39.0 to 0.40.0
- [Commits](https://github.com/golang/term/compare/v0.39.0...v0.40.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-25 19:01:31 +00:00
Owen Schwartz
055bed8a07 Merge pull request #2338 from fosrl/dependabot/github_actions/actions/checkout-6.0.2
Bump actions/checkout from 6.0.1 to 6.0.2
2026-02-25 11:00:55 -08:00
Owen Schwartz
12b5c2ab34 Merge pull request #2495 from fosrl/dependabot/npm_and_yarn/dev-patch-updates-ebb414287f
Bump @types/nodemailer from 7.0.9 to 7.0.10 in the dev-patch-updates group across 1 directory
2026-02-25 11:00:24 -08:00
Owen Schwartz
dd78674888 Merge pull request #2514 from fosrl/dependabot/npm_and_yarn/multi-60f2582fdd
Bump fast-xml-parser and @aws-sdk/xml-builder
2026-02-25 11:00:15 -08:00
Owen Schwartz
0d0df63847 Merge pull request #2518 from fosrl/dependabot/github_actions/actions/stale-10.2.0
Bump actions/stale from 10.1.1 to 10.2.0
2026-02-25 11:00:01 -08:00
Owen Schwartz
3ab00d9da8 Merge pull request #2527 from fosrl/dependabot/npm_and_yarn/prod-patch-updates-cbac17d765
Bump the prod-patch-updates group across 1 directory with 7 updates
2026-02-25 10:59:38 -08:00
Owen Schwartz
3e6e72c5c7 Merge pull request #2531 from fosrl/dependabot/npm_and_yarn/multi-40a89e2d0a
Bump minimatch
2026-02-25 10:59:08 -08:00
Owen Schwartz
5d8a55f08c Merge pull request #2415 from fosrl/dependabot/github_actions/aws-actions/configure-aws-credentials-6
Bump aws-actions/configure-aws-credentials from 5 to 6
2026-02-25 10:58:18 -08:00
Owen Schwartz
81c569aae4 Merge pull request #2393 from fosrl/dependabot/github_actions/docker/login-action-3.7.0
Bump docker/login-action from 3.6.0 to 3.7.0
2026-02-25 10:58:11 -08:00
Owen Schwartz
88fd3fc4da Merge pull request #2296 from fosrl/dependabot/npm_and_yarn/lodash-4.17.23
Bump lodash from 4.17.21 to 4.17.23
2026-02-25 10:58:02 -08:00
Owen
2282d3ae39 Fix formatting 2026-02-25 10:53:56 -08:00
Owen
c4dcec463a Merge branch 'dev' into LaurenceJJones-feature/installer-tui 2026-02-25 10:48:05 -08:00
Owen
5b7f893ad7 Merge branch 'main' into dev 2026-02-25 10:46:28 -08:00
Owen
2ede0d498a remove log 2026-02-25 10:46:20 -08:00
Owen
f518e8a0ff Merge branch 'feature/installer-tui' of github.com:LaurenceJJones/pangolin into LaurenceJJones-feature/installer-tui 2026-02-25 10:45:38 -08:00
Owen Schwartz
767284408a Merge pull request #2499 from LaurenceJJones/feature/build-variables
enhance(installer): use ldflags to inject versions
2026-02-25 10:42:04 -08:00
Owen Schwartz
eef51f3b84 Merge pull request #2491 from rodneyosodo/fix/install
fix(install): add error handling, code cleanups, and YAML type refactor
2026-02-25 10:41:03 -08:00
Owen Schwartz
69b7114a49 Merge pull request #2537 from Abhinav-kodes/fix/toggle-hydration-sync
fix: sync resource toggle states with context on initial load
2026-02-25 10:36:58 -08:00
Owen Schwartz
0ea38ea568 Merge pull request #2535 from Abhinav-kodes/fix-resource-session-delete-cookie
fix: correct session DELETE tautology and HTTP cookie domain interpolation
2026-02-25 10:35:09 -08:00
Abhinav-kodes
c600da71e3 fix: sync resource toggle states with context on initial load
- Replace defaultChecked with checked for controlled components
- Add useEffect to sync rulesEnabled, ssoEnabled, whitelistEnabled
  when resource context hydrates after mount
- Add nullish coalescing fallback to prevent undefined initial state
2026-02-25 22:07:08 +05:30
Abhinav-kodes
c64dd14b1a fix: correct session DELETE tautology and HTTP cookie domain interpolation 2026-02-25 17:24:27 +05:30
miloschwartz
8ea6d9fa67 add get user by username search endpoint to integration api 2026-02-24 22:04:15 -08:00
Owen
978ac8f53c Add logging 2026-02-24 20:51:27 -08:00
Owen
49a326cde7 Add trust proxy to the internal api
Fix access logs not having the right ip
2026-02-24 20:23:42 -08:00
Owen
63e208f4ec Use local cache in verify session 2026-02-24 19:56:16 -08:00
Owen
f50d1549b0 Update cache to use redis 2026-02-24 19:50:42 -08:00
Owen
55e24df671 Check and prefer user token if provided 2026-02-24 19:48:32 -08:00
Owen
b37e1d0cc0 Use debian slim; alpine broken? 2026-02-24 19:48:16 -08:00
Owen
afa26c0dd4 Exclude migrations? 2026-02-24 19:48:08 -08:00
miloschwartz
c71f46ede5 move copy button and fix translation 2026-02-24 19:44:08 -08:00
miloschwartz
20e547a0f6 first pass 2026-02-24 17:58:11 -08:00
dependabot[bot]
2edebaddc2 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 |
| --- | --- | --- |
| [@asteasolutions/zod-to-openapi](https://github.com/asteasolutions/zod-to-openapi) | `8.4.0` | `8.4.1` |
| [@react-email/components](https://github.com/resend/react-email/tree/HEAD/packages/components) | `1.0.7` | `1.0.8` |
| [@react-email/tailwind](https://github.com/resend/react-email/tree/HEAD/packages/tailwind) | `2.0.4` | `2.0.5` |
| [@simplewebauthn/server](https://github.com/MasterKale/SimpleWebAuthn/tree/HEAD/packages/server) | `13.2.2` | `13.2.3` |
| [glob](https://github.com/isaacs/node-glob) | `13.0.3` | `13.0.6` |
| [next-intl](https://github.com/amannn/next-intl) | `4.8.2` | `4.8.3` |
| [react-hook-form](https://github.com/react-hook-form/react-hook-form) | `7.71.1` | `7.71.2` |



Updates `@asteasolutions/zod-to-openapi` from 8.4.0 to 8.4.1
- [Release notes](https://github.com/asteasolutions/zod-to-openapi/releases)
- [Commits](https://github.com/asteasolutions/zod-to-openapi/compare/v8.4.0...v8.4.1)

Updates `@react-email/components` from 1.0.7 to 1.0.8
- [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@1.0.8/packages/components)

Updates `@react-email/tailwind` from 2.0.4 to 2.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@2.0.5/packages/tailwind)

Updates `@simplewebauthn/server` from 13.2.2 to 13.2.3
- [Release notes](https://github.com/MasterKale/SimpleWebAuthn/releases)
- [Changelog](https://github.com/MasterKale/SimpleWebAuthn/blob/master/CHANGELOG.md)
- [Commits](https://github.com/MasterKale/SimpleWebAuthn/commits/v13.2.3/packages/server)

Updates `glob` from 13.0.3 to 13.0.6
- [Changelog](https://github.com/isaacs/node-glob/blob/main/changelog.md)
- [Commits](https://github.com/isaacs/node-glob/compare/v13.0.3...v13.0.6)

Updates `next-intl` from 4.8.2 to 4.8.3
- [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.8.2...v4.8.3)

Updates `react-hook-form` from 7.71.1 to 7.71.2
- [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.71.1...v7.71.2)

---
updated-dependencies:
- dependency-name: "@asteasolutions/zod-to-openapi"
  dependency-version: 8.4.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: "@react-email/components"
  dependency-version: 1.0.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: "@react-email/tailwind"
  dependency-version: 2.0.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: "@simplewebauthn/server"
  dependency-version: 13.2.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: glob
  dependency-version: 13.0.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: next-intl
  dependency-version: 4.8.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: react-hook-form
  dependency-version: 7.71.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-25 01:37:31 +00:00
dependabot[bot]
119e1d4867 Bump @types/nodemailer in the dev-patch-updates group across 1 directory
Bumps the dev-patch-updates group with 1 update in the / directory: [@types/nodemailer](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/nodemailer).


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

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-25 01:35:31 +00:00
dependabot[bot]
63e30d3378 Bump minimatch
Bumps  and [minimatch](https://github.com/isaacs/minimatch). These dependencies needed to be updated together.

Updates `minimatch` from 10.2.0 to 10.2.3
- [Changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md)
- [Commits](https://github.com/isaacs/minimatch/compare/v10.2.0...v10.2.3)

Updates `minimatch` from 3.1.2 to 3.1.4
- [Changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md)
- [Commits](https://github.com/isaacs/minimatch/compare/v10.2.0...v10.2.3)

Updates `minimatch` from 9.0.5 to 9.0.7
- [Changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md)
- [Commits](https://github.com/isaacs/minimatch/compare/v10.2.0...v10.2.3)

Updates `minimatch` from 10.1.1 to 10.2.3
- [Changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md)
- [Commits](https://github.com/isaacs/minimatch/compare/v10.2.0...v10.2.3)

---
updated-dependencies:
- dependency-name: minimatch
  dependency-version: 10.2.3
  dependency-type: indirect
- dependency-name: minimatch
  dependency-version: 3.1.4
  dependency-type: indirect
- dependency-name: minimatch
  dependency-version: 9.0.7
  dependency-type: indirect
- dependency-name: minimatch
  dependency-version: 10.2.3
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-25 01:04:10 +00:00
Owen
d6fe04ec4e Fix orgid issue when regen credentials 2026-02-24 14:26:10 -08:00
Owen
b8a364af6a Fix log query 2026-02-23 22:01:11 -08:00
Owen
5ef808d4a2 Merge branch 'main' into logs-database 2026-02-23 16:39:39 -08:00
miloschwartz
848d4d91e6 fix sidebar 2026-02-23 13:40:08 -08:00
Owen
a502780c9b Fix sso username issue 2026-02-22 22:05:02 -08:00
Owen Schwartz
418e099804 Merge pull request #2521 from fosrl/dev
1.15.4-s.6
2026-02-22 21:13:51 -08:00
Owen Schwartz
06258aa386 Merge pull request #2513 from fosrl/crowdin_dev
New Crowdin updates
2026-02-22 21:13:17 -08:00
Owen Schwartz
d7608b1cc8 New translations en-us.json (Norwegian Bokmal) 2026-02-22 21:11:37 -08:00
Owen Schwartz
cb86ad4104 New translations en-us.json (Chinese Simplified) 2026-02-22 21:11:35 -08:00
Owen Schwartz
8cd51df1e1 New translations en-us.json (Turkish) 2026-02-22 21:11:34 -08:00
Owen Schwartz
8ef7220766 New translations en-us.json (Russian) 2026-02-22 21:11:33 -08:00
Owen Schwartz
b5333a3686 New translations en-us.json (Portuguese) 2026-02-22 21:11:31 -08:00
Owen Schwartz
e6e92dbc0f New translations en-us.json (Polish) 2026-02-22 21:11:30 -08:00
Owen Schwartz
01fdd41a10 New translations en-us.json (Dutch) 2026-02-22 21:11:28 -08:00
Owen Schwartz
6af06a38ae New translations en-us.json (Korean) 2026-02-22 21:11:27 -08:00
Owen Schwartz
5d9c66d22d New translations en-us.json (Italian) 2026-02-22 21:11:26 -08:00
Owen Schwartz
81f5a4b127 New translations en-us.json (German) 2026-02-22 21:11:24 -08:00
Owen Schwartz
da3e68a20b New translations en-us.json (Czech) 2026-02-22 21:11:23 -08:00
Owen Schwartz
8712c1719e New translations en-us.json (Bulgarian) 2026-02-22 21:11:22 -08:00
Owen Schwartz
593c5db0e8 New translations en-us.json (Spanish) 2026-02-22 21:11:20 -08:00
Owen Schwartz
b28391feae New translations en-us.json (French) 2026-02-22 21:11:19 -08:00
Owen
5f8df6d4cd Merge branch 'main' into dev 2026-02-22 21:02:58 -08:00
Owen
c36efe7f14 Add translations 2026-02-22 21:02:21 -08:00
Owen
cf97b6df9c Handle billing bad subs, remove exit node name from lock, prevent some
stuff on saas
2026-02-22 20:45:53 -08:00
dependabot[bot]
720d3a8135 Bump actions/stale from 10.1.1 to 10.2.0
Bumps [actions/stale](https://github.com/actions/stale) from 10.1.1 to 10.2.0.
- [Release notes](https://github.com/actions/stale/releases)
- [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md)
- [Commits](997185467f...b5d41d4e1d)

---
updated-dependencies:
- dependency-name: actions/stale
  dependency-version: 10.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-23 01:36:30 +00:00
dependabot[bot]
9c42458fa5 Bump actions/checkout from 6.0.1 to 6.0.2
Bumps [actions/checkout](https://github.com/actions/checkout) from 6.0.1 to 6.0.2.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](8e8c483db8...de0fac2e45)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 6.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-23 01:31:48 +00:00
Owen
6d9b129ac9 Merge branch 'main' into k8s 2026-02-22 17:28:09 -08:00
miloschwartz
e17ec798d4 remove local fonts 2026-02-22 11:18:57 -08:00
miloschwartz
58ac499f30 add safeRead 2026-02-21 16:38:51 -08:00
miloschwartz
f07f0092ad testing with local font 2026-02-21 14:34:38 -08:00
dependabot[bot]
bcd3475d17 Bump fast-xml-parser and @aws-sdk/xml-builder
Bumps [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser) and [@aws-sdk/xml-builder](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/packages-internal/xml-builder). These dependencies needed to be updated together.

Updates `fast-xml-parser` from 5.3.4 to 5.3.6
- [Release notes](https://github.com/NaturalIntelligence/fast-xml-parser/releases)
- [Changelog](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/NaturalIntelligence/fast-xml-parser/compare/v5.3.4...v5.3.6)

Updates `@aws-sdk/xml-builder` from 3.972.4 to 3.972.5
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/packages-internal/xml-builder/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/HEAD/packages-internal/xml-builder)

---
updated-dependencies:
- dependency-name: fast-xml-parser
  dependency-version: 5.3.6
  dependency-type: indirect
- dependency-name: "@aws-sdk/xml-builder"
  dependency-version: 3.972.5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-21 20:18:36 +00:00
Owen Schwartz
7c04526088 New translations en-us.json (Czech) 2026-02-21 05:24:27 -08:00
Owen Schwartz
2d7ab68576 New translations en-us.json (Czech) 2026-02-21 04:14:18 -08:00
miloschwartz
218a4893b6 hide address on sites and clients 2026-02-20 22:47:56 -08:00
miloschwartz
266bf261aa update note in migration 2026-02-20 22:45:37 -08:00
Owen Schwartz
63694032e8 Merge pull request #2511 from fosrl/dev
1.15.4-s.4
2026-02-20 20:45:23 -08:00
Owen Schwartz
b77aaedb58 Merge pull request #2510 from fosrl/crowdin_dev
New Crowdin updates
2026-02-20 20:44:45 -08:00
Owen Schwartz
a316d0301f New translations en-us.json (Norwegian Bokmal) 2026-02-20 20:43:45 -08:00
Owen Schwartz
dcd499720e New translations en-us.json (Chinese Simplified) 2026-02-20 20:43:44 -08:00
Owen Schwartz
e18fe21eca New translations en-us.json (Turkish) 2026-02-20 20:43:43 -08:00
Owen Schwartz
2970b51fb8 New translations en-us.json (Russian) 2026-02-20 20:43:42 -08:00
Owen Schwartz
b9236ff52e New translations en-us.json (Portuguese) 2026-02-20 20:43:41 -08:00
Owen Schwartz
38eb0ec7ed New translations en-us.json (Polish) 2026-02-20 20:43:39 -08:00
Owen Schwartz
ecba4a0b80 New translations en-us.json (Dutch) 2026-02-20 20:43:38 -08:00
Owen Schwartz
e6da18c952 New translations en-us.json (Korean) 2026-02-20 20:43:37 -08:00
Owen Schwartz
12941ac5ae New translations en-us.json (Italian) 2026-02-20 20:43:36 -08:00
Owen Schwartz
11085bda63 New translations en-us.json (German) 2026-02-20 20:43:35 -08:00
Owen Schwartz
c03211cc53 New translations en-us.json (Czech) 2026-02-20 20:43:33 -08:00
Owen Schwartz
2867459600 New translations en-us.json (Bulgarian) 2026-02-20 20:43:32 -08:00
Owen Schwartz
32b24db9bf New translations en-us.json (Spanish) 2026-02-20 20:43:31 -08:00
Owen Schwartz
660bf9ff87 New translations en-us.json (French) 2026-02-20 20:43:30 -08:00
miloschwartz
78c4ddebba set defaults 2026-02-20 20:35:57 -08:00
miloschwartz
f2dfadb37b show disabled button for owner 2026-02-20 20:28:47 -08:00
miloschwartz
3f2bdf081f allow edit admin role ssh and support null authDaemonMode 2026-02-20 20:25:14 -08:00
miloschwartz
d6ba34aeea set auth daemon type on resource 2026-02-20 17:33:21 -08:00
Owen
b622aca221 Try to route logs requests to a different database 2026-02-20 17:20:01 -08:00
miloschwartz
6442eb12fb more visual adjustments 2026-02-20 10:43:25 -08:00
miloschwartz
01c15afa74 other visual adjustments 2026-02-19 23:41:04 -08:00
miloschwartz
4e88f1f38a more sidebar improvements 2026-02-19 22:41:14 -08:00
miloschwartz
13ab505f4d add ease to sidebar menu 2026-02-19 21:59:49 -08:00
miloschwartz
7d112aab27 improve alignment on sidebar 2026-02-19 21:52:47 -08:00
Owen
b786497299 Working on k8s 2026-02-19 17:55:49 -08:00
miloschwartz
eedf57af89 disable rybbit in saas 2026-02-19 17:54:40 -08:00
miloschwartz
7a01a4e090 ssh settings on a role 2026-02-19 17:53:11 -08:00
Owen
874794c996 Clean email 2026-02-18 14:07:50 -08:00
Owen
5e37c4e85f Resolve potential issues with processing roleIds 2026-02-18 13:55:04 -08:00
Owen
4e7eac368f Uniform ne check on niceId and dont reject clients 2026-02-18 11:56:01 -08:00
Laurence
e8398cb221 enhance(installer): use huh package to handle input
Instead of relying on stdin and stdout by default, using the huh package from charmbracelet allows us to handle user input more gracefully such as y/n instead of typing 'yes' or 'no'. If a user makes a mistake whilst typing in any text fields they cannot use left or right to edit a single character when using huh it can. This adds a dependancy and may increase the size of installer but overall improves user experience.
2026-02-18 11:05:48 +00:00
Laurence
9460e28c7b ehance(installer): use ldflags to inject versions
Instead of the CI/CD using sed to replace the 'replaceme' text we can instead use ldflags which can inject variables at build time to the versions. The makefile had a bunch of workarounds for dev so these have been removed to cleanup etc etc and fetchs versions from the gh api directly if the variables are not injected like the CI/CD does
2026-02-18 09:43:41 +00:00
dependabot[bot]
d8b45396e3 Bump qs from 6.14.1 to 6.14.2
Bumps [qs](https://github.com/ljharb/qs) from 6.14.1 to 6.14.2.
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.14.1...v6.14.2)

---
updated-dependencies:
- dependency-name: qs
  dependency-version: 6.14.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-18 05:08:23 +00:00
Rodney Osodo
952d0c74d0 refactor(install): use any for YAML map types instead of interface{}
Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>
2026-02-17 10:45:06 +03:00
Rodney Osodo
ffbea7af59 fix(install): add error handling and minor code cleanups
Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>
2026-02-17 10:45:06 +03:00
dependabot[bot]
971c375398 Bump docker/login-action from 3.6.0 to 3.7.0
Bumps [docker/login-action](https://github.com/docker/login-action) from 3.6.0 to 3.7.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](5e57cd1181...c94ce9fb46)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-version: 3.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-15 19:12:16 +00:00
dependabot[bot]
ac4439c5ae Bump aws-actions/configure-aws-credentials from 5 to 6
Bumps [aws-actions/configure-aws-credentials](https://github.com/aws-actions/configure-aws-credentials) from 5 to 6.
- [Release notes](https://github.com/aws-actions/configure-aws-credentials/releases)
- [Changelog](https://github.com/aws-actions/configure-aws-credentials/blob/main/CHANGELOG.md)
- [Commits](https://github.com/aws-actions/configure-aws-credentials/compare/v5...v6)

---
updated-dependencies:
- dependency-name: aws-actions/configure-aws-credentials
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-15 19:12:05 +00:00
dependabot[bot]
8c15855fc3 Bump lodash from 4.17.21 to 4.17.23
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.21 to 4.17.23.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)

---
updated-dependencies:
- dependency-name: lodash
  dependency-version: 4.17.23
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-26 01:37:38 +00:00
Dennis
3d4df906cf Added missing translations 2025-12-22 18:43:43 +01:00
Dennis
e051142334 Add region-based resource rule 2025-12-22 17:44:56 +01:00
874 changed files with 72340 additions and 21246 deletions

View File

@@ -0,0 +1,5 @@
---
alwaysApply: true
---
Always localize strings and use the `t` function to convert keys to strings. Add the keys to the en-us.json file. Never edit the other language files, as en-us.json is the single source of truth.

View File

@@ -0,0 +1,7 @@
---
description:
alwaysApply: true
---
Proxy resources = public resources
Private resources = client resources = site resources

View File

@@ -28,9 +28,9 @@ LICENSE
CONTRIBUTING.md
dist
.git
migrations/
server/migrations/
config/
build.ts
tsconfig.json
Dockerfile*
migrations/
drizzle.config.ts

1
.github/CODEOWNERS vendored Normal file
View File

@@ -0,0 +1 @@
* @oschwartz10612 @miloschwartz

View File

@@ -29,7 +29,7 @@ jobs:
permissions: write-all
steps:
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v5
uses: aws-actions/configure-aws-credentials@v6
with:
role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ secrets.AWS_ROLE_NAME }}
role-duration-seconds: 3600
@@ -62,7 +62,7 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Monitor storage space
run: |
@@ -77,7 +77,7 @@ jobs:
fi
- name: Log in to Docker Hub
uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0
uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
with:
registry: docker.io
username: ${{ secrets.DOCKER_HUB_USERNAME }}
@@ -134,7 +134,7 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Monitor storage space
run: |
@@ -149,7 +149,7 @@ jobs:
fi
- name: Log in to Docker Hub
uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0
uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
with:
registry: docker.io
username: ${{ secrets.DOCKER_HUB_USERNAME }}
@@ -201,10 +201,10 @@ jobs:
timeout-minutes: 30
steps:
- name: Checkout code
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Log in to Docker Hub
uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0
uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
with:
registry: docker.io
username: ${{ secrets.DOCKER_HUB_USERNAME }}
@@ -256,7 +256,7 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Extract tag name
id: get-tag
@@ -264,9 +264,9 @@ jobs:
shell: bash
- name: Install Go
uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
with:
go-version: 1.24
go-version: 1.25
- name: Update version in package.json
run: |
@@ -289,25 +289,17 @@ jobs:
echo "LATEST_BADGER_TAG=$LATEST_TAG" >> $GITHUB_ENV
shell: bash
- name: Update install/main.go
run: |
PANGOLIN_VERSION=${{ env.TAG }}
GERBIL_VERSION=${{ env.LATEST_GERBIL_TAG }}
BADGER_VERSION=${{ env.LATEST_BADGER_TAG }}
sed -i "s/config.PangolinVersion = \".*\"/config.PangolinVersion = \"$PANGOLIN_VERSION\"/" install/main.go
sed -i "s/config.GerbilVersion = \".*\"/config.GerbilVersion = \"$GERBIL_VERSION\"/" install/main.go
sed -i "s/config.BadgerVersion = \".*\"/config.BadgerVersion = \"$BADGER_VERSION\"/" install/main.go
echo "Updated install/main.go with Pangolin version $PANGOLIN_VERSION, Gerbil version $GERBIL_VERSION, and Badger version $BADGER_VERSION"
cat install/main.go
shell: bash
- name: Build installer
working-directory: install
run: |
make go-build-release
make go-build-release \
PANGOLIN_VERSION=${{ env.TAG }} \
GERBIL_VERSION=${{ env.LATEST_GERBIL_TAG }} \
BADGER_VERSION=${{ env.LATEST_BADGER_TAG }}
shell: bash
- name: Upload artifacts from /install/bin
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: install-bin
path: install/bin/
@@ -415,35 +407,25 @@ jobs:
shell: bash
- name: Login to GitHub Container Registry (for cosign)
uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0
uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Install cosign
# cosign is used to sign and verify container images (key and keyless)
uses: sigstore/cosign-installer@faadad0cce49287aee09b3a48701e75088a2c6ad # v4.0.0
# cosign is used to sign container images using keyless (OIDC) signing
uses: sigstore/cosign-installer@cad07c2e89fa2edd6e2d7bab4c1aa38e53f76003 # v4.1.1
- name: Dual-sign and verify (GHCR & Docker Hub)
# Sign each image by digest using keyless (OIDC) and key-based signing,
# then verify both the public key signature and the keyless OIDC signature.
- name: Sign (GHCR, keyless)
# Sign each GHCR image by digest using keyless (OIDC) signing via Sigstore/Rekor.
# Signatures are stored in the registry alongside the image.
env:
TAG: ${{ env.TAG }}
COSIGN_PRIVATE_KEY: ${{ secrets.COSIGN_PRIVATE_KEY }}
COSIGN_PASSWORD: ${{ secrets.COSIGN_PASSWORD }}
COSIGN_PUBLIC_KEY: ${{ secrets.COSIGN_PUBLIC_KEY }}
COSIGN_YES: "true"
run: |
set -euo pipefail
issuer="https://token.actions.githubusercontent.com"
id_regex="^https://github.com/${{ github.repository }}/.+" # accept this repo (all workflows/refs)
# Track failures
FAILED_TAGS=()
SUCCESSFUL_TAGS=()
# Determine if this is an RC release
IS_RC="false"
if [[ "$TAG" == *"-rc."* ]]; then
@@ -471,95 +453,47 @@ jobs:
)
fi
# Sign each image variant for both registries
for BASE_IMAGE in "${GHCR_IMAGE}" "${DOCKERHUB_IMAGE}"; do
for IMAGE_TAG in "${IMAGE_TAGS[@]}"; do
echo "Processing ${BASE_IMAGE}:${IMAGE_TAG}"
TAG_FAILED=false
FAILED_TAGS=()
SUCCESSFUL_TAGS=()
# Wrap the entire tag processing in error handling
(
set -e
DIGEST="$(skopeo inspect --retry-times 3 docker://${BASE_IMAGE}:${IMAGE_TAG} | jq -r '.Digest')"
REF="${BASE_IMAGE}@${DIGEST}"
echo "Resolved digest: ${REF}"
for IMAGE_TAG in "${IMAGE_TAGS[@]}"; do
echo "Processing ${GHCR_IMAGE}:${IMAGE_TAG}"
TAG_FAILED=false
echo "==> cosign sign (keyless) --recursive ${REF}"
cosign sign --recursive "${REF}"
(
set -e
DIGEST="$(skopeo inspect --retry-times 3 docker://${GHCR_IMAGE}:${IMAGE_TAG} | jq -r '.Digest')"
REF="${GHCR_IMAGE}@${DIGEST}"
echo "Resolved digest: ${REF}"
echo "==> cosign sign (key) --recursive ${REF}"
cosign sign --key env://COSIGN_PRIVATE_KEY --recursive "${REF}"
echo "==> cosign sign (keyless) --recursive ${REF}"
cosign sign --recursive "${REF}"
) || TAG_FAILED=true
# Retry wrapper for verification to handle registry propagation delays
retry_verify() {
local cmd="$1"
local attempts=6
local delay=5
local i=1
until eval "$cmd"; do
if [ $i -ge $attempts ]; then
echo "Verification failed after $attempts attempts"
return 1
fi
echo "Verification not yet available. Retry $i/$attempts after ${delay}s..."
sleep $delay
i=$((i+1))
delay=$((delay*2))
# Cap the delay to avoid very long waits
if [ $delay -gt 60 ]; then delay=60; fi
done
return 0
}
echo "==> cosign verify (public key) ${REF}"
if retry_verify "cosign verify --key env://COSIGN_PUBLIC_KEY '${REF}' -o text"; then
VERIFIED_INDEX=true
else
VERIFIED_INDEX=false
fi
echo "==> cosign verify (keyless policy) ${REF}"
if retry_verify "cosign verify --certificate-oidc-issuer '${issuer}' --certificate-identity-regexp '${id_regex}' '${REF}' -o text"; then
VERIFIED_INDEX_KEYLESS=true
else
VERIFIED_INDEX_KEYLESS=false
fi
# Check if verification succeeded
if [ "${VERIFIED_INDEX}" != "true" ] && [ "${VERIFIED_INDEX_KEYLESS}" != "true" ]; then
echo "⚠️ WARNING: Verification not available for ${BASE_IMAGE}:${IMAGE_TAG}"
echo "This may be due to registry propagation delays. Continuing anyway."
fi
) || TAG_FAILED=true
if [ "$TAG_FAILED" = "true" ]; then
echo "⚠️ WARNING: Failed to sign/verify ${BASE_IMAGE}:${IMAGE_TAG}"
FAILED_TAGS+=("${BASE_IMAGE}:${IMAGE_TAG}")
else
echo "✓ Successfully signed and verified ${BASE_IMAGE}:${IMAGE_TAG}"
SUCCESSFUL_TAGS+=("${BASE_IMAGE}:${IMAGE_TAG}")
fi
done
if [ "$TAG_FAILED" = "true" ]; then
echo "⚠️ WARNING: Failed to sign ${GHCR_IMAGE}:${IMAGE_TAG}"
FAILED_TAGS+=("${GHCR_IMAGE}:${IMAGE_TAG}")
else
echo "✓ Successfully signed ${GHCR_IMAGE}:${IMAGE_TAG}"
SUCCESSFUL_TAGS+=("${GHCR_IMAGE}:${IMAGE_TAG}")
fi
done
# Report summary
echo ""
echo "=========================================="
echo "Sign and Verify Summary"
echo "Sign Summary"
echo "=========================================="
echo "Successful: ${#SUCCESSFUL_TAGS[@]}"
echo "Failed: ${#FAILED_TAGS[@]}"
echo ""
if [ ${#FAILED_TAGS[@]} -gt 0 ]; then
echo "Failed tags:"
for tag in "${FAILED_TAGS[@]}"; do
echo " - $tag"
done
echo ""
echo "⚠️ WARNING: Some tags failed to sign/verify, but continuing anyway"
echo "⚠️ WARNING: Some tags failed to sign, but continuing anyway"
else
echo "✓ All images signed and verified successfully!"
echo "✓ All images signed successfully!"
fi
shell: bash
@@ -578,7 +512,7 @@ jobs:
permissions: write-all
steps:
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v5
uses: aws-actions/configure-aws-credentials@v6
with:
role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ secrets.AWS_ROLE_NAME }}
role-duration-seconds: 3600

View File

@@ -21,10 +21,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Set up Node.js
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with:
node-version: '24'

View File

@@ -23,7 +23,7 @@ jobs:
skopeo --version
- name: Install cosign
uses: sigstore/cosign-installer@faadad0cce49287aee09b3a48701e75088a2c6ad # v4.0.0
uses: sigstore/cosign-installer@cad07c2e89fa2edd6e2d7bab4c1aa38e53f76003 # v4.1.1
- name: Input check
run: |

View File

@@ -14,7 +14,7 @@ jobs:
permissions: write-all
steps:
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v5
uses: aws-actions/configure-aws-credentials@v6
with:
role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ secrets.AWS_ROLE_NAME }}
role-duration-seconds: 3600

View File

@@ -23,7 +23,7 @@ jobs:
permissions: write-all
steps:
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v5
uses: aws-actions/configure-aws-credentials@v6
with:
role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ secrets.AWS_ROLE_NAME }}
role-duration-seconds: 3600
@@ -54,7 +54,42 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Download MaxMind GeoLite2 databases
env:
MAXMIND_LICENSE_KEY: ${{ secrets.MAXMIND_LICENSE_KEY }}
run: |
echo "Downloading MaxMind GeoLite2 databases..."
# Download GeoLite2-Country
curl -L "https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-Country&license_key=${MAXMIND_LICENSE_KEY}&suffix=tar.gz" \
-o GeoLite2-Country.tar.gz
# Download GeoLite2-ASN
curl -L "https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-ASN&license_key=${MAXMIND_LICENSE_KEY}&suffix=tar.gz" \
-o GeoLite2-ASN.tar.gz
# Extract the .mmdb files
tar -xzf GeoLite2-Country.tar.gz --strip-components=1 --wildcards '*.mmdb'
tar -xzf GeoLite2-ASN.tar.gz --strip-components=1 --wildcards '*.mmdb'
# Verify files exist
if [ ! -f "GeoLite2-Country.mmdb" ]; then
echo "ERROR: Failed to download GeoLite2-Country.mmdb"
exit 1
fi
if [ ! -f "GeoLite2-ASN.mmdb" ]; then
echo "ERROR: Failed to download GeoLite2-ASN.mmdb"
exit 1
fi
# Clean up tar files
rm -f GeoLite2-Country.tar.gz GeoLite2-ASN.tar.gz
echo "MaxMind databases downloaded successfully"
ls -lh GeoLite2-*.mmdb
- name: Monitor storage space
run: |
@@ -69,7 +104,7 @@ jobs:
fi
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v5
uses: aws-actions/configure-aws-credentials@v6
with:
role-to-assume: arn:aws:iam::${{ secrets.aws_account_id }}:role/${{ secrets.AWS_ROLE_NAME }}
role-duration-seconds: 3600
@@ -110,7 +145,7 @@ jobs:
permissions: write-all
steps:
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v5
uses: aws-actions/configure-aws-credentials@v6
with:
role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ secrets.AWS_ROLE_NAME }}
role-duration-seconds: 3600

View File

@@ -14,7 +14,7 @@ jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@997185467fa4f803885201cee163a9f38240193d # v10.1.1
- uses: actions/stale@b5d41d4e1d5dceea10e7104786b73624c18a190f # v10.2.0
with:
days-before-stale: 14
days-before-close: 14

View File

@@ -14,10 +14,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Install Node
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with:
node-version: '24'
@@ -62,7 +62,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Build Docker image sqlite
run: make dev-build-sqlite
@@ -71,7 +71,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Build Docker image pg
run: make dev-build-pg

View File

@@ -1,8 +1,9 @@
FROM node:24-alpine AS base
# FROM node:24-slim AS base
FROM public.ecr.aws/docker/library/node:24-slim AS base
WORKDIR /app
RUN apk add --no-cache python3 make g++
RUN apt-get update && apt-get install -y python3 make g++ && rm -rf /var/lib/apt/lists/*
COPY package*.json ./
@@ -23,15 +24,20 @@ RUN if [ "$BUILD" = "oss" ]; then rm -rf server/private; fi && \
npm run build:cli && \
test -f dist/server.mjs
# Create placeholder files for MaxMind databases to avoid COPY errors
# Real files should be present for saas builds, placeholders for oss builds
RUN touch /app/GeoLite2-Country.mmdb /app/GeoLite2-ASN.mmdb
FROM base AS builder
RUN npm ci --omit=dev
FROM node:24-alpine AS runner
# FROM node:24-slim AS runner
FROM public.ecr.aws/docker/library/node:24-slim AS runner
WORKDIR /app
RUN apk add --no-cache curl tzdata
RUN apt-get update && apt-get install -y curl tzdata && rm -rf /var/lib/apt/lists/*
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./package.json
@@ -49,6 +55,18 @@ COPY server/db/ios_models.json ./dist/ios_models.json
COPY server/db/mac_models.json ./dist/mac_models.json
COPY public ./public
# Copy MaxMind databases for SaaS builds
ARG BUILD=oss
RUN mkdir -p ./maxmind
# Copy MaxMind databases (placeholders exist for oss builds, real files for saas)
COPY --from=builder-dev /app/GeoLite2-Country.mmdb ./maxmind/GeoLite2-Country.mmdb
COPY --from=builder-dev /app/GeoLite2-ASN.mmdb ./maxmind/GeoLite2-ASN.mmdb
# Remove MaxMind databases for non-saas builds (keep only for saas)
RUN if [ "$BUILD" != "saas" ]; then rm -rf ./maxmind; fi
# OCI Image Labels - Build Args for dynamic values
ARG VERSION="dev"
ARG REVISION=""

View File

@@ -35,43 +35,53 @@
</div>
<p align="center">
<a href="https://docs.pangolin.net/careers/join-us">
<img src="https://img.shields.io/badge/🚀_We're_Hiring!-Join_Our_Team-brightgreen?style=for-the-badge" alt="We're Hiring!" />
</a>
</p>
<p align="center">
<strong>
Start testing Pangolin at <a href="https://app.pangolin.net/auth/signup">app.pangolin.net</a>
Get started with Pangolin at <a href="https://app.pangolin.net/auth/signup">app.pangolin.net</a>
</strong>
</p>
Pangolin is an open-source, identity-based remote access platform built on WireGuard that enables secure, seamless connectivity to private and public resources. Pangolin combines reverse proxy and VPN capabilities into one platform, providing browser-based access to web applications and client-based access to any private resources, all with zero-trust security and granular access control.
Pangolin is an open-source, identity-based remote access platform built on WireGuard® that enables secure, seamless connectivity to private and public resources. Pangolin combines reverse proxy and VPN capabilities into one platform, providing browser-based access to web applications and client-based access to any private resources with NAT traversal, all with granular access controls.
## Installation
- Check out the [quick install guide](https://docs.pangolin.net/self-host/quick-install) for how to install and set up Pangolin.
- Install from the [DigitalOcean marketplace](https://marketplace.digitalocean.com/apps/pangolin-ce-1?refcode=edf0480eeb81) for a one-click pre-configured installer.
- Get started for free with [Pangolin Cloud](https://app.pangolin.net/).
- Or, check out the [quick install guide](https://docs.pangolin.net/self-host/quick-install) for how to self-host Pangolin.
- Install from the [DigitalOcean marketplace](https://marketplace.digitalocean.com/apps/pangolin-ce-1?refcode=edf0480eeb81) for a one-click pre-configured installer.
<img src="public/screenshots/hero.png" />
<img src="public/screenshots/hero.png" alt="Pangolin" width="100%" />
## Deployment Options
| <img width=500 /> | Description |
|-----------------|--------------|
| **Self-Host: Community Edition** | Free, open source, and licensed under AGPL-3. |
| **Self-Host: Enterprise Edition** | Licensed under Fossorial Commercial License. Free for personal and hobbyist use, and for businesses earning under \$100K USD annually. |
| **Pangolin Cloud** | Fully managed service with instant setup and pay-as-you-go pricing — no infrastructure required. Or, self-host your own [remote node](https://docs.pangolin.net/manage/remote-node/nodes) and connect to our control plane. |
- **Pangolin Cloud** - Fully managed service - no infrastructure required.
- **Self-Host: Community Edition** - Free, open source, and licensed under AGPL-3.
- **Self-Host: Enterprise Edition** - Licensed under Fossorial Commercial License. Free for personal and hobbyist use, and for businesses making less than \$100K USD gross annual revenue.
## Key Features
| <img width=500 /> | <img width=500 /> |
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------|
| **Connect remote networks with sites**<br /><br />Pangolin's lightweight site connectors create secure tunnels from remote networks without requiring public IP addresses or open ports. Sites make any network anywhere available for authorized access. | <img src="public/screenshots/sites.png" width=500 /><tr></tr> |
| **Browser-based reverse proxy access**<br /><br />Expose web applications through identity and context-aware tunneled reverse proxies. Pangolin handles routing, load balancing, health checking, and automatic SSL certificates without exposing your network directly to the internet. Users access applications through any web browser with authentication and granular access control. | <img src="public/clip.gif" width=500 /><tr></tr> |
| **Client-based private resource access**<br /><br />Access private resources like SSH servers, databases, RDP, and entire network ranges through Pangolin clients. Intelligent NAT traversal enables connections even through restrictive firewalls, while DNS aliases provide friendly names and fast connections to resources across all your sites. | <img src="public/screenshots/private-resources.png" width=500 /><tr></tr> |
| **Zero-trust granular access**<br /><br />Grant users access to specific resources, not entire networks. Unlike traditional VPNs that expose full network access, Pangolin's zero-trust model ensures users can only reach the applications and services you explicitly define, reducing security risk and attack surface. | <img src="public/screenshots/user-devices.png" width=500 /><tr></tr> |
### Connect remote networks with sites and NAT traversal
Pangolin's site connectors provide gateways into networks so you can access any networked resources. Sites use outbound tunnels and intelligent NAT traversal to make networks behind restrictive firewalls available for authorized access without public IPs or open ports. Easily deploy a site as a binary or container on any platform.
<img src="public/screenshots/sites.png" alt="Sites" width="100%" />
### Browser-based reverse proxy access
Expose web applications through identity and context-aware tunneled reverse proxies. Users access applications through any web browser with authentication and granular access control without installing a client. Pangolin handles routing, load balancing, health checking, and automatic SSL certificates without exposing your network directly to the internet.
<img src="public/clip.gif" alt="Reverse proxy access" width="100%" />
### Client-based private resource access
Access private resources like SSH servers, databases, RDP, and entire network ranges through Pangolin clients. Intelligent NAT traversal enables connections even through restrictive firewalls, while DNS aliases provide friendly names and fast connections to resources across all your sites. Add redundancy by routing traffic through multiple connectors in your network.
<img src="public/screenshots/private-resources.png" alt="Private resources" width="100%" />
### Give users and roles access to resources
Use Pangolin's built in users or bring your own identity provider and set up role based access control (RBAC). Grant users access to specific resources, not entire networks. Unlike traditional VPNs that expose full network access, Pangolin's zero-trust model ensures users can only reach the applications, services, and routes you explicitly define.
<img src="public/screenshots/users.png" alt="Users from identity provider with roles" width="100%" />
## Download Clients
@@ -85,17 +95,16 @@ Download the Pangolin client for your platform:
## Get Started
### Sign up now
Create a free account at [app.pangolin.net](https://app.pangolin.net) to get started with Pangolin Cloud.
### Check out the docs
We encourage everyone to read the full documentation first, which is
available at [docs.pangolin.net](https://docs.pangolin.net). This README provides only a very brief subset of
the docs to illustrate some basic ideas.
### Sign up and try now
For Pangolin's managed service, you will first need to create an account at
[app.pangolin.net](https://app.pangolin.net). We have a generous free tier to get started.
## Licensing
Pangolin is dual licensed under the AGPL-3 and the [Fossorial Commercial License](https://pangolin.net/fcl.html). For inquiries about commercial licensing, please contact us at [contact@pangolin.net](mailto:contact@pangolin.net).
@@ -103,7 +112,3 @@ Pangolin is dual licensed under the AGPL-3 and the [Fossorial Commercial License
## Contributions
Please see [CONTRIBUTING](./CONTRIBUTING.md) in the repository for guidelines and best practices.
---
WireGuard® is a registered trademark of Jason A. Donenfeld.

View File

@@ -3,7 +3,7 @@
If you discover a security vulnerability, please follow the steps below to responsibly disclose it to us:
1. **Do not create a public GitHub issue or discussion post.** This could put the security of other users at risk.
2. Send a detailed report to [security@pangolin.net](mailto:security@pangolin.net) or send a **private** message to a maintainer on [Discord](https://discord.gg/HCJR8Xhme4). Include:
2. Send a detailed report to [security@pangolin.net](mailto:security@pangolin.net) with the following information:
- Description and location of the vulnerability.
- Potential impact of the vulnerability.

View File

@@ -1,17 +0,0 @@
meta {
name: Create API Key
type: http
seq: 1
}
put {
url: http://localhost:3000/api/v1/api-key
body: json
auth: inherit
}
body:json {
{
"isRoot": true
}
}

View File

@@ -1,11 +0,0 @@
meta {
name: Delete API Key
type: http
seq: 2
}
delete {
url: http://localhost:3000/api/v1/api-key/dm47aacqxxn3ubj
body: none
auth: inherit
}

View File

@@ -1,11 +0,0 @@
meta {
name: List API Key Actions
type: http
seq: 6
}
get {
url: http://localhost:3000/api/v1/api-key/ex0izu2c37fjz9x/actions
body: none
auth: inherit
}

View File

@@ -1,11 +0,0 @@
meta {
name: List Org API Keys
type: http
seq: 4
}
get {
url: http://localhost:3000/api/v1/org/home-lab/api-keys
body: none
auth: inherit
}

View File

@@ -1,11 +0,0 @@
meta {
name: List Root API Keys
type: http
seq: 3
}
get {
url: http://localhost:3000/api/v1/root/api-keys
body: none
auth: inherit
}

View File

@@ -1,17 +0,0 @@
meta {
name: Set API Key Actions
type: http
seq: 5
}
post {
url: http://localhost:3000/api/v1/api-key/ex0izu2c37fjz9x/actions
body: json
auth: inherit
}
body:json {
{
"actionIds": ["listSites"]
}
}

View File

@@ -1,17 +0,0 @@
meta {
name: Set API Key Orgs
type: http
seq: 7
}
post {
url: http://localhost:3000/api/v1/api-key/ex0izu2c37fjz9x/orgs
body: json
auth: inherit
}
body:json {
{
"orgIds": ["home-lab"]
}
}

View File

@@ -1,3 +0,0 @@
meta {
name: API Keys
}

View File

@@ -1,18 +0,0 @@
meta {
name: 2fa-disable
type: http
seq: 6
}
post {
url: http://localhost:3000/api/v1/auth/2fa/disable
body: json
auth: none
}
body:json {
{
"password": "aaaaa-1A",
"code": "377289"
}
}

View File

@@ -1,17 +0,0 @@
meta {
name: 2fa-enable
type: http
seq: 4
}
post {
url: http://localhost:3000/api/v1/auth/2fa/enable
body: json
auth: none
}
body:json {
{
"code": "374138"
}
}

View File

@@ -1,17 +0,0 @@
meta {
name: 2fa-request
type: http
seq: 5
}
post {
url: http://localhost:3000/api/v1/auth/2fa/request
body: json
auth: none
}
body:json {
{
"password": "aaaaa-1A"
}
}

View File

@@ -1,18 +0,0 @@
meta {
name: change-password
type: http
seq: 9
}
post {
url: http://localhost:3000/api/v1/auth/change-password
body: json
auth: none
}
body:json {
{
"oldPassword": "",
"newPassword": ""
}
}

View File

@@ -1,18 +0,0 @@
meta {
name: login
type: http
seq: 1
}
post {
url: http://localhost:3000/api/v1/auth/login
body: json
auth: none
}
body:json {
{
"email": "admin@fosrl.io",
"password": "Password123!"
}
}

View File

@@ -1,11 +0,0 @@
meta {
name: logout
type: http
seq: 3
}
post {
url: http://localhost:4000/api/v1/auth/logout
body: none
auth: none
}

View File

@@ -1,17 +0,0 @@
meta {
name: reset-password-request
type: http
seq: 10
}
post {
url: http://localhost:3000/api/v1/auth/reset-password/request
body: json
auth: none
}
body:json {
{
"email": "milo@pangolin.net"
}
}

View File

@@ -1,19 +0,0 @@
meta {
name: reset-password
type: http
seq: 11
}
post {
url: http://localhost:3000/api/v1/auth/reset-password
body: json
auth: none
}
body:json {
{
"token": "3uhsbom72dwdhboctwrtntyd6jrlg4jtf5oaxy4k",
"newPassword": "aaaaa-1A",
"code": "6irqCGR3"
}
}

View File

@@ -1,18 +0,0 @@
meta {
name: signup
type: http
seq: 2
}
put {
url: http://localhost:3000/api/v1/auth/signup
body: json
auth: none
}
body:json {
{
"email": "numbat@pangolin.net",
"password": "Password123!"
}
}

View File

@@ -1,11 +0,0 @@
meta {
name: verify-email-request
type: http
seq: 8
}
post {
url: http://localhost:3000/api/v1/auth/verify-email/request
body: none
auth: none
}

View File

@@ -1,17 +0,0 @@
meta {
name: verify-email
type: http
seq: 7
}
post {
url: http://localhost:3000/api/v1/auth/verify-email
body: json
auth: none
}
body:json {
{
"code": "50317187"
}
}

View File

@@ -1,15 +0,0 @@
meta {
name: verify-user
type: http
seq: 4
}
get {
url: http://localhost:3001/api/v1/badger/verify-user?sessionId=mb52273jkb6t3oys2bx6ur5x7rcrkl26c7warg3e
body: none
auth: none
}
params:query {
sessionId: mb52273jkb6t3oys2bx6ur5x7rcrkl26c7warg3e
}

View File

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

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

@@ -1,22 +0,0 @@
meta {
name: Create OIDC Provider
type: http
seq: 1
}
put {
url: http://localhost:3000/api/v1/org/home-lab/idp/oidc
body: json
auth: inherit
}
body:json {
{
"clientId": "JJoSvHCZcxnXT2sn6CObj6a21MuKNRXs3kN5wbys",
"clientSecret": "2SlGL2wOGgMEWLI9yUuMAeFxre7qSNJVnXMzyepdNzH1qlxYnC4lKhhQ6a157YQEkYH3vm40KK4RCqbYiF8QIweuPGagPX3oGxEj2exwutoXFfOhtq4hHybQKoFq01Z3",
"authUrl": "http://localhost:9000/application/o/authorize/",
"tokenUrl": "http://localhost:9000/application/o/token/",
"scopes": ["email", "openid", "profile"],
"userIdentifier": "email"
}
}

View File

@@ -1,11 +0,0 @@
meta {
name: Generate OIDC URL
type: http
seq: 2
}
get {
url: http://localhost:3000/api/v1
body: none
auth: inherit
}

View File

@@ -1,3 +0,0 @@
meta {
name: IDP
}

View File

@@ -1,11 +0,0 @@
meta {
name: Traefik Config
type: http
seq: 1
}
get {
url: http://localhost:3001/api/v1/traefik-config
body: none
auth: inherit
}

View File

@@ -1,3 +0,0 @@
meta {
name: Internal
}

View File

@@ -1,11 +0,0 @@
meta {
name: Create Newt
type: http
seq: 2
}
get {
url: http://localhost:3000/api/v1/newt
body: none
auth: none
}

View File

@@ -1,18 +0,0 @@
meta {
name: Get Token
type: http
seq: 1
}
get {
url: http://localhost:3000/api/v1/auth/newt/get-token
body: json
auth: none
}
body:json {
{
"newtId": "o0d4rdxq3stnz7b",
"secret": "sy7l09fnaesd03iwrfp9m3qf0ryn19g0zf3dqieaazb4k7vk"
}
}

View File

@@ -1,15 +0,0 @@
meta {
name: createOlm
type: http
seq: 1
}
put {
url: http://localhost:3000/api/v1/olm
body: none
auth: inherit
}
settings {
encodeUrl: true
}

View File

@@ -1,8 +0,0 @@
meta {
name: Olm
seq: 15
}
auth {
mode: inherit
}

View File

@@ -1,11 +0,0 @@
meta {
name: Check Id
type: http
seq: 2
}
get {
url: http://localhost:3000/api/v1/org/checkId
body: none
auth: none
}

View File

@@ -1,11 +0,0 @@
meta {
name: listOrgs
type: http
seq: 1
}
get {
url:
body: none
auth: none
}

View File

@@ -1,11 +0,0 @@
meta {
name: createRemoteExitNode
type: http
seq: 1
}
put {
url: http://localhost:4000/api/v1/org/org_i21aifypnlyxur2/remote-exit-node
body: none
auth: none
}

View File

@@ -1,11 +0,0 @@
meta {
name: listResourcesByOrg
type: http
seq: 1
}
get {
url:
body: none
auth: none
}

View File

@@ -1,16 +0,0 @@
meta {
name: listResourcesBySite
type: http
seq: 2
}
get {
url: http://localhost:3000/api/v1/site/1/resources?limit=10&offset=0
body: none
auth: none
}
params:query {
limit: 10
offset: 0
}

View File

@@ -1,11 +0,0 @@
meta {
name: Get Site
type: http
seq: 2
}
get {
url: http://localhost:3000/api/v1/org/test/sites/mexican-mole-lizard-windy
body: none
auth: none
}

View File

@@ -1,11 +0,0 @@
meta {
name: listSites
type: http
seq: 1
}
get {
url:
body: none
auth: none
}

View File

@@ -1,16 +0,0 @@
meta {
name: listTargets
type: http
seq: 1
}
get {
url: http://localhost:3000/api/v1/resource/web.main.localhost/targets?limit=10&offset=0
body: none
auth: none
}
params:query {
limit: 10
offset: 0
}

View File

@@ -1,11 +0,0 @@
meta {
name: Test
type: http
seq: 2
}
get {
url: http://localhost:3000/api/v1
body: none
auth: inherit
}

View File

@@ -1,11 +0,0 @@
meta {
name: traefik-config
type: http
seq: 1
}
get {
url: http://localhost:3001/api/v1/traefik-config
body: none
auth: none
}

View File

@@ -1,11 +0,0 @@
meta {
name: adminListUsers
type: http
seq: 2
}
get {
url: http://localhost:3000/api/v1/users
body: none
auth: none
}

View File

@@ -1,11 +0,0 @@
meta {
name: adminRemoveUser
type: http
seq: 3
}
delete {
url: http://localhost:3000/api/v1/user/ky5r7ivqs8wc7u4
body: none
auth: none
}

View File

@@ -1,11 +0,0 @@
meta {
name: getUser
type: http
seq: 1
}
get {
url:
body: none
auth: none
}

View File

@@ -1,13 +0,0 @@
{
"version": "1",
"name": "Pangolin",
"type": "collection",
"ignore": [
"node_modules",
".git"
],
"presets": {
"requestType": "http",
"requestUrl": "http://localhost:3000/api/v1"
}
}

View File

@@ -0,0 +1,28 @@
import { CommandModule } from "yargs";
import { db, certificates } from "@server/db";
type ClearCertificatesArgs = {};
export const clearCertificates: CommandModule<{}, ClearCertificatesArgs> = {
command: "clear-certificates",
describe: "Delete all entries from the certificates table",
builder: (yargs) => {
return yargs;
},
handler: async (argv: {}) => {
try {
console.log("Clearing all certificates from the database...");
const deleted = await db.delete(certificates).returning();
console.log(
`Deleted ${deleted.length} certificate(s) from the database`
);
process.exit(0);
} catch (error) {
console.error("Error:", error);
process.exit(1);
}
}
};

View File

@@ -0,0 +1,121 @@
import { CommandModule } from "yargs";
import { db, orgs } from "@server/db";
import { eq } from "drizzle-orm";
import { encrypt } from "@server/lib/crypto";
import { configFilePath1, configFilePath2 } from "@server/lib/consts";
import { generateCA } from "@server/lib/sshCA";
import fs from "fs";
import yaml from "js-yaml";
type GenerateOrgCaKeysArgs = {
orgId: string;
secret?: string;
force?: boolean;
};
export const generateOrgCaKeys: CommandModule<{}, GenerateOrgCaKeysArgs> = {
command: "generate-org-ca-keys",
describe:
"Generate SSH CA public/private key pair for an organization and store them in the database (private key encrypted with server secret)",
builder: (yargs) => {
return yargs
.option("orgId", {
type: "string",
demandOption: true,
describe: "The organization ID"
})
.option("secret", {
type: "string",
describe:
"Server secret used to encrypt the CA private key. If omitted, read from config file (config.yml or config.yaml)."
})
.option("force", {
type: "boolean",
default: false,
describe:
"Overwrite existing CA keys for the org if they already exist"
});
},
handler: async (argv: {
orgId: string;
secret?: string;
force?: boolean;
}) => {
try {
const { orgId, force } = argv;
let secret = argv.secret;
if (!secret) {
const configPath = fs.existsSync(configFilePath1)
? configFilePath1
: fs.existsSync(configFilePath2)
? configFilePath2
: null;
if (!configPath) {
console.error(
"Error: No server secret provided and config file not found. " +
"Expected config.yml or config.yaml in the config directory, or pass --secret."
);
process.exit(1);
}
const configContent = fs.readFileSync(configPath, "utf8");
const config = yaml.load(configContent) as {
server?: { secret?: string };
};
if (!config?.server?.secret) {
console.error(
"Error: No server.secret in config file. Pass --secret or set server.secret in config."
);
process.exit(1);
}
secret = config.server.secret;
}
const [org] = await db
.select({
orgId: orgs.orgId,
sshCaPrivateKey: orgs.sshCaPrivateKey,
sshCaPublicKey: orgs.sshCaPublicKey
})
.from(orgs)
.where(eq(orgs.orgId, orgId))
.limit(1);
if (!org) {
console.error(`Error: Organization with orgId "${orgId}" not found.`);
process.exit(1);
}
if (org.sshCaPrivateKey != null || org.sshCaPublicKey != null) {
if (!force) {
console.error(
"Error: This organization already has CA keys. Use --force to overwrite."
);
process.exit(1);
}
}
const ca = generateCA(`pangolin-ssh-ca-${orgId}`);
const encryptedPrivateKey = encrypt(ca.privateKeyPem, secret);
await db
.update(orgs)
.set({
sshCaPrivateKey: encryptedPrivateKey,
sshCaPublicKey: ca.publicKeyOpenSSH
})
.where(eq(orgs.orgId, orgId));
console.log("SSH CA keys generated and stored for org:", orgId);
console.log("\nPublic key (OpenSSH format):");
console.log(ca.publicKeyOpenSSH);
process.exit(0);
} catch (error) {
console.error("Error generating org CA keys:", error);
process.exit(1);
}
}
};

View File

@@ -1,5 +1,5 @@
import { CommandModule } from "yargs";
import { db, idpOidcConfig, licenseKey } from "@server/db";
import { db, idpOidcConfig, licenseKey, certificates, eventStreamingDestinations, alertWebhookActions } from "@server/db";
import { encrypt, decrypt } from "@server/lib/crypto";
import { configFilePath1, configFilePath2 } from "@server/lib/consts";
import { eq } from "drizzle-orm";
@@ -129,9 +129,15 @@ export const rotateServerSecret: CommandModule<
console.log("\nReading encrypted data from database...");
const idpConfigs = await db.select().from(idpOidcConfig);
const licenseKeys = await db.select().from(licenseKey);
const certs = await db.select().from(certificates);
const streamingDestinations = await db.select().from(eventStreamingDestinations);
const webhookActions = await db.select().from(alertWebhookActions);
console.log(`Found ${idpConfigs.length} OIDC IdP configuration(s)`);
console.log(`Found ${licenseKeys.length} license key(s)`);
console.log(`Found ${certs.length} certificate(s)`);
console.log(`Found ${streamingDestinations.length} event streaming destination(s)`);
console.log(`Found ${webhookActions.length} alert webhook action(s)`);
// Prepare all decrypted and re-encrypted values
console.log("\nDecrypting and re-encrypting values...");
@@ -149,8 +155,27 @@ export const rotateServerSecret: CommandModule<
encryptedInstanceId: string;
};
type CertUpdate = {
certId: number;
encryptedCertFile: string | null;
encryptedKeyFile: string | null;
};
type StreamingDestinationUpdate = {
destinationId: number;
encryptedConfig: string;
};
type WebhookActionUpdate = {
webhookActionId: number;
encryptedConfig: string;
};
const idpUpdates: IdpUpdate[] = [];
const licenseKeyUpdates: LicenseKeyUpdate[] = [];
const certUpdates: CertUpdate[] = [];
const streamingDestinationUpdates: StreamingDestinationUpdate[] = [];
const webhookActionUpdates: WebhookActionUpdate[] = [];
// Process idpOidcConfig entries
for (const idpConfig of idpConfigs) {
@@ -217,6 +242,70 @@ export const rotateServerSecret: CommandModule<
}
}
// Process certificate entries
for (const cert of certs) {
try {
const encryptedCertFile = cert.certFile
? encrypt(decrypt(cert.certFile, oldSecret), newSecret)
: null;
const encryptedKeyFile = cert.keyFile
? encrypt(decrypt(cert.keyFile, oldSecret), newSecret)
: null;
certUpdates.push({
certId: cert.certId,
encryptedCertFile,
encryptedKeyFile
});
} catch (error) {
console.error(
`Error processing certificate ${cert.certId} (${cert.domain}):`,
error
);
throw error;
}
}
// Process eventStreamingDestinations entries
for (const dest of streamingDestinations) {
try {
const decryptedConfig = decrypt(dest.config, oldSecret);
const encryptedConfig = encrypt(decryptedConfig, newSecret);
streamingDestinationUpdates.push({
destinationId: dest.destinationId,
encryptedConfig
});
} catch (error) {
console.error(
`Error processing event streaming destination ${dest.destinationId}:`,
error
);
throw error;
}
}
// Process alertWebhookActions entries
for (const webhook of webhookActions) {
try {
if (webhook.config == null) continue;
const decryptedConfig = decrypt(webhook.config, oldSecret);
const encryptedConfig = encrypt(decryptedConfig, newSecret);
webhookActionUpdates.push({
webhookActionId: webhook.webhookActionId,
encryptedConfig
});
} catch (error) {
console.error(
`Error processing alert webhook action ${webhook.webhookActionId}:`,
error
);
throw error;
}
}
// Perform all database updates in a single transaction
console.log("\nUpdating database in transaction...");
await db.transaction(async (trx) => {
@@ -250,10 +339,50 @@ export const rotateServerSecret: CommandModule<
instanceId: update.encryptedInstanceId
});
}
// Update certificate entries
for (const update of certUpdates) {
await trx
.update(certificates)
.set({
certFile: update.encryptedCertFile,
keyFile: update.encryptedKeyFile
})
.where(eq(certificates.certId, update.certId));
}
// Update event streaming destination entries
for (const update of streamingDestinationUpdates) {
await trx
.update(eventStreamingDestinations)
.set({ config: update.encryptedConfig })
.where(
eq(
eventStreamingDestinations.destinationId,
update.destinationId
)
);
}
// Update alert webhook action entries
for (const update of webhookActionUpdates) {
await trx
.update(alertWebhookActions)
.set({ config: update.encryptedConfig })
.where(
eq(
alertWebhookActions.webhookActionId,
update.webhookActionId
)
);
}
});
console.log(`Rotated ${idpUpdates.length} OIDC IdP configuration(s)`);
console.log(`Rotated ${licenseKeyUpdates.length} license key(s)`);
console.log(`Rotated ${certUpdates.length} certificate(s)`);
console.log(`Rotated ${streamingDestinationUpdates.length} event streaming destination(s)`);
console.log(`Rotated ${webhookActionUpdates.length} alert webhook action(s)`);
// Update config file with new secret
console.log("\nUpdating config file...");
@@ -270,6 +399,9 @@ export const rotateServerSecret: CommandModule<
console.log(`\nSummary:`);
console.log(` - OIDC IdP configurations: ${idpUpdates.length}`);
console.log(` - License keys: ${licenseKeyUpdates.length}`);
console.log(` - Certificates: ${certUpdates.length}`);
console.log(` - Event streaming destinations: ${streamingDestinationUpdates.length}`);
console.log(` - Alert webhook actions: ${webhookActionUpdates.length}`);
console.log(
`\n IMPORTANT: Restart the server for the new secret to take effect.`
);

View File

@@ -8,6 +8,8 @@ import { clearExitNodes } from "./commands/clearExitNodes";
import { rotateServerSecret } from "./commands/rotateServerSecret";
import { clearLicenseKeys } from "./commands/clearLicenseKeys";
import { deleteClient } from "./commands/deleteClient";
import { generateOrgCaKeys } from "./commands/generateOrgCaKeys";
import { clearCertificates } from "./commands/clearCertificates";
yargs(hideBin(process.argv))
.scriptName("pangctl")
@@ -17,5 +19,7 @@ yargs(hideBin(process.argv))
.command(rotateServerSecret)
.command(clearLicenseKeys)
.command(deleteClient)
.command(generateOrgCaKeys)
.command(clearCertificates)
.demandCommand()
.help().argv;

1
config/db/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
*-journal

View File

@@ -4,6 +4,12 @@ services:
image: fosrl/pangolin:latest
container_name: pangolin
restart: unless-stopped
deploy:
resources:
limits:
memory: 1g
reservations:
memory: 256m
volumes:
- ./config:/app/config
healthcheck:

View File

@@ -0,0 +1,12 @@
services:
mailer:
image: axllent/mailpit
ports:
- 8025:8025
- 1025:1025
volumes:
- mailpit-storage:/data
environment:
- MP_DATABASE=/data/mailpit.db
volumes:
mailpit-storage:

View File

@@ -7,8 +7,8 @@ services:
POSTGRES_DB: postgres # Default database name
POSTGRES_USER: postgres # Default user
POSTGRES_PASSWORD: password # Default password (change for production!)
# volumes:
# - ./config/postgres:/var/lib/postgresql/data
volumes:
- ./config/postgres:/var/lib/postgresql/data
ports:
- "5432:5432" # Map host port 5432 to container port 5432
restart: no

View File

@@ -1,41 +1,24 @@
all: update-versions go-build-release put-back
dev-all: dev-update-versions dev-build dev-clean
all: go-build-release
# Build with version injection via ldflags
# Versions can be passed via: make go-build-release PANGOLIN_VERSION=x.x.x GERBIL_VERSION=x.x.x BADGER_VERSION=x.x.x
# Or fetched automatically if not provided (requires curl and jq)
PANGOLIN_VERSION ?= $(shell curl -s https://api.github.com/repos/fosrl/pangolin/tags | jq -r '.[0].name')
GERBIL_VERSION ?= $(shell curl -s https://api.github.com/repos/fosrl/gerbil/tags | jq -r '.[0].name')
BADGER_VERSION ?= $(shell curl -s https://api.github.com/repos/fosrl/badger/tags | jq -r '.[0].name')
LDFLAGS = -X main.pangolinVersion=$(PANGOLIN_VERSION) \
-X main.gerbilVersion=$(GERBIL_VERSION) \
-X main.badgerVersion=$(BADGER_VERSION)
go-build-release:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o bin/installer_linux_amd64
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -o bin/installer_linux_arm64
@echo "Building with versions - Pangolin: $(PANGOLIN_VERSION), Gerbil: $(GERBIL_VERSION), Badger: $(BADGER_VERSION)"
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o bin/installer_linux_amd64
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -ldflags "$(LDFLAGS)" -o bin/installer_linux_arm64
clean:
rm -f bin/installer_linux_amd64
rm -f bin/installer_linux_arm64
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:
if [ -z "$(tag)" ]; then \
PANGOLIN_VERSION=$$(curl -s https://api.github.com/repos/fosrl/pangolin/tags | jq -r '.[0].name'); \
else \
PANGOLIN_VERSION=$(tag); \
fi && \
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') && \
echo "Latest versions - Pangolin: $$PANGOLIN_VERSION, Gerbil: $$GERBIL_VERSION, Badger: $$BADGER_VERSION" && \
sed -i "s/config.PangolinVersion = \".*\"/config.PangolinVersion = \"$$PANGOLIN_VERSION\"/" main.go && \
sed -i "s/config.GerbilVersion = \".*\"/config.GerbilVersion = \"$$GERBIL_VERSION\"/" main.go && \
sed -i "s/config.BadgerVersion = \".*\"/config.BadgerVersion = \"$$BADGER_VERSION\"/" main.go && \
echo "Updated main.go with latest versions"
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"
.PHONY: all go-build-release clean

View File

@@ -99,11 +99,6 @@ func ReadAppConfig(configPath string) (*AppConfigValues, error) {
return values, nil
}
// findPattern finds the start of a pattern in a string
func findPattern(s, pattern string) int {
return bytes.Index([]byte(s), []byte(pattern))
}
func copyDockerService(sourceFile, destFile, serviceName string) error {
// Read source file
sourceData, err := os.ReadFile(sourceFile)
@@ -118,19 +113,19 @@ func copyDockerService(sourceFile, destFile, serviceName string) error {
}
// Parse source Docker Compose YAML
var sourceCompose map[string]interface{}
var sourceCompose map[string]any
if err := yaml.Unmarshal(sourceData, &sourceCompose); err != nil {
return fmt.Errorf("error parsing source Docker Compose file: %w", err)
}
// Parse destination Docker Compose YAML
var destCompose map[string]interface{}
var destCompose map[string]any
if err := yaml.Unmarshal(destData, &destCompose); err != nil {
return fmt.Errorf("error parsing destination Docker Compose file: %w", err)
}
// Get services section from source
sourceServices, ok := sourceCompose["services"].(map[string]interface{})
sourceServices, ok := sourceCompose["services"].(map[string]any)
if !ok {
return fmt.Errorf("services section not found in source file or has invalid format")
}
@@ -142,10 +137,10 @@ func copyDockerService(sourceFile, destFile, serviceName string) error {
}
// Get or create services section in destination
destServices, ok := destCompose["services"].(map[string]interface{})
destServices, ok := destCompose["services"].(map[string]any)
if !ok {
// If services section doesn't exist, create it
destServices = make(map[string]interface{})
destServices = make(map[string]any)
destCompose["services"] = destServices
}
@@ -187,17 +182,21 @@ func backupConfig() error {
return nil
}
func MarshalYAMLWithIndent(data interface{}, indent int) ([]byte, error) {
func MarshalYAMLWithIndent(data any, indent int) (resp []byte, err error) {
buffer := new(bytes.Buffer)
encoder := yaml.NewEncoder(buffer)
encoder.SetIndent(indent)
err := encoder.Encode(data)
if err != nil {
if err := encoder.Encode(data); err != nil {
return nil, err
}
defer encoder.Close()
defer func() {
if cerr := encoder.Close(); cerr != nil && err == nil {
err = cerr
}
}()
return buffer.Bytes(), nil
}
@@ -209,7 +208,7 @@ func replaceInFile(filepath, oldStr, newStr string) error {
}
// Replace the string
newContent := strings.Replace(string(content), oldStr, newStr, -1)
newContent := strings.ReplaceAll(string(content), oldStr, newStr)
// Write the modified content back to the file
err = os.WriteFile(filepath, []byte(newContent), 0644)
@@ -228,28 +227,28 @@ func CheckAndAddTraefikLogVolume(composePath string) error {
}
// Parse YAML into a generic map
var compose map[string]interface{}
var compose map[string]any
if err := yaml.Unmarshal(data, &compose); err != nil {
return fmt.Errorf("error parsing compose file: %w", err)
}
// Get services section
services, ok := compose["services"].(map[string]interface{})
services, ok := compose["services"].(map[string]any)
if !ok {
return fmt.Errorf("services section not found or invalid")
}
// Get traefik service
traefik, ok := services["traefik"].(map[string]interface{})
traefik, ok := services["traefik"].(map[string]any)
if !ok {
return fmt.Errorf("traefik service not found or invalid")
}
// Check volumes
logVolume := "./config/traefik/logs:/var/log/traefik"
var volumes []interface{}
var volumes []any
if existingVolumes, ok := traefik["volumes"].([]interface{}); ok {
if existingVolumes, ok := traefik["volumes"].([]any); ok {
// Check if volume already exists
for _, v := range existingVolumes {
if v.(string) == logVolume {
@@ -295,13 +294,13 @@ func MergeYAML(baseFile, overlayFile string) error {
}
// Parse base YAML into a map
var baseMap map[string]interface{}
var baseMap map[string]any
if err := yaml.Unmarshal(baseContent, &baseMap); err != nil {
return fmt.Errorf("error parsing base YAML: %v", err)
}
// Parse overlay YAML into a map
var overlayMap map[string]interface{}
var overlayMap map[string]any
if err := yaml.Unmarshal(overlayContent, &overlayMap); err != nil {
return fmt.Errorf("error parsing overlay YAML: %v", err)
}
@@ -324,8 +323,8 @@ func MergeYAML(baseFile, overlayFile string) error {
}
// mergeMap recursively merges two maps
func mergeMap(base, overlay map[string]interface{}) map[string]interface{} {
result := make(map[string]interface{})
func mergeMap(base, overlay map[string]any) map[string]any {
result := make(map[string]any)
// Copy all key-values from base map
for k, v := range base {
@@ -336,8 +335,8 @@ func mergeMap(base, overlay map[string]interface{}) map[string]interface{} {
for k, v := range overlay {
// If both maps have the same key and both values are maps, merge recursively
if baseVal, ok := base[k]; ok {
if baseMap, isBaseMap := baseVal.(map[string]interface{}); isBaseMap {
if overlayMap, isOverlayMap := v.(map[string]interface{}); isOverlayMap {
if baseMap, isBaseMap := baseVal.(map[string]any); isBaseMap {
if overlayMap, isOverlayMap := v.(map[string]any); isOverlayMap {
result[k] = mergeMap(baseMap, overlayMap)
continue
}

View File

@@ -81,11 +81,19 @@ entryPoints:
transport:
respondingTimeouts:
readTimeout: "30m"
http3:
advertisedPort: 443
http:
tls:
certResolver: "letsencrypt"
middlewares:
middlewares:
- crowdsec@file
encodedCharacters:
allowEncodedSlash: true
allowEncodedQuestionMark: true
serversTransport:
insecureSkipVerify: true
insecureSkipVerify: true
ping:
entryPoint: "web"

View File

@@ -4,6 +4,12 @@ services:
image: docker.io/fosrl/pangolin:{{if .IsEnterprise}}ee-{{end}}{{.PangolinVersion}}
container_name: pangolin
restart: unless-stopped
deploy:
resources:
limits:
memory: 1g
reservations:
memory: 256m
volumes:
- ./config:/app/config
healthcheck:
@@ -32,15 +38,14 @@ services:
- 51820:51820/udp
- 21820:21820/udp
- 443:443
- 443:443/udp # For http3 QUIC if desired
- 80:80
{{end}}
traefik:
image: docker.io/traefik:v3.6
container_name: traefik
restart: unless-stopped
{{if .InstallGerbil}}
network_mode: service:gerbil # Ports appear on the gerbil service
{{end}}{{if not .InstallGerbil}}
{{if .InstallGerbil}} network_mode: service:gerbil # Ports appear on the gerbil service{{end}}{{if not .InstallGerbil}}
ports:
- 443:443
- 80:80

View File

@@ -40,6 +40,8 @@ entryPoints:
transport:
respondingTimeouts:
readTimeout: "30m"
http3:
advertisedPort: 443
http:
tls:
certResolver: "letsencrypt"

View File

@@ -144,12 +144,13 @@ func installDocker() error {
}
func startDockerService() error {
if runtime.GOOS == "linux" {
switch runtime.GOOS {
case "linux":
cmd := exec.Command("systemctl", "enable", "--now", "docker")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
return cmd.Run()
} else if runtime.GOOS == "darwin" {
case "darwin":
// On macOS, Docker is usually started via the Docker Desktop application
fmt.Println("Please start Docker Desktop manually on macOS.")
return nil
@@ -302,7 +303,7 @@ func pullContainers(containerType SupportedContainer) error {
return nil
}
return fmt.Errorf("Unsupported container type: %s", containerType)
return fmt.Errorf("unsupported container type: %s", containerType)
}
// startContainers starts the containers using the appropriate command.
@@ -325,7 +326,7 @@ func startContainers(containerType SupportedContainer) error {
return nil
}
return fmt.Errorf("Unsupported container type: %s", containerType)
return fmt.Errorf("unsupported container type: %s", containerType)
}
// stopContainers stops the containers using the appropriate command.
@@ -347,7 +348,7 @@ func stopContainers(containerType SupportedContainer) error {
return nil
}
return fmt.Errorf("Unsupported container type: %s", containerType)
return fmt.Errorf("unsupported container type: %s", containerType)
}
// restartContainer restarts a specific container using the appropriate command.
@@ -369,5 +370,5 @@ func restartContainer(container string, containerType SupportedContainer) error
return nil
}
return fmt.Errorf("Unsupported container type: %s", containerType)
return fmt.Errorf("unsupported container type: %s", containerType)
}

View File

@@ -6,12 +6,13 @@ import (
"log"
"os"
"os/exec"
"path/filepath"
"strings"
"gopkg.in/yaml.v3"
)
func installCrowdsec(config Config) error {
func installCrowdsec(config Config, installDir string) error {
if err := stopContainers(config.InstallationContainerType); err != nil {
return fmt.Errorf("failed to stop containers: %v", err)
@@ -27,9 +28,20 @@ func installCrowdsec(config Config) error {
os.Exit(1)
}
os.MkdirAll("config/crowdsec/db", 0755)
os.MkdirAll("config/crowdsec/acquis.d", 0755)
os.MkdirAll("config/traefik/logs", 0755)
if err := os.MkdirAll("config/crowdsec/db", 0755); err != nil {
fmt.Printf("Error creating config files: %v\n", err)
os.Exit(1)
}
if err := os.MkdirAll("config/crowdsec/acquis.d", 0755); err != nil {
fmt.Printf("Error creating config files: %v\n", err)
os.Exit(1)
}
if err := os.MkdirAll("config/traefik/logs", 0755); err != nil {
fmt.Printf("Error creating config files: %v\n", err)
os.Exit(1)
}
setupTraefikLogRotate(installDir)
if err := copyDockerService("config/crowdsec/docker-compose.yml", "docker-compose.yml", "crowdsec"); err != nil {
fmt.Printf("Error copying docker service: %v\n", err)
@@ -153,34 +165,34 @@ func CheckAndAddCrowdsecDependency(composePath string) error {
}
// Parse YAML into a generic map
var compose map[string]interface{}
var compose map[string]any
if err := yaml.Unmarshal(data, &compose); err != nil {
return fmt.Errorf("error parsing compose file: %w", err)
}
// Get services section
services, ok := compose["services"].(map[string]interface{})
services, ok := compose["services"].(map[string]any)
if !ok {
return fmt.Errorf("services section not found or invalid")
}
// Get traefik service
traefik, ok := services["traefik"].(map[string]interface{})
traefik, ok := services["traefik"].(map[string]any)
if !ok {
return fmt.Errorf("traefik service not found or invalid")
}
// Get dependencies
dependsOn, ok := traefik["depends_on"].(map[string]interface{})
dependsOn, ok := traefik["depends_on"].(map[string]any)
if ok {
// Append the new block for crowdsec
dependsOn["crowdsec"] = map[string]interface{}{
dependsOn["crowdsec"] = map[string]any{
"condition": "service_healthy",
}
} else {
// No dependencies exist, create it
traefik["depends_on"] = map[string]interface{}{
"crowdsec": map[string]interface{}{
traefik["depends_on"] = map[string]any{
"crowdsec": map[string]any{
"condition": "service_healthy",
},
}
@@ -199,3 +211,69 @@ func CheckAndAddCrowdsecDependency(composePath string) error {
fmt.Println("Added dependency of crowdsec to traefik")
return nil
}
// setupTraefikLogRotate writes a logrotate config for the Traefik access log
// that CrowdSec depends on. This is only needed when CrowdSec is installed
// because the default Pangolin install does not enable Traefik access logs.
//
// copytruncate is used so Traefik does not need to be restarted or sent a
// signal after rotation — it keeps writing to the same file descriptor while
// the rotated copy is made and the original is truncated in place.
func setupTraefikLogRotate(installDir string) {
const logrotateDir = "/etc/logrotate.d"
const logrotateFile = "/etc/logrotate.d/pangolin-traefik"
logPath := filepath.Join(installDir, "config/traefik/logs/access.log")
if os.Geteuid() != 0 {
fmt.Println("\n[logrotate] Skipping automatic logrotate setup: not running as root.")
fmt.Println("[logrotate] To prevent unbounded growth of the Traefik access log used by CrowdSec,")
fmt.Println("[logrotate] create the file /etc/logrotate.d/pangolin-traefik manually with:")
printLogrotateConfig(logPath)
return
}
config := fmt.Sprintf(`# Logrotate config for Traefik access logs used by CrowdSec.
# Generated by the Pangolin installer. Safe to edit.
%s {
daily
rotate 7
compress
delaycompress
missingok
notifempty
copytruncate
}
`, logPath)
if err := os.MkdirAll(logrotateDir, 0755); err != nil {
fmt.Printf("[logrotate] Warning: could not create %s: %v\n", logrotateDir, err)
return
}
if err := os.WriteFile(logrotateFile, []byte(config), 0644); err != nil {
fmt.Printf("[logrotate] Warning: could not write %s: %v\n", logrotateFile, err)
fmt.Println("[logrotate] Set it up manually:")
printLogrotateConfig(logPath)
return
}
fmt.Printf("[logrotate] Wrote logrotate config to %s\n", logrotateFile)
fmt.Println("[logrotate] Traefik access logs will be rotated daily, keeping 7 compressed copies.")
}
// printLogrotateConfig prints a logrotate config block to stdout so users can
// set it up manually when the installer cannot write to /etc.
func printLogrotateConfig(logPath string) {
fmt.Printf(`
%s {
daily
rotate 7
compress
delaycompress
missingok
notifempty
copytruncate
}
`, logPath)
}

View File

@@ -1,10 +1,38 @@
module installer
go 1.24.0
go 1.25.0
require (
golang.org/x/term v0.39.0
github.com/charmbracelet/huh v1.0.0
github.com/charmbracelet/lipgloss v1.1.0
golang.org/x/term v0.42.0
gopkg.in/yaml.v3 v3.0.1
)
require golang.org/x/sys v0.40.0 // indirect
require (
github.com/atotto/clipboard v0.1.4 // indirect
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
github.com/catppuccin/go v0.3.0 // indirect
github.com/charmbracelet/bubbles v0.21.1-0.20250623103423-23b8fd6302d7 // indirect
github.com/charmbracelet/bubbletea v1.3.6 // indirect
github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc // indirect
github.com/charmbracelet/x/ansi v0.9.3 // indirect
github.com/charmbracelet/x/cellbuf v0.0.13 // indirect
github.com/charmbracelet/x/exp/strings v0.0.0-20240722160745-212f7b056ed0 // indirect
github.com/charmbracelet/x/term v0.2.1 // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-localereader v0.0.1 // indirect
github.com/mattn/go-runewidth v0.0.16 // indirect
github.com/mitchellh/hashstructure/v2 v2.0.2 // indirect
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect
github.com/muesli/cancelreader v0.2.2 // indirect
github.com/muesli/termenv v0.16.0 // indirect
github.com/rivo/uniseg v0.4.7 // indirect
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
golang.org/x/sync v0.15.0 // indirect
golang.org/x/sys v0.43.0 // indirect
golang.org/x/text v0.23.0 // indirect
)

View File

@@ -1,7 +1,80 @@
golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ=
golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/term v0.39.0 h1:RclSuaJf32jOqZz74CkPA9qFuVTX7vhLlpfj/IGWlqY=
golang.org/x/term v0.39.0/go.mod h1:yxzUCTP/U+FzoxfdKmLaA0RV1WgE0VY7hXBwKtY/4ww=
github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ=
github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE=
github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4=
github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI=
github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k=
github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8=
github.com/aymanbagabas/go-udiff v0.3.1 h1:LV+qyBQ2pqe0u42ZsUEtPiCaUoqgA9gYRDs3vj1nolY=
github.com/aymanbagabas/go-udiff v0.3.1/go.mod h1:G0fsKmG+P6ylD0r6N/KgQD/nWzgfnl8ZBcNLgcbrw8E=
github.com/catppuccin/go v0.3.0 h1:d+0/YicIq+hSTo5oPuRi5kOpqkVA5tAsU6dNhvRu+aY=
github.com/catppuccin/go v0.3.0/go.mod h1:8IHJuMGaUUjQM82qBrGNBv7LFq6JI3NnQCF6MOlZjpc=
github.com/charmbracelet/bubbles v0.21.1-0.20250623103423-23b8fd6302d7 h1:JFgG/xnwFfbezlUnFMJy0nusZvytYysV4SCS2cYbvws=
github.com/charmbracelet/bubbles v0.21.1-0.20250623103423-23b8fd6302d7/go.mod h1:ISC1gtLcVilLOf23wvTfoQuYbW2q0JevFxPfUzZ9Ybw=
github.com/charmbracelet/bubbletea v1.3.6 h1:VkHIxPJQeDt0aFJIsVxw8BQdh/F/L2KKZGsK6et5taU=
github.com/charmbracelet/bubbletea v1.3.6/go.mod h1:oQD9VCRQFF8KplacJLo28/jofOI2ToOfGYeFgBBxHOc=
github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc h1:4pZI35227imm7yK2bGPcfpFEmuY1gc2YSTShr4iJBfs=
github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc/go.mod h1:X4/0JoqgTIPSFcRA/P6INZzIuyqdFY5rm8tb41s9okk=
github.com/charmbracelet/huh v1.0.0 h1:wOnedH8G4qzJbmhftTqrpppyqHakl/zbbNdXIWJyIxw=
github.com/charmbracelet/huh v1.0.0/go.mod h1:5YVc+SlZ1IhQALxRPpkGwwEKftN/+OlJlnJYlDRFqN4=
github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY=
github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30=
github.com/charmbracelet/x/ansi v0.9.3 h1:BXt5DHS/MKF+LjuK4huWrC6NCvHtexww7dMayh6GXd0=
github.com/charmbracelet/x/ansi v0.9.3/go.mod h1:3RQDQ6lDnROptfpWuUVIUG64bD2g2BgntdxH0Ya5TeE=
github.com/charmbracelet/x/cellbuf v0.0.13 h1:/KBBKHuVRbq1lYx5BzEHBAFBP8VcQzJejZ/IA3iR28k=
github.com/charmbracelet/x/cellbuf v0.0.13/go.mod h1:xe0nKWGd3eJgtqZRaN9RjMtK7xUYchjzPr7q6kcvCCs=
github.com/charmbracelet/x/conpty v0.1.0 h1:4zc8KaIcbiL4mghEON8D72agYtSeIgq8FSThSPQIb+U=
github.com/charmbracelet/x/conpty v0.1.0/go.mod h1:rMFsDJoDwVmiYM10aD4bH2XiRgwI7NYJtQgl5yskjEQ=
github.com/charmbracelet/x/errors v0.0.0-20240508181413-e8d8b6e2de86 h1:JSt3B+U9iqk37QUU2Rvb6DSBYRLtWqFqfxf8l5hOZUA=
github.com/charmbracelet/x/errors v0.0.0-20240508181413-e8d8b6e2de86/go.mod h1:2P0UgXMEa6TsToMSuFqKFQR+fZTO9CNGUNokkPatT/0=
github.com/charmbracelet/x/exp/golden v0.0.0-20241011142426-46044092ad91 h1:payRxjMjKgx2PaCWLZ4p3ro9y97+TVLZNaRZgJwSVDQ=
github.com/charmbracelet/x/exp/golden v0.0.0-20241011142426-46044092ad91/go.mod h1:wDlXFlCrmJ8J+swcL/MnGUuYnqgQdW9rhSD61oNMb6U=
github.com/charmbracelet/x/exp/strings v0.0.0-20240722160745-212f7b056ed0 h1:qko3AQ4gK1MTS/de7F5hPGx6/k1u0w4TeYmBFwzYVP4=
github.com/charmbracelet/x/exp/strings v0.0.0-20240722160745-212f7b056ed0/go.mod h1:pBhA0ybfXv6hDjQUZ7hk1lVxBiUbupdw5R31yPUViVQ=
github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ=
github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg=
github.com/charmbracelet/x/termios v0.1.1 h1:o3Q2bT8eqzGnGPOYheoYS8eEleT5ZVNYNy8JawjaNZY=
github.com/charmbracelet/x/termios v0.1.1/go.mod h1:rB7fnv1TgOPOyyKRJ9o+AsTU/vK5WHJ2ivHeut/Pcwo=
github.com/charmbracelet/x/xpty v0.1.2 h1:Pqmu4TEJ8KeA9uSkISKMU3f+C1F6OGBn8ABuGlqCbtI=
github.com/charmbracelet/x/xpty v0.1.2/go.mod h1:XK2Z0id5rtLWcpeNiMYBccNNBrP2IJnzHI0Lq13Xzq4=
github.com/creack/pty v1.1.24 h1:bJrF4RRfyJnbTJqzRLHzcGaZK1NeM5kTC9jGgovnR1s=
github.com/creack/pty v1.1.24/go.mod h1:08sCNb52WyoAwi2QDyzUCTgcvVFhUzewun7wtTfvcwE=
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4=
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f/go.mod h1:vw97MGsxSvLiUE2X8qFplwetxpGLQrlU1Q9AUEIzCaM=
github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY=
github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4=
github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88=
github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc=
github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
github.com/mitchellh/hashstructure/v2 v2.0.2 h1:vGKWl0YJqUNxE8d+h8f6NJLcCJrgbhC4NcD46KavDd4=
github.com/mitchellh/hashstructure/v2 v2.0.2/go.mod h1:MG3aRVU/N29oo/V/IhBX8GR/zz4kQkprJgF2EVszyDE=
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI=
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo=
github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA=
github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo=
github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc=
github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk=
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no=
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI=
golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo=
golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8=
golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI=
golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
golang.org/x/term v0.42.0 h1:UiKe+zDFmJobeJ5ggPwOshJIVt6/Ft0rcfrXZDLWAWY=
golang.org/x/term v0.42.0/go.mod h1:Dq/D+snpsbazcBG5+F9Q1n2rXV8Ma+71xEjTRufARgY=
golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=

View File

@@ -1,92 +1,208 @@
package main
import (
"bufio"
"errors"
"fmt"
"strings"
"syscall"
"os"
"strconv"
"github.com/charmbracelet/huh"
"golang.org/x/term"
)
func readString(reader *bufio.Reader, prompt string, defaultValue string) string {
// pangolinTheme is the custom theme using brand colors
var pangolinTheme = ThemePangolin()
// isAccessibleMode checks if we should use accessible mode (simple prompts)
// This is true for: non-TTY, TERM=dumb, or ACCESSIBLE env var set
func isAccessibleMode() bool {
// Check if stdin is not a terminal (piped input, CI, etc.)
if !term.IsTerminal(int(os.Stdin.Fd())) {
return true
}
// Check for dumb terminal
if os.Getenv("TERM") == "dumb" {
return true
}
// Check for explicit accessible mode request
if os.Getenv("ACCESSIBLE") != "" {
return true
}
return false
}
// handleAbort checks if the error is a user abort (Ctrl+C) and exits if so
func handleAbort(err error) {
if err != nil && errors.Is(err, huh.ErrUserAborted) {
fmt.Println("\nInstallation cancelled.")
os.Exit(0)
}
}
// runField runs a single field with the Pangolin theme, handling accessible mode
func runField(field huh.Field) error {
if isAccessibleMode() {
return field.RunAccessible(os.Stdout, os.Stdin)
}
form := huh.NewForm(huh.NewGroup(field)).WithTheme(pangolinTheme)
return form.Run()
}
func readString(prompt string, defaultValue string) string {
var value string
title := prompt
if defaultValue != "" {
fmt.Printf("%s (default: %s): ", prompt, defaultValue)
} else {
fmt.Print(prompt + ": ")
title = fmt.Sprintf("%s (default: %s)", prompt, defaultValue)
}
input, _ := reader.ReadString('\n')
input = strings.TrimSpace(input)
if input == "" {
return defaultValue
}
return input
}
func readStringNoDefault(reader *bufio.Reader, prompt string) string {
fmt.Print(prompt + ": ")
input, _ := reader.ReadString('\n')
return strings.TrimSpace(input)
}
input := huh.NewInput().
Title(title).
Value(&value)
func readPassword(prompt string, reader *bufio.Reader) string {
if term.IsTerminal(int(syscall.Stdin)) {
fmt.Print(prompt + ": ")
// Read password without echo if we're in a terminal
password, err := term.ReadPassword(int(syscall.Stdin))
fmt.Println() // Add a newline since ReadPassword doesn't add one
if err != nil {
return ""
}
input := strings.TrimSpace(string(password))
if input == "" {
return readPassword(prompt, reader)
}
return input
} else {
// Fallback to reading from stdin if not in a terminal
return readString(reader, prompt, "")
// If no default value, this field is required
if defaultValue == "" {
input = input.Validate(func(s string) error {
if s == "" {
return fmt.Errorf("this field is required")
}
return nil
})
}
}
func readBool(reader *bufio.Reader, prompt string, defaultValue bool) bool {
defaultStr := "no"
if defaultValue {
defaultStr = "yes"
}
for {
input := readString(reader, prompt+" (yes/no)", defaultStr)
lower := strings.ToLower(input)
if lower == "yes" {
return true
} else if lower == "no" {
return false
} else {
fmt.Println("Please enter 'yes' or 'no'.")
}
}
}
err := runField(input)
handleAbort(err)
func readBoolNoDefault(reader *bufio.Reader, prompt string) bool {
for {
input := readStringNoDefault(reader, prompt+" (yes/no)")
lower := strings.ToLower(input)
if lower == "yes" {
return true
} else if lower == "no" {
return false
} else {
fmt.Println("Please enter 'yes' or 'no'.")
}
if value == "" {
value = defaultValue
}
}
func readInt(reader *bufio.Reader, prompt string, defaultValue int) int {
input := readString(reader, prompt, fmt.Sprintf("%d", defaultValue))
if input == "" {
return defaultValue
// Print the answer so it remains visible in terminal history (skip in accessible mode as it already shows)
if !isAccessibleMode() {
fmt.Printf("%s: %s\n", prompt, value)
}
value := defaultValue
fmt.Sscanf(input, "%d", &value)
return value
}
func readPassword(prompt string) string {
var value string
for {
input := huh.NewInput().
Title(prompt).
Value(&value).
EchoMode(huh.EchoModePassword).
Validate(func(s string) error {
if s == "" {
return fmt.Errorf("password is required")
}
return nil
})
err := runField(input)
handleAbort(err)
if value != "" {
// Print confirmation without revealing the password
if !isAccessibleMode() {
fmt.Printf("%s: %s\n", prompt, "********")
}
return value
}
}
}
func readBool(prompt string, defaultValue bool) bool {
var value = defaultValue
confirm := huh.NewConfirm().
Title(prompt).
Value(&value).
Affirmative("Yes").
Negative("No")
err := runField(confirm)
handleAbort(err)
// Print the answer so it remains visible in terminal history
if !isAccessibleMode() {
answer := "No"
if value {
answer = "Yes"
}
fmt.Printf("%s: %s\n", prompt, answer)
}
return value
}
func readBoolNoDefault(prompt string) bool {
var value bool
confirm := huh.NewConfirm().
Title(prompt).
Value(&value).
Affirmative("Yes").
Negative("No")
err := runField(confirm)
handleAbort(err)
// Print the answer so it remains visible in terminal history
if !isAccessibleMode() {
answer := "No"
if value {
answer = "Yes"
}
fmt.Printf("%s: %s\n", prompt, answer)
}
return value
}
func readInt(prompt string, defaultValue int) int {
var value string
title := fmt.Sprintf("%s (default: %d)", prompt, defaultValue)
input := huh.NewInput().
Title(title).
Value(&value).
Validate(func(s string) error {
if s == "" {
return nil
}
_, err := strconv.Atoi(s)
if err != nil {
return fmt.Errorf("please enter a valid number")
}
return nil
})
err := runField(input)
handleAbort(err)
if value == "" {
// Print the answer so it remains visible in terminal history
if !isAccessibleMode() {
fmt.Printf("%s: %d\n", prompt, defaultValue)
}
return defaultValue
}
result, err := strconv.Atoi(value)
if err != nil {
if !isAccessibleMode() {
fmt.Printf("%s: %d\n", prompt, defaultValue)
}
return defaultValue
}
// Print the answer so it remains visible in terminal history
if !isAccessibleMode() {
fmt.Printf("%s: %d\n", prompt, result)
}
return result
}

View File

@@ -1,30 +1,35 @@
package main
import (
"bufio"
"crypto/rand"
"embed"
"encoding/base64"
"fmt"
"io"
"io/fs"
"crypto/rand"
"encoding/base64"
"net"
"net/http"
"net/url"
"os"
"os/exec"
"path/filepath"
"runtime"
"strconv"
"strings"
"text/template"
"time"
)
// DO NOT EDIT THIS FUNCTION; IT MATCHED BY REGEX IN CICD
// Version variables injected at build time via -ldflags
var (
pangolinVersion string
gerbilVersion string
badgerVersion string
)
func loadVersions(config *Config) {
config.PangolinVersion = "replaceme"
config.GerbilVersion = "replaceme"
config.BadgerVersion = "replaceme"
config.PangolinVersion = pangolinVersion
config.GerbilVersion = gerbilVersion
config.BadgerVersion = badgerVersion
}
//go:embed config/*
@@ -82,14 +87,19 @@ func main() {
}
}
reader := bufio.NewReader(os.Stdin)
var config Config
var alreadyInstalled = false
// Determine installation directory
installDir := findOrSelectInstallDirectory()
if err := os.Chdir(installDir); err != nil {
fmt.Printf("Error changing to installation directory: %v\n", err)
os.Exit(1)
}
// check if there is already a config file
if _, err := os.Stat("config/config.yml"); err != nil {
config = collectUserInput(reader)
config = collectUserInput()
loadVersions(&config)
config.DoCrowdsecInstall = false
@@ -102,7 +112,10 @@ func main() {
os.Exit(1)
}
moveFile("config/docker-compose.yml", "docker-compose.yml")
if err := moveFile("config/docker-compose.yml", "docker-compose.yml"); err != nil {
fmt.Printf("Error moving docker-compose.yml: %v\n", err)
os.Exit(1)
}
fmt.Println("\nConfiguration files created successfully!")
@@ -117,13 +130,17 @@ func main() {
fmt.Println("\n=== Starting installation ===")
if readBool(reader, "Would you like to install and start the containers?", true) {
if readBool("Would you like to install and start the containers?", true) {
config.InstallationContainerType = podmanOrDocker(reader)
config.InstallationContainerType = podmanOrDocker()
if !isDockerInstalled() && runtime.GOOS == "linux" && config.InstallationContainerType == Docker {
if readBool(reader, "Docker is not installed. Would you like to install it?", true) {
installDocker()
if readBool("Docker is not installed. Would you like to install it?", true) {
if err := installDocker(); err != nil {
fmt.Printf("Error installing Docker: %v\n", err)
return
}
// try to start docker service but ignore errors
if err := startDockerService(); err != nil {
fmt.Println("Error starting Docker service:", err)
@@ -132,7 +149,7 @@ func main() {
}
// 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++ {
for range 5 {
if isDockerRunning() {
fmt.Println("Docker is running!")
break
@@ -167,7 +184,7 @@ func main() {
fmt.Println("\n=== MaxMind Database Update ===")
if _, err := os.Stat("config/GeoLite2-Country.mmdb"); err == nil {
fmt.Println("MaxMind GeoLite2 Country database found.")
if readBool(reader, "Would you like to update the MaxMind database to the latest version?", false) {
if readBool("Would you like to update the MaxMind database to the latest version?", false) {
if err := downloadMaxMindDatabase(); err != nil {
fmt.Printf("Error updating MaxMind database: %v\n", err)
fmt.Println("You can try updating it manually later if needed.")
@@ -175,7 +192,7 @@ func main() {
}
} else {
fmt.Println("MaxMind GeoLite2 Country database not found.")
if readBool(reader, "Would you like to download the MaxMind GeoLite2 database for geoblocking functionality?", false) {
if readBool("Would you like to download the MaxMind GeoLite2 database for geoblocking functionality?", false) {
if err := downloadMaxMindDatabase(); err != nil {
fmt.Printf("Error downloading MaxMind database: %v\n", err)
fmt.Println("You can try downloading it manually later if needed.")
@@ -192,11 +209,11 @@ func main() {
if !checkIsCrowdsecInstalledInCompose() {
fmt.Println("\n=== CrowdSec Install ===")
// check if crowdsec is installed
if readBool(reader, "Would you like to install CrowdSec?", false) {
if readBool("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 readBool("Are you willing to manage CrowdSec?", false) {
if config.DashboardDomain == "" {
traefikConfig, err := ReadTraefikConfig("config/traefik/traefik_config.yml")
if err != nil {
@@ -225,8 +242,8 @@ func main() {
fmt.Printf("Let's Encrypt Email: %s\n", config.LetsEncryptEmail)
fmt.Printf("Badger Version: %s\n", config.BadgerVersion)
if !readBool(reader, "Are these values correct?", true) {
config = collectUserInput(reader)
if !readBool("Are these values correct?", true) {
config = collectUserInput()
}
}
@@ -235,14 +252,14 @@ func main() {
if detectedType == Undefined {
// If detection fails, prompt the user
fmt.Println("Unable to detect container type from existing installation.")
config.InstallationContainerType = podmanOrDocker(reader)
config.InstallationContainerType = podmanOrDocker()
} else {
config.InstallationContainerType = detectedType
fmt.Printf("Detected container type: %s\n", config.InstallationContainerType)
}
config.DoCrowdsecInstall = true
err := installCrowdsec(config)
err := installCrowdsec(config, installDir)
if err != nil {
fmt.Printf("Error installing CrowdSec: %v\n", err)
return
@@ -277,8 +294,119 @@ func main() {
fmt.Printf("\nTo complete the initial setup, please visit:\nhttps://%s/auth/initial-setup\n", config.DashboardDomain)
}
func podmanOrDocker(reader *bufio.Reader) SupportedContainer {
inputContainer := readString(reader, "Would you like to run Pangolin as Docker or Podman containers?", "docker")
func hasExistingInstall(dir string) bool {
configPath := filepath.Join(dir, "config", "config.yml")
_, err := os.Stat(configPath)
return err == nil
}
func findOrSelectInstallDirectory() string {
const defaultInstallDir = "/opt/pangolin"
// Get current working directory
cwd, err := os.Getwd()
if err != nil {
fmt.Printf("Error getting current directory: %v\n", err)
os.Exit(1)
}
// 1. Check current directory for existing install
if hasExistingInstall(cwd) {
fmt.Printf("Found existing Pangolin installation in current directory: %s\n", cwd)
return cwd
}
// 2. Check default location (/opt/pangolin) for existing install
if cwd != defaultInstallDir && hasExistingInstall(defaultInstallDir) {
fmt.Printf("\nFound existing Pangolin installation at: %s\n", defaultInstallDir)
if readBool(fmt.Sprintf("Would you like to use the existing installation at %s?", defaultInstallDir), true) {
return defaultInstallDir
}
}
// 3. No existing install found, prompt for installation directory
fmt.Println("\n=== Installation Directory ===")
fmt.Println("No existing Pangolin installation detected.")
installDir := readString("Enter the installation directory", defaultInstallDir)
// Expand ~ to home directory if present
if strings.HasPrefix(installDir, "~") {
home, err := os.UserHomeDir()
if err != nil {
fmt.Printf("Error getting home directory: %v\n", err)
os.Exit(1)
}
installDir = filepath.Join(home, installDir[1:])
}
// Convert to absolute path
absPath, err := filepath.Abs(installDir)
if err != nil {
fmt.Printf("Error resolving path: %v\n", err)
os.Exit(1)
}
installDir = absPath
// Check if directory exists
if _, err := os.Stat(installDir); os.IsNotExist(err) {
// Directory doesn't exist, create it
if readBool(fmt.Sprintf("Directory %s does not exist. Create it?", installDir), true) {
if err := os.MkdirAll(installDir, 0755); err != nil {
fmt.Printf("Error creating directory: %v\n", err)
os.Exit(1)
}
fmt.Printf("Created directory: %s\n", installDir)
// Offer to change ownership if running via sudo
changeDirectoryOwnership(installDir)
} else {
fmt.Println("Installation cancelled.")
os.Exit(0)
}
}
fmt.Printf("Installation directory: %s\n", installDir)
return installDir
}
func changeDirectoryOwnership(dir string) {
// Check if we're running via sudo by looking for SUDO_USER
sudoUser := os.Getenv("SUDO_USER")
if sudoUser == "" || os.Geteuid() != 0 {
return
}
sudoUID := os.Getenv("SUDO_UID")
sudoGID := os.Getenv("SUDO_GID")
if sudoUID == "" || sudoGID == "" {
return
}
fmt.Printf("\nRunning as root via sudo (original user: %s)\n", sudoUser)
if readBool(fmt.Sprintf("Would you like to change ownership of %s to user '%s'? This makes it easier to manage config files without sudo.", dir, sudoUser), true) {
uid, err := strconv.Atoi(sudoUID)
if err != nil {
fmt.Printf("Warning: Could not parse SUDO_UID: %v\n", err)
return
}
gid, err := strconv.Atoi(sudoGID)
if err != nil {
fmt.Printf("Warning: Could not parse SUDO_GID: %v\n", err)
return
}
if err := os.Chown(dir, uid, gid); err != nil {
fmt.Printf("Warning: Could not change ownership: %v\n", err)
} else {
fmt.Printf("Changed ownership of %s to %s\n", dir, sudoUser)
}
}
}
func podmanOrDocker() SupportedContainer {
inputContainer := readString("Would you like to run Pangolin as Docker or Podman containers?", "docker")
chosenContainer := Docker
if strings.EqualFold(inputContainer, "docker") {
@@ -290,7 +418,8 @@ func podmanOrDocker(reader *bufio.Reader) SupportedContainer {
os.Exit(1)
}
if chosenContainer == Podman {
switch chosenContainer {
case 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)
@@ -299,7 +428,7 @@ func podmanOrDocker(reader *bufio.Reader) SupportedContainer {
if err := exec.Command("bash", "-c", "cat /etc/sysctl.d/99-podman.conf 2>/dev/null | grep 'net.ipv4.ip_unprivileged_port_start=' || cat /etc/sysctl.conf 2>/dev/null | 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.d/99-podman.conf && sysctl --system\". Approve?", true)
approved := readBool("The installer is about to execute \"echo 'net.ipv4.ip_unprivileged_port_start=80' > /etc/sysctl.d/99-podman.conf && sysctl --system\". Approve?", true)
if approved {
if os.Geteuid() != 0 {
fmt.Println("You need to run the installer as root for such a configuration.")
@@ -311,7 +440,7 @@ func podmanOrDocker(reader *bufio.Reader) SupportedContainer {
// Linux only.
if err := run("bash", "-c", "echo 'net.ipv4.ip_unprivileged_port_start=80' > /etc/sysctl.d/99-podman.conf && sysctl --system"); err != nil {
fmt.Printf("Error configuring unprivileged ports: %v\n", err)
fmt.Printf("Error configuring unprivileged ports: %v\n", err)
os.Exit(1)
}
} else {
@@ -321,7 +450,7 @@ func podmanOrDocker(reader *bufio.Reader) SupportedContainer {
fmt.Println("Unprivileged ports have been configured.")
}
} else if chosenContainer == Docker {
case Docker:
// check if docker is not installed and the user is root
if !isDockerInstalled() {
if os.Geteuid() != 0 {
@@ -336,7 +465,7 @@ func podmanOrDocker(reader *bufio.Reader) SupportedContainer {
fmt.Println("The installer will not be able to run docker commands without running it as root.")
os.Exit(1)
}
} else {
default:
// This shouldn't happen unless there's a third container runtime.
os.Exit(1)
}
@@ -344,35 +473,35 @@ func podmanOrDocker(reader *bufio.Reader) SupportedContainer {
return chosenContainer
}
func collectUserInput(reader *bufio.Reader) Config {
func collectUserInput() Config {
config := Config{}
// Basic configuration
fmt.Println("\n=== Basic Configuration ===")
config.IsEnterprise = readBoolNoDefault(reader, "Do you want to install the Enterprise version of Pangolin? The EE is free for personal use or for businesses making less than 100k USD annually.")
config.IsEnterprise = readBoolNoDefault("Do you want to install the Enterprise version of Pangolin? The EE is free for personal use or for businesses making less than 100k USD annually.")
config.BaseDomain = readString(reader, "Enter your base domain (no subdomain e.g. example.com)", "")
config.BaseDomain = readString("Enter your base domain (no subdomain e.g. example.com)", "")
// Set default dashboard domain after base domain is collected
defaultDashboardDomain := ""
if config.BaseDomain != "" {
defaultDashboardDomain = "pangolin." + config.BaseDomain
}
config.DashboardDomain = readString(reader, "Enter the domain for the Pangolin dashboard", defaultDashboardDomain)
config.LetsEncryptEmail = readString(reader, "Enter email for Let's Encrypt certificates", "")
config.InstallGerbil = readBool(reader, "Do you want to use Gerbil to allow tunneled connections", true)
config.DashboardDomain = readString("Enter the domain for the Pangolin dashboard", defaultDashboardDomain)
config.LetsEncryptEmail = readString("Enter email for Let's Encrypt certificates", "")
config.InstallGerbil = readBool("Do you want to use Gerbil to allow tunneled connections", true)
// Email configuration
fmt.Println("\n=== Email Configuration ===")
config.EnableEmail = readBool(reader, "Enable email functionality (SMTP)", false)
config.EnableEmail = readBool("Enable email functionality (SMTP)", false)
if config.EnableEmail {
config.EmailSMTPHost = readString(reader, "Enter SMTP host", "")
config.EmailSMTPPort = readInt(reader, "Enter SMTP port (default 587)", 587)
config.EmailSMTPUser = readString(reader, "Enter SMTP username", "")
config.EmailSMTPPass = readString(reader, "Enter SMTP password", "") // Should this be readPassword?
config.EmailNoReply = readString(reader, "Enter no-reply email address (often the same as SMTP username)", "")
config.EmailSMTPHost = readString("Enter SMTP host", "")
config.EmailSMTPPort = readInt("Enter SMTP port (default 587)", 587)
config.EmailSMTPUser = readString("Enter SMTP username", "")
config.EmailSMTPPass = readPassword("Enter SMTP password")
config.EmailNoReply = readString("Enter no-reply email address (often the same as SMTP username)", "")
}
// Validate required fields
@@ -393,8 +522,8 @@ func collectUserInput(reader *bufio.Reader) Config {
fmt.Println("\n=== Advanced Configuration ===")
config.EnableIPv6 = readBool(reader, "Is your server IPv6 capable?", true)
config.EnableGeoblocking = readBool(reader, "Do you want to download the MaxMind GeoLite2 database for geoblocking functionality?", true)
config.EnableIPv6 = readBool("Is your server IPv6 capable?", true)
config.EnableGeoblocking = readBool("Do you want to download the MaxMind GeoLite2 database for geoblocking functionality?", true)
if config.DashboardDomain == "" {
fmt.Println("Error: Dashboard Domain name is required")
@@ -405,15 +534,23 @@ func collectUserInput(reader *bufio.Reader) Config {
}
func createConfigFiles(config Config) error {
os.MkdirAll("config", 0755)
os.MkdirAll("config/letsencrypt", 0755)
os.MkdirAll("config/db", 0755)
os.MkdirAll("config/logs", 0755)
if err := os.MkdirAll("config", 0755); err != nil {
return fmt.Errorf("failed to create config directory: %v", err)
}
if err := os.MkdirAll("config/letsencrypt", 0755); err != nil {
return fmt.Errorf("failed to create letsencrypt directory: %v", err)
}
if err := os.MkdirAll("config/db", 0755); err != nil {
return fmt.Errorf("failed to create db directory: %v", err)
}
if err := os.MkdirAll("config/logs", 0755); err != nil {
return fmt.Errorf("failed to create logs directory: %v", err)
}
// Walk through all embedded files
err := fs.WalkDir(configFiles, "config", func(path string, d fs.DirEntry, err error) error {
if err != nil {
return err
err := fs.WalkDir(configFiles, "config", func(path string, d fs.DirEntry, walkErr error) (err error) {
if walkErr != nil {
return walkErr
}
// Skip the root fs directory itself
@@ -464,7 +601,11 @@ func createConfigFiles(config Config) error {
if err != nil {
return fmt.Errorf("failed to create %s: %v", path, err)
}
defer outFile.Close()
defer func() {
if cerr := outFile.Close(); cerr != nil && err == nil {
err = cerr
}
}()
// Execute template
if err := tmpl.Execute(outFile, config); err != nil {
@@ -480,18 +621,26 @@ func createConfigFiles(config Config) error {
return nil
}
func copyFile(src, dst string) error {
func copyFile(src, dst string) (err error) {
source, err := os.Open(src)
if err != nil {
return err
}
defer source.Close()
defer func() {
if cerr := source.Close(); cerr != nil && err == nil {
err = cerr
}
}()
destination, err := os.Create(dst)
if err != nil {
return err
}
defer destination.Close()
defer func() {
if cerr := destination.Close(); cerr != nil && err == nil {
err = cerr
}
}()
_, err = io.Copy(destination, source)
return err
@@ -562,22 +711,24 @@ func showSetupTokenInstructions(containerType SupportedContainer, dashboardDomai
fmt.Println("To get your setup token, you need to:")
fmt.Println("")
fmt.Println("1. Start the containers")
if containerType == Docker {
switch containerType {
case Docker:
fmt.Println(" docker compose up -d")
} else if containerType == Podman {
case Podman:
fmt.Println(" podman-compose up -d")
} else {
}
fmt.Println("")
fmt.Println("2. Wait for the Pangolin container to start and generate the token")
fmt.Println("")
fmt.Println("3. Check the container logs for the setup token")
if containerType == Docker {
switch containerType {
case Docker:
fmt.Println(" docker logs pangolin | grep -A 2 -B 2 'SETUP TOKEN'")
} else if containerType == Podman {
case Podman:
fmt.Println(" podman logs pangolin | grep -A 2 -B 2 'SETUP TOKEN'")
} else {
}
fmt.Println("")
fmt.Println("4. Look for output like")
fmt.Println(" === SETUP TOKEN GENERATED ===")
@@ -601,32 +752,6 @@ func generateRandomSecretKey() string {
return base64.StdEncoding.EncodeToString(secret)
}
func getPublicIP() string {
client := &http.Client{
Timeout: 10 * time.Second,
}
resp, err := client.Get("https://ifconfig.io/ip")
if err != nil {
return ""
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
return ""
}
ip := strings.TrimSpace(string(body))
// Validate that it's a valid IP address
if net.ParseIP(ip) != nil {
return ip
}
return ""
}
// Run external commands with stdio/stderr attached.
func run(name string, args ...string) error {
cmd := exec.Command(name, args...)
@@ -639,10 +764,7 @@ func checkPortsAvailable(port int) error {
addr := fmt.Sprintf(":%d", port)
ln, err := net.Listen("tcp", addr)
if err != nil {
return fmt.Errorf(
"ERROR: port %d is occupied or cannot be bound: %w\n\n",
port, err,
)
return fmt.Errorf("ERROR: port %d is occupied or cannot be bound: %w", port, err)
}
if closeErr := ln.Close(); closeErr != nil {
fmt.Fprintf(os.Stderr,

51
install/theme.go Normal file
View File

@@ -0,0 +1,51 @@
package main
import (
"github.com/charmbracelet/huh"
"github.com/charmbracelet/lipgloss"
)
// Pangolin brand colors (converted from oklch to hex)
var (
// Primary orange/amber - oklch(0.6717 0.1946 41.93)
primaryColor = lipgloss.AdaptiveColor{Light: "#D97706", Dark: "#F59E0B"}
// Muted foreground
mutedColor = lipgloss.AdaptiveColor{Light: "#737373", Dark: "#A3A3A3"}
// Success green
successColor = lipgloss.AdaptiveColor{Light: "#16A34A", Dark: "#22C55E"}
// Error red - oklch(0.577 0.245 27.325)
errorColor = lipgloss.AdaptiveColor{Light: "#DC2626", Dark: "#EF4444"}
// Normal text
normalFg = lipgloss.AdaptiveColor{Light: "#171717", Dark: "#FAFAFA"}
)
// ThemePangolin returns a huh theme using Pangolin brand colors
func ThemePangolin() *huh.Theme {
t := huh.ThemeBase()
// Focused state styles
t.Focused.Base = t.Focused.Base.BorderForeground(primaryColor)
t.Focused.Title = t.Focused.Title.Foreground(primaryColor).Bold(true)
t.Focused.Description = t.Focused.Description.Foreground(mutedColor)
t.Focused.ErrorIndicator = t.Focused.ErrorIndicator.Foreground(errorColor)
t.Focused.ErrorMessage = t.Focused.ErrorMessage.Foreground(errorColor)
t.Focused.SelectSelector = t.Focused.SelectSelector.Foreground(primaryColor)
t.Focused.NextIndicator = t.Focused.NextIndicator.Foreground(primaryColor)
t.Focused.PrevIndicator = t.Focused.PrevIndicator.Foreground(primaryColor)
t.Focused.Option = t.Focused.Option.Foreground(normalFg)
t.Focused.SelectedOption = t.Focused.SelectedOption.Foreground(primaryColor)
t.Focused.SelectedPrefix = lipgloss.NewStyle().Foreground(successColor).SetString("✓ ")
t.Focused.UnselectedPrefix = lipgloss.NewStyle().Foreground(mutedColor).SetString(" ")
t.Focused.FocusedButton = t.Focused.FocusedButton.Foreground(lipgloss.Color("#FFFFFF")).Background(primaryColor)
t.Focused.BlurredButton = t.Focused.BlurredButton.Foreground(normalFg).Background(lipgloss.AdaptiveColor{Light: "#E5E5E5", Dark: "#404040"})
t.Focused.TextInput.Cursor = t.Focused.TextInput.Cursor.Foreground(primaryColor)
t.Focused.TextInput.Prompt = t.Focused.TextInput.Prompt.Foreground(primaryColor)
// Blurred state inherits from focused but with hidden border
t.Blurred = t.Focused
t.Blurred.Base = t.Focused.Base.BorderStyle(lipgloss.HiddenBorder())
t.Blurred.Title = t.Blurred.Title.Foreground(mutedColor).Bold(false)
t.Blurred.TextInput.Prompt = t.Blurred.TextInput.Prompt.Foreground(mutedColor)
return t
}

137
license_header_checker.py Normal file
View File

@@ -0,0 +1,137 @@
import os
import sys
# --- Configuration ---
# The header text to be added to the files.
HEADER_TEXT = """/*
* This file is part of a proprietary work.
*
* Copyright (c) 2025-2026 Fossorial, Inc.
* All rights reserved.
*
* This file is licensed under the Fossorial Commercial License.
* You may not use this file except in compliance with the License.
* Unauthorized use, copying, modification, or distribution is strictly prohibited.
*
* This file is not licensed under the AGPLv3.
*/
"""
HEADER_NORMALIZED = HEADER_TEXT.strip()
def extract_leading_block_comment(content):
"""
If the file content begins with a /* ... */ block comment, return the
full text of that comment (including the delimiters) and the index at
which the rest of the file starts (after any trailing newlines).
Returns (None, 0) when no such comment is found.
"""
stripped = content.lstrip()
if not stripped.startswith('/*'):
return None, 0
# Account for any leading whitespace before the comment
comment_start = content.index('/*')
end_marker = content.find('*/', comment_start + 2)
if end_marker == -1:
return None, 0
comment_end = end_marker + 2 # position just after '*/'
comment_text = content[comment_start:comment_end].strip()
# Advance past any whitespace / newlines that follow the closing */
rest_start = comment_end
while rest_start < len(content) and content[rest_start] in '\n\r':
rest_start += 1
return comment_text, rest_start
def should_add_header(file_path):
"""
Checks if a file should receive the commercial license header.
Returns True if 'server/private' is in the path.
"""
if 'server/private' in file_path.lower():
return True
return False
def process_directory(root_dir):
"""
Recursively scans a directory and adds/replaces/removes headers in
qualifying .ts or .tsx files, skipping any 'node_modules' directories.
"""
print(f"Scanning directory: {root_dir}")
files_processed = 0
files_modified = 0
for root, dirs, files in os.walk(root_dir):
# Exclude 'node_modules' directories from the scan.
if 'node_modules' in dirs:
dirs.remove('node_modules')
for file in files:
if not (file.endswith('.ts') or file.endswith('.tsx')):
continue
file_path = os.path.join(root, file)
files_processed += 1
try:
with open(file_path, 'r', encoding='utf-8') as f:
original_content = f.read()
existing_comment, body_start = extract_leading_block_comment(
original_content
)
has_any_header = existing_comment is not None
has_correct_header = existing_comment == HEADER_NORMALIZED
body = original_content[body_start:] if has_any_header else original_content
if should_add_header(file_path):
if has_correct_header:
print(f"Header up-to-date: {file_path}")
else:
# Either no header exists or the header is outdated - write
# the correct one.
action = "Replaced header in" if has_any_header else "Added header to"
new_content = HEADER_NORMALIZED + '\n\n' + body
with open(file_path, 'w', encoding='utf-8') as f:
f.write(new_content)
print(f"{action}: {file_path}")
files_modified += 1
else:
if has_any_header:
# Remove the header - it shouldn't be here.
with open(file_path, 'w', encoding='utf-8') as f:
f.write(body)
print(f"Removed header from: {file_path}")
files_modified += 1
else:
print(f"No header needed: {file_path}")
except Exception as e:
print(f"Error processing file {file_path}: {e}")
print("\n--- Scan Complete ---")
print(f"Total .ts or .tsx files found: {files_processed}")
print(f"Files modified (added/replaced/removed): {files_modified}")
if __name__ == "__main__":
# Get the target directory from the command line arguments.
# If no directory is provided, it uses the current directory ('.').
if len(sys.argv) > 1:
target_directory = sys.argv[1]
else:
target_directory = '.' # Default to current directory
if not os.path.isdir(target_directory):
print(f"Error: Directory '{target_directory}' not found.")
sys.exit(1)
process_directory(os.path.abspath(target_directory))

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,8 @@
{
"contactSalesEnable": "Vertrieb kontaktieren, um diese Funktion zu aktivieren.",
"contactSalesBookDemo": "Demo vereinbaren",
"contactSalesOr": "oder",
"contactSalesContactUs": "kontaktieren Sie uns",
"setupCreate": "Organisation, Standort und Ressourcen erstellen",
"headerAuthCompatibilityInfo": "Aktivieren Sie dies, um eine 401 Nicht autorisierte Antwort zu erzwingen, wenn ein Authentifizierungs-Token fehlt. Dies ist erforderlich für Browser oder bestimmte HTTP-Bibliotheken, die keine Anmeldedaten ohne Server-Challenge senden.",
"headerAuthCompatibility": "Erweiterte Kompatibilität",
@@ -19,6 +23,18 @@
"componentsInvalidKey": "Ungültige oder abgelaufene Lizenzschlüssel erkannt. Beachte die Lizenzbedingungen, um alle Funktionen weiterhin zu nutzen.",
"dismiss": "Verwerfen",
"subscriptionViolationMessage": "Sie überschreiten Ihre Grenzen für Ihr aktuelles Paket. Korrigieren Sie das Problem, indem Sie Webseiten, Benutzer oder andere Ressourcen entfernen, um in Ihrem Paket zu bleiben.",
"trialBannerMessage": "Ihre Testversion läuft in {countdown} ab. Upgraden, um den Zugriff zu behalten.",
"trialBannerExpired": "Ihre Testversion ist abgelaufen. Jetzt upgraden, um den Zugriff wiederherzustellen.",
"billingTrialBannerTitle": "Kostenlose Testversion aktiv",
"billingTrialBannerDescription": "Sie nutzen derzeit eine kostenlose Testversion auf der Geschäftsstufe. Wenn die Testversion endet, wird Ihr Konto automatisch auf die Funktionen und Beschränkungen der Basisstufe zurückgesetzt. Upgraden Sie jederzeit, um weiterhin Zugriff auf die Funktionen Ihres aktuellen Plans zu behalten.",
"billingTrialBannerUpgrade": "Jetzt upgraden",
"billingTrialBadge": "Kostenlose Testversion",
"trialActive": "Kostenlose Testversion aktiv",
"trialExpired": "Testversion abgelaufen",
"trialHasEnded": "Ihre Testversion ist beendet.",
"trialDaysRemaining": "{count, plural, one {# Tag übrig} other {# Tage übrig}}",
"trialDaysLeftShort": "Noch {days}d in der Testversion",
"trialGoToBilling": "Zur Rechnungsseite gehen",
"subscriptionViolationViewBilling": "Rechnung anzeigen",
"componentsLicenseViolation": "Lizenzverstoß: Dieser Server benutzt {usedSites} Standorte, was das Lizenzlimit von {maxSites} Standorten überschreitet. Beachte die Lizenzbedingungen, um alle Funktionen weiterhin zu nutzen.",
"componentsSupporterMessage": "Vielen Dank für die Unterstützung von Pangolin als {tier}!",
@@ -81,6 +97,8 @@
"siteConfirmCopy": "Ich habe die Konfiguration kopiert",
"searchSitesProgress": "Standorte durchsuchen...",
"siteAdd": "Standort hinzufügen",
"sitesTableViewPublicResources": "Öffentliche Ressourcen anzeigen",
"sitesTableViewPrivateResources": "Private Ressourcen anzeigen",
"siteInstallNewt": "Newt installieren",
"siteInstallNewtDescription": "Installiere Newt auf deinem System.",
"WgConfiguration": "WireGuard Konfiguration",
@@ -98,6 +116,21 @@
"siteUpdatedDescription": "Der Standort wurde aktualisiert.",
"siteGeneralDescription": "Allgemeine Einstellungen für diesen Standort konfigurieren",
"siteSettingDescription": "Standorteinstellungen konfigurieren",
"siteResourcesTab": "Ressourcen",
"siteResourcesNoneOnSite": "Diese Seite hat noch keine öffentlichen oder privaten Ressourcen.",
"siteResourcesSectionPublic": "Öffentliche Ressourcen",
"siteResourcesSectionPrivate": "Private Ressourcen",
"siteResourcesSectionPublicDescription": "Ressourcen, die extern über Domains oder Ports bereitgestellt werden.",
"siteResourcesSectionPrivateDescription": "Ressourcen, die in Ihrem privaten Netzwerk über die Seite verfügbar sind.",
"siteResourcesViewAllPublic": "Alle Ressourcen anzeigen",
"siteResourcesViewAllPrivate": "Alle Ressourcen anzeigen",
"siteResourcesDialogDescription": "Überblick über öffentliche und private Ressourcen, die mit dieser Seite verbunden sind.",
"siteResourcesShowMore": "Mehr anzeigen",
"siteResourcesPermissionDenied": "Sie haben keine Berechtigung, diese Ressourcen aufzulisten.",
"siteResourcesEmptyPublic": "Noch sind keine öffentlichen Ressourcen für diese Seite vorhanden.",
"siteResourcesEmptyPrivate": "Noch sind keine privaten Ressourcen mit dieser Seite verbunden.",
"siteResourcesHowToAccess": "Zugriffsmöglichkeiten",
"siteResourcesTargetsOnSite": "Ziele auf dieser Seite",
"siteSetting": "{siteName} Einstellungen",
"siteNewtTunnel": "Newt Standort (empfohlen)",
"siteNewtTunnelDescription": "Einfachster Weg, einen Einstiegspunkt in jedes Netzwerk zu erstellen. Keine zusätzliche Einrichtung.",
@@ -148,6 +181,11 @@
"createLink": "Link erstellen",
"resourcesNotFound": "Keine Ressourcen gefunden",
"resourceSearch": "Suche Ressourcen",
"machineSearch": "Maschinen suchen",
"machinesSearch": "Suche Maschinen-Klienten...",
"machineNotFound": "Keine Maschinen gefunden",
"userDeviceSearch": "Benutzergeräte durchsuchen",
"userDevicesSearch": "Benutzergeräte durchsuchen...",
"openMenu": "Menü öffnen",
"resource": "Ressource",
"title": "Titel",
@@ -175,6 +213,7 @@
"resourceHTTPDescription": "Proxy-Anfragen über HTTPS mit einem voll qualifizierten Domain-Namen.",
"resourceRaw": "Direkte TCP/UDP Ressource (raw)",
"resourceRawDescription": "Proxy-Anfragen über rohes TCP/UDP mit einer Portnummer.",
"resourceRawDescriptionCloud": "Proxy-Anfragen über rohe TCP/UDP mit Portnummer. Benötigt Sites, um sich mit einem entfernten Knoten zu verbinden.",
"resourceCreate": "Ressource erstellen",
"resourceCreateDescription": "Folgen Sie den Schritten unten, um eine neue Ressource zu erstellen",
"resourceSeeAll": "Alle Ressourcen anzeigen",
@@ -261,8 +300,11 @@
"orgMissing": "Organisations-ID fehlt",
"orgMissingMessage": "Einladung kann ohne Organisations-ID nicht neu generiert werden.",
"accessUsersManage": "Benutzer verwalten",
"accessUserManage": "Benutzer verwalten",
"accessUsersDescription": "Benutzer mit Zugriff auf diese Organisation einladen und verwalten",
"accessUsersSearch": "Benutzer suchen...",
"accessUsersRoleFilterCount": "{count, plural, one {# Rolle} other {# Rollen}}",
"accessUsersRoleFilterClear": "Rollenfilter löschen",
"accessUserCreate": "Benutzer erstellen",
"accessUserRemove": "Benutzer entfernen",
"username": "Benutzername",
@@ -322,6 +364,54 @@
"apiKeysDelete": "API-Schlüssel löschen",
"apiKeysManage": "API-Schlüssel verwalten",
"apiKeysDescription": "API-Schlüssel werden zur Authentifizierung mit der Integrations-API verwendet",
"provisioningKeysTitle": "Bereitstellungsschlüssel",
"provisioningKeysManage": "Bereitstellungsschlüssel verwalten",
"provisioningKeysDescription": "Bereitstellungsschlüssel werden verwendet, um die automatisierte Bereitstellung von Seiten für Ihr Unternehmen zu authentifizieren.",
"provisioningManage": "Bereitstellung",
"provisioningDescription": "Bereitstellungsschlüssel verwalten und ausstehende Seiten prüfen, die noch auf Genehmigung warten.",
"pendingSites": "Ausstehende Seiten",
"siteApproveSuccess": "Site erfolgreich freigegeben",
"siteApproveError": "Fehler beim Bestätigen der Seite",
"provisioningKeys": "Bereitstellungsschlüssel",
"searchProvisioningKeys": "Bereitstellungsschlüssel suchen...",
"provisioningKeysAdd": "Bereitstellungsschlüssel generieren",
"provisioningKeysErrorDelete": "Fehler beim Löschen des Bereitstellungsschlüssels",
"provisioningKeysErrorDeleteMessage": "Fehler beim Löschen des Bereitstellungsschlüssels",
"provisioningKeysQuestionRemove": "Sind Sie sicher, dass Sie diesen Bereitstellungsschlüssel aus der Organisation entfernen möchten?",
"provisioningKeysMessageRemove": "Einmal entfernt, kann der Schlüssel nicht mehr für die Bereitstellung der Site verwendet werden.",
"provisioningKeysDeleteConfirm": "Bereitstellungsschlüssel löschen bestätigen",
"provisioningKeysDelete": "Bereitstellungsschlüssel löschen",
"provisioningKeysCreate": "Bereitstellungsschlüssel generieren",
"provisioningKeysCreateDescription": "Einen neuen Bereitstellungsschlüssel für die Organisation generieren",
"provisioningKeysSeeAll": "Alle Bereitstellungsschlüssel anzeigen",
"provisioningKeysSave": "Bereitstellungsschlüssel speichern",
"provisioningKeysSaveDescription": "Sie können dies nur einmal sehen. Kopieren Sie es an einen sicheren Ort.",
"provisioningKeysErrorCreate": "Fehler beim Erstellen des Bereitstellungsschlüssels",
"provisioningKeysList": "Neuer Bereitstellungsschlüssel",
"provisioningKeysMaxBatchSize": "Max. Batch-Größe",
"provisioningKeysUnlimitedBatchSize": "Unbegrenzte Batch-Größe (kein Limit)",
"provisioningKeysMaxBatchUnlimited": "Unbegrenzt",
"provisioningKeysMaxBatchSizeInvalid": "Geben Sie eine gültige maximale Batchgröße ein (11.000.000).",
"provisioningKeysValidUntil": "Gültig bis",
"provisioningKeysValidUntilHint": "Leer lassen für keine Verjährung.",
"provisioningKeysValidUntilInvalid": "Geben Sie ein gültiges Datum und Zeit ein.",
"provisioningKeysNumUsed": "Verwendete Zeiten",
"provisioningKeysLastUsed": "Zuletzt verwendet",
"provisioningKeysNoExpiry": "Kein Ablauf",
"provisioningKeysNeverUsed": "Nie",
"provisioningKeysEdit": "Bereitstellungsschlüssel bearbeiten",
"provisioningKeysEditDescription": "Aktualisieren Sie die maximale Batch-Größe und Ablaufzeit für diesen Schlüssel.",
"provisioningKeysApproveNewSites": "Neue Seiten genehmigen",
"provisioningKeysApproveNewSitesDescription": "Sites, die sich mit diesem Schlüssel registrieren, automatisch freigeben.",
"provisioningKeysUpdateError": "Fehler beim Aktualisieren des Bereitstellungsschlüssels",
"provisioningKeysUpdated": "Bereitstellungsschlüssel aktualisiert",
"provisioningKeysUpdatedDescription": "Ihre Änderungen wurden gespeichert.",
"provisioningKeysBannerTitle": "Website-Bereitstellungsschlüssel",
"provisioningKeysBannerDescription": "Generieren Sie einen Bereitstellungsschlüssel und verwenden Sie ihn mit dem Newt-Connector, um Standorte beim ersten Start automatisch zu erstellen - keine Notwendigkeit, separate Anmeldedaten für jede Seite einzurichten.",
"provisioningKeysBannerButtonText": "Mehr erfahren",
"pendingSitesBannerTitle": "Ausstehende Seiten",
"pendingSitesBannerDescription": "Websites, die mit einem Bereitstellungsschlüssel verbunden sind, erscheinen hier zur Überprüfung.",
"pendingSitesBannerButtonText": "Mehr erfahren",
"apiKeysSettings": "{apiKeyName} Einstellungen",
"userTitle": "Alle Benutzer verwalten",
"userDescription": "Alle Benutzer im System anzeigen und verwalten",
@@ -351,6 +441,10 @@
"licenseErrorKeyActivate": "Fehler beim Aktivieren des Lizenzschlüssels",
"licenseErrorKeyActivateDescription": "Beim Aktivieren des Lizenzschlüssels ist ein Fehler aufgetreten.",
"licenseAbout": "Über Lizenzierung",
"licenseBannerTitle": "Aktivieren Sie Ihre Enterprise-Lizenz",
"licenseBannerDescription": "Schalten Sie Unternehmensfunktionen für Ihre selbstgehostete Pangolin-Instanz frei. Kaufen Sie einen Lizenzschlüssel, um Premium-Funktionen zu aktivieren, und fügen Sie ihn dann unten hinzu.",
"licenseBannerGetLicense": "Lizenz erhalten",
"licenseBannerViewDocs": "Dokumentation anzeigen",
"communityEdition": "Community-Edition",
"licenseAboutDescription": "Dies ist für Geschäfts- und Unternehmensanwender, die Pangolin in einem kommerziellen Umfeld einsetzen. Wenn Sie Pangolin für den persönlichen Gebrauch verwenden, können Sie diesen Abschnitt ignorieren.",
"licenseKeyActivated": "Lizenzschlüssel aktiviert",
@@ -508,9 +602,12 @@
"userSaved": "Benutzer gespeichert",
"userSavedDescription": "Der Benutzer wurde aktualisiert.",
"autoProvisioned": "Automatisch bereitgestellt",
"autoProvisionSettings": "Auto-Bereitstellungseinstellungen",
"autoProvisionedDescription": "Erlaube diesem Benutzer die automatische Verwaltung durch Identitätsanbieter",
"accessControlsDescription": "Verwalten Sie, worauf dieser Benutzer in der Organisation zugreifen und was er tun kann",
"accessControlsSubmit": "Zugriffskontrollen speichern",
"singleRolePerUserPlanNotice": "Ihr Plan unterstützt nur eine Rolle pro Benutzer.",
"singleRolePerUserEditionNotice": "Diese Ausgabe unterstützt nur eine Rolle pro Benutzer.",
"roles": "Rollen",
"accessUsersRoles": "Benutzer & Rollen verwalten",
"accessUsersRolesDescription": "Lade Benutzer ein und füge sie zu Rollen hinzu, um den Zugriff auf die Organisation zu verwalten",
@@ -567,6 +664,8 @@
"targetErrorInvalidPortDescription": "Bitte geben Sie eine gültige Portnummer ein",
"targetErrorNoSite": "Kein Standort ausgewählt",
"targetErrorNoSiteDescription": "Bitte wähle einen Standort für das Ziel aus",
"targetTargetsCleared": "Ziele gelöscht",
"targetTargetsClearedDescription": "Alle Ziele wurden aus dieser Ressource entfernt",
"targetCreated": "Ziel erstellt",
"targetCreatedDescription": "Ziel wurde erfolgreich erstellt",
"targetErrorCreate": "Fehler beim Erstellen des Ziels",
@@ -650,6 +749,7 @@
"resourcesErrorUpdate": "Fehler beim Umschalten der Ressource",
"resourcesErrorUpdateDescription": "Beim Aktualisieren der Ressource ist ein Fehler aufgetreten",
"access": "Zugriff",
"accessControl": "Zugriffskontrolle",
"shareLink": "{resource} Freigabe-Link",
"resourceSelect": "Ressource auswählen",
"shareLinks": "Freigabe-Links",
@@ -667,6 +767,7 @@
"newtEndpoint": "Endpunkt",
"newtId": "ID",
"newtSecretKey": "Geheimnis",
"newtVersion": "Version",
"architecture": "Architektur",
"sites": "Standorte",
"siteWgAnyClients": "Verwenden Sie jeden WireGuard-Client um sich zu verbinden. Sie müssen interne Ressourcen über die Peer-IP ansprechen.",
@@ -790,6 +891,7 @@
"accessRoleRemoved": "Rolle entfernt",
"accessRoleRemovedDescription": "Die Rolle wurde erfolgreich entfernt.",
"accessRoleRequiredRemove": "Bevor Sie diese Rolle löschen, wählen Sie bitte eine neue Rolle aus, zu der die bestehenden Mitglieder übertragen werden sollen.",
"network": "Netzwerk",
"manage": "Verwalten",
"sitesNotFound": "Keine Standorte gefunden.",
"pangolinServerAdmin": "Server-Admin - Pangolin",
@@ -833,6 +935,7 @@
"idpDisplayName": "Ein Anzeigename für diesen Identitätsanbieter",
"idpAutoProvisionUsers": "Automatische Benutzerbereitstellung",
"idpAutoProvisionUsersDescription": "Wenn aktiviert, werden Benutzer beim ersten Login automatisch im System erstellt, mit der Möglichkeit, Benutzer Rollen und Organisationen zuzuordnen.",
"idpAutoProvisionConfigureAfterCreate": "Sie können die automatische Bereitstellung einstellen, sobald der Identitätsanbieter erstellt ist.",
"licenseBadge": "EE",
"idpType": "Anbietertyp",
"idpTypeDescription": "Wählen Sie den Typ des Identitätsanbieters, den Sie konfigurieren möchten",
@@ -884,7 +987,7 @@
"defaultMappingsRole": "Standard-Rollenzuordnung",
"defaultMappingsRoleDescription": "JMESPath zur Extraktion von Rolleninformationen aus dem ID-Token. Das Ergebnis dieses Ausdrucks muss den Rollennamen als String zurückgeben, wie er in der Organisation definiert ist.",
"defaultMappingsOrg": "Standard-Organisationszuordnung",
"defaultMappingsOrgDescription": "JMESPath zur Extraktion von Organisationsinformationen aus dem ID-Token. Dieser Ausdruck muss die Organisations-ID oder true zurückgeben, damit der Benutzer Zugriff auf die Organisation erhält.",
"defaultMappingsOrgDescription": "Wenn diese Einstellung festgelegt ist, muss dieser Ausdruck die Organisations-ID oder wahr zurückgeben, damit der Benutzer diese Organisation betreten kann. Ist sie nicht festgelegt, reicht die Definition einer Rollenzuordnung aus: Der Benutzer darf eintreten, solange eine gültige Rollenzuordnung innerhalb der Organisation für ihn aufgelöst werden kann.",
"defaultMappingsSubmit": "Standardzuordnungen speichern",
"orgPoliciesEdit": "Organisationsrichtlinie bearbeiten",
"org": "Organisation",
@@ -1037,7 +1140,6 @@
"pageNotFoundDescription": "Hoppla! Die gesuchte Seite existiert nicht.",
"overview": "Übersicht",
"home": "Startseite",
"accessControl": "Zugriffskontrolle",
"settings": "Einstellungen",
"usersAll": "Alle Benutzer",
"license": "Lizenz",
@@ -1100,6 +1202,12 @@
"actionGetUser": "Benutzer abrufen",
"actionGetOrgUser": "Organisationsbenutzer abrufen",
"actionListOrgDomains": "Organisationsdomains auflisten",
"actionGetDomain": "Domain abrufen",
"actionCreateOrgDomain": "Domain erstellen",
"actionUpdateOrgDomain": "Domain aktualisieren",
"actionDeleteOrgDomain": "Domain löschen",
"actionGetDNSRecords": "DNS-Einträge abrufen",
"actionRestartOrgDomain": "Domain neu starten",
"actionCreateSite": "Standort erstellen",
"actionDeleteSite": "Standort löschen",
"actionGetSite": "Standort abrufen",
@@ -1111,6 +1219,7 @@
"setupTokenDescription": "Geben Sie das Setup-Token von der Serverkonsole ein.",
"setupTokenRequired": "Setup-Token ist erforderlich",
"actionUpdateSite": "Standorte aktualisieren",
"actionResetSiteBandwidth": "Organisations-Bandbreite zurücksetzen",
"actionListSiteRoles": "Erlaubte Standort-Rollen auflisten",
"actionCreateResource": "Ressource erstellen",
"actionDeleteResource": "Ressource löschen",
@@ -1140,6 +1249,7 @@
"actionRemoveUser": "Benutzer entfernen",
"actionListUsers": "Benutzer auflisten",
"actionAddUserRole": "Benutzerrolle hinzufügen",
"actionSetUserOrgRoles": "Benutzerrollen festlegen",
"actionGenerateAccessToken": "Zugriffstoken generieren",
"actionDeleteAccessToken": "Zugriffstoken löschen",
"actionListAccessTokens": "Zugriffstoken auflisten",
@@ -1184,6 +1294,7 @@
"actionViewLogs": "Logs anzeigen",
"noneSelected": "Keine ausgewählt",
"orgNotFound2": "Keine Organisationen gefunden.",
"search": "Suche…",
"searchPlaceholder": "Suche...",
"emptySearchOptions": "Keine Optionen gefunden",
"create": "Erstellen",
@@ -1249,12 +1360,14 @@
"sidebarClientResources": "Privat",
"sidebarAccessControl": "Zugriffskontrolle",
"sidebarLogsAndAnalytics": "Protokolle & Analysen",
"sidebarTeam": "Team",
"sidebarUsers": "Benutzer",
"sidebarAdmin": "Admin",
"sidebarInvitations": "Einladungen",
"sidebarRoles": "Rollen",
"sidebarShareableLinks": "Links",
"sidebarApiKeys": "API-Schlüssel",
"sidebarProvisioning": "Bereitstellung",
"sidebarSettings": "Einstellungen",
"sidebarAllUsers": "Alle Benutzer",
"sidebarIdentityProviders": "Identitätsanbieter",
@@ -1266,9 +1379,167 @@
"sidebarGeneral": "Verwalten",
"sidebarLogAndAnalytics": "Log & Analytik",
"sidebarBluePrints": "Blaupausen",
"sidebarAlerting": "Benachrichtigung",
"sidebarHealthChecks": "Gesundheits-Checks",
"sidebarOrganization": "Organisation",
"sidebarManagement": "Management",
"sidebarBillingAndLicenses": "Abrechnung & Lizenzen",
"sidebarLogsAnalytics": "Analytik",
"alertingTitle": "Benachrichtigung",
"alertingDescription": "Quellen, Auslöser und Aktionen für Benachrichtigungen festlegen",
"alertingRules": "Benachrichtigungsregeln",
"alertingSearchRules": "Suchregeln…",
"alertingAddRule": "Regel erstellen",
"alertingColumnSource": "Quelle",
"alertingColumnTrigger": "Auslöser",
"alertingColumnActions": "Aktionen",
"alertingColumnEnabled": "Aktiviert",
"alertingDeleteQuestion": "Bitte bestätigen Sie, dass Sie diese Benachrichtigungsregel löschen möchten.",
"alertingDeleteRule": "Benachrichtigungsregel löschen",
"alertingRuleDeleted": "Benachrichtigungsregel gelöscht",
"alertingRuleSaved": "Benachrichtigungsregel gespeichert",
"alertingRuleSavedCreatedDescription": "Ihre neue Benachrichtigungsregel wurde erstellt. Sie können sie auf dieser Seite weiter bearbeiten.",
"alertingRuleSavedUpdatedDescription": "Ihre Änderungen an dieser Benachrichtigungsregel wurden gespeichert.",
"alertingEditRule": "Benachrichtigungsregel bearbeiten",
"alertingCreateRule": "Benachrichtigungsregel erstellen",
"alertingRuleCredenzaDescription": "Wählen Sie aus, was beobachtet, wann ausgelöst und wie benachrichtigt werden soll",
"alertingRuleNamePlaceholder": "Produktionsseite ausgefallen",
"alertingRuleEnabled": "Regel aktiviert",
"alertingSectionSource": "Quelle",
"alertingSourceType": "Quellentyp",
"alertingSourceSite": "Standort",
"alertingSourceHealthCheck": "Gesundheits-Check",
"alertingPickSites": "Standorte",
"alertingPickHealthChecks": "Gesundheits-Checks",
"alertingPickResources": "Ressourcen",
"alertingAllSites": "Alle Standorte",
"alertingAllSitesDescription": "Benachrichtigung für jeden Standort",
"alertingSpecificSites": "Bestimmte Standorte",
"alertingSpecificSitesDescription": "Wählen Sie spezifische Standorte zur Beobachtung aus",
"alertingAllHealthChecks": "Alle Gesundheits-Checks",
"alertingAllHealthChecksDescription": "Benachrichtigung für jeden Gesundheits-Check",
"alertingSpecificHealthChecks": "Bestimmte Gesundheits-Checks",
"alertingSpecificHealthChecksDescription": "Wählen Sie spezifische Gesundheits-Checks zur Beobachtung aus",
"alertingAllResources": "Alle Ressourcen",
"alertingAllResourcesDescription": "Benachrichtigung für jede Ressource",
"alertingSpecificResources": "Spezifische Ressourcen",
"alertingSpecificResourcesDescription": "Wählen Sie spezifische Ressourcen zur Beobachtung aus",
"alertingSelectResources": "Ressourcen auswählen…",
"alertingResourcesSelected": "{count} Ressourcen ausgewählt",
"alertingResourcesEmpty": "Keine Ressourcen mit Zielen in den ersten 10 Ergebnissen.",
"alertingSectionTrigger": "Auslöser",
"alertingTrigger": "Wann benachrichtigen",
"alertingTriggerSiteOnline": "Seite online",
"alertingTriggerSiteOffline": "Seite offline",
"alertingTriggerSiteToggle": "Seitenstatus ändern",
"alertingTriggerHcHealthy": "Gesundheits-Check gesund",
"alertingTriggerHcUnhealthy": "Gesundheits-Check ungesund",
"alertingTriggerHcToggle": "Gesundheits-Check-Status ändern",
"alertingTriggerResourceHealthy": "Ressource gesund",
"alertingTriggerResourceUnhealthy": "Ressource ungesund",
"alertingTriggerResourceDegraded": "Ressource verschlechtert",
"alertingSearchHealthChecks": "Gesundheits-Checks suchen…",
"alertingHealthChecksEmpty": "Keine Gesundheits-Checks verfügbar.",
"alertingTriggerResourceToggle": "Ressourcenstatus ändern",
"alertingSourceResource": "Ressource",
"alertingSectionActions": "Aktionen",
"alertingAddAction": "Aktion hinzufügen",
"alertingActionNotify": "E-Mail",
"alertingActionNotifyDescription": "Versenden Sie E-Mail-Benachrichtigungen an Benutzer oder Rollen",
"alertingActionWebhook": "Webhook",
"alertingActionWebhookDescription": "Senden Sie eine HTTP-Anfrage an einen benutzerdefinierten Endpunkt",
"alertingExternalIntegration": "Externe Integration",
"alertingExternalPagerDutyDescription": "Senden Sie Benachrichtigungen an PagerDuty für Incident Management",
"alertingExternalOpsgenieDescription": "Leiten Sie Benachrichtigungen an Opsgenie für On-Call Management",
"alertingExternalServiceNowDescription": "Erstellen Sie ServiceNow-Incidents aus Benachrichtigungsereignissen",
"alertingExternalIncidentIoDescription": "Starten Sie Incident.io-Workflows aus Benachrichtigungsereignissen",
"alertingActionType": "Aktionstyp",
"alertingNotifyUsers": "Benutzer",
"alertingNotifyRoles": "Rollen",
"alertingNotifyEmails": "E-Mail-Adressen",
"alertingEmailPlaceholder": "E-Mail hinzufügen und Enter drücken",
"alertingWebhookMethod": "HTTP-Methode",
"alertingWebhookSecret": "Signatur geheim (optional)",
"alertingWebhookSecretPlaceholder": "HMAC-Geheimnis",
"alertingWebhookHeaders": "Header",
"alertingAddHeader": "Header hinzufügen",
"alertingSelectSites": "Standorte auswählen…",
"alertingSitesSelected": "{count} Standorte ausgewählt",
"alertingSelectHealthChecks": "Gesundheits-Checks auswählen…",
"alertingHealthChecksSelected": "{count} Gesundheits-Checks ausgewählt",
"alertingNoHealthChecks": "Keine Ziele mit aktivierten Gesundheits-Checks",
"alertingHealthCheckStub": "Gesundheits-Quellenauswahl ist noch nicht verdrahtet Sie können trotzdem Auslöser und Aktionen konfigurieren.",
"alertingSelectUsers": "Benutzer auswählen…",
"alertingUsersSelected": "{count} Benutzer ausgewählt",
"alertingSelectRoles": "Rollen auswählen…",
"alertingRolesSelected": "{count} Rollen ausgewählt",
"alertingSummarySites": "Standorte ({count})",
"alertingSummaryAllSites": "Alle Standorte",
"alertingSummaryHealthChecks": "Gesundheits-Checks ({count})",
"alertingSummaryAllHealthChecks": "Alle Gesundheits-Checks",
"alertingSummaryResources": "Ressourcen ({count})",
"alertingSummaryAllResources": "Alle Ressourcen",
"alertingErrorNameRequired": "Einen Namen eingeben",
"alertingErrorActionsMin": "Mindestens eine Aktion hinzufügen",
"alertingErrorPickSites": "Wählen Sie mindestens einen Standort aus",
"alertingErrorPickHealthChecks": "Wählen Sie mindestens einen Gesundheits-Check aus",
"alertingErrorPickResources": "Wählen Sie mindestens eine Ressource aus",
"alertingErrorTriggerSite": "Wählen Sie einen Auslöser für den Standort",
"alertingErrorTriggerHealth": "Wählen Sie einen Auslöser für den Gesundheits-Check",
"alertingErrorTriggerResource": "Wählen Sie einen Auslöser für die Ressource",
"alertingErrorNotifyRecipients": "Wählen Sie Benutzer, Rollen oder mindestens eine E-Mail aus",
"alertingConfigureSource": "Quelle konfigurieren",
"alertingConfigureTrigger": "Auslöser konfigurieren",
"alertingConfigureActions": "Aktionen konfigurieren",
"alertingBackToRules": "Zurück zu den Regeln",
"alertingRuleCooldown": "Cooldown (Sekunden)",
"alertingRuleCooldownDescription": "Mindest-Zeit zwischen wiederholten Benachrichtigungen für dieselbe Regel. Auf 0 setzen, um jedes Mal auszulösen.",
"alertingDraftBadge": "Entwurf - speichern, um diese Regel zu sichern",
"alertingSidebarHint": "Klicken Sie auf einen Schritt auf der Leinwand, um ihn hier zu bearbeiten.",
"alertingGraphCanvasTitle": "Regelfluss",
"alertingGraphCanvasDescription": "Visuelle Übersicht über Quelle, Auslöser und Aktionen. Wählen Sie einen Knoten aus, um ihn im Panel zu bearbeiten.",
"alertingNodeNotConfigured": "Noch nicht konfiguriert",
"alertingNodeActionsCount": "{count, plural, one {# Aktion} other {# Aktionen}}",
"alertingNodeRoleSource": "Quelle",
"alertingNodeRoleTrigger": "Auslöser",
"alertingNodeRoleAction": "Aktion",
"alertingTabRules": "Benachrichtigungsregeln",
"alertingTabHealthChecks": "Gesundheits-Checks",
"alertingRulesBannerTitle": "Benachrichtigt werden",
"alertingRulesBannerDescription": "Jede Regel verknüpft, was beobachtet werden soll (eine Seite, ein Gesundheits-Check oder eine Ressource), wann es ausgelöst werden soll (zum Beispiel offline oder ungesund), und wie Ihr Team benachrichtigt wird, z. B. per E-Mail, Webhooks oder Integrationen. Verwenden Sie diese Liste, um diese Regeln zu erstellen, zu aktivieren und zu verwalten.",
"alertingHealthChecksBannerTitle": "Gesundheit & Ressourcen überwachen",
"alertingHealthChecksBannerDescription": "Gesundheits-Checks sind HTTP- oder TCP-Monitore, die Sie einmal definieren. Sie können sie dann als Quellen in Benachrichtigungsregeln verwenden, so dass Sie benachrichtigt werden, wenn ein Ziel gesund oder ungesund wird. Gesundheits-Checks für Ressourcen erscheinen ebenfalls hier.",
"standaloneHcTableTitle": "Gesundheits-Checks",
"standaloneHcSearchPlaceholder": "Gesundheits-Checks suchen…",
"standaloneHcAddButton": "Gesundheits-Check erstellen",
"standaloneHcCreateTitle": "Gesundheits-Check erstellen",
"standaloneHcEditTitle": "Gesundheits-Check bearbeiten",
"standaloneHcDescription": "Konfigurieren Sie einen HTTP- oder TCP-Gesundheits-Check zur Verwendung in Benachrichtigungsregeln.",
"standaloneHcNameLabel": "Name",
"standaloneHcNamePlaceholder": "Mein HTTP-Monitor",
"standaloneHcDeleteTitle": "Gesundheits-Check löschen",
"standaloneHcDeleteQuestion": "Bitte bestätigen Sie, dass Sie diesen Gesundheits-Check löschen möchten.",
"standaloneHcDeleted": "Gesundheits-Check gelöscht",
"standaloneHcSaved": "Gesundheits-Check gespeichert",
"standaloneHcColumnHealth": "Gesundheit",
"standaloneHcColumnMode": "Modus",
"standaloneHcColumnTarget": "Ziel",
"standaloneHcHealthStateHealthy": "Gesund",
"standaloneHcHealthStateUnhealthy": "Ungesund",
"standaloneHcHealthStateUnknown": "Unbekannt",
"standaloneHcFilterAnySite": "Alle Standorte",
"standaloneHcFilterAnyResource": "Alle Ressourcen",
"standaloneHcFilterMode": "Modus",
"standaloneHcFilterModeHttp": "HTTP",
"standaloneHcFilterModeTcp": "TCP",
"standaloneHcFilterModeSnmp": "SNMP",
"standaloneHcFilterModePing": "Ping",
"standaloneHcFilterHealth": "Gesundheit",
"standaloneHcFilterEnabled": "Aktiviert",
"standaloneHcFilterEnabledOn": "Aktiviert",
"standaloneHcFilterEnabledOff": "Deaktiviert",
"standaloneHcFilterSiteIdFallback": "Standort {id}",
"standaloneHcFilterResourceIdFallback": "Ressource {id}",
"blueprints": "Blaupausen",
"blueprintsDescription": "Deklarative Konfigurationen anwenden und vorherige Abläufe anzeigen",
"blueprintAdd": "Blueprint hinzufügen",
@@ -1289,7 +1560,6 @@
"parsedContents": "Analysierte Inhalte (Nur lesen)",
"enableDockerSocket": "Docker Blueprint aktivieren",
"enableDockerSocketDescription": "Aktiviere Docker-Socket-Label-Scraping für Blueprintbeschriftungen. Der Socket-Pfad muss neu angegeben werden.",
"enableDockerSocketLink": "Mehr erfahren",
"viewDockerContainers": "Docker Container anzeigen",
"containersIn": "Container in {siteName}",
"selectContainerDescription": "Wählen Sie einen Container, der als Hostname für dieses Ziel verwendet werden soll. Klicken Sie auf einen Port, um einen Port zu verwenden.",
@@ -1331,7 +1601,8 @@
"initialSetupDescription": "Erstellen Sie das initiale Server-Admin-Konto. Es kann nur einen Server-Admin geben. Sie können diese Anmeldedaten später immer ändern.",
"createAdminAccount": "Admin-Konto erstellen",
"setupErrorCreateAdmin": "Beim Erstellen des Server-Admin-Kontos ist ein Fehler aufgetreten.",
"certificateStatus": "Zertifikatsstatus",
"certificateStatus": "Zertifikat",
"certificateStatusAutoRefreshHint": "Der Status wird automatisch aktualisiert.",
"loading": "Laden",
"loadingAnalytics": "Analytik wird geladen",
"restart": "Neustart",
@@ -1400,6 +1671,7 @@
"pangolinUpdateAvailableReleaseNotes": "Versionshinweise anzeigen",
"newtUpdateAvailable": "Update verfügbar",
"newtUpdateAvailableInfo": "Eine neue Version von Newt ist verfügbar. Bitte aktualisieren Sie auf die neueste Version für das beste Erlebnis.",
"pangolinNodeUpdateAvailableInfo": "Eine neue Version von Pangolin Node ist verfügbar. Bitte aktualisieren Sie auf die neueste Version für das beste Erlebnis.",
"domainPickerEnterDomain": "Domäne",
"domainPickerPlaceholder": "myapp.example.com",
"domainPickerDescription": "Geben Sie die vollständige Domain der Ressource ein, um verfügbare Optionen zu sehen.",
@@ -1417,6 +1689,7 @@
"domainPickerNamespace": "Namespace: {namespace}",
"domainPickerShowMore": "Mehr anzeigen",
"regionSelectorTitle": "Region auswählen",
"domainPickerRemoteExitNodeWarning": "Angegebene Domains werden nicht unterstützt, wenn sich Websites mit externen Exit-Knoten verbinden. Damit Ressourcen auf entfernten Knoten verfügbar sind, verwenden Sie stattdessen eine eigene Domain.",
"regionSelectorInfo": "Das Auswählen einer Region hilft uns, eine bessere Leistung für Ihren Standort bereitzustellen. Sie müssen sich nicht in derselben Region wie Ihr Server befinden.",
"regionSelectorPlaceholder": "Wähle eine Region",
"regionSelectorComingSoon": "Kommt bald",
@@ -1570,6 +1843,16 @@
"billingFeatureLossWarning": "Verfügbarkeitshinweis",
"billingFeatureLossDescription": "Durch Herabstufung werden Funktionen, die im neuen Paket nicht verfügbar sind, automatisch deaktiviert. Einige Einstellungen und Konfigurationen können verloren gehen. Bitte überprüfen Sie die Preismatrix um zu verstehen, welche Funktionen nicht mehr verfügbar sein werden.",
"billingUsageExceedsLimit": "Aktuelle Nutzung ({current}) überschreitet das Limit ({limit})",
"billingPastDueTitle": "Zahlung vergangene Fälligkeit",
"billingPastDueDescription": "Ihre Zahlung ist abgelaufen. Bitte aktualisieren Sie Ihre Zahlungsmethode, um die aktuellen Funktionen Ihres Pakets weiter zu nutzen. Wenn nicht geklärt, wird Ihr Abonnement abgebrochen und Sie werden auf die kostenlose Stufe zurückgekehrt.",
"billingUnpaidTitle": "Unbezahltes Abonnement",
"billingUnpaidDescription": "Dein Abonnement ist unbezahlt und du wurdest auf die kostenlose Stufe zurückgekehrt. Bitte aktualisiere deine Zahlungsmethode, um dein Abonnement wiederherzustellen.",
"billingIncompleteTitle": "Zahlung unvollständig",
"billingIncompleteDescription": "Ihre Zahlung ist unvollständig. Bitte schließen Sie den Zahlungsvorgang ab, um Ihr Abonnement zu aktivieren.",
"billingIncompleteExpiredTitle": "Zahlung abgelaufen",
"billingIncompleteExpiredDescription": "Deine Zahlung wurde nie abgeschlossen und ist abgelaufen. Du wurdest zur kostenlosen Stufe zurückgekehrt. Bitte melde dich erneut an, um den Zugriff auf kostenpflichtige Funktionen wiederherzustellen.",
"billingManageSubscription": "Verwalten Sie Ihr Abonnement",
"billingResolvePaymentIssue": "Bitte beheben Sie Ihr Zahlungsproblem vor dem Upgrade oder Herabstufen",
"signUpTerms": {
"IAgreeToThe": "Ich stimme den",
"termsOfService": "Nutzungsbedingungen zu",
@@ -1628,6 +1911,7 @@
"configureHealthCheck": "Gesundheits-Check konfigurieren",
"configureHealthCheckDescription": "Richten Sie die Gesundheitsüberwachung für {target} ein",
"enableHealthChecks": "Gesundheits-Checks aktivieren",
"healthCheckDisabledStateDescription": "Wenn deaktiviert, führt die Seite keine Gesundheitsprüfungen durch und der Zustand wird als unbekannt betrachtet.",
"enableHealthChecksDescription": "Überwachen Sie die Gesundheit dieses Ziels. Bei Bedarf können Sie einen anderen Endpunkt als das Ziel überwachen.",
"healthScheme": "Methode",
"healthSelectScheme": "Methode auswählen",
@@ -1643,6 +1927,24 @@
"timeIsInSeconds": "Zeit ist in Sekunden",
"requireDeviceApproval": "Gerätegenehmigungen erforderlich",
"requireDeviceApprovalDescription": "Benutzer mit dieser Rolle benötigen neue Geräte, die von einem Administrator genehmigt wurden, bevor sie sich verbinden und auf Ressourcen zugreifen können.",
"sshAccess": "SSH-Zugriff",
"roleAllowSsh": "SSH erlauben",
"roleAllowSshAllow": "Erlauben",
"roleAllowSshDisallow": "Nicht zulassen",
"roleAllowSshDescription": "Benutzern mit dieser Rolle erlauben, sich über SSH mit Ressourcen zu verbinden. Wenn deaktiviert, kann die Rolle keinen SSH-Zugriff verwenden.",
"sshSudoMode": "Sudo-Zugriff",
"sshSudoModeNone": "Keine",
"sshSudoModeNoneDescription": "Benutzer kann keine Befehle mit sudo ausführen.",
"sshSudoModeFull": "Volles Sudo",
"sshSudoModeFullDescription": "Benutzer kann jeden Befehl mit sudo ausführen.",
"sshSudoModeCommands": "Befehle",
"sshSudoModeCommandsDescription": "Benutzer kann nur die angegebenen Befehle mit sudo ausführen.",
"sshSudo": "sudo erlauben",
"sshSudoCommands": "Sudo-Befehle",
"sshSudoCommandsDescription": "Kommagetrennte Liste von Befehlen, die der Benutzer mit sudo ausführen darf.",
"sshCreateHomeDir": "Home-Verzeichnis erstellen",
"sshUnixGroups": "Unix-Gruppen",
"sshUnixGroupsDescription": "Durch Komma getrennte Unix-Gruppen, um den Benutzer auf dem Zielhost hinzuzufügen.",
"retryAttempts": "Wiederholungsversuche",
"expectedResponseCodes": "Erwartete Antwortcodes",
"expectedResponseCodesDescription": "HTTP-Statuscode, der einen gesunden Zustand anzeigt. Wenn leer gelassen, wird 200-300 als gesund angesehen.",
@@ -1659,9 +1961,20 @@
"healthCheckIntervalMin": "Prüfintervall muss mindestens 5 Sekunden betragen",
"healthCheckTimeoutMin": "Zeitüberschreitung muss mindestens 1 Sekunde betragen",
"healthCheckRetryMin": "Wiederholungsversuche müssen mindestens 1 betragen",
"healthCheckMode": "Überprüfungsmodus",
"healthCheckStrategy": "Strategie",
"healthCheckModeDescription": "TCP-Modus überprüft nur die Konnektivität. HTTP-Modus validiert die HTTP-Antwort.",
"healthyThreshold": "Gesundheitsschwelle",
"healthyThresholdDescription": "Erforderliche aufeinanderfolgende Erfolge, bevor als gesund markiert wird.",
"unhealthyThreshold": "Ungesunde Schwelle",
"unhealthyThresholdDescription": "Erforderliche aufeinanderfolgende Fehlschläge, bevor als ungesund markiert wird.",
"healthCheckHealthyThresholdMin": "Gesundheitsschwelle muss mindestens 1 betragen",
"healthCheckUnhealthyThresholdMin": "Ungesunde Schwelle muss mindestens 1 betragen",
"httpMethod": "HTTP-Methode",
"selectHttpMethod": "HTTP-Methode auswählen",
"domainPickerSubdomainLabel": "Subdomain",
"domainPickerWildcard": "Platzhalter",
"domainPickerWildcardPaidOnly": "Wildcard-Subdomains sind ein kostenpflichtiges Feature. Bitte upgraden Sie, um auf dieses Feature zuzugreifen.",
"domainPickerBaseDomainLabel": "Basisdomain",
"domainPickerSearchDomains": "Domains suchen...",
"domainPickerNoDomainsFound": "Keine Domains gefunden",
@@ -1687,12 +2000,12 @@
"resourcesTableAliasAddressInfo": "Diese Adresse ist Teil des Utility-Subnetzes der Organisation. Sie wird verwendet, um Alias-Einträge mit interner DNS-Auflösung aufzulösen.",
"resourcesTableClients": "Clients",
"resourcesTableAndOnlyAccessibleInternally": "und sind nur intern zugänglich, wenn mit einem Client verbunden.",
"resourcesTableNoTargets": "Keine Ziele",
"resourcesTableHealthy": "Gesund",
"resourcesTableDegraded": "Degradiert",
"resourcesTableOffline": "Offline",
"resourcesTableUnhealthy": "Ungesund",
"resourcesTableUnknown": "Unbekannt",
"resourcesTableNotMonitored": "Nicht überwacht",
"resourcesTableNoTargets": "Keine Ziele",
"editInternalResourceDialogEditClientResource": "Private Ressource bearbeiten",
"editInternalResourceDialogUpdateResourceProperties": "Ressourcen-Konfiguration und Zugriffssteuerung für {resourceName} aktualisieren",
"editInternalResourceDialogResourceProperties": "Ressourceneigenschaften",
@@ -1718,6 +2031,11 @@
"editInternalResourceDialogModePort": "Port",
"editInternalResourceDialogModeHost": "Host",
"editInternalResourceDialogModeCidr": "CIDR",
"editInternalResourceDialogModeHttp": "HTTP",
"editInternalResourceDialogModeHttps": "HTTPS",
"editInternalResourceDialogScheme": "Schema",
"editInternalResourceDialogEnableSsl": "SSL aktivieren",
"editInternalResourceDialogEnableSslDescription": "SSL/TLS-Verschlüsselung für sichere HTTPS-Verbindungen zum Ziel aktivieren.",
"editInternalResourceDialogDestination": "Ziel",
"editInternalResourceDialogDestinationHostDescription": "Die IP-Adresse oder der Hostname der Ressource im Netzwerk der Website.",
"editInternalResourceDialogDestinationIPDescription": "Die IP-Adresse oder Hostname Adresse der Ressource im Netzwerk der Website.",
@@ -1733,6 +2051,7 @@
"createInternalResourceDialogName": "Name",
"createInternalResourceDialogSite": "Standort",
"selectSite": "Standort auswählen...",
"multiSitesSelectorSitesCount": "{count, plural, one {# Standort} other {# Standorte}}",
"noSitesFound": "Keine Standorte gefunden.",
"createInternalResourceDialogProtocol": "Protokoll",
"createInternalResourceDialogTcp": "TCP",
@@ -1761,11 +2080,19 @@
"createInternalResourceDialogModePort": "Port",
"createInternalResourceDialogModeHost": "Host",
"createInternalResourceDialogModeCidr": "CIDR",
"createInternalResourceDialogModeHttp": "HTTP",
"createInternalResourceDialogModeHttps": "HTTPS",
"scheme": "Schema",
"createInternalResourceDialogScheme": "Schema",
"createInternalResourceDialogEnableSsl": "SSL aktivieren",
"createInternalResourceDialogEnableSslDescription": "SSL/TLS-Verschlüsselung für sichere HTTPS-Verbindungen zum Ziel aktivieren.",
"createInternalResourceDialogDestination": "Ziel",
"createInternalResourceDialogDestinationHostDescription": "Die IP-Adresse oder der Hostname der Ressource im Netzwerk der Website.",
"createInternalResourceDialogDestinationCidrDescription": "Der CIDR-Bereich der Ressource im Netzwerk der Website.",
"createInternalResourceDialogAlias": "Alias",
"createInternalResourceDialogAliasDescription": "Ein optionaler interner DNS-Alias für diese Ressource.",
"internalResourceDownstreamSchemeRequired": "Schema ist für HTTP-Ressourcen erforderlich",
"internalResourceHttpPortRequired": "Zielport ist für HTTP-Ressourcen erforderlich",
"siteConfiguration": "Konfiguration",
"siteAcceptClientConnections": "Clientverbindungen akzeptieren",
"siteAcceptClientConnectionsDescription": "Erlaube Benutzer-Geräten und Clients Zugriff auf Ressourcen auf diesem Standort. Dies kann später geändert werden.",
@@ -1851,6 +2178,40 @@
"exitNode": "Exit-Node",
"country": "Land",
"rulesMatchCountry": "Derzeit basierend auf der Quell-IP",
"region": "Region",
"selectRegion": "Region wählen...",
"searchRegions": "Regionen suchen...",
"noRegionFound": "Keine Region gefunden.",
"rulesMatchRegion": "Wählen Sie eine Regionalgruppe von Ländern",
"rulesErrorInvalidRegion": "Ungültige Region",
"rulesErrorInvalidRegionDescription": "Bitte wählen Sie eine gültige Region aus.",
"regionAfrica": "Afrika",
"regionNorthernAfrica": "Nordafrika",
"regionEasternAfrica": "Ostafrika",
"regionMiddleAfrica": "Zentralafrika",
"regionSouthernAfrica": "Südliches Afrika",
"regionWesternAfrica": "Westafrika",
"regionAmericas": "Amerika",
"regionCaribbean": "Karibik",
"regionCentralAmerica": "Mittelamerika",
"regionSouthAmerica": "Südamerika",
"regionNorthernAmerica": "Nordamerika",
"regionAsia": "Asien",
"regionCentralAsia": "Zentralasien",
"regionEasternAsia": "Ostasien",
"regionSouthEasternAsia": "Südostasien",
"regionSouthernAsia": "Südasien",
"regionWesternAsia": "Westasien",
"regionEurope": "Europa",
"regionEasternEurope": "Osteuropa",
"regionNorthernEurope": "Nordeuropa",
"regionSouthernEurope": "Südeuropa",
"regionWesternEurope": "Westeuropa",
"regionOceania": "Ozeanien",
"regionAustraliaAndNewZealand": "Australien und Neuseeland",
"regionMelanesia": "Melanesien",
"regionMicronesia": "Mikronesien",
"regionPolynesia": "Polynesien",
"managedSelfHosted": {
"title": "Verwaltetes Selbsthosted",
"description": "Zuverlässiger und wartungsarmer Pangolin Server mit zusätzlichen Glocken und Pfeifen",
@@ -1889,7 +2250,7 @@
},
"internationaldomaindetected": "Internationale Domain erkannt",
"willbestoredas": "Wird gespeichert als:",
"roleMappingDescription": "Legen Sie fest, wie den Benutzern Rollen zugewiesen werden, wenn sie sich anmelden, wenn Auto Provision aktiviert ist.",
"roleMappingDescription": "Bestimmen Sie, wie Rollen zugewiesen werden, wenn sich Benutzer mit diesem Identitätsanbieter anmelden.",
"selectRole": "Wählen Sie eine Rolle",
"roleMappingExpression": "Ausdruck",
"selectRolePlaceholder": "Rolle auswählen",
@@ -1899,6 +2260,25 @@
"invalidValue": "Ungültiger Wert",
"idpTypeLabel": "Identitätsanbietertyp",
"roleMappingExpressionPlaceholder": "z. B. enthalten(Gruppen, 'admin') && 'Admin' || 'Mitglied'",
"roleMappingModeFixedRoles": "Feste Rollen",
"roleMappingModeMappingBuilder": "Mapping Builder",
"roleMappingModeRawExpression": "Roher Ausdruck",
"roleMappingFixedRolesPlaceholderSelect": "Wählen Sie eine oder mehrere Rollen",
"roleMappingFixedRolesPlaceholderFreeform": "Rollennamen eingeben (exakte Übereinstimmung pro Organisation)",
"roleMappingFixedRolesDescriptionSameForAll": "Weisen Sie jedem auto-provisionierten Benutzer die gleiche Rolle zu.",
"roleMappingFixedRolesDescriptionDefaultPolicy": "Für Standardrichtlinien geben Sie Rollennamen ein, die in jeder Organisation existieren, in der Benutzer angegeben sind. Namen müssen exakt übereinstimmen.",
"roleMappingClaimPath": "Pfad einfordern",
"roleMappingClaimPathPlaceholder": "gruppen",
"roleMappingClaimPathDescription": "Pfad in der Token Payload mit Quellwerten (zum Beispiel Gruppen).",
"roleMappingMatchValue": "Match-Wert",
"roleMappingAssignRoles": "Rollen zuweisen",
"roleMappingAddMappingRule": "Zuordnungsregel hinzufügen",
"roleMappingRawExpressionResultDescription": "Ausdruck muss zu einem String oder String Array ausgewertet werden.",
"roleMappingRawExpressionResultDescriptionSingleRole": "Ausdruck muss zu einem String (einem einzigen Rollennamen) ausgewertet werden.",
"roleMappingMatchValuePlaceholder": "Match-Wert (z. B.: Admin)",
"roleMappingAssignRolesPlaceholderFreeform": "Rollennamen eingeben (exakt pro Ort)",
"roleMappingBuilderFreeformRowHint": "Rollennamen müssen mit einer Rolle in jeder Zielorganisation übereinstimmen.",
"roleMappingRemoveRule": "Entfernen",
"idpGoogleConfiguration": "Google-Konfiguration",
"idpGoogleConfigurationDescription": "Google OAuth2 Zugangsdaten konfigurieren",
"idpGoogleClientIdDescription": "Google OAuth2 Client ID",
@@ -1962,9 +2342,11 @@
"selectDomainForOrgAuthPage": "Wählen Sie eine Domain für die Authentifizierungsseite der Organisation",
"domainPickerProvidedDomain": "Angegebene Domain",
"domainPickerFreeProvidedDomain": "Kostenlose Domain",
"domainPickerFreeDomainsPaidFeature": "Bereitgestellte Domains sind ein kostenpflichtiges Feature. Abonnieren Sie, um eine Domain in Ihrem Tarif zu erhalten keine Notwendigkeit, Ihre eigene mitzubringen.",
"domainPickerVerified": "Verifiziert",
"domainPickerUnverified": "Nicht verifiziert",
"domainPickerInvalidSubdomainStructure": "Diese Subdomain enthält ungültige Zeichen oder Struktur. Sie wird beim Speichern automatisch bereinigt.",
"domainPickerManual": "Manuell",
"domainPickerInvalidSubdomainStructure": "Ungültige Zeichen werden beim Speichern bereinigt.",
"domainPickerError": "Fehler",
"domainPickerErrorLoadDomains": "Fehler beim Laden der Organisations-Domains",
"domainPickerErrorCheckAvailability": "Fehler beim Prüfen der Domain-Verfügbarkeit",
@@ -1977,7 +2359,7 @@
"orgAuthChooseIdpDescription": "Wähle deinen Identitätsanbieter um fortzufahren",
"orgAuthNoIdpConfigured": "Diese Organisation hat keine Identitätsanbieter konfiguriert. Sie können sich stattdessen mit Ihrer Pangolin-Identität anmelden.",
"orgAuthSignInWithPangolin": "Mit Pangolin anmelden",
"orgAuthSignInToOrg": "Bei einer Organisation anmelden",
"orgAuthSignInToOrg": "Organisations-Identitätsanbieter (SSO)",
"orgAuthSelectOrgTitle": "Organisations-Anmeldung",
"orgAuthSelectOrgDescription": "Geben Sie Ihre Organisations-ID ein, um fortzufahren",
"orgAuthOrgIdPlaceholder": "Ihre Organisation",
@@ -2138,7 +2520,7 @@
"alerts": {
"commercialUseDisclosure": {
"title": "Verwendungsanzeige",
"description": "Wählen Sie die Lizenz-Ebene, die Ihre beabsichtigte Nutzung genau widerspiegelt. Die Persönliche Lizenz erlaubt die freie Nutzung der Software für individuelle, nicht-kommerzielle oder kleine kommerzielle Aktivitäten mit jährlichen Brutto-Einnahmen von 100.000 USD. Über diese Grenzen hinausgehende Verwendungszwecke einschließlich der Verwendung innerhalb eines Unternehmens, einer Organisation, oder eine andere umsatzgenerierende Umgebung erfordert eine gültige Enterprise-Lizenz und die Zahlung der Lizenzgebühr. Alle Benutzer, ob Personal oder Enterprise, müssen die Fossorial Commercial License Bedingungen einhalten."
"description": "Wählen Sie die Lizenz-Ebene, die Ihre beabsichtigte Nutzung genau widerspiegelt. Die Persönliche Lizenz erlaubt die freie Nutzung der Software für individuelle, nicht-kommerzielle oder kleine kommerzielle Aktivitäten mit jährlichen Brutto-Einnahmen von 100.000 USD. Über diese Grenzen hinausgehende Verwendungszwecke einschließlich der Verwendung innerhalb eines Unternehmens, einer Organisation, oder eine andere umsatzgenerierende Umgebung - erfordert eine gültige Enterprise-Lizenz und die Zahlung der Lizenzgebühr. Alle Benutzer, ob Personal oder Enterprise, müssen die Fossorial Commercial License Bedingungen einhalten."
},
"trialPeriodInformation": {
"title": "Testperiode Information",
@@ -2193,10 +2575,10 @@
},
"scale": {
"title": "Maßstab",
"description": "Enterprise Features, 50 Benutzer, 50 Sites und Prioritätsunterstützung."
"description": "Unternehmensmerkmale, 50 Benutzer, 100 Standorte und prioritärer Support."
}
},
"personalUseOnly": "Nur persönliche Nutzung (kostenlose Lizenz keine Kasse)",
"personalUseOnly": "Nur persönliche Nutzung (kostenlose Lizenz - kein Checkout)",
"buttons": {
"continueToCheckout": "Weiter zur Kasse"
},
@@ -2270,6 +2652,7 @@
"validPassword": "Gültiges Passwort",
"validEmail": "Gültige E-Mail-Adresse",
"validSSO": "Gültige SSO-Anmeldung",
"connectedClient": "Verbundenes Gerät",
"resourceBlocked": "Ressource blockiert",
"droppedByRule": "Abgelegt durch Regel",
"noSessions": "Keine Sitzungen",
@@ -2277,24 +2660,26 @@
"noMoreAuthMethods": "Keine gültige Authentifizierungsmethode verfügbar",
"ip": "IP",
"reason": "Grund",
"requestLogs": "Logs anfordern",
"requestLogs": "HTTP Anforderungsprotokolle",
"requestAnalytics": "Anfrage-Analyse anzeigen",
"host": "Host",
"location": "Standort",
"actionLogs": "Aktionsprotokolle",
"sidebarLogsRequest": "Logs anfordern",
"sidebarLogsRequest": "HTTP Anforderungsprotokolle",
"sidebarLogsAccess": "Zugriffsprotokolle",
"sidebarLogsAction": "Aktionsprotokolle",
"logRetention": "Log-Speicherung",
"logRetentionDescription": "Verwalten, wie lange verschiedene Logs für diese Organisation gespeichert werden oder deaktivieren",
"requestLogsDescription": "Detaillierte Request-Logs für Ressourcen in dieser Organisation anzeigen",
"requestAnalyticsDescription": "Detaillierte Anfrage-Analyse für Ressourcen in dieser Organisation anzeigen",
"logRetentionRequestLabel": "Log-Speicherung anfordern",
"logRetentionRequestLabel": "HTTP Anforderungsprotokoll Aufbewahrung",
"logRetentionRequestDescription": "Wie lange sollen Request-Logs gespeichert werden",
"logRetentionAccessLabel": "Zugriffsprotokoll-Speicherung",
"logRetentionAccessDescription": "Wie lange Zugriffsprotokolle beibehalten werden sollen",
"logRetentionActionLabel": "Aktionsprotokoll-Speicherung",
"logRetentionActionDescription": "Dauer des Action-Logs",
"logRetentionConnectionLabel": "Verbindungsprotokoll-Speicherung",
"logRetentionConnectionDescription": "Wie lange Verbindungsprotokolle gespeichert werden sollen",
"logRetentionDisabled": "Deaktiviert",
"logRetention3Days": "3 Tage",
"logRetention7Days": "7 Tage",
@@ -2305,8 +2690,15 @@
"logRetentionEndOfFollowingYear": "Ende des folgenden Jahres",
"actionLogsDescription": "Verlauf der in dieser Organisation durchgeführten Aktionen anzeigen",
"accessLogsDescription": "Zugriffsauth-Anfragen für Ressourcen in dieser Organisation anzeigen",
"licenseRequiredToUse": "Um diese Funktion nutzen zu können, ist eine <enterpriseLicenseLink>Enterprise Edition</enterpriseLicenseLink> Lizenz erforderlich. Diese Funktion ist auch in der <pangolinCloudLink>Pangolin Cloud</pangolinCloudLink> verfügbar.",
"ossEnterpriseEditionRequired": "Um diese Funktion nutzen zu können, ist die <enterpriseEditionLink>Enterprise Edition</enterpriseEditionLink> erforderlich. Diese Funktion ist auch in der <pangolinCloudLink>Pangolin Cloud</pangolinCloudLink> verfügbar.",
"connectionLogs": "Verbindungsprotokolle",
"connectionLogsDescription": "Verbindungsprotokolle für Tunnel in dieser Organisation anzeigen",
"sidebarLogsConnection": "Verbindungsprotokolle",
"sidebarLogsStreaming": "Streaming",
"sourceAddress": "Quelladresse",
"destinationAddress": "Zieladresse",
"duration": "Dauer",
"licenseRequiredToUse": "Eine <enterpriseLicenseLink>Enterprise Edition</enterpriseLicenseLink> Lizenz oder <pangolinCloudLink>Pangolin Cloud</pangolinCloudLink> wird benötigt, um diese Funktion nutzen zu können. <bookADemoLink>Buchen Sie eine Demo oder POC Testversion</bookADemoLink>.",
"ossEnterpriseEditionRequired": "Die <enterpriseEditionLink>Enterprise Edition</enterpriseEditionLink> wird benötigt, um diese Funktion nutzen zu können. Diese Funktion ist auch in <pangolinCloudLink>Pangolin Cloud</pangolinCloudLink>verfügbar. <bookADemoLink>Buchen Sie eine Demo oder POC Testversion</bookADemoLink>.",
"certResolver": "Zertifikatsauflöser",
"certResolverDescription": "Wählen Sie den Zertifikatslöser aus, der für diese Ressource verwendet werden soll.",
"selectCertResolver": "Zertifikatsauflöser auswählen",
@@ -2448,6 +2840,9 @@
"machineClients": "Maschinen-Clients",
"install": "Installieren",
"run": "Ausführen",
"envFile": "Umgebungsdatei",
"serviceFile": "Servicedatei",
"enableAndStart": "Aktivieren und Starten",
"clientNameDescription": "Der Anzeigename des Clients, der später geändert werden kann.",
"clientAddress": "Clientadresse (Erweitert)",
"setupFailedToFetchSubnet": "Fehler beim Abrufen des Standard-Subnetzes",
@@ -2496,13 +2891,30 @@
"editInternalResourceDialogAddClients": "Clients hinzufügen",
"editInternalResourceDialogDestinationLabel": "Ziel",
"editInternalResourceDialogDestinationDescription": "Geben Sie die Zieladresse für die interne Ressource an. Dies kann ein Hostname, eine IP-Adresse oder ein CIDR-Bereich sein, abhängig vom gewählten Modus. Legen Sie optional einen internen DNS-Alias für eine vereinfachte Identifizierung fest.",
"internalResourceFormMultiSiteRoutingHelp": "Durch die Auswahl mehrerer Seiten wird ein ausfallsicheres Routing und Failover für hohe Verfügbarkeit ermöglicht.",
"internalResourceFormMultiSiteRoutingHelpLearnMore": "Mehr erfahren",
"editInternalResourceDialogPortRestrictionsDescription": "Den Zugriff auf bestimmte TCP/UDP-Ports beschränken oder alle Ports erlauben/blockieren.",
"createInternalResourceDialogHttpConfiguration": "HTTP-Konfiguration",
"createInternalResourceDialogHttpConfigurationDescription": "Wählen Sie die Domain, die Clients verwenden, um über HTTP oder HTTPS auf diese Ressource zuzugreifen.",
"editInternalResourceDialogHttpConfiguration": "HTTP-Konfiguration",
"editInternalResourceDialogHttpConfigurationDescription": "Wählen Sie die Domain, die Clients verwenden, um über HTTP oder HTTPS auf diese Ressource zuzugreifen.",
"editInternalResourceDialogTcp": "TCP",
"editInternalResourceDialogUdp": "UDP",
"editInternalResourceDialogIcmp": "ICMP",
"editInternalResourceDialogAccessControl": "Zugriffskontrolle",
"editInternalResourceDialogAccessControlDescription": "Kontrollieren Sie, welche Rollen, Benutzer und Maschinen-Clients Zugriff auf diese Ressource haben, wenn sie verbunden sind. Admins haben immer Zugriff.",
"editInternalResourceDialogPortRangeValidationError": "Der Port-Bereich muss \"*\" für alle Ports sein, oder eine kommaseparierte Liste von Ports und Bereichen (z.B. \"80,443.8000-9000\"). Ports müssen zwischen 1 und 65535 liegen.",
"internalResourceAuthDaemonStrategy": "SSH Auth-Daemon Standort",
"internalResourceAuthDaemonStrategyDescription": "Wählen Sie aus, wo der SSH-Authentifizierungs-Daemon läuft: auf der Site (Newt) oder auf einem entfernten Host.",
"internalResourceAuthDaemonDescription": "Der SSH-Authentifizierungs-Daemon verarbeitet SSH-Schlüsselsignaturen und PAM-Authentifizierung für diese Ressource. Wählen Sie, ob sie auf der Website (Newt) oder auf einem separaten entfernten Host ausgeführt wird. Siehe <docsLink>die Dokumentation</docsLink> für mehr.",
"internalResourceAuthDaemonDocsUrl": "https://docs.pangolin.net",
"internalResourceAuthDaemonStrategyPlaceholder": "Strategie auswählen",
"internalResourceAuthDaemonStrategyLabel": "Standort",
"internalResourceAuthDaemonSite": "Vor Ort",
"internalResourceAuthDaemonSiteDescription": "Der Auth Daemon läuft auf der Seite (Newt).",
"internalResourceAuthDaemonRemote": "Entfernter Host",
"internalResourceAuthDaemonRemoteDescription": "Der Auth Daemon läuft auf einem Host, der nicht die Site ist.",
"internalResourceAuthDaemonPort": "Daemon-Port (optional)",
"orgAuthWhatsThis": "Wo finde ich meine Organisations-ID?",
"learnMore": "Mehr erfahren",
"backToHome": "Zurück zur Startseite",
@@ -2524,6 +2936,9 @@
"maintenancePageMessagePlaceholder": "Wir sind bald wieder da! Unsere Seite wird derzeit planmäßig gewartet.",
"maintenancePageMessageDescription": "Detaillierte Meldung zur Erklärung der Wartung",
"maintenancePageTimeTitle": "Geschätzte Abschlusszeit (Optional)",
"privateMaintenanceScreenTitle": "Privater Platzhalterschirm",
"privateMaintenanceScreenMessage": "Diese Domain wird auf einer privaten Ressource verwendet. Bitte verbinden Sie sich mit dem Pangolin-Client, um auf diese Ressource zuzugreifen.",
"privateMaintenanceScreenSteps": "Sobald verbunden, wenn Sie diese Nachricht weiterhin sehen, zeigt der DNS-Cache Ihres Browsers möglicherweise noch auf die alte Adresse. Um dies zu beheben: Schließen Sie diesen Tab vollständig und öffnen Sie ihn erneut oder starten Sie Ihren Browser neu und rufen Sie dann diese Seite erneut auf.",
"maintenanceTime": "z.B.: 2 Stunden, Nov 1 um 17:00 Uhr",
"maintenanceEstimatedTimeDescription": "Wann Sie den Abschluss der Wartung erwarten",
"editDomain": "Domain bearbeiten",
@@ -2632,5 +3047,209 @@
"approvalsEmptyStateStep2Title": "Gerätegenehmigungen aktivieren",
"approvalsEmptyStateStep2Description": "Bearbeite eine Rolle und aktiviere die Option 'Gerätegenehmigung erforderlich'. Benutzer mit dieser Rolle benötigen Administrator-Genehmigung für neue Geräte.",
"approvalsEmptyStatePreviewDescription": "Vorschau: Wenn aktiviert, werden ausstehende Geräteanfragen hier zur Überprüfung angezeigt",
"approvalsEmptyStateButtonText": "Rollen verwalten"
"approvalsEmptyStateButtonText": "Rollen verwalten",
"domainErrorTitle": "Wir haben Probleme mit der Überprüfung deiner Domain",
"idpAdminAutoProvisionPoliciesTabHint": "Konfigurieren Sie Rollenzuordnungs- und Organisationsrichtlinien auf der Registerkarte <policiesTabLink>Auto-Bereitstellungseinstellungen</policiesTabLink>.",
"streamingTitle": "Event Streaming",
"streamingDescription": "Streamen Sie Events aus Ihrem Unternehmen in Echtzeit zu externen Zielen.",
"streamingUnnamedDestination": "Unbenanntes Ziel",
"streamingNoUrlConfigured": "Keine URL konfiguriert",
"streamingAddDestination": "Ziel hinzufügen",
"streamingHttpWebhookTitle": "HTTP Webhook",
"streamingHttpWebhookDescription": "Sende Ereignisse an jeden HTTP-Endpunkt mit flexibler Authentifizierung und Vorlage.",
"streamingS3Title": "Amazon S3",
"streamingS3Description": "Streame Ereignisse in eine S3-kompatible Objekt-Speicher-Eimer. Kommt bald.",
"streamingDatadogTitle": "Datadog",
"streamingDatadogDescription": "Events direkt an Ihr Datadog Konto weiterleiten. Kommen Sie bald.",
"streamingTypePickerDescription": "Wählen Sie einen Zieltyp aus, um loszulegen.",
"streamingFailedToLoad": "Fehler beim Laden der Ziele",
"streamingUnexpectedError": "Ein unerwarteter Fehler ist aufgetreten.",
"streamingFailedToUpdate": "Fehler beim Aktualisieren des Ziels",
"streamingDeletedSuccess": "Ziel erfolgreich gelöscht",
"streamingFailedToDelete": "Fehler beim Löschen des Ziels",
"streamingDeleteTitle": "Ziel löschen",
"streamingDeleteButtonText": "Ziel löschen",
"streamingDeleteDialogAreYouSure": "Sind Sie sicher, dass Sie löschen möchten",
"streamingDeleteDialogThisDestination": "dieses Ziel",
"streamingDeleteDialogPermanentlyRemoved": "? Alle Konfiguration wird dauerhaft entfernt.",
"httpDestEditTitle": "Ziel bearbeiten",
"httpDestAddTitle": "HTTP-Ziel hinzufügen",
"httpDestEditDescription": "Aktualisiere die Konfiguration für dieses HTTP-Streaming-Ziel.",
"httpDestAddDescription": "Konfigurieren Sie einen neuen HTTP-Endpunkt, um die Ereignisse Ihrer Organisation zu empfangen.",
"S3DestEditTitle": "Ziel bearbeiten",
"S3DestAddTitle": "S3-Ziel hinzufügen",
"S3DestEditDescription": "Konfiguration für dieses S3-Ereignis-Streamingziel aktualisieren.",
"S3DestAddDescription": "Neuen S3-Endpunkt konfigurieren, um die Ereignisse Ihrer Organisation zu erhalten.",
"datadogDestEditTitle": "Ziel bearbeiten",
"datadogDestAddTitle": "Datadog-Ziel hinzufügen",
"datadogDestEditDescription": "Konfiguration für dieses Datadog-Ereignis-Streamingziel aktualisieren.",
"datadogDestAddDescription": "Neuen Datadog-Endpunkt konfigurieren, um die Ereignisse Ihrer Organisation zu erhalten.",
"httpDestTabSettings": "Einstellungen",
"httpDestTabHeaders": "Kopfzeilen",
"httpDestTabBody": "Körper",
"httpDestTabLogs": "Logs",
"httpDestNamePlaceholder": "Mein HTTP-Ziel",
"httpDestUrlLabel": "Ziel-URL",
"httpDestUrlErrorHttpRequired": "URL muss http oder https verwenden",
"httpDestUrlErrorHttpsRequired": "HTTPS wird für Cloud-Deployment benötigt",
"httpDestUrlErrorInvalid": "Geben Sie eine gültige URL ein (z.B. https://example.com/webhook)",
"httpDestAuthTitle": "Authentifizierung",
"httpDestAuthDescription": "Legen Sie fest, wie Anfragen an Ihren Endpunkt authentifiziert werden.",
"httpDestAuthNoneTitle": "Keine Authentifizierung",
"httpDestAuthNoneDescription": "Sendet Anfragen ohne Autorisierungs-Header.",
"httpDestAuthBearerTitle": "Bären-Token",
"httpDestAuthBearerDescription": "Fügt jedem Anfrage-Header eine \"Authorization: Bearer '<token>'\" hinzu.",
"httpDestAuthBearerPlaceholder": "Ihr API-Schlüssel oder Token",
"httpDestAuthBasicTitle": "Einfacher Auth",
"httpDestAuthBasicDescription": "Fügt einen \"Authorization: Basic '<credentials>'\"-Header hinzu. Geben Sie die Anmeldedaten als Benutzername:Passwort an.",
"httpDestAuthBasicPlaceholder": "benutzername:password",
"httpDestAuthCustomTitle": "Eigene Kopfzeile",
"httpDestAuthCustomDescription": "Geben Sie einen eigenen HTTP-Header-Namen und einen Wert für die Authentifizierung an (z.B. X-API-Key).",
"httpDestAuthCustomHeaderNamePlaceholder": "Headername (z.B. X-API-Key)",
"httpDestAuthCustomHeaderValuePlaceholder": "Header-Wert",
"httpDestCustomHeadersTitle": "Eigene HTTP-Header",
"httpDestCustomHeadersDescription": "Fügen Sie jeder ausgehenden Anfrage benutzerdefinierte Kopfzeilen hinzu. Nützlich für statische Tokens oder einen benutzerdefinierten Content-Typ. Standardmäßig wird Content-Type: application/json gesendet.",
"httpDestNoHeadersConfigured": "Keine benutzerdefinierten Header konfiguriert. Klicken Sie auf \"Header hinzufügen\", um einen hinzuzufügen.",
"httpDestHeaderNamePlaceholder": "Header-Name",
"httpDestHeaderValuePlaceholder": "Wert",
"httpDestAddHeader": "Header hinzufügen",
"httpDestBodyTemplateTitle": "Eigene Body-Vorlage",
"httpDestBodyTemplateDescription": "Steuere die JSON-Payload-Struktur, die an deinen Endpunkt gesendet wurde. Wenn deaktiviert, wird für jede Veranstaltung ein Standard-JSON-Objekt gesendet.",
"httpDestEnableBodyTemplate": "Eigene Körpervorlage aktivieren",
"httpDestBodyTemplateLabel": "Body-Vorlage (JSON)",
"httpDestBodyTemplateHint": "Verwenden Sie Template-Variablen, um Ereignisfelder in Ihrer Payload zu referenzieren.",
"httpDestPayloadFormatTitle": "Payload-Format",
"httpDestPayloadFormatDescription": "Wie Ereignisse in jedes Anfragegremium serialisiert werden.",
"httpDestFormatJsonArrayTitle": "JSON Array",
"httpDestFormatJsonArrayDescription": "Eine Anfrage pro Stapel ist ein JSON-Array. Kompatibel mit den meisten generischen Webhooks und Datadog.",
"httpDestFormatNdjsonTitle": "NDJSON",
"httpDestFormatNdjsonDescription": "Eine Anfrage pro Batch, der Körper ist newline-getrenntes JSON - ein Objekt pro Zeile, kein äußeres Array. Benötigt von Splunk HEC, Elastic / OpenSearch, und Grafana Loki.",
"httpDestFormatSingleTitle": "Ein Ereignis pro Anfrage",
"httpDestFormatSingleDescription": "Sendet eine separate HTTP-POST für jedes einzelne Ereignis. Nur für Endpunkte, die Batches nicht handhaben können.",
"httpDestLogTypesTitle": "Log-Typen",
"httpDestLogTypesDescription": "Wählen Sie, welche Log-Typen an dieses Ziel weitergeleitet werden. Nur aktivierte Log-Typen werden gestreamt.",
"httpDestAccessLogsTitle": "Zugriffsprotokolle",
"httpDestAccessLogsDescription": "Ressourcenzugriffe, einschließlich authentifizierter und abgelehnter Anfragen.",
"httpDestActionLogsTitle": "Aktionsprotokolle",
"httpDestActionLogsDescription": "Administrative Maßnahmen, die von Benutzern innerhalb der Organisation durchgeführt werden.",
"httpDestConnectionLogsTitle": "Verbindungsprotokolle",
"httpDestConnectionLogsDescription": "Site- und Tunnelverbindungen, einschließlich Verbindungen und Trennungen.",
"httpDestRequestLogsTitle": "HTTP Anforderungsprotokolle",
"httpDestRequestLogsDescription": "HTTP-Request-Protokolle für proxiierte Ressourcen, einschließlich Methode, Pfad und Antwort-Code.",
"httpDestSaveChanges": "Änderungen speichern",
"httpDestCreateDestination": "Ziel erstellen",
"httpDestUpdatedSuccess": "Ziel erfolgreich aktualisiert",
"httpDestCreatedSuccess": "Ziel erfolgreich erstellt",
"httpDestUpdateFailed": "Fehler beim Aktualisieren des Ziels",
"httpDestCreateFailed": "Fehler beim Erstellen des Ziels",
"followRedirects": "Weiterleitungen folgen",
"followRedirectsDescription": "HTTP-Weiterleitungen für Anfragen automatisch folgen.",
"alertingErrorWebhookUrl": "Bitte geben Sie eine gültige URL für das Webhook ein.",
"healthCheckStrategyHttp": "Prüft die Konnektivität und den HTTP-Antwort-Status.",
"healthCheckStrategyTcp": "Verifiziert nur die TCP-Konnektivität, ohne die Antwort zu überprüfen.",
"healthCheckStrategySnmp": "Stellt eine SNMP-Get-Anfrage, um die Gesundheit von Netzwerkgeräten und Infrastruktur zu überprüfen.",
"healthCheckStrategyIcmp": "Verwendet ICMP-Echo-Anfragen (Pings), um zu überprüfen, ob eine Ressource erreichbar und reaktionsfähig ist.",
"healthCheckTabStrategy": "Strategie",
"healthCheckTabConnection": "Verbindung",
"healthCheckTabAdvanced": "Fortgeschritten",
"healthCheckStrategyNotAvailable": "Diese Strategie ist nicht verfügbar. Bitte kontaktieren Sie den Vertrieb, um diese Funktion zu aktivieren.",
"uptime30d": "Betriebszeit (30 Tage)",
"idpAddActionCreateNew": "Neuen Identitätsanbieter erstellen",
"idpAddActionImportFromOrg": "Von einer anderen Organisation importieren",
"idpImportDialogTitle": "Identitätsanbieter importieren",
"idpImportDialogDescription": "Wählen Sie einen Identitätsanbieter aus einer Organisation, in der Sie Administrator sind. Er wird mit dieser Organisation verknüpft.",
"idpImportSearchPlaceholder": "Nach Organisation oder Anbieternamen suchen...",
"idpImportEmpty": "Keine Identitätsanbieter gefunden.",
"idpImportedDescription": "Identitätsanbieter erfolgreich importiert.",
"idpDeleteGlobalQuestion": "Sind Sie sicher, dass Sie diesen Identitätsanbieter dauerhaft löschen möchten?",
"idpDeleteGlobalDescription": "Dies wird den Identitätsanbieter dauerhaft von allen Organisationen löschen, mit denen er verbunden ist.",
"idpUnassociateTitle": "Verknüpfung mit Identitätsanbieter aufheben",
"idpUnassociateQuestion": "Sind Sie sicher, dass Sie die Verknüpfung dieses Identitätsanbieters mit dieser Organisation aufheben möchten?",
"idpUnassociateDescription": "Alle Benutzer, die mit diesem Identitätsanbieter verbunden sind, werden aus dieser Organisation entfernt, aber der Identitätsanbieter bleibt für andere verbundene Organisationen weiterhin bestehen.",
"idpUnassociateConfirm": "Verknüpfung des Identitätsanbieters aufheben bestätigen",
"idpUnassociateWarning": "Dies kann für diese Organisation nicht rückgängig gemacht werden.",
"idpUnassociatedDescription": "Identitätsanbieter erfolgreich von dieser Organisation gelöst",
"idpUnassociateMenu": "Verknüpfung aufheben",
"idpDeleteAllOrgsMenu": "Löschen",
"publicIpEndpoint": "Endpunkt",
"lastTriggeredAt": "Letzter Auslöser",
"reject": "Zurückweisen",
"uptimeDaysAgo": "vor {count} Tagen",
"uptimeToday": "Heute",
"uptimeNoDataAvailable": "Keine Daten verfügbar",
"uptimeSuffix": "Betriebzeit",
"uptimeDowntimeSuffix": "Ausfallzeit",
"uptimeTooltipUptimeLabel": "Betriebszeit",
"uptimeTooltipDowntimeLabel": "Ausfallzeit",
"uptimeOngoing": "im Gange",
"uptimeNoMonitoringData": "Keine Überwachungsdaten",
"uptimeNoData": "Keine Daten",
"uptimeMiniBarDown": "Unten",
"uptimeSectionTitle": "Betriebszeit",
"uptimeSectionDescription": "Verfügbarkeit in den letzten {days} Tagen",
"uptimeAddAlert": "Warnmeldung hinzufügen",
"uptimeViewAlerts": "Warnungen anzeigen",
"uptimeCreateEmailAlert": "E-Mail Alarm erstellen",
"uptimeAlertDescriptionSite": "Werde per E-Mail benachrichtigt, wenn diese Seite offline oder wieder online ist.",
"uptimeAlertDescriptionResource": "Werde per E-Mail benachrichtigt, wenn diese Ressource offline oder wieder online ist.",
"uptimeAlertNamePlaceholder": "Alarmname",
"uptimeAdditionalEmails": "Zusätzliche E-Mails",
"uptimeCreateAlert": "Alarm erstellen",
"uptimeAlertNoRecipients": "Kein Empfänger",
"uptimeAlertNoRecipientsDescription": "Bitte fügen Sie mindestens einen Benutzer, eine Rolle oder eine E-Mail zur Benachrichtigung hinzu.",
"uptimeAlertCreated": "Alarm erstellt",
"uptimeAlertCreatedDescription": "Sie werden benachrichtigt, wenn dieser Status sich ändert",
"uptimeAlertCreateFailed": "Fehler beim Erstellen der Benachrichtigung",
"webhookUrlLabel": "URL",
"webhookHeaderKeyPlaceholder": "Schlüssel",
"webhookHeaderValuePlaceholder": "Wert",
"alertLabel": "Alarm",
"domainPickerWildcardSubdomainNotAllowed": "Wildcard-Subdomains sind nicht erlaubt.",
"domainPickerWildcardCertWarning": "Wildcard-Ressourcen erfordern möglicherweise zusätzliche Konfigurationen, um ordnungsgemäß zu funktionieren.",
"domainPickerWildcardCertWarningLink": "Mehr erfahren",
"health": "Gesundheit",
"domainPendingErrorTitle": "Verifizierungsproblem",
"memberPortalTitle": "Ressourcen",
"memberPortalDescription": "Ressourcen, auf die Sie in dieser Organisation Zugriff haben",
"memberPortalSortBy": "Sortieren nach...",
"memberPortalSortNameAsc": "Name A-Z",
"memberPortalSortNameDesc": "Name Z-A",
"memberPortalSortDomainAsc": "Domain A-Z",
"memberPortalSortDomainDesc": "Domain Z-A",
"memberPortalSortEnabledFirst": "Zuerst aktiviert",
"memberPortalSortDisabledFirst": "Zuerst deaktiviert",
"memberPortalRefresh": "Aktualisieren",
"memberPortalRefreshResources": "Ressourcen aktualisieren",
"memberPortalFailedToLoad": "Fehler beim Laden der Ressourcen",
"memberPortalFailedToLoadDescription": "Fehler beim Laden der Ressourcen. Bitte überprüfen Sie Ihre Verbindung und versuchen Sie es erneut.",
"memberPortalUnableToLoad": "Ressourcen konnten nicht geladen werden",
"memberPortalTryAgain": "Nochmal versuchen",
"memberPortalNoResourcesFound": "Keine Ressourcen gefunden",
"memberPortalNoResourcesAvailable": "Keine Ressourcen verfügbar",
"memberPortalNoResourcesMatchSearch": "Keine Ressourcen passen zu \"{query}\". Versuchen Sie, Ihre Suchbegriffe anzupassen oder die Suche zu löschen, um alle Ressourcen anzuzeigen.",
"memberPortalNoResourcesAccess": "Sie haben noch keinen Zugriff auf Ressourcen. Wenden Sie sich an Ihren Administrator, um Zugriff auf die benötigten Ressourcen zu erhalten.",
"memberPortalClearSearch": "Suchverlauf löschen",
"memberPortalPublicResources": "Öffentliche Ressourcen",
"memberPortalPublicResourcesDescription": "Webanwendungen und Dienste, die über den Browser zugänglich sind",
"memberPortalCopiedToClipboard": "In die Zwischenablage kopiert",
"memberPortalCopiedUrlDescription": "Ressourcen-URL wurde in Ihre Zwischenablage kopiert.",
"memberPortalOpenResource": "Ressource öffnen",
"memberPortalPrivateResources": "Private Ressourcen",
"memberPortalPrivateResourcesDescription": "Interne Netzwerkressourcen, die über den Client zugänglich sind",
"memberPortalResourceDetails": "Ressourcendetails",
"memberPortalMode": "Modus",
"memberPortalDestination": "Ziel",
"memberPortalAlias": "Alias",
"memberPortalCopiedAliasDescription": "Ressourcenalias wurde in Ihre Zwischenablage kopiert.",
"memberPortalCopiedDestinationDescription": "Ressourcenziel wurde in Ihre Zwischenablage kopiert.",
"memberPortalRequiresClientConnection": "Erfordert Client-Verbindung",
"memberPortalAuthMethods": "Authentifizierungsmethoden",
"memberPortalSso": "Single Sign-On (SSO)",
"memberPortalPasswordProtected": "Passwortgeschützt",
"memberPortalPinCode": "PIN-Code",
"memberPortalEmailWhitelist": "E-Mail-Whitelist",
"memberPortalResourceDisabled": "Ressource deaktiviert",
"memberPortalShowingResources": "Zeige {start}-{end} von {total} Ressourcen",
"memberPortalPrevious": "Vorherige",
"memberPortalNext": "Nächste"
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,8 @@
{
"contactSalesEnable": "Contacta ventas para habilitar esta función.",
"contactSalesBookDemo": "Reservar una demostración",
"contactSalesOr": "o",
"contactSalesContactUs": "contáctenos",
"setupCreate": "Crear la organización, el sitio y los recursos",
"headerAuthCompatibilityInfo": "Habilite esto para forzar una respuesta 401 no autorizada cuando falte un token de autenticación. Esto es necesario para navegadores o bibliotecas HTTP específicas que no envían credenciales sin un desafío del servidor.",
"headerAuthCompatibility": "Compatibilidad extendida",
@@ -19,6 +23,18 @@
"componentsInvalidKey": "Se han detectado claves de licencia inválidas o caducadas. Siga los términos de licencia para seguir usando todas las características.",
"dismiss": "Descartar",
"subscriptionViolationMessage": "Estás más allá de tus límites para tu plan actual. Corrija el problema eliminando sitios, usuarios u otros recursos para permanecer dentro de tu plan.",
"trialBannerMessage": "Su prueba expira en {countdown}. Actualice para mantener el acceso.",
"trialBannerExpired": "Su prueba ha expirado. Actualice ahora para restaurar el acceso.",
"billingTrialBannerTitle": "Prueba gratuita activada",
"billingTrialBannerDescription": "Actualmente estás en una prueba gratuita en el nivel empresarial. Cuando finalice la prueba, tu cuenta volverá automáticamente a las características y límites del nivel Básico. Mejora en cualquier momento para mantener el acceso a las características de tu plan actual.",
"billingTrialBannerUpgrade": "Actualizar ahora",
"billingTrialBadge": "Prueba Gratuita",
"trialActive": "Prueba gratuita activa",
"trialExpired": "Prueba expirada",
"trialHasEnded": "Su prueba ha terminado.",
"trialDaysRemaining": "{count, plural, one {# día restante} other {# días restantes}}",
"trialDaysLeftShort": "Quedan {days}d en la prueba",
"trialGoToBilling": "Ir a la página de facturación",
"subscriptionViolationViewBilling": "Ver facturación",
"componentsLicenseViolation": "Violación de la Licencia: Este servidor está usando sitios {usedSites} que exceden su límite de licencias de sitios {maxSites} . Siga los términos de licencia para seguir usando todas las características.",
"componentsSupporterMessage": "¡Gracias por apoyar a Pangolin como {tier}!",
@@ -81,6 +97,8 @@
"siteConfirmCopy": "He copiado la configuración",
"searchSitesProgress": "Buscar sitios...",
"siteAdd": "Añadir sitio",
"sitesTableViewPublicResources": "Ver Recursos Públicos",
"sitesTableViewPrivateResources": "Ver Recursos Privados",
"siteInstallNewt": "Instalar Newt",
"siteInstallNewtDescription": "Recibe Newt corriendo en tu sistema",
"WgConfiguration": "Configuración de Wirex Guard",
@@ -98,6 +116,21 @@
"siteUpdatedDescription": "El sitio ha sido actualizado.",
"siteGeneralDescription": "Configurar la configuración general de este sitio",
"siteSettingDescription": "Configurar los ajustes en el sitio",
"siteResourcesTab": "Recursos",
"siteResourcesNoneOnSite": "Este sitio aún no tiene recursos públicos o privados.",
"siteResourcesSectionPublic": "Recursos Públicos",
"siteResourcesSectionPrivate": "Recursos Privados",
"siteResourcesSectionPublicDescription": "Recursos expuestos externamente a través de dominios o puertos.",
"siteResourcesSectionPrivateDescription": "Recursos disponibles en tu red privada a través del sitio.",
"siteResourcesViewAllPublic": "Ver todos los recursos",
"siteResourcesViewAllPrivate": "Ver todos los recursos",
"siteResourcesDialogDescription": "Descripción general de los recursos públicos y privados asociados con este sitio.",
"siteResourcesShowMore": "Mostrar más",
"siteResourcesPermissionDenied": "No tienes permiso para listar estos recursos.",
"siteResourcesEmptyPublic": "Aún no hay recursos públicos apuntando a este sitio.",
"siteResourcesEmptyPrivate": "Aún no hay recursos privados asociados con este sitio.",
"siteResourcesHowToAccess": "Cómo acceder",
"siteResourcesTargetsOnSite": "Objetivos en este sitio",
"siteSetting": "Ajustes {siteName}",
"siteNewtTunnel": "Sitio nuevo (recomendado)",
"siteNewtTunnelDescription": "La forma más fácil de crear un punto de entrada en cualquier red. Sin configuración extra.",
@@ -148,6 +181,11 @@
"createLink": "Crear enlace",
"resourcesNotFound": "No se encontraron recursos",
"resourceSearch": "Buscar recursos",
"machineSearch": "Buscar máquinas",
"machinesSearch": "Buscar clientes...",
"machineNotFound": "No hay máquinas",
"userDeviceSearch": "Buscar dispositivos de usuario",
"userDevicesSearch": "Buscar dispositivos de usuario...",
"openMenu": "Abrir menú",
"resource": "Recurso",
"title": "Título",
@@ -175,6 +213,7 @@
"resourceHTTPDescription": "Proxy proporciona solicitudes sobre HTTPS usando un nombre de dominio completamente calificado.",
"resourceRaw": "Recurso TCP/UDP sin procesar",
"resourceRawDescription": "Proxy proporciona solicitudes sobre TCP/UDP usando un número de puerto.",
"resourceRawDescriptionCloud": "Las peticiones de proxy sobre TCP/UDP crudas usando un número de puerto. Requiere que los sitios se conecten a un nodo remoto.",
"resourceCreate": "Crear Recurso",
"resourceCreateDescription": "Siga los siguientes pasos para crear un nuevo recurso",
"resourceSeeAll": "Ver todos los recursos",
@@ -261,8 +300,11 @@
"orgMissing": "Falta el ID de la organización",
"orgMissingMessage": "No se puede regenerar la invitación sin el ID de la organización.",
"accessUsersManage": "Administrar usuarios",
"accessUserManage": "Administrar usuario",
"accessUsersDescription": "Invitar y administrar usuarios con acceso a esta organización",
"accessUsersSearch": "Buscar usuarios...",
"accessUsersRoleFilterCount": "{count, plural, one {# rol} other {# roles}}",
"accessUsersRoleFilterClear": "Borrar filtros de rol",
"accessUserCreate": "Crear usuario",
"accessUserRemove": "Eliminar usuario",
"username": "Usuario",
@@ -322,6 +364,54 @@
"apiKeysDelete": "Borrar Clave API",
"apiKeysManage": "Administrar claves API",
"apiKeysDescription": "Las claves API se utilizan para autenticar con la API de integración",
"provisioningKeysTitle": "Clave de aprovisionamiento",
"provisioningKeysManage": "Administrar Claves de Aprovisionamiento",
"provisioningKeysDescription": "Las claves de aprovisionamiento se utilizan para autenticar la provisión automatizada del sitio para su organización.",
"provisioningManage": "Aprovisionamiento",
"provisioningDescription": "Administrar las claves de aprovisionamiento y revisar los sitios pendientes de aprobación.",
"pendingSites": "Sitios pendientes",
"siteApproveSuccess": "Sitio aprobado con éxito",
"siteApproveError": "Error al aprobar el sitio",
"provisioningKeys": "Claves de aprovisionamiento",
"searchProvisioningKeys": "Buscar claves de suministro...",
"provisioningKeysAdd": "Generar clave de aprovisionamiento",
"provisioningKeysErrorDelete": "Error al eliminar la clave de aprovisionamiento",
"provisioningKeysErrorDeleteMessage": "Error al eliminar la clave de aprovisionamiento",
"provisioningKeysQuestionRemove": "¿Está seguro que desea eliminar esta clave de aprovisionamiento de la organización?",
"provisioningKeysMessageRemove": "Una vez eliminada, la clave ya no se puede utilizar para la disposición del sitio.",
"provisioningKeysDeleteConfirm": "Confirmar Eliminar Clave de Aprovisionamiento",
"provisioningKeysDelete": "Eliminar clave de aprovisionamiento",
"provisioningKeysCreate": "Generar clave de aprovisionamiento",
"provisioningKeysCreateDescription": "Generar una nueva clave de aprovisionamiento para la organización",
"provisioningKeysSeeAll": "Ver todas las claves de aprovisionamiento",
"provisioningKeysSave": "Guardar la clave de aprovisionamiento",
"provisioningKeysSaveDescription": "Sólo podrás verlo una vez. Copítalo a un lugar seguro.",
"provisioningKeysErrorCreate": "Error al crear la clave de provisioning",
"provisioningKeysList": "Nueva clave de aprovisionamiento",
"provisioningKeysMaxBatchSize": "Tamaño máximo de lote",
"provisioningKeysUnlimitedBatchSize": "Tamaño ilimitado del lote (sin límite)",
"provisioningKeysMaxBatchUnlimited": "Ilimitado",
"provisioningKeysMaxBatchSizeInvalid": "Introduzca un tamaño máximo de lote válido (11,000,000).",
"provisioningKeysValidUntil": "Válido hasta",
"provisioningKeysValidUntilHint": "Dejar vacío para no expirar.",
"provisioningKeysValidUntilInvalid": "Introduzca una fecha y hora válidas.",
"provisioningKeysNumUsed": "Tiempos usados",
"provisioningKeysLastUsed": "Último uso",
"provisioningKeysNoExpiry": "No expiración",
"provisioningKeysNeverUsed": "Nunca",
"provisioningKeysEdit": "Editar clave de aprovisionamiento",
"provisioningKeysEditDescription": "Actualizar el tamaño máximo de lote y el tiempo de caducidad para esta clave.",
"provisioningKeysApproveNewSites": "Aprobar nuevos sitios",
"provisioningKeysApproveNewSitesDescription": "Aprobar automáticamente los sitios que se registran con esta clave.",
"provisioningKeysUpdateError": "Error al actualizar la clave de aprovisionamiento",
"provisioningKeysUpdated": "Clave de aprovisionamiento actualizada",
"provisioningKeysUpdatedDescription": "Sus cambios han sido guardados.",
"provisioningKeysBannerTitle": "Claves de aprovisionamiento del sitio",
"provisioningKeysBannerDescription": "Genere una clave de aprovisionamiento y utilícela con el conector Newt para crear automáticamente sitios en el primer inicio: no es necesario configurar credenciales separadas para cada sitio.",
"provisioningKeysBannerButtonText": "Saber más",
"pendingSitesBannerTitle": "Sitios pendientes",
"pendingSitesBannerDescription": "Los sitios que se conectan utilizando una clave de aprovisionamiento aparecerán aquí para su revisión.",
"pendingSitesBannerButtonText": "Saber más",
"apiKeysSettings": "Ajustes {apiKeyName}",
"userTitle": "Administrar todos los usuarios",
"userDescription": "Ver y administrar todos los usuarios en el sistema",
@@ -351,6 +441,10 @@
"licenseErrorKeyActivate": "Error al activar la clave de licencia",
"licenseErrorKeyActivateDescription": "Se ha producido un error al activar la clave de licencia.",
"licenseAbout": "Acerca de la licencia",
"licenseBannerTitle": "Habilitar su Licencia Enterprise",
"licenseBannerDescription": "Desbloquea funciones empresariales para tu instancia autohospedada de Pangolin. Compra una clave de licencia para activar capacidades premium, luego agréguela a continuación.",
"licenseBannerGetLicense": "Obtener una Licencia",
"licenseBannerViewDocs": "Ver Documentación",
"communityEdition": "Edición comunitaria",
"licenseAboutDescription": "Esto es para usuarios empresariales y empresariales que utilizan Pangolin en un entorno comercial. Si estás usando Pangolin para uso personal, puedes ignorar esta sección.",
"licenseKeyActivated": "Clave de licencia activada",
@@ -508,9 +602,12 @@
"userSaved": "Usuario guardado",
"userSavedDescription": "El usuario ha sido actualizado.",
"autoProvisioned": "Auto asegurado",
"autoProvisionSettings": "Configuración de Auto Provision",
"autoProvisionedDescription": "Permitir a este usuario ser administrado automáticamente por el proveedor de identidad",
"accessControlsDescription": "Administrar lo que este usuario puede acceder y hacer en la organización",
"accessControlsSubmit": "Guardar controles de acceso",
"singleRolePerUserPlanNotice": "Tu plan sólo soporta un rol por usuario.",
"singleRolePerUserEditionNotice": "Esta edición sólo soporta un rol por usuario.",
"roles": "Roles",
"accessUsersRoles": "Administrar usuarios y roles",
"accessUsersRolesDescription": "Invitar usuarios y añadirlos a roles para administrar el acceso a la organización",
@@ -567,6 +664,8 @@
"targetErrorInvalidPortDescription": "Por favor, introduzca un número de puerto válido",
"targetErrorNoSite": "Ningún sitio seleccionado",
"targetErrorNoSiteDescription": "Por favor, seleccione un sitio para el objetivo",
"targetTargetsCleared": "Objetivos eliminados",
"targetTargetsClearedDescription": "Todos los objetivos han sido eliminados de este recurso",
"targetCreated": "Objetivo creado",
"targetCreatedDescription": "El objetivo se ha creado correctamente",
"targetErrorCreate": "Error al crear el objetivo",
@@ -650,6 +749,7 @@
"resourcesErrorUpdate": "Error al cambiar el recurso",
"resourcesErrorUpdateDescription": "Se ha producido un error al actualizar el recurso",
"access": "Acceder",
"accessControl": "Control de acceso",
"shareLink": "{resource} Compartir Enlace",
"resourceSelect": "Seleccionar recurso",
"shareLinks": "Compartir enlaces",
@@ -667,6 +767,7 @@
"newtEndpoint": "Endpoint",
"newtId": "ID",
"newtSecretKey": "Secreto",
"newtVersion": "Versión",
"architecture": "Arquitectura",
"sites": "Sitios",
"siteWgAnyClients": "Usa cualquier cliente de Wirex para conectarte. Tendrás que dirigirte a los recursos internos usando la IP de compañeros.",
@@ -790,6 +891,7 @@
"accessRoleRemoved": "Rol eliminado",
"accessRoleRemovedDescription": "El rol se ha eliminado correctamente.",
"accessRoleRequiredRemove": "Antes de eliminar este rol, seleccione un nuevo rol al que transferir miembros existentes.",
"network": "Red",
"manage": "Gestionar",
"sitesNotFound": "Sitios no encontrados.",
"pangolinServerAdmin": "Admin Servidor - Pangolin",
@@ -833,6 +935,7 @@
"idpDisplayName": "Un nombre mostrado para este proveedor de identidad",
"idpAutoProvisionUsers": "Auto-Provisión de Usuarios",
"idpAutoProvisionUsersDescription": "Cuando está habilitado, los usuarios serán creados automáticamente en el sistema al iniciar sesión con la capacidad de asignar a los usuarios a roles y organizaciones.",
"idpAutoProvisionConfigureAfterCreate": "Puede configurar las configuraciones de provisión automática una vez que se haya creado el proveedor de identidad.",
"licenseBadge": "EE",
"idpType": "Tipo de proveedor",
"idpTypeDescription": "Seleccione el tipo de proveedor de identidad que desea configurar",
@@ -884,7 +987,7 @@
"defaultMappingsRole": "Mapeo de Rol por defecto",
"defaultMappingsRoleDescription": "El resultado de esta expresión debe devolver el nombre del rol tal y como se define en la organización como una cadena.",
"defaultMappingsOrg": "Mapeo de organización por defecto",
"defaultMappingsOrgDescription": "Esta expresión debe devolver el ID de org o verdadero para que el usuario pueda acceder a la organización.",
"defaultMappingsOrgDescription": "Cuando se establece, esta expresión debe devolver el ID de la organización o verdadero para que el usuario acceda a esa organización. Cuando no se establece, definir un mapeo de roles es suficiente: se permite la entrada del usuario siempre que se pueda resolver un mapeo de roles válido para él dentro de la organización.",
"defaultMappingsSubmit": "Guardar asignaciones por defecto",
"orgPoliciesEdit": "Editar Política de Organización",
"org": "Organización",
@@ -1037,7 +1140,6 @@
"pageNotFoundDescription": "¡Vaya! La página que estás buscando no existe.",
"overview": "Resumen",
"home": "Inicio",
"accessControl": "Control de acceso",
"settings": "Ajustes",
"usersAll": "Todos los usuarios",
"license": "Licencia",
@@ -1100,6 +1202,12 @@
"actionGetUser": "Obtener usuario",
"actionGetOrgUser": "Obtener usuario de la organización",
"actionListOrgDomains": "Listar dominios de la organización",
"actionGetDomain": "Obtener dominio",
"actionCreateOrgDomain": "Crear dominio",
"actionUpdateOrgDomain": "Actualizar dominio",
"actionDeleteOrgDomain": "Eliminar dominio",
"actionGetDNSRecords": "Obtener registros DNS",
"actionRestartOrgDomain": "Reiniciar dominio",
"actionCreateSite": "Crear sitio",
"actionDeleteSite": "Eliminar sitio",
"actionGetSite": "Obtener sitio",
@@ -1111,6 +1219,7 @@
"setupTokenDescription": "Ingrese el token de configuración desde la consola del servidor.",
"setupTokenRequired": "Se requiere el token de configuración",
"actionUpdateSite": "Actualizar sitio",
"actionResetSiteBandwidth": "Restablecer ancho de banda de la organización",
"actionListSiteRoles": "Lista de roles permitidos del sitio",
"actionCreateResource": "Crear Recurso",
"actionDeleteResource": "Eliminar Recurso",
@@ -1140,6 +1249,7 @@
"actionRemoveUser": "Eliminar usuario",
"actionListUsers": "Listar usuarios",
"actionAddUserRole": "Añadir rol de usuario",
"actionSetUserOrgRoles": "Establecer roles de usuario",
"actionGenerateAccessToken": "Generar token de acceso",
"actionDeleteAccessToken": "Eliminar token de acceso",
"actionListAccessTokens": "Lista de Tokens de Acceso",
@@ -1184,6 +1294,7 @@
"actionViewLogs": "Ver registros",
"noneSelected": "Ninguno seleccionado",
"orgNotFound2": "No se encontraron organizaciones.",
"search": "Buscar…",
"searchPlaceholder": "Buscar...",
"emptySearchOptions": "No se encontraron opciones",
"create": "Crear",
@@ -1249,12 +1360,14 @@
"sidebarClientResources": "Privado",
"sidebarAccessControl": "Control de acceso",
"sidebarLogsAndAnalytics": "Registros y análisis",
"sidebarTeam": "Equipo",
"sidebarUsers": "Usuarios",
"sidebarAdmin": "Admin",
"sidebarInvitations": "Invitaciones",
"sidebarRoles": "Roles",
"sidebarShareableLinks": "Enlaces",
"sidebarApiKeys": "Claves API",
"sidebarProvisioning": "Aprovisionamiento",
"sidebarSettings": "Ajustes",
"sidebarAllUsers": "Todos los usuarios",
"sidebarIdentityProviders": "Proveedores de identidad",
@@ -1266,9 +1379,167 @@
"sidebarGeneral": "Gestionar",
"sidebarLogAndAnalytics": "Registro y análisis",
"sidebarBluePrints": "Planos",
"sidebarAlerting": "Alertas",
"sidebarHealthChecks": "Chequeos de salud",
"sidebarOrganization": "Organización",
"sidebarManagement": "Gestión",
"sidebarBillingAndLicenses": "Facturación y licencias",
"sidebarLogsAnalytics": "Analíticas",
"alertingTitle": "Alertas",
"alertingDescription": "Definir fuentes, disparadores y acciones para notificaciones",
"alertingRules": "Reglas de alerta",
"alertingSearchRules": "Buscar reglas…",
"alertingAddRule": "Crear regla",
"alertingColumnSource": "Fuente",
"alertingColumnTrigger": "Disparador",
"alertingColumnActions": "Acciones",
"alertingColumnEnabled": "Activado",
"alertingDeleteQuestion": "Por favor, confirme que desea eliminar esta regla de alerta.",
"alertingDeleteRule": "Eliminar regla de alerta",
"alertingRuleDeleted": "Regla de alerta eliminada",
"alertingRuleSaved": "Regla de alerta guardada",
"alertingRuleSavedCreatedDescription": "Tu nueva regla de alerta fue creada. Puedes seguir editándola en esta página.",
"alertingRuleSavedUpdatedDescription": "Tus cambios a esta regla de alerta fueron guardados.",
"alertingEditRule": "Editar regla de alerta",
"alertingCreateRule": "Crear regla de alerta",
"alertingRuleCredenzaDescription": "Elija qué observar, cuándo disparar y cómo notificar",
"alertingRuleNamePlaceholder": "Sitio de producción caído",
"alertingRuleEnabled": "Regla habilitada",
"alertingSectionSource": "Fuente",
"alertingSourceType": "Tipo de fuente",
"alertingSourceSite": "Sitio",
"alertingSourceHealthCheck": "Chequeo de salud",
"alertingPickSites": "Sitios",
"alertingPickHealthChecks": "Chequeos de salud",
"alertingPickResources": "Recursos",
"alertingAllSites": "Todos los sitios",
"alertingAllSitesDescription": "Las alertas se activan para cualquier sitio",
"alertingSpecificSites": "Sitios específicos",
"alertingSpecificSitesDescription": "Escoja sitios específicos para observar",
"alertingAllHealthChecks": "Todos los chequeos de salud",
"alertingAllHealthChecksDescription": "Las alertas se activan para cualquier chequeo de salud",
"alertingSpecificHealthChecks": "Chequeos de salud específicos",
"alertingSpecificHealthChecksDescription": "Elija chequeos de salud específicos para observar",
"alertingAllResources": "Todos los recursos",
"alertingAllResourcesDescription": "Las alertas se activan para cualquier recurso",
"alertingSpecificResources": "Recursos específicos",
"alertingSpecificResourcesDescription": "Elija recursos específicos para observar",
"alertingSelectResources": "Seleccionar recursos…",
"alertingResourcesSelected": "{count} recursos seleccionados",
"alertingResourcesEmpty": "No hay recursos con objetivos en los primeros 10 resultados.",
"alertingSectionTrigger": "Disparador",
"alertingTrigger": "Cuándo alertar",
"alertingTriggerSiteOnline": "Sitio en línea",
"alertingTriggerSiteOffline": "Sitio fuera de línea",
"alertingTriggerSiteToggle": "El estado del sitio cambia",
"alertingTriggerHcHealthy": "Chequeo de salud saludable",
"alertingTriggerHcUnhealthy": "Chequeo de salud no saludable",
"alertingTriggerHcToggle": "El estado del chequeo de salud cambia",
"alertingTriggerResourceHealthy": "Recurso saludable",
"alertingTriggerResourceUnhealthy": "Recurso no saludable",
"alertingTriggerResourceDegraded": "Recurso degradado",
"alertingSearchHealthChecks": "Buscar chequeos de salud…",
"alertingHealthChecksEmpty": "No hay chequeos de salud disponibles.",
"alertingTriggerResourceToggle": "El estado del recurso cambia",
"alertingSourceResource": "Recurso",
"alertingSectionActions": "Acciones",
"alertingAddAction": "Añadir acción",
"alertingActionNotify": "E-mail",
"alertingActionNotifyDescription": "Enviar notificaciones por correo electrónico a usuarios o roles",
"alertingActionWebhook": "Webhook",
"alertingActionWebhookDescription": "Enviar una solicitud HTTP a un punto final personalizado",
"alertingExternalIntegration": "Integración externa",
"alertingExternalPagerDutyDescription": "Enviar alertas a PagerDuty para gestión de incidentes",
"alertingExternalOpsgenieDescription": "Dirigir alertas a Opsgenie para gestión de llamadas",
"alertingExternalServiceNowDescription": "Crear incidentes de ServiceNow a partir de eventos de alerta",
"alertingExternalIncidentIoDescription": "Activar flujos de trabajo de Incident.io a partir de eventos de alerta",
"alertingActionType": "Tipo de acción",
"alertingNotifyUsers": "Usuarios",
"alertingNotifyRoles": "Roles",
"alertingNotifyEmails": "Direcciones de correo electrónico",
"alertingEmailPlaceholder": "Añadir email y presionar Enter",
"alertingWebhookMethod": "Método HTTP",
"alertingWebhookSecret": "Firma secreta (opcional)",
"alertingWebhookSecretPlaceholder": "Secreto HMAC",
"alertingWebhookHeaders": "Encabezados",
"alertingAddHeader": "Añadir encabezado",
"alertingSelectSites": "Seleccionar sitios…",
"alertingSitesSelected": "{count} sitios seleccionados",
"alertingSelectHealthChecks": "Seleccionar chequeos de salud…",
"alertingHealthChecksSelected": "{count} chequeos de salud seleccionados",
"alertingNoHealthChecks": "No hay objetivos con chequeos de salud habilitados",
"alertingHealthCheckStub": "La selección de chequeo de salud no está conectada aún - todavía puede configurar disparadores y acciones.",
"alertingSelectUsers": "Seleccionar usuarios…",
"alertingUsersSelected": "{count} usuarios seleccionados",
"alertingSelectRoles": "Seleccionar roles…",
"alertingRolesSelected": "{count} roles seleccionados",
"alertingSummarySites": "Sitios ({count})",
"alertingSummaryAllSites": "Todos los sitios",
"alertingSummaryHealthChecks": "Chequeos de salud ({count})",
"alertingSummaryAllHealthChecks": "Todos los chequeos de salud",
"alertingSummaryResources": "Recursos ({count})",
"alertingSummaryAllResources": "Todos los recursos",
"alertingErrorNameRequired": "Introduce un nombre",
"alertingErrorActionsMin": "Añada al menos una acción",
"alertingErrorPickSites": "Seleccione al menos un sitio",
"alertingErrorPickHealthChecks": "Seleccione al menos un chequeo de salud",
"alertingErrorPickResources": "Seleccione al menos un recurso",
"alertingErrorTriggerSite": "Elija un disparador de sitio",
"alertingErrorTriggerHealth": "Elija un disparador de chequeo de salud",
"alertingErrorTriggerResource": "Elija un disparador de recurso",
"alertingErrorNotifyRecipients": "Elija usuarios, roles o al menos un correo electrónico",
"alertingConfigureSource": "Configurar fuente",
"alertingConfigureTrigger": "Configurar disparador",
"alertingConfigureActions": "Configurar acciones",
"alertingBackToRules": "Volver a las reglas",
"alertingRuleCooldown": "Tiempo de espera (segundos)",
"alertingRuleCooldownDescription": "Tiempo mínimo entre alertas repetidas para la misma regla. Establezca en 0 para disparar cada vez.",
"alertingDraftBadge": "Borrador - guardarlo para almacenar esta regla",
"alertingSidebarHint": "Haga clic en un paso en el lienzo para editarlo aquí.",
"alertingGraphCanvasTitle": "Flujo de regla",
"alertingGraphCanvasDescription": "Visión general visual de fuente, disparador y acciones. Selecciona un nodo para editarlo en el panel.",
"alertingNodeNotConfigured": "Aún no configurado",
"alertingNodeActionsCount": "{count, plural, one {# acción} other {# acciones}}",
"alertingNodeRoleSource": "Fuente",
"alertingNodeRoleTrigger": "Disparador",
"alertingNodeRoleAction": "Acción",
"alertingTabRules": "Reglas de Alerta",
"alertingTabHealthChecks": "Chequeos de salud",
"alertingRulesBannerTitle": "Obtenga notificaciones",
"alertingRulesBannerDescription": "Cada regla vincula lo que se debe observar (un sitio, chequeo de salud o recurso), cuándo disparar (por ejemplo, fuera de línea o no saludable), y cómo notificar a su equipo vía email, webhooks o integraciones. Use esta lista para crear, habilitar y administrar esas reglas.",
"alertingHealthChecksBannerTitle": "Monitorear Salud y Recursos",
"alertingHealthChecksBannerDescription": "Los chequeos de salud son monitores HTTP o TCP que define una vez. Luego puede usarlos como fuentes en reglas de alerta para que se le notifique cuando un objetivo se vuelva saludable o no saludable. Los chequeos de salud en recursos también aparecen aquí.",
"standaloneHcTableTitle": "Chequeos de salud",
"standaloneHcSearchPlaceholder": "Buscar chequeos de salud…",
"standaloneHcAddButton": "Crear chequeo de salud",
"standaloneHcCreateTitle": "Crear chequeo de salud",
"standaloneHcEditTitle": "Editar chequeo de salud",
"standaloneHcDescription": "Configurar un chequeo de salud HTTP o TCP para usar en reglas de alerta.",
"standaloneHcNameLabel": "Nombre",
"standaloneHcNamePlaceholder": "Mi monitor HTTP",
"standaloneHcDeleteTitle": "Eliminar chequeo de salud",
"standaloneHcDeleteQuestion": "Por favor, confirme que desea eliminar este chequeo de salud.",
"standaloneHcDeleted": "Chequeo de salud eliminado",
"standaloneHcSaved": "Chequeo de salud guardado",
"standaloneHcColumnHealth": "Salud",
"standaloneHcColumnMode": "Modo",
"standaloneHcColumnTarget": "Destino",
"standaloneHcHealthStateHealthy": "Saludable",
"standaloneHcHealthStateUnhealthy": "No saludable",
"standaloneHcHealthStateUnknown": "Desconocido",
"standaloneHcFilterAnySite": "Todos los sitios",
"standaloneHcFilterAnyResource": "Todos los recursos",
"standaloneHcFilterMode": "Modo",
"standaloneHcFilterModeHttp": "HTTP",
"standaloneHcFilterModeTcp": "TCP",
"standaloneHcFilterModeSnmp": "SNMP",
"standaloneHcFilterModePing": "Ping",
"standaloneHcFilterHealth": "Salud",
"standaloneHcFilterEnabled": "Activado",
"standaloneHcFilterEnabledOn": "Activado",
"standaloneHcFilterEnabledOff": "Deshabilitado",
"standaloneHcFilterSiteIdFallback": "Sitio {id}",
"standaloneHcFilterResourceIdFallback": "Recurso {id}",
"blueprints": "Planos",
"blueprintsDescription": "Aplicar configuraciones declarativas y ver ejecuciones anteriores",
"blueprintAdd": "Añadir plano",
@@ -1289,7 +1560,6 @@
"parsedContents": "Contenido analizado (Sólo lectura)",
"enableDockerSocket": "Habilitar Plano Docker",
"enableDockerSocketDescription": "Activar el raspado de etiquetas de Socket Docker para etiquetas de planos. La ruta del Socket debe proporcionarse a Newt.",
"enableDockerSocketLink": "Saber más",
"viewDockerContainers": "Ver contenedores Docker",
"containersIn": "Contenedores en {siteName}",
"selectContainerDescription": "Seleccione cualquier contenedor para usar como nombre de host para este objetivo. Haga clic en un puerto para usar un puerto.",
@@ -1331,7 +1601,8 @@
"initialSetupDescription": "Cree la cuenta de administrador del servidor inicial. Solo puede existir un administrador del servidor. Siempre puede cambiar estas credenciales más tarde.",
"createAdminAccount": "Crear cuenta de administrador",
"setupErrorCreateAdmin": "Se produjo un error al crear la cuenta de administrador del servidor.",
"certificateStatus": "Estado del certificado",
"certificateStatus": "Certificado",
"certificateStatusAutoRefreshHint": "El estado se actualiza automáticamente.",
"loading": "Cargando",
"loadingAnalytics": "Cargando analíticas",
"restart": "Reiniciar",
@@ -1400,6 +1671,7 @@
"pangolinUpdateAvailableReleaseNotes": "Ver notas de lanzamiento",
"newtUpdateAvailable": "Nueva actualización disponible",
"newtUpdateAvailableInfo": "Hay una nueva versión de Newt disponible. Actualice a la última versión para la mejor experiencia.",
"pangolinNodeUpdateAvailableInfo": "Hay una nueva versión de Pangolin Node disponible. Actualice a la última versión para la mejor experiencia.",
"domainPickerEnterDomain": "Dominio",
"domainPickerPlaceholder": "miapp.ejemplo.com",
"domainPickerDescription": "Ingresa el dominio completo del recurso para ver las opciones disponibles.",
@@ -1417,6 +1689,7 @@
"domainPickerNamespace": "Espacio de nombres: {namespace}",
"domainPickerShowMore": "Mostrar más",
"regionSelectorTitle": "Seleccionar Región",
"domainPickerRemoteExitNodeWarning": "Los dominios suministrados no son compatibles cuando los sitios se conectan a nodos de salida remotos. Para que los recursos estén disponibles en nodos remotos, utilice un dominio personalizado en su lugar.",
"regionSelectorInfo": "Seleccionar una región nos ayuda a brindar un mejor rendimiento para tu ubicación. No tienes que estar en la misma región que tu servidor.",
"regionSelectorPlaceholder": "Elige una región",
"regionSelectorComingSoon": "Próximamente",
@@ -1570,6 +1843,16 @@
"billingFeatureLossWarning": "Aviso de disponibilidad de funcionalidad",
"billingFeatureLossDescription": "Al degradar, las características no disponibles en el nuevo plan se desactivarán automáticamente. Algunas configuraciones y configuraciones pueden perderse. Por favor, revise la matriz de precios para entender qué características ya no estarán disponibles.",
"billingUsageExceedsLimit": "El uso actual ({current}) supera el límite ({limit})",
"billingPastDueTitle": "Pago vencido",
"billingPastDueDescription": "Su pago ha vencido. Por favor, actualice su método de pago para seguir utilizando las características actuales de su plan. Si no se resuelve, tu suscripción se cancelará y serás revertido al nivel gratuito.",
"billingUnpaidTitle": "Suscripción no pagada",
"billingUnpaidDescription": "Tu suscripción no está pagada y has sido revertido al nivel gratuito. Por favor, actualiza tu método de pago para restaurar tu suscripción.",
"billingIncompleteTitle": "Pago incompleto",
"billingIncompleteDescription": "Su pago está incompleto. Por favor, complete el proceso de pago para activar su suscripción.",
"billingIncompleteExpiredTitle": "Pago expirado",
"billingIncompleteExpiredDescription": "Tu pago nunca se completó y ha expirado. Has sido revertido al nivel gratuito. Suscríbete de nuevo para restaurar el acceso a las funciones de pago.",
"billingManageSubscription": "Administra tu suscripción",
"billingResolvePaymentIssue": "Por favor resuelva su problema de pago antes de actualizar o bajar de calificación",
"signUpTerms": {
"IAgreeToThe": "Estoy de acuerdo con los",
"termsOfService": "términos del servicio",
@@ -1628,6 +1911,7 @@
"configureHealthCheck": "Configurar Chequeo de Salud",
"configureHealthCheckDescription": "Configura la monitorización de salud para {target}",
"enableHealthChecks": "Activar Chequeos de Salud",
"healthCheckDisabledStateDescription": "Cuando está deshabilitado, el sitio no realizará comprobaciones de salud y el estado se considerará desconocido.",
"enableHealthChecksDescription": "Controlar la salud de este objetivo. Puedes supervisar un punto final diferente al objetivo si es necesario.",
"healthScheme": "Método",
"healthSelectScheme": "Seleccionar método",
@@ -1643,6 +1927,24 @@
"timeIsInSeconds": "El tiempo está en segundos",
"requireDeviceApproval": "Requiere aprobaciones del dispositivo",
"requireDeviceApprovalDescription": "Los usuarios con este rol necesitan nuevos dispositivos aprobados por un administrador antes de poder conectarse y acceder a los recursos.",
"sshAccess": "Acceso a SSH",
"roleAllowSsh": "Permitir SSH",
"roleAllowSshAllow": "Permitir",
"roleAllowSshDisallow": "Rechazar",
"roleAllowSshDescription": "Permitir a los usuarios con este rol conectarse a recursos a través de SSH. Cuando está desactivado, el rol no puede usar acceso SSH.",
"sshSudoMode": "Acceso Sudo",
"sshSudoModeNone": "Ninguna",
"sshSudoModeNoneDescription": "El usuario no puede ejecutar comandos con sudo.",
"sshSudoModeFull": "Sudo completo",
"sshSudoModeFullDescription": "El usuario puede ejecutar cualquier comando con sudo.",
"sshSudoModeCommands": "Comandos",
"sshSudoModeCommandsDescription": "El usuario sólo puede ejecutar los comandos especificados con sudo.",
"sshSudo": "Permitir sudo",
"sshSudoCommands": "Comandos Sudo",
"sshSudoCommandsDescription": "Lista separada por comas de comandos que el usuario puede ejecutar con sudo.",
"sshCreateHomeDir": "Crear directorio principal",
"sshUnixGroups": "Grupos Unix",
"sshUnixGroupsDescription": "Grupos Unix separados por comas para agregar el usuario en el host de destino.",
"retryAttempts": "Intentos de Reintento",
"expectedResponseCodes": "Códigos de respuesta esperados",
"expectedResponseCodesDescription": "Código de estado HTTP que indica un estado saludable. Si se deja en blanco, se considera saludable de 200 a 300.",
@@ -1659,9 +1961,20 @@
"healthCheckIntervalMin": "El intervalo de comprobación debe ser de al menos 5 segundos",
"healthCheckTimeoutMin": "El tiempo de espera debe ser de al menos 1 segundo",
"healthCheckRetryMin": "Los intentos de reintento deben ser de al menos 1",
"healthCheckMode": "Modo de chequeo",
"healthCheckStrategy": "Estrategia",
"healthCheckModeDescription": "El modo TCP verifica solo la conectividad. El modo HTTP valida la respuesta HTTP.",
"healthyThreshold": "Umbral Saludable",
"healthyThresholdDescription": "Éxitos consecutivos requeridos antes de marcar como saludable.",
"unhealthyThreshold": "Umbral No Saludable",
"unhealthyThresholdDescription": "Fallos consecutivos requeridos antes de marcar como no saludable.",
"healthCheckHealthyThresholdMin": "El umbral saludable debe ser al menos 1",
"healthCheckUnhealthyThresholdMin": "El umbral no saludable debe ser al menos 1",
"httpMethod": "Método HTTP",
"selectHttpMethod": "Seleccionar método HTTP",
"domainPickerSubdomainLabel": "Subdominio",
"domainPickerWildcard": "Comodín",
"domainPickerWildcardPaidOnly": "Los subdominios comodín son una característica paga. Por favor, mejora tu plan para acceder a esta característica.",
"domainPickerBaseDomainLabel": "Dominio base",
"domainPickerSearchDomains": "Buscar dominios...",
"domainPickerNoDomainsFound": "No se encontraron dominios",
@@ -1687,12 +2000,12 @@
"resourcesTableAliasAddressInfo": "Esta dirección es parte de la subred de utilidad de la organización. Se utiliza para resolver registros de alias usando resolución DNS interna.",
"resourcesTableClients": "Clientes",
"resourcesTableAndOnlyAccessibleInternally": "y solo son accesibles internamente cuando se conectan con un cliente.",
"resourcesTableNoTargets": "Sin objetivos",
"resourcesTableHealthy": "Saludable",
"resourcesTableDegraded": "Degrado",
"resourcesTableOffline": "Desconectado",
"resourcesTableUnhealthy": "No saludable",
"resourcesTableUnknown": "Desconocido",
"resourcesTableNotMonitored": "No supervisado",
"resourcesTableNoTargets": "Sin objetivos",
"editInternalResourceDialogEditClientResource": "Editar recurso privado",
"editInternalResourceDialogUpdateResourceProperties": "Actualizar la configuración del recurso y los controles de acceso para {resourceName}",
"editInternalResourceDialogResourceProperties": "Propiedades del recurso",
@@ -1718,6 +2031,11 @@
"editInternalResourceDialogModePort": "Puerto",
"editInternalResourceDialogModeHost": "Anfitrión",
"editInternalResourceDialogModeCidr": "CIDR",
"editInternalResourceDialogModeHttp": "HTTP",
"editInternalResourceDialogModeHttps": "HTTPS",
"editInternalResourceDialogScheme": "Esquema",
"editInternalResourceDialogEnableSsl": "Activar SSL",
"editInternalResourceDialogEnableSslDescription": "Habilitar cifrado SSL/TLS para conexiones HTTPS seguras al destino.",
"editInternalResourceDialogDestination": "Destino",
"editInternalResourceDialogDestinationHostDescription": "La dirección IP o nombre de host del recurso en la red del sitio.",
"editInternalResourceDialogDestinationIPDescription": "La dirección IP o nombre de host del recurso en la red del sitio.",
@@ -1733,6 +2051,7 @@
"createInternalResourceDialogName": "Nombre",
"createInternalResourceDialogSite": "Sitio",
"selectSite": "Seleccionar sitio...",
"multiSitesSelectorSitesCount": "{count, plural, one {# sitio} other {# sitios}}",
"noSitesFound": "Sitios no encontrados.",
"createInternalResourceDialogProtocol": "Protocolo",
"createInternalResourceDialogTcp": "TCP",
@@ -1761,11 +2080,19 @@
"createInternalResourceDialogModePort": "Puerto",
"createInternalResourceDialogModeHost": "Anfitrión",
"createInternalResourceDialogModeCidr": "CIDR",
"createInternalResourceDialogModeHttp": "HTTP",
"createInternalResourceDialogModeHttps": "HTTPS",
"scheme": "Esquema",
"createInternalResourceDialogScheme": "Esquema",
"createInternalResourceDialogEnableSsl": "Activar SSL",
"createInternalResourceDialogEnableSslDescription": "Habilitar cifrado SSL/TLS para conexiones HTTPS seguras al destino.",
"createInternalResourceDialogDestination": "Destino",
"createInternalResourceDialogDestinationHostDescription": "La dirección IP o nombre de host del recurso en la red del sitio.",
"createInternalResourceDialogDestinationCidrDescription": "El rango CIDR del recurso en la red del sitio.",
"createInternalResourceDialogAlias": "Alias",
"createInternalResourceDialogAliasDescription": "Un alias DNS interno opcional para este recurso.",
"internalResourceDownstreamSchemeRequired": "Se requiere el método para recursos HTTP",
"internalResourceHttpPortRequired": "Se requiere el puerto de destino para recursos HTTP",
"siteConfiguration": "Configuración",
"siteAcceptClientConnections": "Aceptar conexiones de clientes",
"siteAcceptClientConnectionsDescription": "Permitir a los dispositivos de usuario y clientes acceder a los recursos de este sitio. Esto se puede cambiar más tarde.",
@@ -1851,6 +2178,40 @@
"exitNode": "Nodo de Salida",
"country": "País",
"rulesMatchCountry": "Actualmente basado en IP de origen",
"region": "Región",
"selectRegion": "Seleccionar región",
"searchRegions": "Buscar regiones...",
"noRegionFound": "Región no encontrada.",
"rulesMatchRegion": "Seleccione una agrupación regional de países",
"rulesErrorInvalidRegion": "Región no válida",
"rulesErrorInvalidRegionDescription": "Por favor, seleccione una región válida.",
"regionAfrica": "Africa",
"regionNorthernAfrica": "África septentrional",
"regionEasternAfrica": "África oriental",
"regionMiddleAfrica": "África central",
"regionSouthernAfrica": "África del Sur",
"regionWesternAfrica": "África Occidental",
"regionAmericas": "Américas",
"regionCaribbean": "Caribe",
"regionCentralAmerica": "América Central",
"regionSouthAmerica": "América del Sur",
"regionNorthernAmerica": "América del Norte",
"regionAsia": "Asia",
"regionCentralAsia": "Asia Central",
"regionEasternAsia": "Asia oriental",
"regionSouthEasternAsia": "Asia sudoriental",
"regionSouthernAsia": "Asia meridional",
"regionWesternAsia": "Asia Occidental",
"regionEurope": "Europa",
"regionEasternEurope": "Europa del Este",
"regionNorthernEurope": "Europa septentrional",
"regionSouthernEurope": "Europa meridional",
"regionWesternEurope": "Europa Occidental",
"regionOceania": "Oceania",
"regionAustraliaAndNewZealand": "Australia y Nueva Zelanda",
"regionMelanesia": "Melanesia",
"regionMicronesia": "Micronesia",
"regionPolynesia": "Polynesia",
"managedSelfHosted": {
"title": "Autogestionado",
"description": "Servidor Pangolin autoalojado más fiable y de bajo mantenimiento con campanas y silbidos extra",
@@ -1889,7 +2250,7 @@
},
"internationaldomaindetected": "Dominio Internacional detectado",
"willbestoredas": "Se almacenará como:",
"roleMappingDescription": "Determinar cómo se asignan los roles a los usuarios cuando se registran cuando está habilitada la provisión automática.",
"roleMappingDescription": "Determine cómo se asignan los roles a los usuarios cuando inician sesión con este proveedor de identidad.",
"selectRole": "Seleccione un rol",
"roleMappingExpression": "Expresión",
"selectRolePlaceholder": "Elija un rol",
@@ -1899,6 +2260,25 @@
"invalidValue": "Valor inválido",
"idpTypeLabel": "Tipo de proveedor de identidad",
"roleMappingExpressionPlaceholder": "e.g., contiene(grupos, 'administrador') && 'administrador' || 'miembro'",
"roleMappingModeFixedRoles": "Roles fijos",
"roleMappingModeMappingBuilder": "Constructor de mapeo",
"roleMappingModeRawExpression": "Expresión sin procesar",
"roleMappingFixedRolesPlaceholderSelect": "Seleccione uno o más roles",
"roleMappingFixedRolesPlaceholderFreeform": "Nombre de rol de tipo (coincidencia exacta por organización)",
"roleMappingFixedRolesDescriptionSameForAll": "Asignar el mismo rol establecido a cada usuario auto-provisionado.",
"roleMappingFixedRolesDescriptionDefaultPolicy": "Para las políticas predeterminadas, escriba nombres de roles que existen en cada organización donde los usuarios son proporcionados. Los nombres deben coincidir exactamente.",
"roleMappingClaimPath": "Reclamar ruta",
"roleMappingClaimPathPlaceholder": "grupos",
"roleMappingClaimPathDescription": "Ruta en el payload del token que contiene valores de origen (por ejemplo, grupos).",
"roleMappingMatchValue": "Valor de partida",
"roleMappingAssignRoles": "Asignar roles",
"roleMappingAddMappingRule": "Añadir regla de mapeo",
"roleMappingRawExpressionResultDescription": "La expresión debe evaluar a un array de cadenas o cadenas.",
"roleMappingRawExpressionResultDescriptionSingleRole": "La expresión debe evaluar una cadena (un solo nombre de rol).",
"roleMappingMatchValuePlaceholder": "Valor coincidente (por ejemplo: admin)",
"roleMappingAssignRolesPlaceholderFreeform": "Escriba nombres de rol (exacto por org)",
"roleMappingBuilderFreeformRowHint": "Los nombres de rol deben coincidir con un rol en cada organización objetivo.",
"roleMappingRemoveRule": "Eliminar",
"idpGoogleConfiguration": "Configuración de Google",
"idpGoogleConfigurationDescription": "Configurar las credenciales de Google OAuth2",
"idpGoogleClientIdDescription": "Google OAuth2 Client ID",
@@ -1962,9 +2342,11 @@
"selectDomainForOrgAuthPage": "Seleccione un dominio para la página de autenticación de la organización",
"domainPickerProvidedDomain": "Dominio proporcionado",
"domainPickerFreeProvidedDomain": "Dominio proporcionado gratis",
"domainPickerFreeDomainsPaidFeature": "Los dominios proporcionados son una función de pago. Suscríbete para obtener un dominio incluido con tu plan - no necesitas traer el tuyo propio.",
"domainPickerVerified": "Verificado",
"domainPickerUnverified": "Sin verificar",
"domainPickerInvalidSubdomainStructure": "Este subdominio contiene caracteres o estructura no válidos. Se limpiará automáticamente al guardar.",
"domainPickerManual": "Manual",
"domainPickerInvalidSubdomainStructure": "Los caracteres inválidos serán saneados al guardar.",
"domainPickerError": "Error",
"domainPickerErrorLoadDomains": "Error al cargar los dominios de la organización",
"domainPickerErrorCheckAvailability": "No se pudo comprobar la disponibilidad del dominio",
@@ -1977,7 +2359,7 @@
"orgAuthChooseIdpDescription": "Elige tu proveedor de identidad para continuar",
"orgAuthNoIdpConfigured": "Esta organización no tiene ningún proveedor de identidad configurado. En su lugar puedes iniciar sesión con tu identidad de Pangolin.",
"orgAuthSignInWithPangolin": "Iniciar sesión con Pangolin",
"orgAuthSignInToOrg": "Iniciar sesión en una organización",
"orgAuthSignInToOrg": "Proveedor de identidad de la organización (SSO)",
"orgAuthSelectOrgTitle": "Inicio de sesión de organización",
"orgAuthSelectOrgDescription": "Ingrese el ID de su organización para continuar",
"orgAuthOrgIdPlaceholder": "tu-organización",
@@ -2138,7 +2520,7 @@
"alerts": {
"commercialUseDisclosure": {
"title": "Divulgación de uso",
"description": "Seleccione el nivel de licencia que refleje con precisión su uso previsto. La Licencia Personal permite el uso libre del Software para actividades comerciales individuales, no comerciales o de pequeña escala con ingresos brutos anuales inferiores a $100,000 USD. Cualquier uso más allá de estos límites incluyendo el uso dentro de una empresa, organización, u otro entorno de generación de ingresos requiere una Licencia Empresarial válida y el pago de la cuota de licencia aplicable. Todos los usuarios, ya sean personales o empresariales, deben cumplir con las Condiciones de Licencia Comercial Fossorial."
"description": "Seleccione el nivel de licencia que refleje con precisión su uso previsto. La Licencia Personal permite el uso libre del Software para actividades comerciales individuales, no comerciales o de pequeña escala con ingresos brutos anuales inferiores a $100,000 USD. Cualquier uso más allá de estos límites - incluyendo el uso dentro de una empresa, organización, u otro entorno de generación de ingresos - requiere una Licencia Empresarial válida y el pago de la cuota de licencia aplicable. Todos los usuarios, ya sean personales o empresariales, deben cumplir con las Condiciones de Licencia Comercial Fossorial."
},
"trialPeriodInformation": {
"title": "Información del período de prueba",
@@ -2193,10 +2575,10 @@
},
"scale": {
"title": "Escala",
"description": "Características de la empresa, 50 usuarios, 50 sitios y soporte prioritario."
"description": "Funcionalidades empresariales, 50 usuarios, 100 sitios y soporte prioritario."
}
},
"personalUseOnly": "Solo uso personal (licencia gratuita, sin pago)",
"personalUseOnly": "Solo uso personal (licencia gratuita - sin salida)",
"buttons": {
"continueToCheckout": "Continuar con el pago"
},
@@ -2270,6 +2652,7 @@
"validPassword": "Contraseña válida",
"validEmail": "Valid email",
"validSSO": "Valid SSO",
"connectedClient": "Cliente conectado",
"resourceBlocked": "Recurso bloqueado",
"droppedByRule": "Soltado por regla",
"noSessions": "No hay sesiones",
@@ -2277,24 +2660,26 @@
"noMoreAuthMethods": "No Valid Auth",
"ip": "IP",
"reason": "Razón",
"requestLogs": "Registros de Solicitud",
"requestLogs": "Registros de Solicitud HTTP",
"requestAnalytics": "Analítica de Solicitud",
"host": "Anfitrión",
"location": "Ubicación",
"actionLogs": "Registros de acción",
"sidebarLogsRequest": "Registros de Solicitud",
"sidebarLogsRequest": "Registros de Solicitud HTTP",
"sidebarLogsAccess": "Registros de acceso",
"sidebarLogsAction": "Registros de acción",
"logRetention": "Retención de Log",
"logRetentionDescription": "Administrar cuánto tiempo se conservan los diferentes tipos de registros para esta organización o desactivarlos",
"requestLogsDescription": "Ver registros de solicitudes detallados para los recursos de esta organización",
"requestAnalyticsDescription": "Ver análisis de solicitudes detalladas de recursos en esta organización",
"logRetentionRequestLabel": "Retención de Registro de Solicitud",
"logRetentionRequestLabel": "Retención de Registro de Solicitud HTTP",
"logRetentionRequestDescription": "Cuánto tiempo conservar los registros de solicitudes",
"logRetentionAccessLabel": "Retención de Log de Acceso",
"logRetentionAccessDescription": "Cuánto tiempo retener los registros de acceso",
"logRetentionActionLabel": "Retención de registro de acción",
"logRetentionActionDescription": "Cuánto tiempo retener los registros de acción",
"logRetentionConnectionLabel": "Retención de Registro de Conexión",
"logRetentionConnectionDescription": "Cuánto tiempo conservar los registros de conexión",
"logRetentionDisabled": "Deshabilitado",
"logRetention3Days": "3 días",
"logRetention7Days": "7 días",
@@ -2305,8 +2690,15 @@
"logRetentionEndOfFollowingYear": "Fin del año siguiente",
"actionLogsDescription": "Ver un historial de acciones realizadas en esta organización",
"accessLogsDescription": "Ver solicitudes de acceso a los recursos de esta organización",
"licenseRequiredToUse": "Se requiere una licencia <enterpriseLicenseLink>Enterprise Edition</enterpriseLicenseLink> para utilizar esta función. Esta característica también está disponible en <pangolinCloudLink>Pangolin Cloud</pangolinCloudLink>.",
"ossEnterpriseEditionRequired": "La <enterpriseEditionLink>versión Enterprise</enterpriseEditionLink> es necesaria para utilizar esta función. Esta función también está disponible en <pangolinCloudLink>Pangolin Cloud</pangolinCloudLink>.",
"connectionLogs": "Registros de conexión",
"connectionLogsDescription": "Ver registros de conexión para túneles en esta organización",
"sidebarLogsConnection": "Registros de conexión",
"sidebarLogsStreaming": "Transmisión",
"sourceAddress": "Dirección de origen",
"destinationAddress": "Dirección de destino",
"duration": "Duración",
"licenseRequiredToUse": "Se requiere una licencia <enterpriseLicenseLink>Enterprise Edition</enterpriseLicenseLink> o <pangolinCloudLink>Pangolin Cloud</pangolinCloudLink> para usar esta función. <bookADemoLink>Reserve una demostración o prueba POC</bookADemoLink>.",
"ossEnterpriseEditionRequired": "La <enterpriseEditionLink>Enterprise Edition</enterpriseEditionLink> es necesaria para utilizar esta función. Esta función también está disponible en <pangolinCloudLink>Pangolin Cloud</pangolinCloudLink>. <bookADemoLink>Reserva una demostración o prueba POC</bookADemoLink>.",
"certResolver": "Resolver certificado",
"certResolverDescription": "Seleccione la resolución de certificados a utilizar para este recurso.",
"selectCertResolver": "Seleccionar Resolver Certificado",
@@ -2448,6 +2840,9 @@
"machineClients": "Clientes de la máquina",
"install": "Instalar",
"run": "Ejecutar",
"envFile": "Archivo de Entorno",
"serviceFile": "Archivo de Servicio",
"enableAndStart": "Habilitar y empezar",
"clientNameDescription": "El nombre mostrado del cliente que se puede cambiar más adelante.",
"clientAddress": "Dirección del cliente (Avanzado)",
"setupFailedToFetchSubnet": "No se pudo obtener la subred por defecto",
@@ -2496,13 +2891,30 @@
"editInternalResourceDialogAddClients": "Agregar clientes",
"editInternalResourceDialogDestinationLabel": "Destino",
"editInternalResourceDialogDestinationDescription": "Especifique la dirección de destino para el recurso interno. Puede ser un nombre de host, dirección IP o rango CIDR dependiendo del modo seleccionado. Opcionalmente establezca un alias DNS interno para una identificación más fácil.",
"internalResourceFormMultiSiteRoutingHelp": "Seleccionar múltiples sitios habilita el enrutamiento resistente y la conmutación por error para alta disponibilidad.",
"internalResourceFormMultiSiteRoutingHelpLearnMore": "Más información",
"editInternalResourceDialogPortRestrictionsDescription": "Restringir el acceso a puertos TCP/UDP específicos o permitir/bloquear todos los puertos.",
"createInternalResourceDialogHttpConfiguration": "Configuración HTTP",
"createInternalResourceDialogHttpConfigurationDescription": "Elija el dominio que los clientes usarán para alcanzar este recurso a través de HTTP o HTTPS.",
"editInternalResourceDialogHttpConfiguration": "Configuración HTTP",
"editInternalResourceDialogHttpConfigurationDescription": "Elija el dominio que los clientes usarán para alcanzar este recurso a través de HTTP o HTTPS.",
"editInternalResourceDialogTcp": "TCP",
"editInternalResourceDialogUdp": "UDP",
"editInternalResourceDialogIcmp": "ICMP",
"editInternalResourceDialogAccessControl": "Control de acceso",
"editInternalResourceDialogAccessControlDescription": "Controla qué roles, usuarios y clientes de máquinas tienen acceso a este recurso cuando están conectados. Los administradores siempre tienen acceso.",
"editInternalResourceDialogPortRangeValidationError": "El rango de puertos debe ser \"*\" para todos los puertos, o una lista separada por comas de puertos y rangos (por ejemplo, \"80,443,8000-9000\"). Los puertos deben estar entre 1 y 65535.",
"internalResourceAuthDaemonStrategy": "Ubicación del demonio de autenticación SSSH",
"internalResourceAuthDaemonStrategyDescription": "Elija dónde se ejecuta el daemon de autenticación SSH: en el sitio (Newt) o en un host remoto.",
"internalResourceAuthDaemonDescription": "El daemon de autenticación SSSH maneja la firma de claves SSH y autenticación PAM para este recurso. Elija si se ejecuta en el sitio (Newt) o en un host remoto separado. Vea <docsLink>la documentación</docsLink> para más.",
"internalResourceAuthDaemonDocsUrl": "https://docs.pangolin.net",
"internalResourceAuthDaemonStrategyPlaceholder": "Seleccionar estrategia",
"internalResourceAuthDaemonStrategyLabel": "Ubicación",
"internalResourceAuthDaemonSite": "En el sitio",
"internalResourceAuthDaemonSiteDescription": "Auth daemon corre en el sitio (Newt).",
"internalResourceAuthDaemonRemote": "Host remoto",
"internalResourceAuthDaemonRemoteDescription": "El daemon Auth corre en un host que no es el sitio.",
"internalResourceAuthDaemonPort": "Puerto de demonio (opcional)",
"orgAuthWhatsThis": "¿Dónde puedo encontrar el ID de mi organización?",
"learnMore": "Más información",
"backToHome": "Volver a inicio",
@@ -2524,6 +2936,9 @@
"maintenancePageMessagePlaceholder": "¡Volveremos pronto! Nuestro sitio está actualmente en mantenimiento programado.",
"maintenancePageMessageDescription": "Mensaje detallado explicando el mantenimiento",
"maintenancePageTimeTitle": "Tiempo estimado de finalización (Opcional)",
"privateMaintenanceScreenTitle": "Pantalla de marcador de posición privada",
"privateMaintenanceScreenMessage": "Este dominio se está utilizando en un recurso privado. Conéctese usando el cliente Pangolin para acceder a este recurso.",
"privateMaintenanceScreenSteps": "Una vez conectado, si sigues viendo este mensaje, la caché de DNS de tu navegador puede seguir apuntando a la dirección antigua. Para solucionarlo: cierra por completo y vuelve a abrir esta pestaña o tu navegador, luego regresa a esta página.",
"maintenanceTime": "Ej., 2 horas, 1 de noviembre a las 5:00 PM",
"maintenanceEstimatedTimeDescription": "Cuando espera que el mantenimiento esté terminado",
"editDomain": "Editar dominio",
@@ -2632,5 +3047,209 @@
"approvalsEmptyStateStep2Title": "Habilitar aprobaciones de dispositivo",
"approvalsEmptyStateStep2Description": "Editar un rol y habilitar la opción 'Requerir aprobaciones de dispositivos'. Los usuarios con este rol necesitarán la aprobación del administrador para nuevos dispositivos.",
"approvalsEmptyStatePreviewDescription": "Vista previa: Cuando está habilitado, las solicitudes de dispositivo pendientes aparecerán aquí para su revisión",
"approvalsEmptyStateButtonText": "Administrar roles"
"approvalsEmptyStateButtonText": "Administrar roles",
"domainErrorTitle": "Estamos teniendo problemas para verificar su dominio",
"idpAdminAutoProvisionPoliciesTabHint": "Configure el mapeo de roles y las políticas de organización en la pestaña <policiesTabLink>Configuración de provisión automática</policiesTabLink>.",
"streamingTitle": "Transmisión de Eventos",
"streamingDescription": "Transmita eventos desde su organización a destinos externos en tiempo real.",
"streamingUnnamedDestination": "Destino sin nombre",
"streamingNoUrlConfigured": "No hay URL configurada",
"streamingAddDestination": "Añadir destino",
"streamingHttpWebhookTitle": "Webhook HTTP",
"streamingHttpWebhookDescription": "Enviar eventos a cualquier extremo HTTP con autenticación flexible y plantilla.",
"streamingS3Title": "Amazon S3",
"streamingS3Description": "Transmite eventos a un bucket de almacenamiento de objetos compatible con S3. Próximamente.",
"streamingDatadogTitle": "Datadog",
"streamingDatadogDescription": "Reenviar eventos directamente a tu cuenta de Datadog. Próximamente.",
"streamingTypePickerDescription": "Elija un tipo de destino para empezar.",
"streamingFailedToLoad": "Error al cargar destinos",
"streamingUnexpectedError": "Se ha producido un error inesperado.",
"streamingFailedToUpdate": "Error al actualizar destino",
"streamingDeletedSuccess": "Destino eliminado correctamente",
"streamingFailedToDelete": "Error al eliminar destino",
"streamingDeleteTitle": "Eliminar destino",
"streamingDeleteButtonText": "Eliminar destino",
"streamingDeleteDialogAreYouSure": "¿Está seguro que desea eliminar",
"streamingDeleteDialogThisDestination": "este destino",
"streamingDeleteDialogPermanentlyRemoved": "? Toda la configuración se eliminará permanentemente.",
"httpDestEditTitle": "Editar destino",
"httpDestAddTitle": "Añadir destino HTTP",
"httpDestEditDescription": "Actualizar la configuración para este destino de transmisión de eventos HTTP.",
"httpDestAddDescription": "Configure un nuevo extremo HTTP para recibir los eventos de su organización.",
"S3DestEditTitle": "Editar destino",
"S3DestAddTitle": "Añadir destino S3",
"S3DestEditDescription": "Actualice la configuración para este destino de transmisión de eventos S3.",
"S3DestAddDescription": "Configure un nuevo punto final S3 para recibir los eventos de su organización.",
"datadogDestEditTitle": "Editar destino",
"datadogDestAddTitle": "Añadir destino Datadog",
"datadogDestEditDescription": "Actualice la configuración para este destino de transmisión de eventos Datadog.",
"datadogDestAddDescription": "Configure un nuevo punto final de Datadog para recibir los eventos de su organización.",
"httpDestTabSettings": "Ajustes",
"httpDestTabHeaders": "Encabezados",
"httpDestTabBody": "Cuerpo",
"httpDestTabLogs": "Registros",
"httpDestNamePlaceholder": "Mi destino HTTP",
"httpDestUrlLabel": "URL de destino",
"httpDestUrlErrorHttpRequired": "URL debe usar http o https",
"httpDestUrlErrorHttpsRequired": "HTTPS es necesario en implementaciones en la nube",
"httpDestUrlErrorInvalid": "Introduzca una URL válida (ej. https://example.com/webhook)",
"httpDestAuthTitle": "Autenticación",
"httpDestAuthDescription": "Elija cómo están autenticadas las solicitudes en su punto final.",
"httpDestAuthNoneTitle": "Sin autenticación",
"httpDestAuthNoneDescription": "Envía solicitudes sin un encabezado de autorización.",
"httpDestAuthBearerTitle": "Tóken de portador",
"httpDestAuthBearerDescription": "Añade un encabezado Authorization: Bearer '<token>' a cada solicitud.",
"httpDestAuthBearerPlaceholder": "Tu clave o token API",
"httpDestAuthBasicTitle": "Auth Básica",
"httpDestAuthBasicDescription": "Añade un encabezado Authorization: Basic '<credenciales>'. Proporcione las credenciales como nombredeusuario:contraseña.",
"httpDestAuthBasicPlaceholder": "usuario:contraseña",
"httpDestAuthCustomTitle": "Cabecera personalizada",
"httpDestAuthCustomDescription": "Especifique un nombre de cabecera HTTP personalizado y un valor para la autenticación (por ejemplo, X-API-Key).",
"httpDestAuthCustomHeaderNamePlaceholder": "Nombre de cabecera (ej. X-API-Key)",
"httpDestAuthCustomHeaderValuePlaceholder": "Valor de cabecera",
"httpDestCustomHeadersTitle": "Cabeceras HTTP personalizadas",
"httpDestCustomHeadersDescription": "Añadir cabeceras personalizadas a cada petición saliente. Útil para tokens estáticos o un tipo de contenido personalizado. De forma predeterminada, Content Type: application/json es enviado.",
"httpDestNoHeadersConfigured": "No hay cabeceras personalizadas. Haga clic en \"Añadir cabecera\" para añadir una.",
"httpDestHeaderNamePlaceholder": "Nombre de cabecera",
"httpDestHeaderValuePlaceholder": "Valor",
"httpDestAddHeader": "Añadir cabecera",
"httpDestBodyTemplateTitle": "Plantilla de cuerpo personalizada",
"httpDestBodyTemplateDescription": "Controla la estructura de carga de JSON enviada a tu punto final. Si está desactivado, se envía un objeto JSON por defecto para cada evento.",
"httpDestEnableBodyTemplate": "Activar plantilla de cuerpo personalizado",
"httpDestBodyTemplateLabel": "Plantilla de cuerpo (JSON)",
"httpDestBodyTemplateHint": "Utilice variables de plantilla para referenciar los campos del evento en su carga útil.",
"httpDestPayloadFormatTitle": "Formato de carga",
"httpDestPayloadFormatDescription": "Cómo se serializan los eventos en cada cuerpo de solicitud.",
"httpDestFormatJsonArrayTitle": "Matriz JSON",
"httpDestFormatJsonArrayDescription": "Una petición por lote, cuerpo es una matriz JSON. Compatible con la mayoría de los webhooks y Datadog.",
"httpDestFormatNdjsonTitle": "NDJSON",
"httpDestFormatNdjsonDescription": "Una petición por lote, el cuerpo es JSON delimitado por línea - un objeto por línea, sin arrays externos. Requerido por Splunk HEC, Elastic / OpenSearch, y Grafana Loki.",
"httpDestFormatSingleTitle": "Un evento por solicitud",
"httpDestFormatSingleDescription": "Envía un HTTP POST separado para cada evento individual. Úsalo sólo para los extremos que no pueden manejar lotes.",
"httpDestLogTypesTitle": "Tipos de Log",
"httpDestLogTypesDescription": "Elija qué tipos de registro son reenviados a este destino. Sólo los tipos de registro habilitados serán transmitidos.",
"httpDestAccessLogsTitle": "Registros de acceso",
"httpDestAccessLogsDescription": "Intentos de acceso a recursos, incluyendo solicitudes autenticadas y denegadas.",
"httpDestActionLogsTitle": "Registros de acción",
"httpDestActionLogsDescription": "Acciones administrativas realizadas por los usuarios dentro de la organización.",
"httpDestConnectionLogsTitle": "Registros de conexión",
"httpDestConnectionLogsDescription": "Eventos de conexión de sitios y túneles, incluyendo conexiones y desconexiones.",
"httpDestRequestLogsTitle": "Registros de Solicitud HTTP",
"httpDestRequestLogsDescription": "Registros de peticiones HTTP para recursos proxyficados, incluyendo método, ruta y código de respuesta.",
"httpDestSaveChanges": "Guardar Cambios",
"httpDestCreateDestination": "Crear destino",
"httpDestUpdatedSuccess": "Destino actualizado correctamente",
"httpDestCreatedSuccess": "Destino creado correctamente",
"httpDestUpdateFailed": "Error al actualizar destino",
"httpDestCreateFailed": "Error al crear el destino",
"followRedirects": "Seguir redirecciones",
"followRedirectsDescription": "Seguir automáticamente las redirecciones HTTP para solicitudes.",
"alertingErrorWebhookUrl": "Por favor, introduzca una URL válida para el webhook.",
"healthCheckStrategyHttp": "Valida la conectividad y verifica el estado de respuesta HTTP.",
"healthCheckStrategyTcp": "Verifica la conectividad TCP solamente, sin inspeccionar la respuesta.",
"healthCheckStrategySnmp": "Realiza una solicitud SNMP get para verificar la salud de dispositivos y la infraestructura de red.",
"healthCheckStrategyIcmp": "Usa solicitudes de eco ICMP (pings) para verificar si un recurso es alcanzable y receptivo.",
"healthCheckTabStrategy": "Estrategia",
"healthCheckTabConnection": "Conexión",
"healthCheckTabAdvanced": "Avanzado",
"healthCheckStrategyNotAvailable": "Esta estrategia no está disponible. Contacte ventas para habilitar esta funcionalidad.",
"uptime30d": "Tiempo de actividad (30d)",
"idpAddActionCreateNew": "Crear nuevo proveedor de identidad",
"idpAddActionImportFromOrg": "Importar de otra organización",
"idpImportDialogTitle": "Importar Proveedor de Identidad",
"idpImportDialogDescription": "Elija un proveedor de identidad de una organización donde usted sea administrador. Se vinculará a esta organización.",
"idpImportSearchPlaceholder": "Buscar por nombre de organización o proveedor...",
"idpImportEmpty": "No se encontraron proveedores de identidad.",
"idpImportedDescription": "Proveedor de identidad importado con éxito.",
"idpDeleteGlobalQuestion": "¿Está seguro de que desea eliminar permanentemente este proveedor de identidad?",
"idpDeleteGlobalDescription": "Esto eliminará permanentemente el proveedor de identidad de todas las organizaciones con las que está asociado.",
"idpUnassociateTitle": "Desasociar Proveedor de Identidad",
"idpUnassociateQuestion": "¿Está seguro de que desea desasociar este proveedor de identidad de esta organización?",
"idpUnassociateDescription": "Todos los usuarios asociados con este proveedor de identidad serán eliminados de esta organización, pero el proveedor de identidad continuará existiendo para otras organizaciones asociadas.",
"idpUnassociateConfirm": "Confirme Desasociar Proveedor de Identidad",
"idpUnassociateWarning": "Esto no se puede deshacer para esta organización.",
"idpUnassociatedDescription": "Proveedor de identidad desasociado de esta organización con éxito",
"idpUnassociateMenu": "Desasociar",
"idpDeleteAllOrgsMenu": "Eliminar",
"publicIpEndpoint": "Punto final",
"lastTriggeredAt": "Último disparo",
"reject": "Rechazar",
"uptimeDaysAgo": "Hace {count} días",
"uptimeToday": "Hoy",
"uptimeNoDataAvailable": "No hay datos disponibles",
"uptimeSuffix": "disponibilidad",
"uptimeDowntimeSuffix": "tiempo de inactividad",
"uptimeTooltipUptimeLabel": "Disponibilidad",
"uptimeTooltipDowntimeLabel": "Tiempo de inactividad",
"uptimeOngoing": "en curso",
"uptimeNoMonitoringData": "No hay datos de monitoreo",
"uptimeNoData": "Sin datos",
"uptimeMiniBarDown": "Caído",
"uptimeSectionTitle": "Disponibilidad",
"uptimeSectionDescription": "Disponibilidad durante los últimos {days} días",
"uptimeAddAlert": "Agregar alerta",
"uptimeViewAlerts": "Ver alertas",
"uptimeCreateEmailAlert": "Crear alerta de correo electrónico",
"uptimeAlertDescriptionSite": "Recibe notificaciones por correo electrónico cuando este sitio esté fuera de línea o vuelva en línea.",
"uptimeAlertDescriptionResource": "Recibe notificaciones por correo electrónico cuando este recurso esté fuera de línea o vuelva en línea.",
"uptimeAlertNamePlaceholder": "Nombre de la alerta",
"uptimeAdditionalEmails": "Emails adicionales",
"uptimeCreateAlert": "Crear alerta",
"uptimeAlertNoRecipients": "Sin destinatarios",
"uptimeAlertNoRecipientsDescription": "Por favor, agrega al menos un usuario, rol o correo electrónico para notificación.",
"uptimeAlertCreated": "Alerta creada",
"uptimeAlertCreatedDescription": "Serás notificado cuando cambie de estado.",
"uptimeAlertCreateFailed": "Error al crear la alerta",
"webhookUrlLabel": "URL",
"webhookHeaderKeyPlaceholder": "Clave",
"webhookHeaderValuePlaceholder": "Valor",
"alertLabel": "Alerta",
"domainPickerWildcardSubdomainNotAllowed": "No se permiten subdominios comodín.",
"domainPickerWildcardCertWarning": "Los recursos comodín pueden requerir configuración adicional para funcionar correctamente.",
"domainPickerWildcardCertWarningLink": "Más información",
"health": "Salud",
"domainPendingErrorTitle": "Problema de verificación",
"memberPortalTitle": "Recursos",
"memberPortalDescription": "Recursos a los que tiene acceso en esta organización",
"memberPortalSortBy": "Ordenar por...",
"memberPortalSortNameAsc": "Nombre A-Z",
"memberPortalSortNameDesc": "Nombre Z-A",
"memberPortalSortDomainAsc": "Dominio A-Z",
"memberPortalSortDomainDesc": "Dominio Z-A",
"memberPortalSortEnabledFirst": "Habilitado Primero",
"memberPortalSortDisabledFirst": "Deshabilitado Primero",
"memberPortalRefresh": "Actualizar",
"memberPortalRefreshResources": "Actualizar Recursos",
"memberPortalFailedToLoad": "No se pudieron cargar los recursos",
"memberPortalFailedToLoadDescription": "No se pudieron cargar los recursos. Por favor, revise su conexión e intente de nuevo.",
"memberPortalUnableToLoad": "No se pudieron cargar los recursos",
"memberPortalTryAgain": "Intentar de Nuevo",
"memberPortalNoResourcesFound": "No se encontraron Recursos",
"memberPortalNoResourcesAvailable": "No Hay Recursos Disponibles",
"memberPortalNoResourcesMatchSearch": "No hay recursos que coincidan con \"{query}\". Intenta ajustar tus términos de búsqueda o limpiar la búsqueda para ver todos los recursos.",
"memberPortalNoResourcesAccess": "Aún no tiene acceso a ningún recurso. Comuníquese con su administrador para obtener acceso a los recursos que necesita.",
"memberPortalClearSearch": "Limpiar Búsqueda",
"memberPortalPublicResources": "Recursos Públicos",
"memberPortalPublicResourcesDescription": "Aplicaciones web y servicios accesibles vía navegador",
"memberPortalCopiedToClipboard": "Copiado al portapapeles",
"memberPortalCopiedUrlDescription": "La URL del recurso ha sido copiada a su portapapeles.",
"memberPortalOpenResource": "Abrir Recurso",
"memberPortalPrivateResources": "Recursos Privados",
"memberPortalPrivateResourcesDescription": "Recursos de red interna accesibles vía cliente",
"memberPortalResourceDetails": "Detalles del Recurso",
"memberPortalMode": "Modo",
"memberPortalDestination": "Destino",
"memberPortalAlias": "Alias",
"memberPortalCopiedAliasDescription": "El alias del recurso ha sido copiado a su portapapeles.",
"memberPortalCopiedDestinationDescription": "El destino del recurso ha sido copiado a su portapapeles.",
"memberPortalRequiresClientConnection": "Requiere Conexión de Cliente",
"memberPortalAuthMethods": "Métodos de Autenticación",
"memberPortalSso": "Inicio de Sesión Único (SSO)",
"memberPortalPasswordProtected": "Protegido por Contraseña",
"memberPortalPinCode": "Código PIN",
"memberPortalEmailWhitelist": "Lista Blanca de Correo",
"memberPortalResourceDisabled": "Recurso Deshabilitado",
"memberPortalShowingResources": "Mostrando {start}-{end} de {total} recursos",
"memberPortalPrevious": "Anterior",
"memberPortalNext": "Siguiente"
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,8 @@
{
"contactSalesEnable": "이 기능을 활성화하려면 영업팀에 연락하세요.",
"contactSalesBookDemo": "데모 예약하기",
"contactSalesOr": "또는",
"contactSalesContactUs": "문의하기",
"setupCreate": "조직, 사이트 및 리소스를 생성합니다.",
"headerAuthCompatibilityInfo": "인증 토큰이 없을 때 401 Unauthorized 응답을 강제하도록 설정합니다. 서버 챌린지 없이 자격 증명을 제공하지 않는 브라우저나 특정 HTTP 라이브러리에 필요합니다.",
"headerAuthCompatibility": "확장된 호환성",
@@ -19,6 +23,18 @@
"componentsInvalidKey": "유효하지 않거나 만료된 라이센스 키가 감지되었습니다. 모든 기능을 계속 사용하려면 라이센스 조건을 따르십시오.",
"dismiss": "해제",
"subscriptionViolationMessage": "현재 계획의 한계를 초과했습니다. 사이트, 사용자 또는 기타 리소스를 제거하여 계획 내에 머물도록 해결하세요.",
"trialBannerMessage": "시험 사용 기간이 {countdown} 안에 만료됩니다. 업그레이드하여 액세스를 유지하세요.",
"trialBannerExpired": "시험 사용 기간이 만료되었습니다. 지금 업그레이드하여 액세스를 복구하세요.",
"billingTrialBannerTitle": "무료 평가판 활성화",
"billingTrialBannerDescription": "현재 비즈니스 티어의 무료 평가판을 사용 중입니다. 평가판이 종료되면 계정은 자동으로 기본 티어 기능 및 제한으로 돌아갑니다. 현재 계획의 기능을 유지하려면 언제든지 업그레이드 하세요.",
"billingTrialBannerUpgrade": "지금 업그레이드",
"billingTrialBadge": "무료 평가판",
"trialActive": "무료 체험 활성화됨",
"trialExpired": "체험 만료됨",
"trialHasEnded": "시험 사용 기간이 종료되었습니다.",
"trialDaysRemaining": "{count, plural, other {#일 남음}}",
"trialDaysLeftShort": "시험 사용 기간 종료까지 {days}일 남음",
"trialGoToBilling": "청구 페이지로 이동",
"subscriptionViolationViewBilling": "청구 보기",
"componentsLicenseViolation": "라이센스 위반: 이 서버는 {usedSites} 사이트를 사용하고 있으며, 이는 {maxSites} 사이트의 라이센스 한도를 초과합니다. 모든 기능을 계속 사용하려면 라이센스 조건을 따르십시오.",
"componentsSupporterMessage": "{tier}로 판골린을 지원해 주셔서 감사합니다!",
@@ -81,6 +97,8 @@
"siteConfirmCopy": "구성을 복사했습니다.",
"searchSitesProgress": "사이트 검색...",
"siteAdd": "사이트 추가",
"sitesTableViewPublicResources": "공용 리소스 보기",
"sitesTableViewPrivateResources": "개인 리소스 보기",
"siteInstallNewt": "Newt 설치",
"siteInstallNewtDescription": "시스템에서 Newt 실행하기",
"WgConfiguration": "WireGuard 구성",
@@ -98,6 +116,21 @@
"siteUpdatedDescription": "사이트가 업데이트되었습니다.",
"siteGeneralDescription": "이 사이트에 대한 일반 설정을 구성하세요.",
"siteSettingDescription": "사이트에서 설정을 구성하세요.",
"siteResourcesTab": "리소스",
"siteResourcesNoneOnSite": "이 사이트에는 아직 공용 또는 개인 리소스가 없습니다.",
"siteResourcesSectionPublic": "공용 리소스",
"siteResourcesSectionPrivate": "개인 리소스",
"siteResourcesSectionPublicDescription": "도메인이나 포트를 통해 외부에 노출되는 리소스.",
"siteResourcesSectionPrivateDescription": "사이트를 통해 개인 네트워크에서 사용할 수 있는 리소스.",
"siteResourcesViewAllPublic": "모든 리소스 보기",
"siteResourcesViewAllPrivate": "모든 리소스 보기",
"siteResourcesDialogDescription": "이 사이트와 연관된 공용 및 개인 리소스의 개요.",
"siteResourcesShowMore": "더 보기",
"siteResourcesPermissionDenied": "이 리소스를 나열할 권한이 없습니다.",
"siteResourcesEmptyPublic": "이 사이트에는 아직 대상 공용 리소스가 없습니다.",
"siteResourcesEmptyPrivate": "이 사이트와 연결된 개인 리소스가 아직 없습니다.",
"siteResourcesHowToAccess": "액세스 방법",
"siteResourcesTargetsOnSite": "이 사이트의 대상",
"siteSetting": "{siteName} 설정",
"siteNewtTunnel": "뉴트 사이트 (추천)",
"siteNewtTunnelDescription": "네트워크의 진입점을 생성하는 가장 쉬운 방법입니다. 추가 설정이 필요 없습니다.",
@@ -148,6 +181,11 @@
"createLink": "링크 생성",
"resourcesNotFound": "리소스가 발견되지 않았습니다.",
"resourceSearch": "리소스 검색",
"machineSearch": "기계 검색",
"machinesSearch": "기계 클라이언트 검색...",
"machineNotFound": "기계를 찾을 수 없습니다",
"userDeviceSearch": "사용자 장치 검색",
"userDevicesSearch": "사용자 장치 검색...",
"openMenu": "메뉴 열기",
"resource": "리소스",
"title": "제목",
@@ -175,6 +213,7 @@
"resourceHTTPDescription": "완전한 도메인 이름을 사용해 RAW 또는 HTTPS로 프록시 요청을 수행합니다.",
"resourceRaw": "원시 TCP/UDP 리소스",
"resourceRawDescription": "포트 번호를 사용하여 RAW TCP/UDP로 요청을 프록시합니다.",
"resourceRawDescriptionCloud": "포트 번호를 사용하여 원격 노드에 연결해야 합니다. 원격 노드에서 리소스를 사용하려면 사용자 지정 도메인을 사용하십시오.",
"resourceCreate": "리소스 생성",
"resourceCreateDescription": "아래 단계를 따라 새 리소스를 생성하세요.",
"resourceSeeAll": "모든 리소스 보기",
@@ -261,8 +300,11 @@
"orgMissing": "조직 ID가 누락되었습니다",
"orgMissingMessage": "조직 ID 없이 초대장을 재생성할 수 없습니다.",
"accessUsersManage": "사용자 관리",
"accessUserManage": "사용자 관리",
"accessUsersDescription": "이 조직에 액세스할 사용자 초대 및 관리",
"accessUsersSearch": "사용자 검색...",
"accessUsersRoleFilterCount": "{count, plural, other {# 역할}}",
"accessUsersRoleFilterClear": "역할 필터 지우기",
"accessUserCreate": "사용자 생성",
"accessUserRemove": "사용자 제거",
"username": "사용자 이름",
@@ -322,6 +364,54 @@
"apiKeysDelete": "API 키 삭제",
"apiKeysManage": "API 키 관리",
"apiKeysDescription": "API 키는 통합 API와 인증하는 데 사용됩니다.",
"provisioningKeysTitle": "프로비저닝 키",
"provisioningKeysManage": "프로비저닝 키 관리",
"provisioningKeysDescription": "프로비저닝 키는 조직의 자동 사이트 프로비저닝 인증에 사용됩니다.",
"provisioningManage": "프로비저닝",
"provisioningDescription": "프로비저닝 키를 관리하고 승인을 기다리는 사이트를 검토합니다.",
"pendingSites": "대기중인 사이트",
"siteApproveSuccess": "사이트가 성공적으로 승인되었습니다",
"siteApproveError": "사이트 승인 오류",
"provisioningKeys": "프로비저닝 키",
"searchProvisioningKeys": "프로비저닝 키 검색...",
"provisioningKeysAdd": "프로비저닝 키 생성",
"provisioningKeysErrorDelete": "프로비저닝 키 삭제 오류",
"provisioningKeysErrorDeleteMessage": "프로비저닝 키 삭제 오류",
"provisioningKeysQuestionRemove": "이 프로비저닝 키를 조직에서 제거하시겠습니까?",
"provisioningKeysMessageRemove": "제거 후에는 이 키를 사이트 프로비저닝에 사용할 수 없습니다.",
"provisioningKeysDeleteConfirm": "프로비저닝 키 삭제 확인",
"provisioningKeysDelete": "프로비저닝 키 삭제",
"provisioningKeysCreate": "프로비저닝 키 생성",
"provisioningKeysCreateDescription": "조직을 위한 새로운 프로비저닝 키 생성",
"provisioningKeysSeeAll": "모든 프로비저닝 키 보기",
"provisioningKeysSave": "프로비저닝 키 저장",
"provisioningKeysSaveDescription": "이것은 한 번만 볼 수 있습니다. 안전한 장소에 복사해 두세요.",
"provisioningKeysErrorCreate": "프로비저닝 키 생성 오류",
"provisioningKeysList": "새 프로비저닝 키",
"provisioningKeysMaxBatchSize": "최대 배치 크기",
"provisioningKeysUnlimitedBatchSize": "무제한 배치 크기 (제한 없음)",
"provisioningKeysMaxBatchUnlimited": "무제한",
"provisioningKeysMaxBatchSizeInvalid": "유효한 최대 배치 크기를 입력하세요 (11,000,000).",
"provisioningKeysValidUntil": "유효 기간",
"provisioningKeysValidUntilHint": "만료 날짜를 설정하지 않을 경우 빈칸으로 남겨 두세요.",
"provisioningKeysValidUntilInvalid": "유효한 날짜와 시간을 입력하세요.",
"provisioningKeysNumUsed": "사용 횟수",
"provisioningKeysLastUsed": "마지막 사용",
"provisioningKeysNoExpiry": "만료 없음",
"provisioningKeysNeverUsed": "절대",
"provisioningKeysEdit": "프로비저닝 키 수정",
"provisioningKeysEditDescription": "이 키의 최대 배치 크기 및 만료 시간을 업데이트하세요.",
"provisioningKeysApproveNewSites": "새로운 사이트 승인",
"provisioningKeysApproveNewSitesDescription": "이 키를 등록하는 사이트를 자동으로 승인합니다.",
"provisioningKeysUpdateError": "프로비저닝 키 업데이트 오류",
"provisioningKeysUpdated": "프로비저닝 키가 업데이트되었습니다",
"provisioningKeysUpdatedDescription": "변경 사항이 저장되었습니다.",
"provisioningKeysBannerTitle": "사이트 프로비저닝 키",
"provisioningKeysBannerDescription": "프로비저닝 키를 생성하고 Newt 커넥터와 함께 사용하여 첫 시작 시 사이트를 자동 생성 - 각 사이트에 대한 별도 자격 증명이 필요 없습니다.",
"provisioningKeysBannerButtonText": "자세히 알아보기",
"pendingSitesBannerTitle": "대기중인 사이트",
"pendingSitesBannerDescription": "프로비저닝 키를 사용하여 연결된 사이트가 검토를 위해 여기에 표시됩니다.",
"pendingSitesBannerButtonText": "자세히 알아보기",
"apiKeysSettings": "{apiKeyName} 설정",
"userTitle": "모든 사용자 관리",
"userDescription": "시스템의 모든 사용자를 보고 관리합니다",
@@ -351,6 +441,10 @@
"licenseErrorKeyActivate": "라이센스 키 활성화에 실패했습니다.",
"licenseErrorKeyActivateDescription": "라이센스 키를 활성화하는 동안 오류가 발생했습니다",
"licenseAbout": "라이센스에 대한 정보",
"licenseBannerTitle": "기업 라이선스 활성화",
"licenseBannerDescription": "자체 호스팅된 Pangolin 인스턴스에서 기업 기능을 잠금 해제하십시오. 라이선스 키를 구입하여 프리미엄 기능을 활성화하고 아래에 추가하십시오.",
"licenseBannerGetLicense": "라이선스 획득",
"licenseBannerViewDocs": "문서 보기",
"communityEdition": "커뮤니티 에디션",
"licenseAboutDescription": "이것은 상업적 환경에서 Pangolin을 사용하는 비즈니스 및 기업 사용자용입니다. 개인 용도로 Pangolin을 사용하는 경우 이 섹션을 무시할 수 있습니다.",
"licenseKeyActivated": "라이센스 키가 활성화되었습니다",
@@ -508,9 +602,12 @@
"userSaved": "사용자 저장됨",
"userSavedDescription": "사용자가 업데이트되었습니다.",
"autoProvisioned": "자동 프로비저닝됨",
"autoProvisionSettings": "자동 프로비저닝 설정",
"autoProvisionedDescription": "이 사용자가 ID 공급자에 의해 자동으로 관리될 수 있도록 허용합니다",
"accessControlsDescription": "이 사용자가 조직에서 접근하고 수행할 수 있는 작업을 관리하세요",
"accessControlsSubmit": "접근 제어 저장",
"singleRolePerUserPlanNotice": "계획에는 사용자당 한 가지 역할만 지원됩니다.",
"singleRolePerUserEditionNotice": "이 판에는 사용자당 한 가지 역할만 지원됩니다.",
"roles": "역할",
"accessUsersRoles": "사용자 및 역할 관리",
"accessUsersRolesDescription": "사용자를 초대하고 역할에 추가하여 조직에 대한 접근을 관리하세요",
@@ -567,6 +664,8 @@
"targetErrorInvalidPortDescription": "유효한 포트 번호를 입력하세요.",
"targetErrorNoSite": "선택된 사이트 없음",
"targetErrorNoSiteDescription": "대상을 위해 사이트를 선택하세요.",
"targetTargetsCleared": "대상이 제거됨",
"targetTargetsClearedDescription": "이 리소스에서 모든 대상이 제거되었습니다",
"targetCreated": "대상 생성",
"targetCreatedDescription": "대상이 성공적으로 생성되었습니다.",
"targetErrorCreate": "대상 생성 실패",
@@ -650,6 +749,7 @@
"resourcesErrorUpdate": "리소스를 전환하는 데 실패했습니다.",
"resourcesErrorUpdateDescription": "리소스를 업데이트하는 동안 오류가 발생했습니다.",
"access": "접속",
"accessControl": "액세스 제어",
"shareLink": "{resource} 공유 링크",
"resourceSelect": "리소스 선택",
"shareLinks": "공유 링크",
@@ -667,6 +767,7 @@
"newtEndpoint": "엔드포인트",
"newtId": "ID",
"newtSecretKey": "비밀",
"newtVersion": "버전",
"architecture": "아키텍처",
"sites": "사이트",
"siteWgAnyClients": "WireGuard 클라이언트를 사용하여 연결하십시오. 피어 IP를 사용하여 내부 리소스에 접근해야 합니다.",
@@ -790,6 +891,7 @@
"accessRoleRemoved": "역할이 제거되었습니다",
"accessRoleRemovedDescription": "역할이 성공적으로 제거되었습니다.",
"accessRoleRequiredRemove": "이 역할을 삭제하기 전에 기존 구성원을 전송할 새 역할을 선택하세요.",
"network": "네트워크",
"manage": "관리",
"sitesNotFound": "사이트를 찾을 수 없습니다.",
"pangolinServerAdmin": "서버 관리자 - 판골린",
@@ -833,6 +935,7 @@
"idpDisplayName": "이 신원 공급자를 위한 표시 이름",
"idpAutoProvisionUsers": "사용자 자동 프로비저닝",
"idpAutoProvisionUsersDescription": "활성화되면 사용자가 첫 로그인 시 시스템에 자동으로 생성되며, 사용자와 역할 및 조직을 매핑할 수 있습니다.",
"idpAutoProvisionConfigureAfterCreate": "아이덴티티 공급자가 생성되면 자동 프로비저닝 설정을 구성할 수 있습니다.",
"licenseBadge": "EE",
"idpType": "제공자 유형",
"idpTypeDescription": "구성할 ID 공급자의 유형을 선택하십시오.",
@@ -884,7 +987,7 @@
"defaultMappingsRole": "기본 역할 매핑",
"defaultMappingsRoleDescription": "이 표현식의 결과는 조직에서 정의된 역할 이름을 문자열로 반환해야 합니다.",
"defaultMappingsOrg": "기본 조직 매핑",
"defaultMappingsOrgDescription": "이 표현식은 사용자가 조직에 접근할 수 있도록 조직 ID 또는 true를 반환해야 합니다.",
"defaultMappingsOrgDescription": "이 표현식은 사용자가 조직에 접근할 수 있도록 조직 ID 또는 true를 반환해야 합니다. 설정되지 않으면, 역할 매핑 정의가 충분합니다: 사용자는 유효한 역할 매핑이 해석되는 한 조직에 허용됩니다.",
"defaultMappingsSubmit": "기본 매핑 저장",
"orgPoliciesEdit": "조직 정책 편집",
"org": "조직",
@@ -1037,7 +1140,6 @@
"pageNotFoundDescription": "앗! 찾고 있는 페이지가 존재하지 않습니다.",
"overview": "개요",
"home": "홈",
"accessControl": "액세스 제어",
"settings": "설정",
"usersAll": "모든 사용자",
"license": "라이선스",
@@ -1100,6 +1202,12 @@
"actionGetUser": "사용자 조회",
"actionGetOrgUser": "조직 사용자 가져오기",
"actionListOrgDomains": "조직 도메인 목록",
"actionGetDomain": "도메인 가져오기",
"actionCreateOrgDomain": "도메인 생성",
"actionUpdateOrgDomain": "도메인 업데이트",
"actionDeleteOrgDomain": "도메인 삭제",
"actionGetDNSRecords": "DNS 레코드 가져오기",
"actionRestartOrgDomain": "도메인 재시작",
"actionCreateSite": "사이트 생성",
"actionDeleteSite": "사이트 삭제",
"actionGetSite": "사이트 가져오기",
@@ -1111,6 +1219,7 @@
"setupTokenDescription": "서버 콘솔에서 설정 토큰 입력.",
"setupTokenRequired": "설정 토큰이 필요합니다",
"actionUpdateSite": "사이트 업데이트",
"actionResetSiteBandwidth": "조직 대역폭 재설정",
"actionListSiteRoles": "허용된 사이트 역할 목록",
"actionCreateResource": "리소스 생성",
"actionDeleteResource": "리소스 삭제",
@@ -1140,6 +1249,7 @@
"actionRemoveUser": "사용자 제거",
"actionListUsers": "사용자 목록",
"actionAddUserRole": "사용자 역할 추가",
"actionSetUserOrgRoles": "사용자 역할 설정",
"actionGenerateAccessToken": "액세스 토큰 생성",
"actionDeleteAccessToken": "액세스 토큰 삭제",
"actionListAccessTokens": "액세스 토큰 목록",
@@ -1184,6 +1294,7 @@
"actionViewLogs": "로그 보기",
"noneSelected": "선택된 항목 없음",
"orgNotFound2": "조직이 없습니다.",
"search": "검색…",
"searchPlaceholder": "검색...",
"emptySearchOptions": "옵션이 없습니다",
"create": "생성",
@@ -1249,12 +1360,14 @@
"sidebarClientResources": "비공개",
"sidebarAccessControl": "액세스 제어",
"sidebarLogsAndAnalytics": "로그 및 분석",
"sidebarTeam": "팀",
"sidebarUsers": "사용자",
"sidebarAdmin": "관리자",
"sidebarInvitations": "초대",
"sidebarRoles": "역할",
"sidebarShareableLinks": "링크",
"sidebarApiKeys": "API 키",
"sidebarProvisioning": "프로비저닝",
"sidebarSettings": "설정",
"sidebarAllUsers": "모든 사용자",
"sidebarIdentityProviders": "신원 공급자",
@@ -1266,9 +1379,167 @@
"sidebarGeneral": "관리",
"sidebarLogAndAnalytics": "로그 & 통계",
"sidebarBluePrints": "청사진",
"sidebarAlerting": "알림",
"sidebarHealthChecks": "상태 확인",
"sidebarOrganization": "조직",
"sidebarManagement": "관리",
"sidebarBillingAndLicenses": "결제 및 라이선스",
"sidebarLogsAnalytics": "분석",
"alertingTitle": "알림",
"alertingDescription": "알림에 대한 소스, 트리거 및 작업 정의",
"alertingRules": "알림 규칙",
"alertingSearchRules": "규칙 검색…",
"alertingAddRule": "규칙 생성",
"alertingColumnSource": "소스",
"alertingColumnTrigger": "트리거",
"alertingColumnActions": "작업",
"alertingColumnEnabled": "활성화됨",
"alertingDeleteQuestion": "이 알림 규칙을 삭제하겠습니까.",
"alertingDeleteRule": "알림 규칙 삭제",
"alertingRuleDeleted": "알림 규칙 삭제됨",
"alertingRuleSaved": "알림 규칙 저장됨",
"alertingRuleSavedCreatedDescription": "새 알림 규칙이 생성되었습니다. 이 페이지에서 계속 편집할 수 있습니다.",
"alertingRuleSavedUpdatedDescription": "이 알림 규칙에 대한 변경 사항이 저장되었습니다.",
"alertingEditRule": "알림 규칙 편집",
"alertingCreateRule": "알림 규칙 생성",
"alertingRuleCredenzaDescription": "무엇을 감시할지, 언제 알릴지, 어떻게 알릴지를 선택하세요.",
"alertingRuleNamePlaceholder": "프로덕션 사이트 중단",
"alertingRuleEnabled": "규칙 활성화됨",
"alertingSectionSource": "소스",
"alertingSourceType": "소스 유형",
"alertingSourceSite": "사이트",
"alertingSourceHealthCheck": "상태 확인",
"alertingPickSites": "사이트들",
"alertingPickHealthChecks": "상태 확인들",
"alertingPickResources": "리소스들",
"alertingAllSites": "모든 사이트",
"alertingAllSitesDescription": "모든 사이트에서 알림 발동",
"alertingSpecificSites": "특정 사이트",
"alertingSpecificSitesDescription": "감시할 특정 사이트를 선택하세요",
"alertingAllHealthChecks": "모든 상태 확인",
"alertingAllHealthChecksDescription": "모든 상태 확인에 대한 알림 발동",
"alertingSpecificHealthChecks": "특정 상태 확인",
"alertingSpecificHealthChecksDescription": "감시할 특정 상태 확인을 선택하세요",
"alertingAllResources": "모든 리소스",
"alertingAllResourcesDescription": "모든 리소스에 대한 알림 발동",
"alertingSpecificResources": "특정 리소스",
"alertingSpecificResourcesDescription": "감시할 특정 리소스를 선택하세요",
"alertingSelectResources": "리소스 선택…",
"alertingResourcesSelected": "{count}개의 리소스 선택됨",
"alertingResourcesEmpty": "앞 10개의 결과에서 타겟이 있는 리소스 없음.",
"alertingSectionTrigger": "트리거",
"alertingTrigger": "언제 알림을 받을지",
"alertingTriggerSiteOnline": "사이트 온라인",
"alertingTriggerSiteOffline": "사이트 오프라인",
"alertingTriggerSiteToggle": "사이트 상태 변경",
"alertingTriggerHcHealthy": "상태 확인 정상",
"alertingTriggerHcUnhealthy": "상태 확인 비정상",
"alertingTriggerHcToggle": "상태 확인 상태 변경",
"alertingTriggerResourceHealthy": "리소스 정상",
"alertingTriggerResourceUnhealthy": "리소스 비정상",
"alertingTriggerResourceDegraded": "리소스 열화",
"alertingSearchHealthChecks": "상태 확인 검색…",
"alertingHealthChecksEmpty": "사용 가능한 상태 확인이 없습니다.",
"alertingTriggerResourceToggle": "리소스 상태 변경",
"alertingSourceResource": "리소스",
"alertingSectionActions": "작업",
"alertingAddAction": "작업 추가",
"alertingActionNotify": "이메일",
"alertingActionNotifyDescription": "사용자 또는 역할에게 이메일 알림 전송",
"alertingActionWebhook": "웹훅",
"alertingActionWebhookDescription": "사용자 정의 엔드포인트로 HTTP 요청 보내기",
"alertingExternalIntegration": "외부 통합",
"alertingExternalPagerDutyDescription": "사고 관리를 위해 PagerDuty에 알림 보내기",
"alertingExternalOpsgenieDescription": "대기 중인 관리자로 Opsgenie에 알림 보내기",
"alertingExternalServiceNowDescription": "알림 이벤트로 ServiceNow 사고 생성",
"alertingExternalIncidentIoDescription": "알림 이벤트로 Incident.io 워크플로우 트리거",
"alertingActionType": "작업 유형",
"alertingNotifyUsers": "사용자들",
"alertingNotifyRoles": "역할들",
"alertingNotifyEmails": "이메일 주소들",
"alertingEmailPlaceholder": "이메일 추가 후 Enter 키를 누르세요",
"alertingWebhookMethod": "HTTP 메소드",
"alertingWebhookSecret": "서명 비밀 (선택 사항)",
"alertingWebhookSecretPlaceholder": "HMAC 비밀",
"alertingWebhookHeaders": "헤더들",
"alertingAddHeader": "헤더 추가",
"alertingSelectSites": "사이트 선택…",
"alertingSitesSelected": "{count}개의 사이트 선택됨",
"alertingSelectHealthChecks": "상태 확인 선택…",
"alertingHealthChecksSelected": "{count}개의 상태 확인 선택됨",
"alertingNoHealthChecks": "활성화된 상태 확인이 있는 타겟 없음",
"alertingHealthCheckStub": "상태 확인 소스 선택은 아직 연결되지 않았습니다 - 트리거 및 작업을 계속 구성할 수 있습니다.",
"alertingSelectUsers": "사용자 선택…",
"alertingUsersSelected": "{count}명의 사용자 선택됨",
"alertingSelectRoles": "역할 선택…",
"alertingRolesSelected": "{count}개의 역할 선택됨",
"alertingSummarySites": "사이트 ({count})",
"alertingSummaryAllSites": "모든 사이트",
"alertingSummaryHealthChecks": "상태 확인 ({count})",
"alertingSummaryAllHealthChecks": "모든 상태 확인",
"alertingSummaryResources": "리소스 ({count})",
"alertingSummaryAllResources": "모든 리소스",
"alertingErrorNameRequired": "이름을 입력하세요",
"alertingErrorActionsMin": "최소한 하나의 작업 추가",
"alertingErrorPickSites": "최소한 하나의 사이트 선택",
"alertingErrorPickHealthChecks": "최소한 하나의 상태 확인 선택",
"alertingErrorPickResources": "최소한 하나의 리소스 선택",
"alertingErrorTriggerSite": "사이트 트리거 선택",
"alertingErrorTriggerHealth": "상태 확인 트리거 선택",
"alertingErrorTriggerResource": "리소스 트리거 선택",
"alertingErrorNotifyRecipients": "사용자, 역할 또는 최소 하나의 이메일 선택",
"alertingConfigureSource": "소스 구성",
"alertingConfigureTrigger": "트리거 구성",
"alertingConfigureActions": "작업 구성",
"alertingBackToRules": "규칙으로 돌아가기",
"alertingRuleCooldown": "냉각 시간 (초)",
"alertingRuleCooldownDescription": "같은 규칙에 대해 반복된 알림 사이의 최소 시간. 매번 발생하려면 0으로 설정하세요.",
"alertingDraftBadge": "초안 - 이 규칙을 저장하려면 저장",
"alertingSidebarHint": "여기에서 편집하려면 캔버스의 단계를 클릭하세요.",
"alertingGraphCanvasTitle": "규칙 흐름",
"alertingGraphCanvasDescription": "소스, 트리거 및 작업의 시각적 개요입니다. 노드를 선택하여 패널에서 수정할 수 있습니다.",
"alertingNodeNotConfigured": "아직 구성되지 않음",
"alertingNodeActionsCount": "{count, plural, other {# 작업}}",
"alertingNodeRoleSource": "소스",
"alertingNodeRoleTrigger": "트리거",
"alertingNodeRoleAction": "작업",
"alertingTabRules": "알림 규칙",
"alertingTabHealthChecks": "상태 확인",
"alertingRulesBannerTitle": "알림 받기",
"alertingRulesBannerDescription": "각 규칙은 무엇을 감시할지(사이트, 상태 확인, 리소스), 언제 발동할지(예: 오프라인 또는 비정상), 이메일, 웹훅 또는 통합을 통해 팀에 어떻게 알릴지를 연결합니다. 이 목록을 사용하여 규칙을 생성, 활성화 및 관리하세요.",
"alertingHealthChecksBannerTitle": "건강 및 리소스 모니터링",
"alertingHealthChecksBannerDescription": "상태 확인은 한 번 정의한 HTTP 또는 TCP 모니터링입니다. 그런 다음 이를 알림 규칙의 소스로 사용하여 타겟이 정상 또는 비정상이 되었을 때 알림을 받을 수 있습니다. 리소스의 상태 확인도 여기에 나타납니다.",
"standaloneHcTableTitle": "상태 확인",
"standaloneHcSearchPlaceholder": "상태 확인 검색…",
"standaloneHcAddButton": "상태 확인 생성",
"standaloneHcCreateTitle": "상태 확인 생성",
"standaloneHcEditTitle": "상태 확인 편집",
"standaloneHcDescription": "알림 규칙에 사용할 HTTP 또는 TCP 상태 확인을 구성하세요.",
"standaloneHcNameLabel": "이름",
"standaloneHcNamePlaceholder": "나의 HTTP 모니터",
"standaloneHcDeleteTitle": "상태 확인 삭제",
"standaloneHcDeleteQuestion": "이 상태 확인을 삭제하겠습니까.",
"standaloneHcDeleted": "상태 확인 삭제됨",
"standaloneHcSaved": "상태 확인 저장됨",
"standaloneHcColumnHealth": "건강",
"standaloneHcColumnMode": "모드",
"standaloneHcColumnTarget": "타겟",
"standaloneHcHealthStateHealthy": "정상",
"standaloneHcHealthStateUnhealthy": "비정상",
"standaloneHcHealthStateUnknown": "알 수 없음",
"standaloneHcFilterAnySite": "모든 사이트",
"standaloneHcFilterAnyResource": "모든 리소스",
"standaloneHcFilterMode": "모드",
"standaloneHcFilterModeHttp": "HTTP",
"standaloneHcFilterModeTcp": "TCP",
"standaloneHcFilterModeSnmp": "SNMP",
"standaloneHcFilterModePing": "핑",
"standaloneHcFilterHealth": "건강",
"standaloneHcFilterEnabled": "활성화됨",
"standaloneHcFilterEnabledOn": "활성화됨",
"standaloneHcFilterEnabledOff": "비활성화됨",
"standaloneHcFilterSiteIdFallback": "사이트 {id}",
"standaloneHcFilterResourceIdFallback": "리소스 {id}",
"blueprints": "청사진",
"blueprintsDescription": "선언적 구성을 적용하고 이전 실행을 봅니다",
"blueprintAdd": "청사진 추가",
@@ -1289,7 +1560,6 @@
"parsedContents": "구문 분석된 콘텐츠 (읽기 전용)",
"enableDockerSocket": "Docker 청사진 활성화",
"enableDockerSocketDescription": "블루프린트 레이블을 위한 Docker 소켓 레이블 수집을 활성화합니다. 소켓 경로는 Newt에 제공되어야 합니다.",
"enableDockerSocketLink": "자세히 알아보기",
"viewDockerContainers": "도커 컨테이너 보기",
"containersIn": "{siteName}의 컨테이너",
"selectContainerDescription": "이 대상을 위한 호스트 이름으로 사용할 컨테이너를 선택하세요. 포트를 사용하려면 포트를 클릭하세요.",
@@ -1331,7 +1601,8 @@
"initialSetupDescription": "초기 서버 관리자 계정을 생성하세요. 서버 관리자 계정은 하나만 존재할 수 있습니다. 이러한 자격 증명은 나중에 언제든지 변경할 수 있습니다.",
"createAdminAccount": "관리자 계정 생성",
"setupErrorCreateAdmin": "서버 관리자 계정을 생성하는 동안 오류가 발생했습니다.",
"certificateStatus": "인증서 상태",
"certificateStatus": "인증서",
"certificateStatusAutoRefreshHint": "상태가 자동으로 새로 고쳐집니다.",
"loading": "로딩 중",
"loadingAnalytics": "분석 로딩 중",
"restart": "재시작",
@@ -1400,6 +1671,7 @@
"pangolinUpdateAvailableReleaseNotes": "릴리스 노트 보기",
"newtUpdateAvailable": "업데이트 가능",
"newtUpdateAvailableInfo": "뉴트의 새 버전이 출시되었습니다. 최상의 경험을 위해 최신 버전으로 업데이트하세요.",
"pangolinNodeUpdateAvailableInfo": "Pangolin Node의 새 버전이 출시되었습니다. 최상의 경험을 위해 최신 버전으로 업데이트하세요.",
"domainPickerEnterDomain": "도메인",
"domainPickerPlaceholder": "myapp.example.com",
"domainPickerDescription": "리소스의 전체 도메인을 입력하여 사용 가능한 옵션을 확인하십시오.",
@@ -1417,6 +1689,7 @@
"domainPickerNamespace": "이름 공간: {namespace}",
"domainPickerShowMore": "더보기",
"regionSelectorTitle": "지역 선택",
"domainPickerRemoteExitNodeWarning": "제공된 도메인은 원격 종료 노드에 연결된 사이트에서 지원되지 않습니다. 원격 노드에서 리소스를 사용하려면 사용자 지정 도메인을 사용하십시오.",
"regionSelectorInfo": "지역을 선택하면 위치에 따라 더 나은 성능이 제공됩니다. 서버와 같은 지역에 있을 필요는 없습니다.",
"regionSelectorPlaceholder": "지역 선택",
"regionSelectorComingSoon": "곧 출시 예정",
@@ -1570,6 +1843,16 @@
"billingFeatureLossWarning": "기능 가용성 알림",
"billingFeatureLossDescription": "다운그레이드함으로써 새 계획에서 사용할 수 없는 기능은 자동으로 비활성화됩니다. 일부 설정 및 구성은 손실될 수 있습니다. 어떤 기능들이 더 이상 사용 불가능한지 이해하기 위해 가격표를 검토하세요.",
"billingUsageExceedsLimit": "현재 사용량 ({current})이 제한 ({limit})을 초과합니다",
"billingPastDueTitle": "연체된 결제",
"billingPastDueDescription": "결제가 연체되었습니다. 현재 이용 중인 플랜 기능을 계속 사용하기 위해 결제 수단을 업데이트해 주세요. 해결되지 않으면 구독이 취소되고 무료 요금제로 전환됩니다.",
"billingUnpaidTitle": "결제되지 않은 구독",
"billingUnpaidDescription": "구독 결제가 완료되지 않아 무료 요금제로 전환되었습니다. 구독을 복원하려면 결제 수단을 업데이트해 주세요.",
"billingIncompleteTitle": "불완전한 결제",
"billingIncompleteDescription": "결제가 불완전합니다. 구독을 활성화하기 위해 결제 과정을 완료해 주세요.",
"billingIncompleteExpiredTitle": "만료된 결제",
"billingIncompleteExpiredDescription": "결제가 완료되지 않아 만료되었습니다. 무료 요금제로 전환되었습니다. 유료 기능에 대한 액세스를 복원하려면 다시 구독해 주세요.",
"billingManageSubscription": "구독을 관리하십시오",
"billingResolvePaymentIssue": "업그레이드 또는 다운그레이드하기 전에 결제 문제를 해결해 주세요.",
"signUpTerms": {
"IAgreeToThe": "동의합니다",
"termsOfService": "서비스 약관",
@@ -1628,6 +1911,7 @@
"configureHealthCheck": "상태 확인 설정",
"configureHealthCheckDescription": "{target}에 대한 상태 모니터링 설정",
"enableHealthChecks": "상태 확인 활성화",
"healthCheckDisabledStateDescription": "비활성화되면 이 사이트가 상태 확인을 수행하지 않으며 상태가 알 수 없는 것으로 간주됩니다.",
"enableHealthChecksDescription": "이 대상을 모니터링하여 건강 상태를 확인하세요. 필요에 따라 대상과 다른 엔드포인트를 모니터링할 수 있습니다.",
"healthScheme": "방법",
"healthSelectScheme": "방법 선택",
@@ -1643,6 +1927,24 @@
"timeIsInSeconds": "시간은 초 단위입니다",
"requireDeviceApproval": "장치 승인 요구",
"requireDeviceApprovalDescription": "이 역할을 가진 사용자는 장치가 연결되기 전에 관리자의 승인이 필요합니다.",
"sshAccess": "SSH 접속",
"roleAllowSsh": "SSH 허용",
"roleAllowSshAllow": "허용",
"roleAllowSshDisallow": "허용 안 함",
"roleAllowSshDescription": "이 역할을 가진 사용자가 SSH를 통해 리소스에 연결할 수 있도록 허용합니다. 비활성화되면 역할은 SSH 접속을 사용할 수 없습니다.",
"sshSudoMode": "Sudo 접속",
"sshSudoModeNone": "없음",
"sshSudoModeNoneDescription": "사용자는 sudo로 명령을 실행할 수 없습니다.",
"sshSudoModeFull": "전체 Sudo",
"sshSudoModeFullDescription": "사용자는 모든 명령을 sudo로 실행할 수 있습니다.",
"sshSudoModeCommands": "명령",
"sshSudoModeCommandsDescription": "사용자는 sudo로 지정된 명령만 실행할 수 있습니다.",
"sshSudo": "Sudo 허용",
"sshSudoCommands": "Sudo 명령",
"sshSudoCommandsDescription": "사용자가 sudo로 실행할 수 있는 명령어의 쉼표로 구분된 목록입니다.",
"sshCreateHomeDir": "홈 디렉터리 생성",
"sshUnixGroups": "유닉스 그룹",
"sshUnixGroupsDescription": "대상 호스트에서 사용자에게 추가할 유닉스 그룹의 쉼표로 구분된 목록입니다.",
"retryAttempts": "재시도 횟수",
"expectedResponseCodes": "예상 응답 코드",
"expectedResponseCodesDescription": "정상 상태를 나타내는 HTTP 상태 코드입니다. 비워 두면 200-300이 정상으로 간주됩니다.",
@@ -1659,9 +1961,20 @@
"healthCheckIntervalMin": "확인 간격은 최소 5초여야 합니다.",
"healthCheckTimeoutMin": "시간 초과는 최소 1초여야 합니다.",
"healthCheckRetryMin": "재시도 횟수는 최소 1회여야 합니다.",
"healthCheckMode": "확인 모드",
"healthCheckStrategy": "전략",
"healthCheckModeDescription": "TCP 모드는 연결성만 확인합니다. HTTP 모드는 HTTP 응답을 확인합니다.",
"healthyThreshold": "건강 임계값",
"healthyThresholdDescription": "정상으로 표시되기 전에 연속 성공이 필요합니다.",
"unhealthyThreshold": "비정상 임계값",
"unhealthyThresholdDescription": "비정상으로 표시되기 전에 연속 실패가 필요합니다.",
"healthCheckHealthyThresholdMin": "정상 임계값은 최소 1 이상이어야 합니다",
"healthCheckUnhealthyThresholdMin": "비정상 임계값은 최소 1 이상이어야 합니다",
"httpMethod": "HTTP 메소드",
"selectHttpMethod": "HTTP 메소드 선택",
"domainPickerSubdomainLabel": "서브도메인",
"domainPickerWildcard": "와일드카드",
"domainPickerWildcardPaidOnly": "와일드카드 서브도메인은 유료 기능입니다. 이 기능에 액세스하려면 업그레이드하세요.",
"domainPickerBaseDomainLabel": "기본 도메인",
"domainPickerSearchDomains": "도메인 검색...",
"domainPickerNoDomainsFound": "찾을 수 없는 도메인이 없습니다",
@@ -1687,12 +2000,12 @@
"resourcesTableAliasAddressInfo": "이 주소는 조직의 유틸리티 서브넷의 일부로, 내부 DNS 해석을 사용하여 별칭 레코드를 해석하는 데 사용됩니다.",
"resourcesTableClients": "클라이언트",
"resourcesTableAndOnlyAccessibleInternally": "클라이언트와 연결되었을 때만 내부적으로 접근 가능합니다.",
"resourcesTableNoTargets": "대상 없음",
"resourcesTableHealthy": "정상",
"resourcesTableDegraded": "저하됨",
"resourcesTableOffline": "오프라인",
"resourcesTableUnhealthy": "비정상",
"resourcesTableUnknown": "알 수 없음",
"resourcesTableNotMonitored": "모니터링되지 않음",
"resourcesTableNoTargets": "대상 없음",
"editInternalResourceDialogEditClientResource": "비공개 리소스 수정",
"editInternalResourceDialogUpdateResourceProperties": "{resourceName}의 리소스 속성과 대상 구성을 업데이트하세요",
"editInternalResourceDialogResourceProperties": "리소스 속성",
@@ -1718,6 +2031,11 @@
"editInternalResourceDialogModePort": "포트",
"editInternalResourceDialogModeHost": "호스트",
"editInternalResourceDialogModeCidr": "CIDR",
"editInternalResourceDialogModeHttp": "HTTP",
"editInternalResourceDialogModeHttps": "HTTPS",
"editInternalResourceDialogScheme": "스킴",
"editInternalResourceDialogEnableSsl": "SSL 활성화",
"editInternalResourceDialogEnableSslDescription": "목적지로의 안전한 HTTPS 연결을 위한 SSL/TLS 암호화 활성화.",
"editInternalResourceDialogDestination": "대상지",
"editInternalResourceDialogDestinationHostDescription": "사이트 네트워크의 자원 IP 주소입니다.",
"editInternalResourceDialogDestinationIPDescription": "사이트 네트워크의 자원 IP 또는 호스트 네임 주소입니다.",
@@ -1733,6 +2051,7 @@
"createInternalResourceDialogName": "이름",
"createInternalResourceDialogSite": "사이트",
"selectSite": "사이트 선택...",
"multiSitesSelectorSitesCount": "{count, plural, other {# 사이트}}",
"noSitesFound": "사이트를 찾을 수 없습니다.",
"createInternalResourceDialogProtocol": "프로토콜",
"createInternalResourceDialogTcp": "TCP",
@@ -1761,11 +2080,19 @@
"createInternalResourceDialogModePort": "포트",
"createInternalResourceDialogModeHost": "호스트",
"createInternalResourceDialogModeCidr": "CIDR",
"createInternalResourceDialogModeHttp": "HTTP",
"createInternalResourceDialogModeHttps": "HTTPS",
"scheme": "스킴",
"createInternalResourceDialogScheme": "스킴",
"createInternalResourceDialogEnableSsl": "SSL 활성화",
"createInternalResourceDialogEnableSslDescription": "목적지로의 안전한 HTTPS 연결을 위한 SSL/TLS 암호화 활성화.",
"createInternalResourceDialogDestination": "대상지",
"createInternalResourceDialogDestinationHostDescription": "사이트 네트워크의 자원 IP 주소입니다.",
"createInternalResourceDialogDestinationCidrDescription": "사이트 네트워크의 자원 IP 주소입니다.",
"createInternalResourceDialogAlias": "별칭",
"createInternalResourceDialogAliasDescription": "이 리소스에 대한 선택적 내부 DNS 별칭입니다.",
"internalResourceDownstreamSchemeRequired": "HTTP 리소스에 스킴이 필요합니다",
"internalResourceHttpPortRequired": "HTTP 리소스에 목적지 포트가 필요합니다",
"siteConfiguration": "설정",
"siteAcceptClientConnections": "클라이언트 연결 허용",
"siteAcceptClientConnectionsDescription": "사용자 장치와 클라이언트가 이 사이트의 리소스에 접근할 수 있도록 허용하세요. 나중에 변경할 수 있습니다.",
@@ -1851,6 +2178,40 @@
"exitNode": "종단 노드",
"country": "국가",
"rulesMatchCountry": "현재 소스 IP를 기반으로 합니다",
"region": "지역",
"selectRegion": "지역 선택",
"searchRegions": "지역 검색...",
"noRegionFound": "지역을 찾을 수 없습니다.",
"rulesMatchRegion": "국가의 지역 구성을 선택합니다",
"rulesErrorInvalidRegion": "잘못된 지역",
"rulesErrorInvalidRegionDescription": "유효한 지역을 선택하세요.",
"regionAfrica": "아프리카",
"regionNorthernAfrica": "북부 아프리카",
"regionEasternAfrica": "동부 아프리카",
"regionMiddleAfrica": "중부 아프리카",
"regionSouthernAfrica": "남부 아프리카",
"regionWesternAfrica": "서부 아프리카",
"regionAmericas": "아메리카",
"regionCaribbean": "카리브",
"regionCentralAmerica": "중앙 아메리카",
"regionSouthAmerica": "남아메리카",
"regionNorthernAmerica": "북미",
"regionAsia": "아시아",
"regionCentralAsia": "중앙 아시아",
"regionEasternAsia": "동아시아",
"regionSouthEasternAsia": "동남아시아",
"regionSouthernAsia": "남아시아",
"regionWesternAsia": "서아시아",
"regionEurope": "유럽",
"regionEasternEurope": "동부 유럽",
"regionNorthernEurope": "북부 유럽",
"regionSouthernEurope": "남부 유럽",
"regionWesternEurope": "서부 유럽",
"regionOceania": "오세아니아",
"regionAustraliaAndNewZealand": "호주와 뉴질랜드",
"regionMelanesia": "멜라네시아",
"regionMicronesia": "미크로네시아",
"regionPolynesia": "폴리네시아",
"managedSelfHosted": {
"title": "관리 자체 호스팅",
"description": "더 신뢰할 수 있고 낮은 유지보수의 자체 호스팅 팡골린 서버, 추가 기능 포함",
@@ -1889,7 +2250,7 @@
},
"internationaldomaindetected": "국제 도메인 감지됨",
"willbestoredas": "다음으로 저장됩니다:",
"roleMappingDescription": "자동 프로비저닝이 활성화되면 사용자가 로그인할 때 역할이 할당되는 방법을 결정합니다.",
"roleMappingDescription": "사용자가 이 아이덴티티 공급자로 로그인할 때 역할이 할당되는 방법을 결정합니다.",
"selectRole": "역할 선택",
"roleMappingExpression": "표현식",
"selectRolePlaceholder": "역할 선택",
@@ -1899,6 +2260,25 @@
"invalidValue": "잘못된 값",
"idpTypeLabel": "신원 공급자 유형",
"roleMappingExpressionPlaceholder": "예: contains(groups, 'admin') && 'Admin' || 'Member'",
"roleMappingModeFixedRoles": "고정 역할",
"roleMappingModeMappingBuilder": "매핑 빌더",
"roleMappingModeRawExpression": "원시 표현식",
"roleMappingFixedRolesPlaceholderSelect": "하나 이상의 역할을 선택하세요",
"roleMappingFixedRolesPlaceholderFreeform": "역할 이름 입력 (조직마다 정확히 일치)",
"roleMappingFixedRolesDescriptionSameForAll": "모든 자동 프로비전 사용자에게 동일한 역할 세트를 할당합니다.",
"roleMappingFixedRolesDescriptionDefaultPolicy": "기본 정책의 경우 사용자가 프로비저닝된 조직의 역할 이름을 입력하세요. 이름은 정확히 일치해야 합니다.",
"roleMappingClaimPath": "클레임 경로",
"roleMappingClaimPathPlaceholder": "그룹",
"roleMappingClaimPathDescription": "토큰 페이로드에서 소스 값을 포함하는 경로 (예: 그룹).",
"roleMappingMatchValue": "매치 값",
"roleMappingAssignRoles": "역할 할당",
"roleMappingAddMappingRule": "매핑 규칙 추가",
"roleMappingRawExpressionResultDescription": "표현식은 문자열 또는 문자열 배열로 평가되어야 합니다.",
"roleMappingRawExpressionResultDescriptionSingleRole": "표현식은 문자열 (단일 역할 이름)로 평가되어야 합니다.",
"roleMappingMatchValuePlaceholder": "매치 값 (예: 관리자)",
"roleMappingAssignRolesPlaceholderFreeform": "역할 이름 입력 (조직마다 정확히)",
"roleMappingBuilderFreeformRowHint": "역할 이름은 각 대상 조직의 역할과 일치해야 합니다.",
"roleMappingRemoveRule": "제거",
"idpGoogleConfiguration": "Google 구성",
"idpGoogleConfigurationDescription": "Google OAuth2 자격 증명을 구성합니다.",
"idpGoogleClientIdDescription": "Google OAuth2 클라이언트 ID",
@@ -1962,9 +2342,11 @@
"selectDomainForOrgAuthPage": "조직 인증 페이지에 대한 도메인을 선택하세요.",
"domainPickerProvidedDomain": "제공된 도메인",
"domainPickerFreeProvidedDomain": "무료 제공된 도메인",
"domainPickerFreeDomainsPaidFeature": "제공된 도메인은 유료 기능입니다. 요금제에 도메인이 포함되도록 구독하세요. - 별도로 도메인을 준비할 필요 없습니다.",
"domainPickerVerified": "검증됨",
"domainPickerUnverified": "검증되지 않음",
"domainPickerInvalidSubdomainStructure": "이 하위 도메인은 잘못된 문자 또는 구조를 포함하고 있습니다. 저장 시 자동으로 정리됩니다.",
"domainPickerManual": "수동",
"domainPickerInvalidSubdomainStructure": "잘못된 문자는 저장 시 새니타이즈됩니다.",
"domainPickerError": "오류",
"domainPickerErrorLoadDomains": "조직 도메인 로드 실패",
"domainPickerErrorCheckAvailability": "도메인 가용성 확인 실패",
@@ -1977,7 +2359,7 @@
"orgAuthChooseIdpDescription": "계속하려면 신원 공급자를 선택하세요.",
"orgAuthNoIdpConfigured": "이 조직은 구성된 신원 공급자가 없습니다. 대신 Pangolin 아이덴티티로 로그인할 수 있습니다.",
"orgAuthSignInWithPangolin": "Pangolin으로 로그인",
"orgAuthSignInToOrg": "조직에 로그인",
"orgAuthSignInToOrg": "조직 아이덴티티 제공자 (SSO)",
"orgAuthSelectOrgTitle": "조직 로그인",
"orgAuthSelectOrgDescription": "계속하려면 조직 ID를 입력하십시오.",
"orgAuthOrgIdPlaceholder": "your-organization",
@@ -2138,7 +2520,7 @@
"alerts": {
"commercialUseDisclosure": {
"title": "사용 공개",
"description": "당신의 의도된 사용에 정확히 맞는 라이선스 등급을 선택하세요. 개인 라이선스는 연간 총 수익 100,000 USD 이하의 개인, 비상업적 또는 소규모 상업 활동을 위한 소프트웨어의 무료 사용을 허용합니다. 이러한 제한을 넘는 모든 사용 비즈니스, 조직 또는 기타 수익 창출 환경 내에서의 사용 은 유효한 엔터프라이즈 라이선스 및 해당 라이선스 수수료의 지불이 필요합니다. 개인 또는 기업 사용자는 모두 Fossorial 상용 라이선스 조건을 준수해야 합니다."
"description": "당신의 의도된 사용에 정확히 맞는 라이선스 등급을 선택하세요. 개인 라이선스는 연간 총 수익 100,000 USD 이하의 개인, 비상업적 또는 소규모 상업 활동을 위한 소프트웨어의 무료 사용을 허용합니다. 이러한 제한을 넘는 모든 사용 - 비즈니스, 조직 또는 기타 수익 창출 환경 내에서의 사용 - 은 유효한 엔터프라이즈 라이선스 및 해당 라이선스 수수료의 지불이 필요합니다. 개인 또는 기업 사용자는 모두 Fossorial 상용 라이선스 조건을 준수해야 합니다."
},
"trialPeriodInformation": {
"title": "시험 기간 정보",
@@ -2193,10 +2575,10 @@
},
"scale": {
"title": "스케일",
"description": "기업 기능, 50명의 사용자, 50개의 사이트, 우선 지원."
"description": "기업 기능, 50명의 사용자, 100개의 사이트, 그리고 우선 지원."
}
},
"personalUseOnly": "개인 사용 전용 (무료 라이— 체크아웃 없음)",
"personalUseOnly": "개인용으로만 사용 (무료 라이- 결제 없음)",
"buttons": {
"continueToCheckout": "결제로 진행"
},
@@ -2270,6 +2652,7 @@
"validPassword": "유효한 비밀번호",
"validEmail": "유효한 이메일",
"validSSO": "유효한 SSO",
"connectedClient": "연결된 클라이언트",
"resourceBlocked": "리소스 차단됨",
"droppedByRule": "룰에 의해 드롭됨",
"noSessions": "세션 없음",
@@ -2277,24 +2660,26 @@
"noMoreAuthMethods": "유효한 인증 없음",
"ip": "IP",
"reason": "이유",
"requestLogs": "요청 로그",
"requestLogs": "HTTP 요청 로그",
"requestAnalytics": "요청 분석",
"host": "호스트",
"location": "위치",
"actionLogs": "작업 로그",
"sidebarLogsRequest": "요청 로그",
"sidebarLogsRequest": "HTTP 요청 로그",
"sidebarLogsAccess": "접근 로그",
"sidebarLogsAction": "작업 로그",
"logRetention": "로그 보관",
"logRetentionDescription": "다양한 유형의 로그를 이 조직에 대해 얼마나 오래 보관할지 관리하거나 비활성화합니다",
"requestLogsDescription": "이 조직의 자원에 대한 상세한 요청 로그를 봅니다",
"requestAnalyticsDescription": "이 조직의 리소스에 대한 자세한 요청 분석 보기",
"logRetentionRequestLabel": "요청 로그 보관",
"logRetentionRequestLabel": "HTTP 요청 로그 보관",
"logRetentionRequestDescription": "요청 로그를 얼마나 오래 보관할지",
"logRetentionAccessLabel": "접근 로그 보관",
"logRetentionAccessDescription": "접근 로그를 얼마나 오래 보관할지",
"logRetentionActionLabel": "작업 로그 보관",
"logRetentionActionDescription": "작업 로그를 얼마나 오래 보관할지",
"logRetentionConnectionLabel": "연결 로그 보유 기간",
"logRetentionConnectionDescription": "연결 로그를 얼마나 오래 보유할지",
"logRetentionDisabled": "비활성화됨",
"logRetention3Days": "3 일",
"logRetention7Days": "7 일",
@@ -2305,8 +2690,15 @@
"logRetentionEndOfFollowingYear": "다음 연도 말",
"actionLogsDescription": "이 조직에서 수행된 작업의 기록을 봅니다",
"accessLogsDescription": "이 조직의 자원에 대한 접근 인증 요청을 확인합니다",
"licenseRequiredToUse": "이 기능을 사용하려면 <enterpriseLicenseLink>엔터프라이즈 에디션</enterpriseLicenseLink> 라이선스가 필요합니다. 이 기능은 <pangolinCloudLink>판골린 클라우드</pangolinCloudLink>에서도 사용할 수 있습니다.",
"ossEnterpriseEditionRequired": "이 기능을 사용하려면 <enterpriseEditionLink>엔터프라이즈 에디션</enterpriseEditionLink>이 필요합니다. 이 기능은 <pangolinCloudLink>판골린 클라우드</pangolinCloudLink>에서도 사용할 수 있습니다.",
"connectionLogs": "연결 로그",
"connectionLogsDescription": "이 조직의 터널 연결 로그 보기",
"sidebarLogsConnection": "연결 로그",
"sidebarLogsStreaming": "스트리밍",
"sourceAddress": "소스 주소",
"destinationAddress": "대상 주소",
"duration": "지속 시간",
"licenseRequiredToUse": "이 기능을 사용하려면 <enterpriseLicenseLink>엔터프라이즈 에디션</enterpriseLicenseLink> 라이선스가 필요합니다. 이 기능은 <pangolinCloudLink>판골린 클라우드</pangolinCloudLink>에서도 사용할 수 있습니다. <bookADemoLink>데모 또는 POC 체험을 예약하세요</bookADemoLink>.",
"ossEnterpriseEditionRequired": "이 기능을 사용하려면 <enterpriseEditionLink>엔터프라이즈 에디션</enterpriseEditionLink>이(가) 필요합니다. 이 기능은 <pangolinCloudLink>판골린 클라우드</pangolinCloudLink>에서도 사용할 수 있습니다. <bookADemoLink>데모 또는 POC 체험을 예약하세요</bookADemoLink>.",
"certResolver": "인증서 해결사",
"certResolverDescription": "이 리소스에 사용할 인증서 해결사를 선택하세요.",
"selectCertResolver": "인증서 해결사 선택",
@@ -2448,6 +2840,9 @@
"machineClients": "기계 클라이언트",
"install": "설치",
"run": "실행",
"envFile": "환경 파일",
"serviceFile": "서비스 파일",
"enableAndStart": "활성화 및 시작",
"clientNameDescription": "나중에 변경할 수 있는 클라이언트의 표시 이름입니다.",
"clientAddress": "클라이언트 주소(고급)",
"setupFailedToFetchSubnet": "기본값 로드 실패",
@@ -2496,13 +2891,30 @@
"editInternalResourceDialogAddClients": "클라이언트 추가",
"editInternalResourceDialogDestinationLabel": "대상지",
"editInternalResourceDialogDestinationDescription": "내부 리소스의 목적지 주소를 지정하세요. 선택한 모드에 따라 이 주소는 호스트명, IP 주소, 또는 CIDR 범위가 될 수 있습니다. 더욱 쉽게 식별할 수 있도록 내부 DNS 별칭을 설정할 수 있습니다.",
"internalResourceFormMultiSiteRoutingHelp": "다중 사이트를 선택하면 높은 가용성을 위해 회복력 있는 라우팅 및 페일오버가 가능해집니다.",
"internalResourceFormMultiSiteRoutingHelpLearnMore": "자세히 알아보기",
"editInternalResourceDialogPortRestrictionsDescription": "특정 TCP/UDP 포트에 대한 접근을 제한하거나 모든 포트를 허용/차단하십시오.",
"createInternalResourceDialogHttpConfiguration": "HTTP 구성",
"createInternalResourceDialogHttpConfigurationDescription": "이 리소스에 HTTP 또는 HTTPS로 도달하기 위한 도메인을 선택하세요.",
"editInternalResourceDialogHttpConfiguration": "HTTP 구성",
"editInternalResourceDialogHttpConfigurationDescription": "이 리소스에 HTTP 또는 HTTPS로 도달하기 위한 도메인을 선택하세요.",
"editInternalResourceDialogTcp": "TCP",
"editInternalResourceDialogUdp": "UDP",
"editInternalResourceDialogIcmp": "ICMP",
"editInternalResourceDialogAccessControl": "액세스 제어",
"editInternalResourceDialogAccessControlDescription": "연결 시 이 리소스에 대한 액세스 권한을 가지는 역할, 사용자, 그리고 머신 클라이언트를 제어합니다. 관리자는 항상 접근할 수 있습니다.",
"editInternalResourceDialogPortRangeValidationError": "모든 포트에 대해서는 \"*\"로, 아니면 쉼표로 구분된 포트 및 범위 목록(예: \"80,443,8000-9000\")을 설정해야 합니다. 포트는 1에서 65535 사이여야 합니다.",
"internalResourceAuthDaemonStrategy": "SSH 인증 데몬 위치",
"internalResourceAuthDaemonStrategyDescription": "SSH 인증 데몬이 작동하는 위치를 선택하세요: 사이트(Newt)에서 또는 원격 호스트에서.",
"internalResourceAuthDaemonDescription": "SSH 인증 데몬은 이 리소스를 위한 SSH 키 서명과 PAM 인증을 처리합니다. 사이트(Newt)에서 나 별도의 원격 호스트에서 실행할 것인지를 선택하세요. 자세한 내용은 <docsLink>문서</docsLink>를 참조하세요.",
"internalResourceAuthDaemonDocsUrl": "https://docs.pangolin.net",
"internalResourceAuthDaemonStrategyPlaceholder": "전략 선택",
"internalResourceAuthDaemonStrategyLabel": "위치",
"internalResourceAuthDaemonSite": "사이트에서 인증 데몬이 실행됩니다(Newt).",
"internalResourceAuthDaemonSiteDescription": "인증 데몬이 사이트(Newt)에서 실행됩니다.",
"internalResourceAuthDaemonRemote": "원격 호스트",
"internalResourceAuthDaemonRemoteDescription": "인증 데몬이 사이트가 아닌 다른 호스트에서 실행됩니다.",
"internalResourceAuthDaemonPort": "데몬 포트 (선택 사항)",
"orgAuthWhatsThis": "조직 ID를 어디에서 찾을 수 있습니까?",
"learnMore": "자세히 알아보기",
"backToHome": "홈으로 돌아가기",
@@ -2524,6 +2936,9 @@
"maintenancePageMessagePlaceholder": "곧 돌아오겠습니다! 사이트는 현재 예정된 유지보수를 진행 중입니다.",
"maintenancePageMessageDescription": "유지보수를 설명하는 상세 메시지",
"maintenancePageTimeTitle": "예상 완료 시간(선택 사항)",
"privateMaintenanceScreenTitle": "프라이빗 플레이스홀더 화면",
"privateMaintenanceScreenMessage": "이 도메인은 개인 리소스에서 사용 중입니다. Pangolin 클라이언트를 사용하여 이 리소스에 액세스하세요.",
"privateMaintenanceScreenSteps": "연결된 후에도 이 메시지가 보이면 브라우저의 DNS 캐시가 여전히 이전 주소를 가리킬 수 있습니다. 이를 해결하려면 이 탭이나 브라우저를 완전히 닫고 다시 열고 이 페이지로 돌아가세요.",
"maintenanceTime": "예: 2시간, 11월 1일 오후 5시",
"maintenanceEstimatedTimeDescription": "유지보수가 완료될 것으로 예상되는 시간",
"editDomain": "도메인 수정",
@@ -2632,5 +3047,209 @@
"approvalsEmptyStateStep2Title": "장치 승인 활성화",
"approvalsEmptyStateStep2Description": "역할을 편집하고 '장치 승인 요구' 옵션을 활성화하세요. 이 역할을 가진 사용자는 새 장치에 대해 관리자의 승인이 필요합니다.",
"approvalsEmptyStatePreviewDescription": "미리 보기: 활성화된 경우, 승인 대기 중인 장치 요청이 검토용으로 여기에 표시됩니다.",
"approvalsEmptyStateButtonText": "역할 관리"
"approvalsEmptyStateButtonText": "역할 관리",
"domainErrorTitle": "도메인 확인에 문제가 발생했습니다.",
"idpAdminAutoProvisionPoliciesTabHint": "<policiesTabLink>자동 프로비저닝 설정</policiesTabLink> 탭에서 역할 매핑 및 조직 정책을 구성합니다.",
"streamingTitle": "이벤트 스트리밍",
"streamingDescription": "조직의 이벤트를 외부 목적지로 실시간 전송합니다.",
"streamingUnnamedDestination": "이름이 없는 대상지",
"streamingNoUrlConfigured": "설정된 URL이 없습니다",
"streamingAddDestination": "대상지 추가",
"streamingHttpWebhookTitle": "HTTP 웹훅",
"streamingHttpWebhookDescription": "유연한 인증 및 템플릿 작성 기능을 갖춘 HTTP 엔드포인트에 이벤트를 전송합니다.",
"streamingS3Title": "아마존 S3",
"streamingS3Description": "S3 호환 객체 스토리지 버킷에 이벤트를 스트리밍합니다. 곧 제공됩니다.",
"streamingDatadogTitle": "데이터독",
"streamingDatadogDescription": "이벤트를 직접 Datadog 계정으로 전달합니다. 곧 제공됩니다.",
"streamingTypePickerDescription": "목표 유형을 선택하여 시작합니다.",
"streamingFailedToLoad": "대상 로드에 실패했습니다",
"streamingUnexpectedError": "예기치 않은 오류가 발생했습니다.",
"streamingFailedToUpdate": "대상지를 업데이트하는 데 실패했습니다",
"streamingDeletedSuccess": "대상지가 성공적으로 삭제되었습니다",
"streamingFailedToDelete": "대상지 삭제 실패",
"streamingDeleteTitle": "대상지 삭제",
"streamingDeleteButtonText": "대상지 삭제",
"streamingDeleteDialogAreYouSure": "삭제하시겠습니까",
"streamingDeleteDialogThisDestination": "이 대상지",
"streamingDeleteDialogPermanentlyRemoved": "? 모든 구성은 영구적으로 제거됩니다.",
"httpDestEditTitle": "대상지 수정",
"httpDestAddTitle": "HTTP 대상지 추가",
"httpDestEditDescription": "이 HTTP 이벤트 스트리밍 대상지의 구성을 업데이트하세요.",
"httpDestAddDescription": "조직의 이벤트 수신을 위한 새로운 HTTP 엔드포인트를 구성하세요.",
"S3DestEditTitle": "대상지 수정",
"S3DestAddTitle": "S3 대상지 추가",
"S3DestEditDescription": "이 S3 이벤트 스트리밍 대상지의 구성을 업데이트하세요.",
"S3DestAddDescription": "조직의 이벤트를 받기 위한 새로운 S3 엔드포인트를 구성하세요.",
"datadogDestEditTitle": "대상지 수정",
"datadogDestAddTitle": "Datadog 대상지 추가",
"datadogDestEditDescription": "이 Datadog 이벤트 스트리밍 대상지의 구성을 업데이트하세요.",
"datadogDestAddDescription": "조직의 이벤트를 받기 위한 새로운 Datadog 엔드포인트를 구성하세요.",
"httpDestTabSettings": "설정",
"httpDestTabHeaders": "헤더",
"httpDestTabBody": "본문",
"httpDestTabLogs": "로그",
"httpDestNamePlaceholder": "내 HTTP 대상",
"httpDestUrlLabel": "대상 URL",
"httpDestUrlErrorHttpRequired": "URL은 http 또는 https를 사용해야 합니다",
"httpDestUrlErrorHttpsRequired": "클라우드 배포에는 HTTPS가 필요합니다",
"httpDestUrlErrorInvalid": "유효한 URL을 입력하세요 (예: https://example.com/webhook)",
"httpDestAuthTitle": "인증",
"httpDestAuthDescription": "엔드포인트에 대한 요청 인증 방법을 선택하세요.",
"httpDestAuthNoneTitle": "인증 없음",
"httpDestAuthNoneDescription": "Authorization 헤더 없이 요청을 보냅니다.",
"httpDestAuthBearerTitle": "Bearer 토큰",
"httpDestAuthBearerDescription": "각 요청에 Authorization: Bearer '<token>' 헤더를 추가합니다.",
"httpDestAuthBearerPlaceholder": "API 키 또는 토큰",
"httpDestAuthBasicTitle": "기본 인증",
"httpDestAuthBasicDescription": "Authorization: Basic '<credentials>' 헤더를 추가합니다. 자격 증명은 사용자 이름:비밀번호로 제공합니다.",
"httpDestAuthBasicPlaceholder": "사용자 이름:비밀번호",
"httpDestAuthCustomTitle": "사용자 정의 헤더",
"httpDestAuthCustomDescription": "인증을 위한 사용자 정의 HTTP 헤더 이름 및 값을 지정하세요 (예: X-API-Key).",
"httpDestAuthCustomHeaderNamePlaceholder": "헤더 이름 (예: X-API-Key)",
"httpDestAuthCustomHeaderValuePlaceholder": "헤더 값",
"httpDestCustomHeadersTitle": "사용자 정의 HTTP 헤더",
"httpDestCustomHeadersDescription": "모든 발신 요청에 사용자 정의 헤더를 추가합니다. 정적 토큰 또는 사용자 정의 Content-Type에 유용합니다. 기본적으로 Content-Type: application/json이 전송됩니다.",
"httpDestNoHeadersConfigured": "구성된 사용자 정의 헤더가 없습니다. \"헤더 추가\"를 클릭하여 추가하세요.",
"httpDestHeaderNamePlaceholder": "헤더 이름",
"httpDestHeaderValuePlaceholder": "값",
"httpDestAddHeader": "헤더 추가",
"httpDestBodyTemplateTitle": "사용자 정의 본문 템플릿",
"httpDestBodyTemplateDescription": "엔드포인트에 전송되는 JSON 페이로드 구조를 제어합니다. 비활성화된 경우 각 이벤트에 대해 기본 JSON 객체가 전송됩니다.",
"httpDestEnableBodyTemplate": "사용자 정의 본문 템플릿 활성화",
"httpDestBodyTemplateLabel": "본문 템플릿 (JSON)",
"httpDestBodyTemplateHint": "템플릿 변수를 사용하여 페이로드에서 이벤트 필드를 참조하세요.",
"httpDestPayloadFormatTitle": "페이로드 형식",
"httpDestPayloadFormatDescription": "각 요청 본문에 이벤트가 시리얼라이즈되는 방식입니다.",
"httpDestFormatJsonArrayTitle": "JSON 배열",
"httpDestFormatJsonArrayDescription": "각 배치마다 요청 하나씩, 본문은 JSON 배열입니다. 대부분의 일반 웹훅 및 Datadog과 호환됩니다.",
"httpDestFormatNdjsonTitle": "NDJSON",
"httpDestFormatNdjsonDescription": "각 배치마다 요청 하나씩, 본문은 줄 구분 JSON - 한 라인에 하나의 객체가 있으며 외부 배열이 없습니다. Splunk HEC, Elastic / OpenSearch, Grafana Loki에 필요합니다.",
"httpDestFormatSingleTitle": "각 요청 당 하나의 이벤트",
"httpDestFormatSingleDescription": "각 개별 이벤트에 대해 별도의 HTTP POST를 전송합니다. 배치를 처리할 수 없는 엔드포인트에만 사용하세요.",
"httpDestLogTypesTitle": "로그 유형",
"httpDestLogTypesDescription": "이 대상지에 전달될 로그 유형을 선택하세요. 활성화된 로그 유형만 스트리밍 됩니다.",
"httpDestAccessLogsTitle": "접근 로그",
"httpDestAccessLogsDescription": "인증 및 거부된 요청을 포함한 리소스 접근 시도.",
"httpDestActionLogsTitle": "작업 로그",
"httpDestActionLogsDescription": "조직 내에서 사용자가 수행한 관리 작업.",
"httpDestConnectionLogsTitle": "연결 로그",
"httpDestConnectionLogsDescription": "사이트 및 터널 연결 이벤트, 연결 및 연결 끊기를 포함합니다.",
"httpDestRequestLogsTitle": "HTTP 요청 로그",
"httpDestRequestLogsDescription": "프록시된 리소스에 대한 HTTP 요청 로그, 메서드, 경로 및 응답 코드를 포함합니다.",
"httpDestSaveChanges": "변경 사항 저장",
"httpDestCreateDestination": "대상지 생성",
"httpDestUpdatedSuccess": "대상지가 성공적으로 업데이트되었습니다",
"httpDestCreatedSuccess": "대상지가 성공적으로 생성되었습니다",
"httpDestUpdateFailed": "대상지를 업데이트하는 데 실패했습니다",
"httpDestCreateFailed": "대상지를 생성하는 데 실패했습니다",
"followRedirects": "리디렉션 따라가기",
"followRedirectsDescription": "요청에 대해 HTTP 리디렉션을 자동으로 따라갑니다.",
"alertingErrorWebhookUrl": "웹훅의 유효한 URL을 입력하세요.",
"healthCheckStrategyHttp": "연결성을 확인하고 HTTP 응답 상태를 확인합니다.",
"healthCheckStrategyTcp": "응답을 검사하지 않고 TCP 연결성만 확인합니다.",
"healthCheckStrategySnmp": "네트워크 장비 및 인프라의 상태를 확인하기 위해 SNMP get 요청을 보냅니다.",
"healthCheckStrategyIcmp": "ICMP 에코 요청(핑)을 사용하여 리소스에 대한 접근 가능성을 확인합니다.",
"healthCheckTabStrategy": "전략",
"healthCheckTabConnection": "연결",
"healthCheckTabAdvanced": "고급",
"healthCheckStrategyNotAvailable": "이 전략은 사용할 수 없습니다. 기능을 활성화하려면 영업팀에 문의하세요.",
"uptime30d": "업타임 (30일)",
"idpAddActionCreateNew": "새로운 아이덴티티 공급자 생성",
"idpAddActionImportFromOrg": "다른 조직에서 가져오기",
"idpImportDialogTitle": "아이덴티티 공급자 가져오기",
"idpImportDialogDescription": "관리자인 조직에서 아이덴티티 공급자를 선택하십시오. 이는 이 조직에 연결됩니다.",
"idpImportSearchPlaceholder": "조직 또는 공급자 이름으로 검색...",
"idpImportEmpty": "아이덴티티 공급자를 찾을 수 없습니다.",
"idpImportedDescription": "아이덴티티 공급자가 성공적으로 가져왔습니다.",
"idpDeleteGlobalQuestion": "정말로 이 아이덴티티 공급자를 영구적으로 삭제하시겠습니까?",
"idpDeleteGlobalDescription": "이것은 연관된 모든 조직에서 아이덴티티 공급자를 영구적으로 삭제합니다.",
"idpUnassociateTitle": "아이덴티티 공급자의 연관 해제",
"idpUnassociateQuestion": "정말로 이 조직에서 이 아이덴티티 공급자의 연관을 해제하시겠습니까?",
"idpUnassociateDescription": "이 아이덴티티 공급자와 연관된 모든 사용자는 이 조직에서 제거될 것이지만, 아이덴티티 공급자는 다른 연관된 조직에 계속해서 존재할 것입니다.",
"idpUnassociateConfirm": "아이덴티티 공급자 연관 해제 확인",
"idpUnassociateWarning": "이 조직에서 이것은 되돌릴 수 없습니다.",
"idpUnassociatedDescription": "아이덴티티 공급자가 이 조직에서 성공적으로 연관 해제되었습니다",
"idpUnassociateMenu": "연관 해제",
"idpDeleteAllOrgsMenu": "삭제",
"publicIpEndpoint": "엔드포인트",
"lastTriggeredAt": "마지막 트리거",
"reject": "거부",
"uptimeDaysAgo": "{count}일 전",
"uptimeToday": "오늘",
"uptimeNoDataAvailable": "데이터가 없습니다",
"uptimeSuffix": "가동 시간",
"uptimeDowntimeSuffix": "다운타임",
"uptimeTooltipUptimeLabel": "가동 시간",
"uptimeTooltipDowntimeLabel": "다운타임",
"uptimeOngoing": "진행 중",
"uptimeNoMonitoringData": "모니터링 데이터 없음",
"uptimeNoData": "데이터 없음",
"uptimeMiniBarDown": "중단됨",
"uptimeSectionTitle": "가동 시간",
"uptimeSectionDescription": "지난 {days}일 동안의 가용성",
"uptimeAddAlert": "알림 추가",
"uptimeViewAlerts": "알림 보기",
"uptimeCreateEmailAlert": "이메일 알림 생성",
"uptimeAlertDescriptionSite": "이 사이트가 오프라인 되거나 다시 온라인 될 때 이메일로 알림을 받습니다.",
"uptimeAlertDescriptionResource": "이 리소스가 오프라인 되거나 다시 온라인 될 때 이메일로 알림을 받습니다.",
"uptimeAlertNamePlaceholder": "알림 이름",
"uptimeAdditionalEmails": "추가 이메일",
"uptimeCreateAlert": "알림 생성",
"uptimeAlertNoRecipients": "수신자 없음",
"uptimeAlertNoRecipientsDescription": "통지를 받을 사용자, 역할 또는 이메일을 최소 한 개 추가하세요.",
"uptimeAlertCreated": "알림 생성됨",
"uptimeAlertCreatedDescription": "상태가 변경되면 통지를 받습니다.",
"uptimeAlertCreateFailed": "알림 생성 실패",
"webhookUrlLabel": "URL",
"webhookHeaderKeyPlaceholder": "키",
"webhookHeaderValuePlaceholder": "값",
"alertLabel": "알림",
"domainPickerWildcardSubdomainNotAllowed": "와일드카드 서브도메인은 허용되지 않습니다.",
"domainPickerWildcardCertWarning": "와일드카드 리소스는 올바르게 작동하려면 추가 구성이 필요할 수 있습니다.",
"domainPickerWildcardCertWarningLink": "자세히 알아보기",
"health": "건강",
"domainPendingErrorTitle": "확인 문제",
"memberPortalTitle": "리소스",
"memberPortalDescription": "이 조직에서 접근할 수 있는 리소스",
"memberPortalSortBy": "정렬 기준...",
"memberPortalSortNameAsc": "이름 A-Z",
"memberPortalSortNameDesc": "이름 Z-A",
"memberPortalSortDomainAsc": "도메인 A-Z",
"memberPortalSortDomainDesc": "도메인 Z-A",
"memberPortalSortEnabledFirst": "사용 활성화 우선",
"memberPortalSortDisabledFirst": "사용 비활성화 우선",
"memberPortalRefresh": "새로 고침",
"memberPortalRefreshResources": "리소스 새로 고침",
"memberPortalFailedToLoad": "리소스를 불러오는 데 실패했습니다",
"memberPortalFailedToLoadDescription": "리소스를 불러오는 데 실패했습니다. 연결을 확인하고 다시 시도해 주십시오.",
"memberPortalUnableToLoad": "리소스를 가져오는 데 실패했습니다",
"memberPortalTryAgain": "다시 시도",
"memberPortalNoResourcesFound": "리소스를 발견하지 못했습니다",
"memberPortalNoResourcesAvailable": "사용 가능한 리소스가 없습니다",
"memberPortalNoResourcesMatchSearch": "\"{query}\"와 일치하는 리소스가 없습니다. 검색어를 수정하거나 검색을 초기화하여 모든 리소스를 확인하십시오.",
"memberPortalNoResourcesAccess": "아직 접근할 수 있는 리소스가 없습니다. 필요한 리소스 접근을 위해 관리자에게 문의하세요.",
"memberPortalClearSearch": "검색 초기화",
"memberPortalPublicResources": "공공 리소스",
"memberPortalPublicResourcesDescription": "브라우저를 통해 접근 가능한 웹 애플리케이션 및 서비스",
"memberPortalCopiedToClipboard": "클립보드에 복사됨",
"memberPortalCopiedUrlDescription": "리소스 URL이 클립보드에 복사되었습니다.",
"memberPortalOpenResource": "리소스 열기",
"memberPortalPrivateResources": "비공개 리소스",
"memberPortalPrivateResourcesDescription": "클라이언트를 통해 접근 가능한 내부 네트워크 리소스",
"memberPortalResourceDetails": "리소스 세부 정보",
"memberPortalMode": "모드",
"memberPortalDestination": "대상지",
"memberPortalAlias": "별칭",
"memberPortalCopiedAliasDescription": "리소스 별칭이 클립보드에 복사되었습니다.",
"memberPortalCopiedDestinationDescription": "리소스 대상지가 클립보드에 복사되었습니다.",
"memberPortalRequiresClientConnection": "클라이언트 연결 필요",
"memberPortalAuthMethods": "인증 방법",
"memberPortalSso": "싱글 사인온 (SSO)",
"memberPortalPasswordProtected": "비밀번호 보호",
"memberPortalPinCode": "PIN 코드",
"memberPortalEmailWhitelist": "이메일 화이트리스트",
"memberPortalResourceDisabled": "리소스 비활성화됨",
"memberPortalShowingResources": "{start}-{end} 중 {total}개의 리소스를 표시 중",
"memberPortalPrevious": "이전",
"memberPortalNext": "다음"
}

View File

@@ -1,4 +1,8 @@
{
"contactSalesEnable": "Kontakt salgsavdelingen for å aktivere denne funksjonen.",
"contactSalesBookDemo": "Bestill en demo",
"contactSalesOr": "eller",
"contactSalesContactUs": "kontakt oss",
"setupCreate": "Opprett organisasjonen, nettstedet og ressursene",
"headerAuthCompatibilityInfo": "Aktiver dette for å tvinge frem en 401 Uautorisert-respons når en autentiseringstoken mangler. Dette kreves for nettlesere eller spesifikke HTTP-biblioteker som ikke sender legitimasjon uten en serverutfordring.",
"headerAuthCompatibility": "Utvidet kompatibilitet",
@@ -19,6 +23,18 @@
"componentsInvalidKey": "Ugyldig eller utgått lisensnøkkel oppdaget. Følg lisensvilkårene for å fortsette å kunne bruke alle funksjonene.",
"dismiss": "Avvis",
"subscriptionViolationMessage": "Du er utenfor grensen for gjeldende plan. Rett problemet ved å fjerne nettsteder, brukere eller andre ressurser for å bli innenfor planen din.",
"trialBannerMessage": "Din prøveperiode utløper om {countdown}. Oppgrader for å beholde tilgangen.",
"trialBannerExpired": "Prøveperioden din har utløpt. Oppgrader nå for å gjenopprette tilgangen.",
"billingTrialBannerTitle": "Prøveversjon Aktiv",
"billingTrialBannerDescription": "Du har for øyeblikket en gratis prøveversjon på forretningsnivået. Når prøven avsluttes, vil kontoen din automatisk gå tilbake til funksjoner og begrensninger på Basis-nivået. Oppgrader når som helst for å beholde tilgang til de nåværende planens funksjoner.",
"billingTrialBannerUpgrade": "Oppgrader nå",
"billingTrialBadge": "Prøveversjon",
"trialActive": "Gratis prøveversjon aktiv",
"trialExpired": "Prøveperioden er utløpt",
"trialHasEnded": "Din prøveperiode har avsluttet.",
"trialDaysRemaining": "{count, plural, one {# dag igjen} other {# dager igjen}}",
"trialDaysLeftShort": "{days}d igjen av prøveperioden",
"trialGoToBilling": "Gå til faktureringssiden",
"subscriptionViolationViewBilling": "Vis fakturering",
"componentsLicenseViolation": "Lisens Brudd: Denne serveren bruker {usedSites} områder som overskrider den lisensierte grenser av {maxSites} områder. Følg lisensvilkårene for å fortsette å kunne bruke alle funksjonene.",
"componentsSupporterMessage": "Takk for at du støtter Pangolin som en {tier}!",
@@ -81,6 +97,8 @@
"siteConfirmCopy": "Jeg har kopiert konfigurasjonen",
"searchSitesProgress": "Søker i områder...",
"siteAdd": "Legg til område",
"sitesTableViewPublicResources": "Vis offentlige ressurser",
"sitesTableViewPrivateResources": "Vis private ressurser",
"siteInstallNewt": "Installer Newt",
"siteInstallNewtDescription": "Få Newt til å kjøre på systemet ditt",
"WgConfiguration": "WireGuard Konfigurasjon",
@@ -98,6 +116,21 @@
"siteUpdatedDescription": "Området har blitt oppdatert.",
"siteGeneralDescription": "Konfigurer de generelle innstillingene for dette området",
"siteSettingDescription": "Konfigurere innstillingene på nettstedet",
"siteResourcesTab": "Ressurser",
"siteResourcesNoneOnSite": "Dette nettstedet har ingen offentlige eller private ressurser enda.",
"siteResourcesSectionPublic": "Offentlige ressurser",
"siteResourcesSectionPrivate": "Private ressurser",
"siteResourcesSectionPublicDescription": "Ressurser eksponert eksternt gjennom domener eller porter.",
"siteResourcesSectionPrivateDescription": "Ressurser tilgjengelig på ditt private nettverk gjennom nettstedet.",
"siteResourcesViewAllPublic": "Vis alle ressurser",
"siteResourcesViewAllPrivate": "Vis alle ressurser",
"siteResourcesDialogDescription": "Oversikt over offentlige og private ressurser assosiert med dette nettstedet.",
"siteResourcesShowMore": "Vis mer",
"siteResourcesPermissionDenied": "Du har ikke tillatelse til å liste opp disse ressursene.",
"siteResourcesEmptyPublic": "Ingen offentlige ressurser retter seg mot dette nettstedet enda.",
"siteResourcesEmptyPrivate": "Ingen private ressurser er assosiert med dette nettstedet enda.",
"siteResourcesHowToAccess": "Hvordan få tilgang",
"siteResourcesTargetsOnSite": "Mål på dette nettstedet",
"siteSetting": "{siteName} Innstillinger",
"siteNewtTunnel": "Nyhetsnettsted (anbefalt)",
"siteNewtTunnelDescription": "Lekkeste måte å lage et inngangspunkt til ethvert nettverk. Ingen ekstra oppsett på.",
@@ -148,6 +181,11 @@
"createLink": "Opprett lenke",
"resourcesNotFound": "Ingen ressurser funnet",
"resourceSearch": "Søk i ressurser",
"machineSearch": "Søk etter maskiner",
"machinesSearch": "Søk etter maskinklienter...",
"machineNotFound": "Ingen maskiner funnet",
"userDeviceSearch": "Søk etter brukerenheter",
"userDevicesSearch": "Søk etter brukerenheter...",
"openMenu": "Åpne meny",
"resource": "Ressurs",
"title": "Tittel",
@@ -175,6 +213,7 @@
"resourceHTTPDescription": "Proxy forespørsler over HTTPS ved å bruke et fullstendig kvalifisert domenenavn.",
"resourceRaw": "Rå TCP/UDP-ressurs",
"resourceRawDescription": "Proxy forespørsler over rå TCP/UDP ved å bruke et portnummer.",
"resourceRawDescriptionCloud": "Proxy forespørsler om rå TCP/UDP ved hjelp av et portnummer. Krever sider for å koble til en ekstern node.",
"resourceCreate": "Opprett ressurs",
"resourceCreateDescription": "Følg trinnene nedenfor for å opprette en ny ressurs",
"resourceSeeAll": "Se alle ressurser",
@@ -261,8 +300,11 @@
"orgMissing": "Organisasjons-ID Mangler",
"orgMissingMessage": "Kan ikke regenerere invitasjon uten en organisasjons-ID.",
"accessUsersManage": "Administrer brukere",
"accessUserManage": "Administrer brukere",
"accessUsersDescription": "Inviter og behandle brukere med tilgang til denne organisasjonen",
"accessUsersSearch": "Søk etter brukere...",
"accessUsersRoleFilterCount": "{count, plural, one {# rolle} other {# roller}}",
"accessUsersRoleFilterClear": "Fjern rollesøkefiltre",
"accessUserCreate": "Opprett bruker",
"accessUserRemove": "Fjern bruker",
"username": "Brukernavn",
@@ -322,6 +364,54 @@
"apiKeysDelete": "Slett API-nøkkel",
"apiKeysManage": "Administrer API-nøkler",
"apiKeysDescription": "API-nøkler brukes for å autentisere med integrasjons-API",
"provisioningKeysTitle": "Foreløpig nøkkel",
"provisioningKeysManage": "Behandle bestemmende nøkler",
"provisioningKeysDescription": "Bestemmelsesnøkler brukes til å godkjenne automatisert nettstedsløsning for din organisasjon.",
"provisioningManage": "Levering",
"provisioningDescription": "Administrer foreløpig nøkler og gjennomgå ventende nettsteder som venter på godkjenning.",
"pendingSites": "Ventende nettsteder",
"siteApproveSuccess": "Vellykket godkjenning av nettsted",
"siteApproveError": "Feil ved godkjenning av side",
"provisioningKeys": "Foreløpig nøkler",
"searchProvisioningKeys": "Søk varer i lagrings nøkler...",
"provisioningKeysAdd": "Generer fremvisende nøkkel",
"provisioningKeysErrorDelete": "Feil under sletting av foreløpig nøkkel",
"provisioningKeysErrorDeleteMessage": "Feil under sletting av foreløpig nøkkel",
"provisioningKeysQuestionRemove": "Er du sikker på at du vil fjerne denne midlertidig nøkkelen fra organisasjonen?",
"provisioningKeysMessageRemove": "Når nøkkelen er fjernet, kan den ikke lenger brukes til anleggsavsetning.",
"provisioningKeysDeleteConfirm": "Bekreft sletting av bestemmelsesnøkkel",
"provisioningKeysDelete": "Slett bestemmelsesnøkkel",
"provisioningKeysCreate": "Generer fremvisende nøkkel",
"provisioningKeysCreateDescription": "Generer en ny foreløpig nøkkel til organisasjonen",
"provisioningKeysSeeAll": "Se alle foreløpig nøkler",
"provisioningKeysSave": "Lagre den midlertidig nøkkelen",
"provisioningKeysSaveDescription": "Du kan bare se denne én gang. Kopier det til et sikkert sted.",
"provisioningKeysErrorCreate": "Feil under oppretting av foreløpig nøkkel",
"provisioningKeysList": "Ny provisorisk nøkkel",
"provisioningKeysMaxBatchSize": "Maks størrelse på bunt",
"provisioningKeysUnlimitedBatchSize": "Ubegrenset mengde bunt (ingen begrensning)",
"provisioningKeysMaxBatchUnlimited": "Ubegrenset",
"provisioningKeysMaxBatchSizeInvalid": "Angi en gyldig sjakkstørrelse (11 000.000).",
"provisioningKeysValidUntil": "Gyldig til",
"provisioningKeysValidUntilHint": "La stå tomt for ingen utløp.",
"provisioningKeysValidUntilInvalid": "Angi en gyldig dato og klokkeslett.",
"provisioningKeysNumUsed": "Antall ganger brukt",
"provisioningKeysLastUsed": "Sist brukt",
"provisioningKeysNoExpiry": "Ingen utløpsdato",
"provisioningKeysNeverUsed": "Aldri",
"provisioningKeysEdit": "Rediger bestemmelsesnøkkel",
"provisioningKeysEditDescription": "Oppdater maksimal størrelse for bunt og utløpstid for denne nøkkelen.",
"provisioningKeysApproveNewSites": "Godkjenn nye nettsteder",
"provisioningKeysApproveNewSitesDescription": "Godkjenn automatisk nettsteder som registrerer deg med denne nøkkelen.",
"provisioningKeysUpdateError": "Feil under oppdatering av foreløpig nøkkel",
"provisioningKeysUpdated": "Foreslå nøkkel oppdatert",
"provisioningKeysUpdatedDescription": "Dine endringer er lagret.",
"provisioningKeysBannerTitle": "Sidens bestemmende nøkler",
"provisioningKeysBannerDescription": "Generer en provisjonsnøkkel og bruk den med Newt-kontakten for automatisk opprettelse av nettsteder ved første oppstart - ingen behov for å sette opp separate legitimasjoner for hvert nettsted.",
"provisioningKeysBannerButtonText": "Lær mer",
"pendingSitesBannerTitle": "Ventende nettsteder",
"pendingSitesBannerDescription": "Nettsteder som kobler seg til ved bruk av en provisjonsnøkkel vises her for vurdering.",
"pendingSitesBannerButtonText": "Lær mer",
"apiKeysSettings": "{apiKeyName} Innstillinger",
"userTitle": "Administrer alle brukere",
"userDescription": "Vis og administrer alle brukere i systemet",
@@ -351,6 +441,10 @@
"licenseErrorKeyActivate": "Aktivering av lisensnøkkel feilet",
"licenseErrorKeyActivateDescription": "Det oppstod en feil under aktivering av lisensnøkkelen.",
"licenseAbout": "Om Lisensiering",
"licenseBannerTitle": "Aktiver din bedriftslisens",
"licenseBannerDescription": "Lås opp bedriftsfunksjoner for din egenvertede Pangolin-instans. Kjøp en lisensnøkkel for å aktivere premium-funksjoner og legg den inn nedenfor.",
"licenseBannerGetLicense": "Få en lisens",
"licenseBannerViewDocs": "Vis dokumentasjon",
"communityEdition": "Fellesskapsutgave",
"licenseAboutDescription": "Dette er for bedrifts- og foretaksbrukere som bruker Pangolin i et kommersielt miljø. Hvis du bruker Pangolin til personlig bruk, kan du ignorere denne seksjonen.",
"licenseKeyActivated": "Lisensnøkkel aktivert",
@@ -508,9 +602,12 @@
"userSaved": "Bruker lagret",
"userSavedDescription": "Brukeren har blitt oppdatert.",
"autoProvisioned": "Auto avlyst",
"autoProvisionSettings": "Auto leveringsinnstillinger",
"autoProvisionedDescription": "Tillat denne brukeren å bli automatisk administrert av en identitetsleverandør",
"accessControlsDescription": "Administrer hva denne brukeren kan få tilgang til og gjøre i organisasjonen",
"accessControlsSubmit": "Lagre tilgangskontroller",
"singleRolePerUserPlanNotice": "Din plan støtter bare én rolle per bruker.",
"singleRolePerUserEditionNotice": "Denne utgaven støtter bare én rolle per bruker.",
"roles": "Roller",
"accessUsersRoles": "Administrer brukere og roller",
"accessUsersRolesDescription": "Inviter brukere og legg dem til roller for å administrere tilgang til organisasjonen",
@@ -567,6 +664,8 @@
"targetErrorInvalidPortDescription": "Vennligst skriv inn et gyldig portnummer",
"targetErrorNoSite": "Ingen nettsted valgt",
"targetErrorNoSiteDescription": "Velg et nettsted for målet",
"targetTargetsCleared": "Mål ryddet",
"targetTargetsClearedDescription": "Alle mål har blitt fjernet fra denne ressursen",
"targetCreated": "Mål opprettet",
"targetCreatedDescription": "Målet har blitt opprettet",
"targetErrorCreate": "Kunne ikke opprette målet",
@@ -650,6 +749,7 @@
"resourcesErrorUpdate": "Feilet å slå av/på ressurs",
"resourcesErrorUpdateDescription": "En feil oppstod under oppdatering av ressursen",
"access": "Tilgang",
"accessControl": "Tilgangskontroll",
"shareLink": "{resource} Del Lenke",
"resourceSelect": "Velg ressurs",
"shareLinks": "Del lenker",
@@ -667,6 +767,7 @@
"newtEndpoint": "Endpoint",
"newtId": "ID",
"newtSecretKey": "Sikkerhetsnøkkel",
"newtVersion": "Versjon",
"architecture": "Arkitektur",
"sites": "Områder",
"siteWgAnyClients": "Bruk hvilken som helst WireGuard klient til å koble til. Du må adressere interne ressurser ved hjelp av peer IP.",
@@ -790,6 +891,7 @@
"accessRoleRemoved": "Rolle fjernet",
"accessRoleRemovedDescription": "Rollen er vellykket fjernet.",
"accessRoleRequiredRemove": "Før du sletter denne rollen, vennligst velg en ny rolle å overføre eksisterende medlemmer til.",
"network": "Nettverk",
"manage": "Administrer",
"sitesNotFound": "Ingen områder funnet.",
"pangolinServerAdmin": "Server Admin - Pangolin",
@@ -833,6 +935,7 @@
"idpDisplayName": "Et visningsnavn for denne identitetsleverandøren",
"idpAutoProvisionUsers": "Automatisk brukerklargjøring",
"idpAutoProvisionUsersDescription": "Når aktivert, opprettes brukere automatisk i systemet ved første innlogging, med mulighet til å tilordne brukere til roller og organisasjoner.",
"idpAutoProvisionConfigureAfterCreate": "Du kan konfigurere autoprovisjonsinnstillingene når identitetsleverandøren er opprettet.",
"licenseBadge": "EE",
"idpType": "Leverandørtype",
"idpTypeDescription": "Velg typen identitetsleverandør du ønsker å konfigurere",
@@ -884,7 +987,7 @@
"defaultMappingsRole": "Standard rolletilordning",
"defaultMappingsRoleDescription": "Resultatet av dette uttrykket må returnere rollenavnet slik det er definert i organisasjonen som en streng.",
"defaultMappingsOrg": "Standard organisasjonstilordning",
"defaultMappingsOrgDescription": "Dette uttrykket returnere organisasjons-ID-en eller «true» for å gi brukeren tilgang til organisasjonen.",
"defaultMappingsOrgDescription": "Når denne er satt, må uttrykket returnere organisasjons-IDen eller «true» for at brukeren skal få tilgang til den organisasjonen. Når den ikke er satt, er det nok å definere en rolletilordning: brukeren gis tilgang så lenge en gyldig rolletilknytting kan løses for dem i organisasjonen.",
"defaultMappingsSubmit": "Lagre standard tilordninger",
"orgPoliciesEdit": "Rediger Organisasjonspolicy",
"org": "Organisasjon",
@@ -1037,7 +1140,6 @@
"pageNotFoundDescription": "Oops! Siden du leter etter finnes ikke.",
"overview": "Oversikt",
"home": "Hjem",
"accessControl": "Tilgangskontroll",
"settings": "Innstillinger",
"usersAll": "Alle brukere",
"license": "Lisens",
@@ -1100,6 +1202,12 @@
"actionGetUser": "Hent bruker",
"actionGetOrgUser": "Hent organisasjonsbruker",
"actionListOrgDomains": "List opp organisasjonsdomener",
"actionGetDomain": "Få Domene",
"actionCreateOrgDomain": "Opprett domene",
"actionUpdateOrgDomain": "Oppdater domene",
"actionDeleteOrgDomain": "Slett domene",
"actionGetDNSRecords": "Hent DNS-oppføringer",
"actionRestartOrgDomain": "Omstart Domene",
"actionCreateSite": "Opprett område",
"actionDeleteSite": "Slett område",
"actionGetSite": "Hent område",
@@ -1111,6 +1219,7 @@
"setupTokenDescription": "Skriv inn oppsetttoken fra serverkonsollen.",
"setupTokenRequired": "Oppsetttoken er nødvendig",
"actionUpdateSite": "Oppdater område",
"actionResetSiteBandwidth": "Tilbakestill organisasjons-båndbredde",
"actionListSiteRoles": "List opp tillatte områderoller",
"actionCreateResource": "Opprett ressurs",
"actionDeleteResource": "Slett ressurs",
@@ -1140,6 +1249,7 @@
"actionRemoveUser": "Fjern bruker",
"actionListUsers": "List opp brukere",
"actionAddUserRole": "Legg til brukerrolle",
"actionSetUserOrgRoles": "Angi brukerroller",
"actionGenerateAccessToken": "Generer tilgangstoken",
"actionDeleteAccessToken": "Slett tilgangstoken",
"actionListAccessTokens": "List opp tilgangstokener",
@@ -1184,6 +1294,7 @@
"actionViewLogs": "Vis logger",
"noneSelected": "Ingen valgt",
"orgNotFound2": "Ingen organisasjoner funnet.",
"search": "Søk…",
"searchPlaceholder": "Søk...",
"emptySearchOptions": "Ingen valg funnet",
"create": "Opprett",
@@ -1249,12 +1360,14 @@
"sidebarClientResources": "Privat",
"sidebarAccessControl": "Tilgangskontroll",
"sidebarLogsAndAnalytics": "Logger og analyser",
"sidebarTeam": "Lag",
"sidebarUsers": "Brukere",
"sidebarAdmin": "Administrator",
"sidebarInvitations": "Invitasjoner",
"sidebarRoles": "Roller",
"sidebarShareableLinks": "Lenker",
"sidebarApiKeys": "API-nøkler",
"sidebarProvisioning": "Levering",
"sidebarSettings": "Innstillinger",
"sidebarAllUsers": "Alle brukere",
"sidebarIdentityProviders": "Identitetsleverandører",
@@ -1266,9 +1379,167 @@
"sidebarGeneral": "Administrer",
"sidebarLogAndAnalytics": "Logg og analyser",
"sidebarBluePrints": "Tegninger",
"sidebarAlerting": "Varsling",
"sidebarHealthChecks": "Helsekontroller",
"sidebarOrganization": "Organisasjon",
"sidebarManagement": "Administrasjon",
"sidebarBillingAndLicenses": "Fakturering & lisenser",
"sidebarLogsAnalytics": "Analyser",
"alertingTitle": "Varsling",
"alertingDescription": "Definer kilder, triggere og handlinger for varsler",
"alertingRules": "Varslingsregler",
"alertingSearchRules": "Søk i regler…",
"alertingAddRule": "Opprett regel",
"alertingColumnSource": "Kilde",
"alertingColumnTrigger": "Utløser",
"alertingColumnActions": "Handlinger",
"alertingColumnEnabled": "Aktivert",
"alertingDeleteQuestion": "Vennligst bekreft at du vil slette denne varslingsregelen.",
"alertingDeleteRule": "Slett varslingsregel",
"alertingRuleDeleted": "Varslingsregel slettet",
"alertingRuleSaved": "Varslingsregel lagret",
"alertingRuleSavedCreatedDescription": "Din nye varslingsregel ble opprettet. Du kan fortsette å redigere den på denne siden.",
"alertingRuleSavedUpdatedDescription": "Endringene dine i denne varslingsregelen ble lagret.",
"alertingEditRule": "Rediger varslingsregel",
"alertingCreateRule": "Opprett varslingsregel",
"alertingRuleCredenzaDescription": "Velg hva som skal overvåkes, når det skal varsles, og hvordan du vil bli informert",
"alertingRuleNamePlaceholder": "Produksjonsside nede",
"alertingRuleEnabled": "Regel aktivert",
"alertingSectionSource": "Kilde",
"alertingSourceType": "Kildetype",
"alertingSourceSite": "Område",
"alertingSourceHealthCheck": "Helsekontroll",
"alertingPickSites": "Områder",
"alertingPickHealthChecks": "Helsekontroller",
"alertingPickResources": "Ressurser",
"alertingAllSites": "Alle områder",
"alertingAllSitesDescription": "Varsler for alle områder",
"alertingSpecificSites": "Spesifikke områder",
"alertingSpecificSitesDescription": "Velg spesifikke områder for overvåking",
"alertingAllHealthChecks": "Alle helsekontroller",
"alertingAllHealthChecksDescription": "Varsler for alle helsekontroller",
"alertingSpecificHealthChecks": "Spesifikke helsekontroller",
"alertingSpecificHealthChecksDescription": "Velg spesifikke helsekontroller for overvåking",
"alertingAllResources": "Alle ressurser",
"alertingAllResourcesDescription": "Varsler for alle ressurser",
"alertingSpecificResources": "Spesifikke ressurser",
"alertingSpecificResourcesDescription": "Velg spesifikke ressurser for overvåking",
"alertingSelectResources": "Velg ressurser…",
"alertingResourcesSelected": "{count} ressurser valgt",
"alertingResourcesEmpty": "Ingen ressurser med mål i de første 10 resultatene.",
"alertingSectionTrigger": "Utløser",
"alertingTrigger": "Når skal det varsles",
"alertingTriggerSiteOnline": "Nettsted er online",
"alertingTriggerSiteOffline": "Nettsted er offline",
"alertingTriggerSiteToggle": "Endringer i nettstedstatus",
"alertingTriggerHcHealthy": "Helsekontroll sunn",
"alertingTriggerHcUnhealthy": "Helsekontroll usunn",
"alertingTriggerHcToggle": "Endringer i helsekontrollstatus",
"alertingTriggerResourceHealthy": "Ressurs sunn",
"alertingTriggerResourceUnhealthy": "Ressurs usunn",
"alertingTriggerResourceDegraded": "Ressurs forringet",
"alertingSearchHealthChecks": "Søk i helsekontroller…",
"alertingHealthChecksEmpty": "Ingen tilgjengelige helsekontroller.",
"alertingTriggerResourceToggle": "Endringer i ressursstatus",
"alertingSourceResource": "Ressurs",
"alertingSectionActions": "Handlinger",
"alertingAddAction": "Legg til handling",
"alertingActionNotify": "E-post",
"alertingActionNotifyDescription": "Send e-postvarsler til brukere eller roller",
"alertingActionWebhook": "Webhook",
"alertingActionWebhookDescription": "Send en HTTP-forespørsel til et tilpasset endepunkt",
"alertingExternalIntegration": "Ekstern integrasjon",
"alertingExternalPagerDutyDescription": "Send varsler til PagerDuty for hendelseshåndtering",
"alertingExternalOpsgenieDescription": "Rute varsler til Opsgenie for vakt håndtering",
"alertingExternalServiceNowDescription": "Opprett ServiceNow hendelser fra varslingseventer",
"alertingExternalIncidentIoDescription": "Utløs Incident.io arbeidsflyter fra varsels begivenheter",
"alertingActionType": "Handlings type",
"alertingNotifyUsers": "Brukere",
"alertingNotifyRoles": "Roller",
"alertingNotifyEmails": "E-postadresser",
"alertingEmailPlaceholder": "Legg til e-post og trykk Enter",
"alertingWebhookMethod": "HTTP-metode",
"alertingWebhookSecret": "Signeringshemmelig (valgfritt)",
"alertingWebhookSecretPlaceholder": "HMAC-hemmelig",
"alertingWebhookHeaders": "Overskrifter",
"alertingAddHeader": "Legg til header",
"alertingSelectSites": "Velg områder…",
"alertingSitesSelected": "{count} områder valgt",
"alertingSelectHealthChecks": "Velg helsekontroller…",
"alertingHealthChecksSelected": "{count} helsekontroller valgt",
"alertingNoHealthChecks": "Ingen mål med helsekontroller aktivert",
"alertingHealthCheckStub": "Valg av helsekontrollkilde er ikke sluttført ennå - du kan fortsatt konfigurere triggere og handlinger.",
"alertingSelectUsers": "Velg brukere…",
"alertingUsersSelected": "{count} brukere valgt",
"alertingSelectRoles": "Velg roller…",
"alertingRolesSelected": "{count} roller valgt",
"alertingSummarySites": "Områder ({count})",
"alertingSummaryAllSites": "Alle områder",
"alertingSummaryHealthChecks": "Helsekontroller ({count})",
"alertingSummaryAllHealthChecks": "Alle helsekoner",
"alertingSummaryResources": "Ressurser ({count})",
"alertingSummaryAllResources": "Alle ressurser",
"alertingErrorNameRequired": "Skriv inn et navn",
"alertingErrorActionsMin": "Legg til minst én handling",
"alertingErrorPickSites": "Velg minst ett område",
"alertingErrorPickHealthChecks": "Velg minst én helsekontroll",
"alertingErrorPickResources": "Velg minst én ressurs",
"alertingErrorTriggerSite": "Velg en triggetjeneste for nettsted",
"alertingErrorTriggerHealth": "Velg en triggetjeneste for helsekontroll",
"alertingErrorTriggerResource": "Velg en triggetjeneste for ressurs",
"alertingErrorNotifyRecipients": "Velg brukere, roller, eller minst én e-post",
"alertingConfigureSource": "Konfigurer kilde",
"alertingConfigureTrigger": "Konfigurer trigger",
"alertingConfigureActions": "Konfigurer handlinger",
"alertingBackToRules": "Tilbake til regler",
"alertingRuleCooldown": "Nedkjøling (sekunder)",
"alertingRuleCooldownDescription": "Minimum tid mellom gjentatte varsler for samme regel. Sett til 0 for å skyte hver gang.",
"alertingDraftBadge": "Utkast - lagre for å lagre denne regelen",
"alertingSidebarHint": "Klikk på et steg på lerretet for å redigere det her.",
"alertingGraphCanvasTitle": "Regel Flyt",
"alertingGraphCanvasDescription": "Visuell oversikt over kilde, trigger og handlinger. Velg en node for å redigere den i panelet.",
"alertingNodeNotConfigured": "Ikke konfigurert ennå",
"alertingNodeActionsCount": "{count, plural, one {# handling} other {# handlinger}}",
"alertingNodeRoleSource": "Kilde",
"alertingNodeRoleTrigger": "Utløser",
"alertingNodeRoleAction": "Handling",
"alertingTabRules": "Varslingsregler",
"alertingTabHealthChecks": "Helsekontroller",
"alertingRulesBannerTitle": "Bli varslet",
"alertingRulesBannerDescription": "Hver regel binder sammen hva som skal overvåkes (et område, helsekontroll eller ressurs), når det skal varsles (for eksempel offline eller usunn), og hvordan varsle teamet ditt via e-post, webhooks eller integrasjoner. Bruk denne listen for å opprette, aktivere og administrere disse reglene.",
"alertingHealthChecksBannerTitle": "Overvåk helse & ressurser",
"alertingHealthChecksBannerDescription": "Helsekontroller er HTTP- eller TCP-monitorer du definerer én gang. Du kan deretter bruke dem som kilder i varslingsregler slik at du blir varslet når et mål blir sunt eller usunt. Helsekontroller på ressurser vises også her.",
"standaloneHcTableTitle": "Helsekontroller",
"standaloneHcSearchPlaceholder": "Søk i helsekontroller…",
"standaloneHcAddButton": "Opprett helsekontroll",
"standaloneHcCreateTitle": "Opprett helsekontroll",
"standaloneHcEditTitle": "Rediger helsekontroll",
"standaloneHcDescription": "Konfigurer en HTTP- eller TCP-helsekontroll for bruk i varslingsregler.",
"standaloneHcNameLabel": "Navn",
"standaloneHcNamePlaceholder": "Min HTTP-monitor",
"standaloneHcDeleteTitle": "Slett helsekontroll",
"standaloneHcDeleteQuestion": "Vennligst bekreft at du vil slette denne helsekontrollen.",
"standaloneHcDeleted": "Helsekontroll slettet",
"standaloneHcSaved": "Helsekontroll lagret",
"standaloneHcColumnHealth": "Helse",
"standaloneHcColumnMode": "Modus",
"standaloneHcColumnTarget": "Mål",
"standaloneHcHealthStateHealthy": "Sunn",
"standaloneHcHealthStateUnhealthy": "Usunn",
"standaloneHcHealthStateUnknown": "Ukjent",
"standaloneHcFilterAnySite": "Alle områder",
"standaloneHcFilterAnyResource": "Alle ressurser",
"standaloneHcFilterMode": "Modus",
"standaloneHcFilterModeHttp": "HTTP",
"standaloneHcFilterModeTcp": "TCP",
"standaloneHcFilterModeSnmp": "SNMP",
"standaloneHcFilterModePing": "Ping",
"standaloneHcFilterHealth": "Helse",
"standaloneHcFilterEnabled": "Aktivert",
"standaloneHcFilterEnabledOn": "Aktivert",
"standaloneHcFilterEnabledOff": "Deaktivert",
"standaloneHcFilterSiteIdFallback": "Område {id}",
"standaloneHcFilterResourceIdFallback": "Ressurs {id}",
"blueprints": "Tegninger",
"blueprintsDescription": "Bruk deklarative konfigurasjoner og vis tidligere kjøringer",
"blueprintAdd": "Legg til blåkopi",
@@ -1289,7 +1560,6 @@
"parsedContents": "Parastinnhold (kun lese)",
"enableDockerSocket": "Aktiver Docker blåkopi",
"enableDockerSocketDescription": "Aktiver skraping av Docker Socket for blueprint Etiketter. Socket bane må brukes for nye.",
"enableDockerSocketLink": "Lær mer",
"viewDockerContainers": "Vis Docker-containere",
"containersIn": "Containere i {siteName}",
"selectContainerDescription": "Velg en hvilken som helst container for å bruke som vertsnavn for dette målet. Klikk på en port for å bruke en port.",
@@ -1331,7 +1601,8 @@
"initialSetupDescription": "Opprett den første serveradministratorkontoen. Det kan bare finnes én serveradministrator. Du kan alltid endre denne påloggingsinformasjonen senere.",
"createAdminAccount": "Opprett administratorkonto",
"setupErrorCreateAdmin": "En feil oppstod under opprettelsen av serveradministratorkontoen.",
"certificateStatus": "Sertifikatstatus",
"certificateStatus": "Sertifikat",
"certificateStatusAutoRefreshHint": "Status oppdateres automatisk.",
"loading": "Laster inn",
"loadingAnalytics": "Laster inn analyser",
"restart": "Start på nytt",
@@ -1400,6 +1671,7 @@
"pangolinUpdateAvailableReleaseNotes": "Se utgivelsesnotater",
"newtUpdateAvailable": "Oppdatering tilgjengelig",
"newtUpdateAvailableInfo": "En ny versjon av Newt er tilgjengelig. Vennligst oppdater til den nyeste versjonen for den beste opplevelsen.",
"pangolinNodeUpdateAvailableInfo": "En ny versjon av Pangolin Node er tilgjengelig. Vennligst oppdater til den nyeste versjonen for den beste opplevelsen.",
"domainPickerEnterDomain": "Domene",
"domainPickerPlaceholder": "minapp.eksempel.no",
"domainPickerDescription": "Skriv inn hele domenet til ressursen for å se tilgjengelige alternativer.",
@@ -1417,6 +1689,7 @@
"domainPickerNamespace": "Navnerom: {namespace}",
"domainPickerShowMore": "Vis mer",
"regionSelectorTitle": "Velg Region",
"domainPickerRemoteExitNodeWarning": "Tilbudte domener støttes ikke når sider kobles til eksterne avkjøringsnoder. For ressurser som skal være tilgjengelige på eksterne noder, brukes et egendefinert domene i stedet.",
"regionSelectorInfo": "Å velge en region hjelper oss med å gi bedre ytelse for din lokasjon. Du trenger ikke være i samme region som serveren.",
"regionSelectorPlaceholder": "Velg en region",
"regionSelectorComingSoon": "Kommer snart",
@@ -1570,6 +1843,16 @@
"billingFeatureLossWarning": "Fremhev tilgjengelig varsel",
"billingFeatureLossDescription": "Ved å nedgradere vil funksjoner som ikke er tilgjengelige i den nye planen automatisk bli deaktivert. Noen innstillinger og konfigurasjoner kan gå tapt. Vennligst gjennomgå prismatrisen for å forstå hvilke funksjoner som ikke lenger vil være tilgjengelige.",
"billingUsageExceedsLimit": "Gjeldende bruk ({current}) overskrider grensen ({limit})",
"billingPastDueTitle": "Betalingen har forfalt",
"billingPastDueDescription": "Betalingen er forfalt. Vennligst oppdater betalingsmetoden din for å fortsette å bruke den gjeldende funksjonsplanen din. Hvis du ikke har løst deg, vil abonnementet ditt avbrytes, og du vil bli tilbakestilt til gratistiden.",
"billingUnpaidTitle": "Abonnement ubetalt",
"billingUnpaidDescription": "Ditt abonnement er ubetalt og du har blitt tilbakestilt til gratis kasse. Vennligst oppdater din betalingsmetode for å gjenopprette abonnementet.",
"billingIncompleteTitle": "Betaling ufullstendig",
"billingIncompleteDescription": "Betalingen er ufullstendig. Vennligst fullfør betalingsprosessen for å aktivere abonnementet.",
"billingIncompleteExpiredTitle": "Betaling utløpt",
"billingIncompleteExpiredDescription": "Din betaling ble aldri fullført, og har utløpt. Du har blitt tilbakestilt til gratis dekk. Vennligst abonner på nytt for å gjenopprette tilgangen til betalte funksjoner.",
"billingManageSubscription": "Administrere ditt abonnement",
"billingResolvePaymentIssue": "Vennligst løs ditt betalingsproblem før du oppgraderer eller nedgraderer betalingen",
"signUpTerms": {
"IAgreeToThe": "Jeg godtar",
"termsOfService": "brukervilkårene",
@@ -1628,6 +1911,7 @@
"configureHealthCheck": "Konfigurer Helsekontroll",
"configureHealthCheckDescription": "Sett opp helsekontroll for {target}",
"enableHealthChecks": "Aktiver Helsekontroller",
"healthCheckDisabledStateDescription": "Når deaktivert, vil ikke nettstedet utføre helsekontroller, og tilstanden vil anses som ukjent.",
"enableHealthChecksDescription": "Overvåk helsen til dette målet. Du kan overvåke et annet endepunkt enn målet hvis nødvendig.",
"healthScheme": "Metode",
"healthSelectScheme": "Velg metode",
@@ -1643,6 +1927,24 @@
"timeIsInSeconds": "Tid er i sekunder",
"requireDeviceApproval": "Krev enhetsgodkjenning",
"requireDeviceApprovalDescription": "Brukere med denne rollen trenger nye enheter godkjent av en admin før de kan koble seg og få tilgang til ressurser.",
"sshAccess": "SSH tilgang",
"roleAllowSsh": "Tillat SSH",
"roleAllowSshAllow": "Tillat",
"roleAllowSshDisallow": "Forby",
"roleAllowSshDescription": "Tillat brukere med denne rollen å koble til ressurser via SSH. Når deaktivert får rollen ikke tilgang til SSH.",
"sshSudoMode": "Sudo tilgang",
"sshSudoModeNone": "Ingen",
"sshSudoModeNoneDescription": "Brukeren kan ikke kjøre kommandoer med sudo.",
"sshSudoModeFull": "Full Sudo",
"sshSudoModeFullDescription": "Brukeren kan kjøre hvilken som helst kommando med sudo.",
"sshSudoModeCommands": "Kommandoer",
"sshSudoModeCommandsDescription": "Brukeren kan bare kjøre de angitte kommandoene med sudo.",
"sshSudo": "Tillat sudo",
"sshSudoCommands": "Sudo kommandoer",
"sshSudoCommandsDescription": "Kommaseparert liste med kommandoer brukeren kan kjøre med sudo.",
"sshCreateHomeDir": "Opprett hjemmappe",
"sshUnixGroups": "Unix grupper",
"sshUnixGroupsDescription": "Kommaseparerte Unix grupper for å legge brukeren til på mål-verten.",
"retryAttempts": "Forsøk på nytt",
"expectedResponseCodes": "Forventede svarkoder",
"expectedResponseCodesDescription": "HTTP-statuskode som indikerer sunn status. Hvis den blir stående tom, regnes 200-300 som sunn.",
@@ -1659,9 +1961,20 @@
"healthCheckIntervalMin": "Sjekkeintervallet må være minst 5 sekunder",
"healthCheckTimeoutMin": "Timeout må være minst 1 sekund",
"healthCheckRetryMin": "Forsøk på nytt må være minst 1",
"healthCheckMode": "Sjekk modus",
"healthCheckStrategy": "Strategi",
"healthCheckModeDescription": "TCP-modus verifiserer kun tilkobling. HTTP-modus validerer HTTP-responsen.",
"healthyThreshold": "Sunnhets terskel",
"healthyThresholdDescription": "Suksesser på rad som kreves før man markerer som sunn.",
"unhealthyThreshold": "Usunn terskel",
"unhealthyThresholdDescription": "Feil på rad som kreves før man markerer som usunn.",
"healthCheckHealthyThresholdMin": "Sunnhet terskel må være minst 1",
"healthCheckUnhealthyThresholdMin": "Usunn terskel må være minst 1",
"httpMethod": "HTTP-metode",
"selectHttpMethod": "Velg HTTP-metode",
"domainPickerSubdomainLabel": "Underdomene",
"domainPickerWildcard": "Jokertegn",
"domainPickerWildcardPaidOnly": "Jokertegnsubdomener er en betalt funksjon. Vennligst oppgrader for å få tilgang til denne funksjonen.",
"domainPickerBaseDomainLabel": "Grunndomene",
"domainPickerSearchDomains": "Søk i domener...",
"domainPickerNoDomainsFound": "Ingen domener funnet",
@@ -1687,12 +2000,12 @@
"resourcesTableAliasAddressInfo": "Denne adressen er en del av organisasjonens undernettverk. Den brukes til å løse aliasposter ved hjelp av intern DNS-oppløsning.",
"resourcesTableClients": "Klienter",
"resourcesTableAndOnlyAccessibleInternally": "og er kun tilgjengelig internt når de er koblet til med en klient.",
"resourcesTableNoTargets": "Ingen mål",
"resourcesTableHealthy": "Frisk",
"resourcesTableDegraded": "Nedgradert",
"resourcesTableOffline": "Frakoblet",
"resourcesTableUnhealthy": "Usunn",
"resourcesTableUnknown": "Ukjent",
"resourcesTableNotMonitored": "Ikke overvåket",
"resourcesTableNoTargets": "Ingen mål",
"editInternalResourceDialogEditClientResource": "Rediger Private Ressurser",
"editInternalResourceDialogUpdateResourceProperties": "Oppdater ressurskonfigurasjonen og få tilgangskontroller for {resourceName}",
"editInternalResourceDialogResourceProperties": "Ressursegenskaper",
@@ -1718,6 +2031,11 @@
"editInternalResourceDialogModePort": "Port",
"editInternalResourceDialogModeHost": "Vert",
"editInternalResourceDialogModeCidr": "CIDR",
"editInternalResourceDialogModeHttp": "HTTP",
"editInternalResourceDialogModeHttps": "HTTPS",
"editInternalResourceDialogScheme": "Skjema",
"editInternalResourceDialogEnableSsl": "Aktiver SSL",
"editInternalResourceDialogEnableSslDescription": "Aktiver SSL/TLS-kryptering for sikre HTTPS-tilkoblinger til destinasjonen.",
"editInternalResourceDialogDestination": "Destinasjon",
"editInternalResourceDialogDestinationHostDescription": "IP-adressen eller vertsnavnet til ressursen på nettstedets nettverk.",
"editInternalResourceDialogDestinationIPDescription": "IP eller vertsnavn til ressursen på nettstedets nettverk.",
@@ -1733,6 +2051,7 @@
"createInternalResourceDialogName": "Navn",
"createInternalResourceDialogSite": "Område",
"selectSite": "Velg område...",
"multiSitesSelectorSitesCount": "{count, plural, one {# sted} other {# steder}}",
"noSitesFound": "Ingen områder funnet.",
"createInternalResourceDialogProtocol": "Protokoll",
"createInternalResourceDialogTcp": "TCP",
@@ -1761,11 +2080,19 @@
"createInternalResourceDialogModePort": "Port",
"createInternalResourceDialogModeHost": "Vert",
"createInternalResourceDialogModeCidr": "CIDR",
"createInternalResourceDialogModeHttp": "HTTP",
"createInternalResourceDialogModeHttps": "HTTPS",
"scheme": "Skjema",
"createInternalResourceDialogScheme": "Skjema",
"createInternalResourceDialogEnableSsl": "Aktiver SSL",
"createInternalResourceDialogEnableSslDescription": "Aktiver SSL/TLS-kryptering for sikre HTTPS-tilkoblinger til destinasjonen.",
"createInternalResourceDialogDestination": "Destinasjon",
"createInternalResourceDialogDestinationHostDescription": "IP-adressen eller vertsnavnet til ressursen på nettstedets nettverk.",
"createInternalResourceDialogDestinationCidrDescription": "CIDR-rekkevidden til ressursen på nettstedets nettverk.",
"createInternalResourceDialogAlias": "Alias",
"createInternalResourceDialogAliasDescription": "Et valgfritt internt DNS-alias for denne ressursen.",
"internalResourceDownstreamSchemeRequired": "Skjema er påkrevd for HTTP-ressurser",
"internalResourceHttpPortRequired": "Destinasjonsport er nødvendig for HTTP-ressurser",
"siteConfiguration": "Konfigurasjon",
"siteAcceptClientConnections": "Godta klientforbindelser",
"siteAcceptClientConnectionsDescription": "Tillat brukere og klienter å få tilgang til ressurser på denne siden. Dette kan endres senere.",
@@ -1851,6 +2178,40 @@
"exitNode": "Utgangsnode",
"country": "Land",
"rulesMatchCountry": "For tiden basert på kilde IP",
"region": "Fylke",
"selectRegion": "Velg region",
"searchRegions": "Søk etter områder...",
"noRegionFound": "Ingen region funnet.",
"rulesMatchRegion": "Velg en regional gruppering av land",
"rulesErrorInvalidRegion": "Ugyldig område",
"rulesErrorInvalidRegionDescription": "Vennligst velg et gyldig område.",
"regionAfrica": "Afrika",
"regionNorthernAfrica": "[country name] Nord-Afrika",
"regionEasternAfrica": "Øst-Afrika",
"regionMiddleAfrica": "Middle Africa",
"regionSouthernAfrica": "Sør-Afrika",
"regionWesternAfrica": "[country name] Vest-Afrika",
"regionAmericas": "Amerika",
"regionCaribbean": "Karibia",
"regionCentralAmerica": "Sentral-Amerika",
"regionSouthAmerica": "Sør-Amerika",
"regionNorthernAmerica": "Nord-Amerika",
"regionAsia": "Asia",
"regionCentralAsia": "Sentral-Asia",
"regionEasternAsia": "Øst-Asia",
"regionSouthEasternAsia": "Sørøst-Asia",
"regionSouthernAsia": "Sørlige Asia",
"regionWesternAsia": "Vest-Asia",
"regionEurope": "Europa",
"regionEasternEurope": "Øst-Europa",
"regionNorthernEurope": "Nord-Europa",
"regionSouthernEurope": "Sørlige Europa",
"regionWesternEurope": "Vest-Europa",
"regionOceania": "Oceania",
"regionAustraliaAndNewZealand": "Australia og New Zealand",
"regionMelanesia": "Melanesia",
"regionMicronesia": "Micronesia",
"regionPolynesia": "Polynesia",
"managedSelfHosted": {
"title": "Administrert selv-hostet",
"description": "Sikre og lavvedlikeholdsservere, selvbetjente Pangolin med ekstra klokker, og understell",
@@ -1889,7 +2250,7 @@
},
"internationaldomaindetected": "Internasjonalt domene oppdaget",
"willbestoredas": "Vil bli lagret som:",
"roleMappingDescription": "Bestem hvordan roller tilordnes brukere når innloggingen er aktivert når autog-rapportering er aktivert.",
"roleMappingDescription": "Bestem hvordan roller tildeles brukere når de logger inn med denne identitetsleverandøren.",
"selectRole": "Velg en rolle",
"roleMappingExpression": "Uttrykk",
"selectRolePlaceholder": "Velg en rolle",
@@ -1899,6 +2260,25 @@
"invalidValue": "Ugyldig verdi",
"idpTypeLabel": "Identitet leverandør type",
"roleMappingExpressionPlaceholder": "F.eks. inneholder(grupper, 'admin') && 'Admin' ⋅'Medlem'",
"roleMappingModeFixedRoles": "Fast roller",
"roleMappingModeMappingBuilder": "Kartlegger bygger",
"roleMappingModeRawExpression": "Rå uttrykk",
"roleMappingFixedRolesPlaceholderSelect": "Velg en eller flere roller",
"roleMappingFixedRolesPlaceholderFreeform": "Skriv inn rollenavn (eksakt treff per organisasjon)",
"roleMappingFixedRolesDescriptionSameForAll": "Tilordne den samme rollen som er satt til hver automatisk midlertidig bruker.",
"roleMappingFixedRolesDescriptionDefaultPolicy": "For standard policyer, type rollenavn som eksisterer i hver organisasjon der brukerne tilbys. Navn må stemmer nøyaktig.",
"roleMappingClaimPath": "Krev sti",
"roleMappingClaimPathPlaceholder": "grupper",
"roleMappingClaimPathDescription": "Sti i i token nyttelast som inneholder kildeverdier (for eksempel grupper).",
"roleMappingMatchValue": "Treff verdi",
"roleMappingAssignRoles": "Tilordne roller",
"roleMappingAddMappingRule": "Legg til tilordningsregel",
"roleMappingRawExpressionResultDescription": "Uttrykk skal vurderes til en streng eller en tekststreng.",
"roleMappingRawExpressionResultDescriptionSingleRole": "Uttrykk må evaluere til en streng (en rollenavn).",
"roleMappingMatchValuePlaceholder": "Match verdi (for eksempel: admin)",
"roleMappingAssignRolesPlaceholderFreeform": "Angi rollenavn (eksakt per org)",
"roleMappingBuilderFreeformRowHint": "Rollenavn må samsvare med en rolle i hver målorganisasjon.",
"roleMappingRemoveRule": "Fjern",
"idpGoogleConfiguration": "Google Konfigurasjon",
"idpGoogleConfigurationDescription": "Konfigurer Google OAuth2 legitimasjonen",
"idpGoogleClientIdDescription": "Google OAuth2 Client ID",
@@ -1962,9 +2342,11 @@
"selectDomainForOrgAuthPage": "Velg et domene for organisasjonens autentiseringsside",
"domainPickerProvidedDomain": "Gitt domene",
"domainPickerFreeProvidedDomain": "Gratis oppgitt domene",
"domainPickerFreeDomainsPaidFeature": "Angitte domener er en betalingsfunksjon. Abonner for å få et domene inkludert i din plan ingen behov for å ta med ditt eget.",
"domainPickerVerified": "Bekreftet",
"domainPickerUnverified": "Uverifisert",
"domainPickerInvalidSubdomainStructure": "Dette underdomenet inneholder ugyldige tegn eller struktur. Det vil automatisk bli utsatt når du lagrer.",
"domainPickerManual": "Manuell",
"domainPickerInvalidSubdomainStructure": "Ugyldige tegn vil bli sanitert når de er lagret.",
"domainPickerError": "Feil",
"domainPickerErrorLoadDomains": "Kan ikke laste organisasjonens domener",
"domainPickerErrorCheckAvailability": "Kunne ikke kontrollere domenetilgjengelighet",
@@ -1977,7 +2359,7 @@
"orgAuthChooseIdpDescription": "Velg din identitet leverandør for å fortsette",
"orgAuthNoIdpConfigured": "Denne organisasjonen har ikke noen identitetstjeneste konfigurert. Du kan i stedet logge inn med Pangolin identiteten din.",
"orgAuthSignInWithPangolin": "Logg inn med Pangolin",
"orgAuthSignInToOrg": "Logg inn på en organisasjon",
"orgAuthSignInToOrg": "Organisasjonens identitetsleverandør (SSO)",
"orgAuthSelectOrgTitle": "Organisasjonsinnlogging",
"orgAuthSelectOrgDescription": "Skriv inn organisasjons-ID-en din for å fortsette",
"orgAuthOrgIdPlaceholder": "din-organisasjon",
@@ -2193,10 +2575,10 @@
},
"scale": {
"title": "Skala",
"description": "Enterprise features, 50 brukere, 50 nettsteder og prioritetsstøtte."
"description": "Funksjoner for bedrifter, 50 brukere, 100 nettsteder og prioritert support."
}
},
"personalUseOnly": "Kun personlig bruk (gratis lisens - ingen utsjekking)",
"personalUseOnly": "Kun personlig bruk (gratis lisens - ingen kasse)",
"buttons": {
"continueToCheckout": "Fortsett til kassen"
},
@@ -2270,6 +2652,7 @@
"validPassword": "Gyldig passord",
"validEmail": "Valid email",
"validSSO": "Valid SSO",
"connectedClient": "Tilkoblet klient",
"resourceBlocked": "Ressurs blokkert",
"droppedByRule": "Legg i regelen",
"noSessions": "Ingen økter",
@@ -2277,24 +2660,26 @@
"noMoreAuthMethods": "No Valid Auth",
"ip": "IP",
"reason": "Grunn",
"requestLogs": "Forespørselslogger (Automatic Translation)",
"requestLogs": "HTTP-forespørselslogger",
"requestAnalytics": "Be om analyser",
"host": "Vert",
"location": "Sted",
"actionLogs": "Handlingslogger",
"sidebarLogsRequest": "Forespørselslogger (Automatic Translation)",
"sidebarLogsRequest": "HTTP-forespørselslogger",
"sidebarLogsAccess": "Tilgangslogger (Automatic Translation)",
"sidebarLogsAction": "Handlingslogger",
"logRetention": "Logg tilbaketrekning",
"logRetentionDescription": "Håndter hvor lenge ulike typer logger beholdes for denne organisasjonen, eller deaktiver dem",
"requestLogsDescription": "Se detaljerte forespørselslogger for ressurser i denne organisasjonen",
"requestAnalyticsDescription": "Se detaljert rekvisisjonsanalyse for ressurser i denne organisasjonen",
"logRetentionRequestLabel": "Be om loggoverføring",
"logRetentionRequestLabel": "Be om loggbevaring",
"logRetentionRequestDescription": "Hvor lenge du vil beholde forespørselslogger",
"logRetentionAccessLabel": "Få tilgang til loggoverføring",
"logRetentionAccessDescription": "Hvor lenge du vil beholde adgangslogger",
"logRetentionActionLabel": "Handlings logg nytt",
"logRetentionActionDescription": "Hvor lenge handlingen skal lagres",
"logRetentionConnectionLabel": "Logg nyhet",
"logRetentionConnectionDescription": "Hvor lenge du vil beholde tilkoblingslogger",
"logRetentionDisabled": "Deaktivert",
"logRetention3Days": "3 dager",
"logRetention7Days": "7 dager",
@@ -2305,8 +2690,15 @@
"logRetentionEndOfFollowingYear": "Slutt på neste år",
"actionLogsDescription": "Vis historikk for handlinger som er utført i denne organisasjonen",
"accessLogsDescription": "Vis autoriseringsforespørsler for ressurser i denne organisasjonen",
"licenseRequiredToUse": "En <enterpriseLicenseLink>Enterprise Edition</enterpriseLicenseLink> lisens er påkrevd for å bruke denne funksjonen. Denne funksjonen er også tilgjengelig i <pangolinCloudLink>Pangolin Cloud</pangolinCloudLink>.",
"ossEnterpriseEditionRequired": "<enterpriseEditionLink>Enterprise Edition</enterpriseEditionLink> er nødvendig for å bruke denne funksjonen. Denne funksjonen er også tilgjengelig i <pangolinCloudLink>Pangolin Cloud</pangolinCloudLink>.",
"connectionLogs": "Loggfiler for tilkobling",
"connectionLogsDescription": "Vis tilkoblingslogger for tunneler i denne organisasjonen",
"sidebarLogsConnection": "Loggfiler for tilkobling",
"sidebarLogsStreaming": "Strømming",
"sourceAddress": "Kilde adresse",
"destinationAddress": "Måladresse (Automatic Translation)",
"duration": "Varighet",
"licenseRequiredToUse": "En <enterpriseLicenseLink>Enterprise Edition</enterpriseLicenseLink> lisens eller <pangolinCloudLink>Pangolin Cloud</pangolinCloudLink> er påkrevd for å bruke denne funksjonen. <bookADemoLink>Bestill en demo eller POC prøveversjon</bookADemoLink>.",
"ossEnterpriseEditionRequired": "<enterpriseEditionLink>Enterprise Edition</enterpriseEditionLink> er nødvendig for å bruke denne funksjonen. Denne funksjonen er også tilgjengelig i <pangolinCloudLink>Pangolin Cloud</pangolinCloudLink>. <bookADemoLink>Bestill en demo eller POC studie</bookADemoLink>.",
"certResolver": "Sertifikat løser",
"certResolverDescription": "Velg sertifikatløser som skal brukes for denne ressursen.",
"selectCertResolver": "Velg sertifikatløser",
@@ -2448,6 +2840,9 @@
"machineClients": "Maskinklienter",
"install": "Installer",
"run": "Kjør",
"envFile": "Miljøfil",
"serviceFile": "Tjenestefil",
"enableAndStart": "Aktiver og start",
"clientNameDescription": "Visningsnavnet til klienten som kan endres senere.",
"clientAddress": "Klientadresse (avansert)",
"setupFailedToFetchSubnet": "Kunne ikke hente standard undernett",
@@ -2496,13 +2891,30 @@
"editInternalResourceDialogAddClients": "Legg til klienter",
"editInternalResourceDialogDestinationLabel": "Destinasjon",
"editInternalResourceDialogDestinationDescription": "Spesifiser destinasjonsadressen for den interne ressursen. Dette kan være et vertsnavn, IP-adresse eller CIDR-sjikt avhengig av valgt modus. Valgfrie oppsett av intern DNS-alias for enklere identifikasjon.",
"internalResourceFormMultiSiteRoutingHelp": "Valg av flere nettsteder muliggjør motstandskraftig ruting og failover for høy tilgjengelighet.",
"internalResourceFormMultiSiteRoutingHelpLearnMore": "Lær mer",
"editInternalResourceDialogPortRestrictionsDescription": "Begrens tilgang til spesifikke TCP/UDP-porter eller tillate/blokkere alle porter.",
"createInternalResourceDialogHttpConfiguration": "HTTP-konfigurasjon",
"createInternalResourceDialogHttpConfigurationDescription": "Velg domenet klienter vil bruke for å nå denne ressursen via HTTP eller HTTPS.",
"editInternalResourceDialogHttpConfiguration": "HTTP-konfigurasjon",
"editInternalResourceDialogHttpConfigurationDescription": "Velg domenet klienter vil bruke for å nå denne ressursen via HTTP eller HTTPS.",
"editInternalResourceDialogTcp": "TCP",
"editInternalResourceDialogUdp": "UDP",
"editInternalResourceDialogIcmp": "ICMP",
"editInternalResourceDialogAccessControl": "Tilgangskontroll",
"editInternalResourceDialogAccessControlDescription": "Kontroller hvilke roller, brukere og maskinklienter som har tilgang til denne ressursen når den er koblet til. Administratorer har alltid tilgang.",
"editInternalResourceDialogPortRangeValidationError": "Portsjiktet må være \"*\" for alle porter, eller en kommaseparert liste med porter og sjikt (f.eks. \"80,443,8000-9000\"). Porter må være mellom 1 og 65535.",
"internalResourceAuthDaemonStrategy": "SSH Auth Daemon Sted",
"internalResourceAuthDaemonStrategyDescription": "Velg hvor SSH-autentisering daemon kjører: på nettstedet (Newt) eller på en ekstern vert.",
"internalResourceAuthDaemonDescription": "SSH-godkjenning daemon håndterer SSH-nøkkel signering og PAM autentisering for denne ressursen. Velg om den kjører på nettstedet (Newt) eller på en separat ekstern vert. Se <docsLink>dokumentasjonen</docsLink> for mer.",
"internalResourceAuthDaemonDocsUrl": "https://docs.pangolin.net",
"internalResourceAuthDaemonStrategyPlaceholder": "Velg strategi",
"internalResourceAuthDaemonStrategyLabel": "Sted",
"internalResourceAuthDaemonSite": "På nettsted",
"internalResourceAuthDaemonSiteDescription": "Autentiser daemon kjører på nettstedet (Newt).",
"internalResourceAuthDaemonRemote": "Ekstern vert",
"internalResourceAuthDaemonRemoteDescription": "Autentiser daemon kjører på en vert som ikke er nettstedet.",
"internalResourceAuthDaemonPort": "Daemon Port (valgfritt)",
"orgAuthWhatsThis": "Hvor kan jeg finne min organisasjons-ID?",
"learnMore": "Lær mer",
"backToHome": "Gå tilbake til start",
@@ -2524,6 +2936,9 @@
"maintenancePageMessagePlaceholder": "Vi kommer snart tilbake! Vårt nettsted gjennomgår for øyeblikket planlagt vedlikehold.",
"maintenancePageMessageDescription": "Detaljert beskjed som forklarer vedlikeholdet",
"maintenancePageTimeTitle": "Estimert ferdigstillelsestid (Valgfritt)",
"privateMaintenanceScreenTitle": "Privat plassholder skjerm",
"privateMaintenanceScreenMessage": "Dette domenet brukes på en privatressurs. Koble til ved å bruke Pangolin-klienten for å få tilgang til denne ressursen.",
"privateMaintenanceScreenSteps": "Når du er koblet til, hvis du fortsatt ser denne meldingen, peker kanskje DNS-cachen til nettleseren din fortsatt til den gamle adressen. For å rette på dette: lukk og åpne denne fanen eller nettleseren på nytt, og naviger deretter tilbake til denne siden.",
"maintenanceTime": "f.eks. 2 timer, 1. november kl. 17:00",
"maintenanceEstimatedTimeDescription": "Når du forventer at vedlikeholdet er ferdigstilt",
"editDomain": "Rediger domene",
@@ -2632,5 +3047,209 @@
"approvalsEmptyStateStep2Title": "Aktiver enhetsgodkjenninger",
"approvalsEmptyStateStep2Description": "Rediger en rolle og aktiver alternativet 'Kreve enhetsgodkjenninger'. Brukere med denne rollen vil trenge administratorgodkjenning for nye enheter.",
"approvalsEmptyStatePreviewDescription": "Forhåndsvisning: Når aktivert, ventende enhets forespørsler vil vises her for vurdering",
"approvalsEmptyStateButtonText": "Administrer Roller"
"approvalsEmptyStateButtonText": "Administrer Roller",
"domainErrorTitle": "Vi har problemer med å verifisere domenet ditt",
"idpAdminAutoProvisionPoliciesTabHint": "Konfigurer rollegartlegging og organisasjonspolicyer på <policiesTabLink>Auto leveringsinnstillinger</policiesTabLink> fanen.",
"streamingTitle": "Hendelse Strømming",
"streamingDescription": "Stream hendelser fra din organisasjon til eksterne destinasjoner i sanntid.",
"streamingUnnamedDestination": "Plassering uten navn",
"streamingNoUrlConfigured": "Ingen URL konfigurert",
"streamingAddDestination": "Legg til mål",
"streamingHttpWebhookTitle": "HTTP Webhook",
"streamingHttpWebhookDescription": "Send hendelser til alle HTTP-endepunkter med fleksibel autentisering og maling.",
"streamingS3Title": "Amazon S3",
"streamingS3Description": "Strøm hendelser til en S3-kompatibel objektlagringskjøt. Kommer snart.",
"streamingDatadogTitle": "Datadog",
"streamingDatadogDescription": "Videresend arrangementer direkte til din Datadog-konto. Kommer snart.",
"streamingTypePickerDescription": "Velg en måltype for å komme i gang.",
"streamingFailedToLoad": "Kan ikke laste inn destinasjoner",
"streamingUnexpectedError": "En uventet feil oppstod.",
"streamingFailedToUpdate": "Kunne ikke oppdatere destinasjon",
"streamingDeletedSuccess": "Målet ble slettet",
"streamingFailedToDelete": "Kunne ikke slette destinasjon",
"streamingDeleteTitle": "Slett mål",
"streamingDeleteButtonText": "Slett mål",
"streamingDeleteDialogAreYouSure": "Er du sikker på at du vil slette",
"streamingDeleteDialogThisDestination": "denne destinasjonen",
"streamingDeleteDialogPermanentlyRemoved": "? Alle konfigurasjoner vil bli slettet permanent.",
"httpDestEditTitle": "Rediger mål",
"httpDestAddTitle": "Legg til HTTP-destinasjon",
"httpDestEditDescription": "Oppdater konfigurasjonen for denne HTTP-hendelsesstrømmedestinasjonen.",
"httpDestAddDescription": "Konfigurer et nytt HTTP endepunkt for å motta organisasjonens hendelser.",
"S3DestEditTitle": "Rediger destinasjon",
"S3DestAddTitle": "Legg til S3 destinasjon",
"S3DestEditDescription": "Oppdatere konfigurasjonen for denne S3-hendelsesstrømmingsdestinasjonen.",
"S3DestAddDescription": "Konfigurer et nytt S3-endepunkt for å motta organisasjonens hendelser.",
"datadogDestEditTitle": "Rediger destinasjon",
"datadogDestAddTitle": "Legg til Datadog destinasjon",
"datadogDestEditDescription": "Oppdatere konfigurasjonen for denne Datadog-hendelsesstrømmingsdestinasjonen.",
"datadogDestAddDescription": "Konfigurer et nytt Datadog-endepunkt for å motta organisasjonens hendelser.",
"httpDestTabSettings": "Innstillinger",
"httpDestTabHeaders": "Overskrifter",
"httpDestTabBody": "Innhold",
"httpDestTabLogs": "Logger",
"httpDestNamePlaceholder": "Min HTTP destinasjon",
"httpDestUrlLabel": "Destinasjons URL",
"httpDestUrlErrorHttpRequired": "URL-adressen må bruke httpp eller https",
"httpDestUrlErrorHttpsRequired": "HTTPS er nødvendig for distribusjon av sky",
"httpDestUrlErrorInvalid": "Skriv inn en gyldig nettadresse (f.eks. https://eksempel.com/webhook)",
"httpDestAuthTitle": "Autentisering",
"httpDestAuthDescription": "Velg hvordan ønsker til sluttpunktet ditt er autentisert.",
"httpDestAuthNoneTitle": "Ingen godkjenning",
"httpDestAuthNoneDescription": "Sender forespørsler uten autorisasjonsoverskrift.",
"httpDestAuthBearerTitle": "Bærer Symbol",
"httpDestAuthBearerDescription": "Legger til en Autorisasjon: Bearer '<token>' header til hver forespørsel.",
"httpDestAuthBearerPlaceholder": "Din API-nøkkel eller token",
"httpDestAuthBasicTitle": "Standard Auth",
"httpDestAuthBasicDescription": "Legger til en Autorisasjon: Basic '<credentials>' header. Gi legitimasjon som brukernavn:passord.",
"httpDestAuthBasicPlaceholder": "brukernavn:passord",
"httpDestAuthCustomTitle": "Egendefinert topptekst",
"httpDestAuthCustomDescription": "Angi et egendefinert HTTP headers navn og verdi for autentisering (f.eks X-API-Key).",
"httpDestAuthCustomHeaderNamePlaceholder": "Topptekst navn (f.eks X-API-Key)",
"httpDestAuthCustomHeaderValuePlaceholder": "Header verdi",
"httpDestCustomHeadersTitle": "Egendefinerte HTTP-overskrifter",
"httpDestCustomHeadersDescription": "Legg til egendefinerte overskrifter til hver utgående forespørsel. Nyttig for statisk tokens eller en egendefinert innholdstype. Som standard blir innholdstype: applikasjon/json sendt.",
"httpDestNoHeadersConfigured": "Ingen egendefinerte overskrifter konfigurert. Klikk \"Legg til topptekst\" for å legge til en.",
"httpDestHeaderNamePlaceholder": "Navn på topptekst",
"httpDestHeaderValuePlaceholder": "Verdi",
"httpDestAddHeader": "Legg til topptekst",
"httpDestBodyTemplateTitle": "Egendefinert hovedmal",
"httpDestBodyTemplateDescription": "Kontroller JSON nyttelaststrukturen sendt til ditt endepunkt. Hvis deaktivert, sendes et standard JSON-objekt for hver hendelse.",
"httpDestEnableBodyTemplate": "Aktiver egendefinert meldingsmal",
"httpDestBodyTemplateLabel": "Kroppsmal (JSON)",
"httpDestBodyTemplateHint": "Bruk designmal variabler for å referere til eventfelt i din betaling.",
"httpDestPayloadFormatTitle": "Mål format",
"httpDestPayloadFormatDescription": "Hvordan blir hendelser serialisert inn i hver forespørselsorgan.",
"httpDestFormatJsonArrayTitle": "JSON liste",
"httpDestFormatJsonArrayDescription": "Én forespørsel per batch, innholdet er en JSON-liste. Kompatibel med de mest generiske webhooks og Datadog.",
"httpDestFormatNdjsonTitle": "NDJSON",
"httpDestFormatNdjsonDescription": "Én forespørsel per sats, innholdet er nytt avgrenset JSON - et objekt per linje, ingen ytterarray. Kreves av Splunk HEC, Elastisk/OpenSearch, og Grafana Loki.",
"httpDestFormatSingleTitle": "En hendelse per forespørsel",
"httpDestFormatSingleDescription": "Sender en separat HTTP POST for hver enkelt hendelse. Bruk bare for endepunkter som ikke kan håndtere batcher.",
"httpDestLogTypesTitle": "Logg typer",
"httpDestLogTypesDescription": "Velg hvilke loggtyper som blir videresendt til dette målet. Bare aktiverte loggtyper vil bli strømmet.",
"httpDestAccessLogsTitle": "Tilgangslogger (Automatic Translation)",
"httpDestAccessLogsDescription": "Adgangsforsøk for ressurser, inkludert godkjente og nektet forespørsler.",
"httpDestActionLogsTitle": "Handlingslogger",
"httpDestActionLogsDescription": "Administrative tiltak som utføres av brukere innenfor organisasjonen.",
"httpDestConnectionLogsTitle": "Loggfiler for tilkobling",
"httpDestConnectionLogsDescription": "Utstyrs- og tunneltilkoblingshendelser, inkludert forbindelser og frakobling.",
"httpDestRequestLogsTitle": "HTTP-forespørselslogger",
"httpDestRequestLogsDescription": "HTTP-forespørsel logger for bekreftede ressurser, inkludert metode, bane og responskode.",
"httpDestSaveChanges": "Lagre endringer",
"httpDestCreateDestination": "Opprett mål",
"httpDestUpdatedSuccess": "Målet er oppdatert",
"httpDestCreatedSuccess": "Målet er opprettet",
"httpDestUpdateFailed": "Kunne ikke oppdatere destinasjon",
"httpDestCreateFailed": "Kan ikke opprette mål",
"followRedirects": "Følg videresendinger",
"followRedirectsDescription": "Følg automatisk HTTP-videresendinger for forespørsler.",
"alertingErrorWebhookUrl": "Vennligst skriv inn en gyldig URL for webhooken.",
"healthCheckStrategyHttp": "Validerer tilkobling og sjekker HTTP-responsstatus.",
"healthCheckStrategyTcp": "Bekrefter kun TCP-tilkobling, uten å inspisere responsen.",
"healthCheckStrategySnmp": "Utfører en SNMP get-forespørsel for å sjekke helsen til nettverksenheter og infrastruktur.",
"healthCheckStrategyIcmp": "Bruker ICMP ekko forespørsler (ping) for å sjekke om en ressurs er tilgjengelig og responsiv.",
"healthCheckTabStrategy": "Strategi",
"healthCheckTabConnection": "Tilkobling",
"healthCheckTabAdvanced": "Avansert",
"healthCheckStrategyNotAvailable": "Denne strategien er ikke tilgjengelig. Vennligst kontakt salgsavdelingen for å aktivere denne funksjonen.",
"uptime30d": "Oppetid (30d)",
"idpAddActionCreateNew": "Opprett ny identitetsleverandør",
"idpAddActionImportFromOrg": "Importer fra en annen organisasjon",
"idpImportDialogTitle": "Importer identitetsleverandør",
"idpImportDialogDescription": "Velg en identitetsleverandør fra en organisasjon der du er admin. Den vil bli knyttet til denne organisasjonen.",
"idpImportSearchPlaceholder": "Søk etter organisasjons- eller leverandørnavn...",
"idpImportEmpty": "Ingen identitetsleverandører funnet.",
"idpImportedDescription": "Identitetsleverandøren ble importert vellykket.",
"idpDeleteGlobalQuestion": "Er du sikker på at du vil slette denne identitetsleverandøren permanent?",
"idpDeleteGlobalDescription": "Dette vil slette identitetsleverandøren permanent fra alle organisasjoner den er tilknyttet.",
"idpUnassociateTitle": "Frakoble identitetsleverandør",
"idpUnassociateQuestion": "Er du sikker på at du vil frakoble denne identitetsleverandøren fra denne organisasjonen?",
"idpUnassociateDescription": "Alle brukere knyttet til denne identitetsleverandøren vil bli fjernet fra denne organisasjonen, men identitetsleverandøren vil fortsatt eksistere for andre tilknyttede organisasjoner.",
"idpUnassociateConfirm": "Bekreft frakobling av identitetsleverandør",
"idpUnassociateWarning": "Dette kan ikke angres for denne organisasjonen.",
"idpUnassociatedDescription": "Identitetsleverandør er vellykket frakoblet fra denne organisasjonen",
"idpUnassociateMenu": "Frakoble",
"idpDeleteAllOrgsMenu": "Slett",
"publicIpEndpoint": "Endepunkt",
"lastTriggeredAt": "Siste utløste",
"reject": "Avvis",
"uptimeDaysAgo": "{count} days ago",
"uptimeToday": "I dag",
"uptimeNoDataAvailable": "Ingen data tilgjengelig",
"uptimeSuffix": "oppetid",
"uptimeDowntimeSuffix": "nedetid",
"uptimeTooltipUptimeLabel": "Oppetid",
"uptimeTooltipDowntimeLabel": "Nedetid",
"uptimeOngoing": "pågående",
"uptimeNoMonitoringData": "Ingen overvåkingsdata",
"uptimeNoData": "Ingen data",
"uptimeMiniBarDown": "Nede",
"uptimeSectionTitle": "Oppetid",
"uptimeSectionDescription": "Tilgjengelighet de siste {days} dagene",
"uptimeAddAlert": "Legg til varsling",
"uptimeViewAlerts": "Vis varsler",
"uptimeCreateEmailAlert": "Opprett e-postvarsel",
"uptimeAlertDescriptionSite": "Få beskjed på e-post når dette nettstedet går offline eller kommer tilbake online.",
"uptimeAlertDescriptionResource": "Få beskjed på e-post når denne ressursen går offline eller kommer tilbake online.",
"uptimeAlertNamePlaceholder": "Varslingsnavn",
"uptimeAdditionalEmails": "Flere e-poster",
"uptimeCreateAlert": "Opprett varsling",
"uptimeAlertNoRecipients": "Ingen mottakere",
"uptimeAlertNoRecipientsDescription": "Vennligst legg til minst én bruker, rolle, eller e-post for å varsle.",
"uptimeAlertCreated": "Varsel opprettet",
"uptimeAlertCreatedDescription": "Du vil bli varslet når dette endrer status.",
"uptimeAlertCreateFailed": "Kunne ikke opprette varsel",
"webhookUrlLabel": "URL",
"webhookHeaderKeyPlaceholder": "Nøkkel",
"webhookHeaderValuePlaceholder": "Verdi",
"alertLabel": "Varsel",
"domainPickerWildcardSubdomainNotAllowed": "Jokertegnsubdomener er ikke tillatt.",
"domainPickerWildcardCertWarning": "Jokertegnressurser kan kreve ekstra konfigurasjon for å fungere skikkelig.",
"domainPickerWildcardCertWarningLink": "Lær mer",
"health": "Helse",
"domainPendingErrorTitle": "Verifiseringsproblem",
"memberPortalTitle": "Ressurser",
"memberPortalDescription": "Ressurser du har tilgang til i denne organisasjonen",
"memberPortalSortBy": "Sorter etter...",
"memberPortalSortNameAsc": "Navn A-Å",
"memberPortalSortNameDesc": "Navn Å-A",
"memberPortalSortDomainAsc": "Domene A-Å",
"memberPortalSortDomainDesc": "Domene Å-A",
"memberPortalSortEnabledFirst": "Aktivert først",
"memberPortalSortDisabledFirst": "Deaktivert først",
"memberPortalRefresh": "Oppdater",
"memberPortalRefreshResources": "Oppdater ressurser",
"memberPortalFailedToLoad": "Kunne ikke laste inn ressurser",
"memberPortalFailedToLoadDescription": "Kunne ikke laste inn ressurser. Vennligst sjekk tilkoblingen din og prøv igjen.",
"memberPortalUnableToLoad": "Kan ikke laste inn ressurser",
"memberPortalTryAgain": "Prøv igjen",
"memberPortalNoResourcesFound": "Ingen ressurser funnet",
"memberPortalNoResourcesAvailable": "Ingen ressurser tilgjengelig",
"memberPortalNoResourcesMatchSearch": "Ingen ressurser samsvarer med \"{query}\". Prøv å justere søkeordene dine eller fjern søket for å se alle ressurser.",
"memberPortalNoResourcesAccess": "Du har ennå ikke tilgang til noen ressurser. Kontakt administratoren din for å få tilgang til de ressursene du trenger.",
"memberPortalClearSearch": "Fjern søk",
"memberPortalPublicResources": "Offentlige ressurser",
"memberPortalPublicResourcesDescription": "Webapplikasjoner og -tjenester tilgjengelige via nettleser",
"memberPortalCopiedToClipboard": "Kopiert til utklippstavlen",
"memberPortalCopiedUrlDescription": "Ressurs-URL er kopiert til utklippstavlen din.",
"memberPortalOpenResource": "Åpne ressurs",
"memberPortalPrivateResources": "Private ressurser",
"memberPortalPrivateResourcesDescription": "Interne nettverksressurser tilgjengelige via klient",
"memberPortalResourceDetails": "Ressursdetaljer",
"memberPortalMode": "Modus",
"memberPortalDestination": "Destinasjon",
"memberPortalAlias": "Navn",
"memberPortalCopiedAliasDescription": "Ressursalias er kopiert til utklippstavlen din.",
"memberPortalCopiedDestinationDescription": "Ressursdestinasjon er kopiert til utklippstavlen din.",
"memberPortalRequiresClientConnection": "Krever klienttilkobling",
"memberPortalAuthMethods": "Autentiseringsmetoder",
"memberPortalSso": "Enkeltpålogging (SSO)",
"memberPortalPasswordProtected": "Passordbeskyttet",
"memberPortalPinCode": "PIN-kode",
"memberPortalEmailWhitelist": "E-post-hviteliste",
"memberPortalResourceDisabled": "Ressurs deaktivert",
"memberPortalShowingResources": "Viser {start}-{end} av {total} ressurser",
"memberPortalPrevious": "Forrige",
"memberPortalNext": "Neste"
}

View File

@@ -1,4 +1,8 @@
{
"contactSalesEnable": "Neem contact op met de verkoopafdeling om deze functie in te schakelen.",
"contactSalesBookDemo": "Boek een demo",
"contactSalesOr": "of",
"contactSalesContactUs": "neem contact met ons op",
"setupCreate": "Maak de organisatie, site en bronnen aan",
"headerAuthCompatibilityInfo": "Schakel dit in om een 401 Niet Geautoriseerd antwoord af te dwingen wanneer een authenticatietoken ontbreekt. Dit is vereist voor browsers of specifieke HTTP-bibliotheken die geen referenties verzenden zonder een serveruitdaging.",
"headerAuthCompatibility": "Uitgebreide compatibiliteit",
@@ -19,6 +23,18 @@
"componentsInvalidKey": "Ongeldige of verlopen licentiesleutels gedetecteerd. Volg de licentievoorwaarden om alle functies te blijven gebruiken.",
"dismiss": "Uitschakelen",
"subscriptionViolationMessage": "U overschrijdt uw huidige abonnement. Corrigeer het probleem door sites, gebruikers of andere bronnen te verwijderen om binnen uw plan te blijven.",
"trialBannerMessage": "Uw proefversie verloopt over {countdown}. Upgrade om toegang te behouden.",
"trialBannerExpired": "Uw proefperiode is verlopen. Upgrade nu om toegang te herstellen.",
"billingTrialBannerTitle": "Proefperiode Actief",
"billingTrialBannerDescription": "Je bent momenteel bezig met een gratis proefperiode op het zakelijke niveau. Wanneer de proefperiode eindigt, wordt je account automatisch teruggezet naar de functies en limieten van het Basic-niveau. Upgrade op elk moment om toegang te houden tot de functies van je huidige plan.",
"billingTrialBannerUpgrade": "Nu Upgraden",
"billingTrialBadge": "Gratis Proefversie",
"trialActive": "Gratis proefversie actief",
"trialExpired": "Proefversie verlopen",
"trialHasEnded": "Uw proefperiode is geëindigd.",
"trialDaysRemaining": "{count, plural, one {# dag resterend} other {# dagen resterend}}",
"trialDaysLeftShort": "{days}d over in proefversie",
"trialGoToBilling": "Ga naar factureringspagina",
"subscriptionViolationViewBilling": "Facturering bekijken",
"componentsLicenseViolation": "Licentie overtreding: Deze server gebruikt {usedSites} sites die de gelicentieerde limiet van {maxSites} sites overschrijden. Volg de licentievoorwaarden om door te gaan met het gebruik van alle functies.",
"componentsSupporterMessage": "Bedankt voor het ondersteunen van Pangolin als {tier}!",
@@ -81,6 +97,8 @@
"siteConfirmCopy": "Ik heb de configuratie gekopieerd",
"searchSitesProgress": "Sites zoeken...",
"siteAdd": "Site toevoegen",
"sitesTableViewPublicResources": "Openbare bronnen bekijken",
"sitesTableViewPrivateResources": "Privébronnen bekijken",
"siteInstallNewt": "Installeer Newt",
"siteInstallNewtDescription": "Laat Newt draaien op uw systeem",
"WgConfiguration": "WireGuard Configuratie",
@@ -98,6 +116,21 @@
"siteUpdatedDescription": "De site is bijgewerkt.",
"siteGeneralDescription": "Algemene instellingen voor deze site configureren",
"siteSettingDescription": "Configureer de instellingen van de site",
"siteResourcesTab": "Bronnen",
"siteResourcesNoneOnSite": "Deze site heeft nog geen openbare of privébronnen.",
"siteResourcesSectionPublic": "Openbare bronnen",
"siteResourcesSectionPrivate": "Privébronnen",
"siteResourcesSectionPublicDescription": "Bronnen extern blootgesteld via domeinen of poorten.",
"siteResourcesSectionPrivateDescription": "Bronnen beschikbaar op uw privénetwerk via de site.",
"siteResourcesViewAllPublic": "Bekijk alle bronnen",
"siteResourcesViewAllPrivate": "Bekijk alle bronnen",
"siteResourcesDialogDescription": "Overzicht van openbare en privébronnen die geassocieerd zijn met deze site.",
"siteResourcesShowMore": "Meer weergeven",
"siteResourcesPermissionDenied": "U heeft geen toestemming om deze bronnen te vermelden.",
"siteResourcesEmptyPublic": "Geen openbare bronnen richten zich nog op deze site.",
"siteResourcesEmptyPrivate": "Er zijn nog geen privébronnen gekoppeld aan deze site.",
"siteResourcesHowToAccess": "Hoe te openen",
"siteResourcesTargetsOnSite": "Doelen op deze site",
"siteSetting": "{siteName} instellingen",
"siteNewtTunnel": "Nieuwste site (Aanbevolen)",
"siteNewtTunnelDescription": "Makkelijkste manier om een ingangspunt in een netwerk te maken. Geen extra opzet.",
@@ -148,6 +181,11 @@
"createLink": "Koppeling aanmaken",
"resourcesNotFound": "Geen bronnen gevonden",
"resourceSearch": "Zoek bronnen",
"machineSearch": "Zoek machines",
"machinesSearch": "Zoek machine-clients...",
"machineNotFound": "Geen machines gevonden",
"userDeviceSearch": "Gebruikersapparaten zoeken",
"userDevicesSearch": "Gebruikersapparaten zoeken...",
"openMenu": "Menu openen",
"resource": "Bron",
"title": "Aanspreektitel",
@@ -175,6 +213,7 @@
"resourceHTTPDescription": "Proxyverzoeken via HTTPS met een volledig gekwalificeerde domeinnaam.",
"resourceRaw": "TCP/UDP bron",
"resourceRawDescription": "Proxyverzoeken via ruwe TCP/UDP met een poortnummer.",
"resourceRawDescriptionCloud": "Proxy verzoeken over rauwe TCP/UDP met behulp van een poortnummer. Vereist sites om verbinding te maken met een remote node.",
"resourceCreate": "Bron maken",
"resourceCreateDescription": "Volg de onderstaande stappen om een nieuwe bron te maken",
"resourceSeeAll": "Alle bronnen bekijken",
@@ -261,8 +300,11 @@
"orgMissing": "Organisatie-ID ontbreekt",
"orgMissingMessage": "Niet in staat om de uitnodiging te regenereren zonder organisatie-ID.",
"accessUsersManage": "Gebruikers beheren",
"accessUserManage": "Beheer gebruiker",
"accessUsersDescription": "Nodig uit en beheer gebruikers met toegang tot deze organisatie",
"accessUsersSearch": "Gebruikers zoeken...",
"accessUsersRoleFilterCount": "{count, plural, one {# rol} other {# rollen}}",
"accessUsersRoleFilterClear": "Rolfilters wissen",
"accessUserCreate": "Gebruiker aanmaken",
"accessUserRemove": "Gebruiker verwijderen",
"username": "Gebruikersnaam",
@@ -322,6 +364,54 @@
"apiKeysDelete": "API-sleutel verwijderen",
"apiKeysManage": "API-sleutels beheren",
"apiKeysDescription": "API-sleutels worden gebruikt om te verifiëren met de integratie-API",
"provisioningKeysTitle": "Vertrekkende sleutel",
"provisioningKeysManage": "Beheren van Provisioning Sleutels",
"provisioningKeysDescription": "Provisionerende sleutels worden gebruikt om geautomatiseerde sitebepaling voor uw organisatie te verifiëren.",
"provisioningManage": "Provisie",
"provisioningDescription": "Voorzieningssleutels beheren en sites beoordelen in afwachting van goedkeuring.",
"pendingSites": "Openstaande sites",
"siteApproveSuccess": "Site succesvol goedgekeurd",
"siteApproveError": "Fout bij goedkeuren website",
"provisioningKeys": "Verhelderende sleutels",
"searchProvisioningKeys": "Zoek provisioningsleutels ...",
"provisioningKeysAdd": "Genereer Provisioning Sleutel",
"provisioningKeysErrorDelete": "Fout bij verwijderen provisioning sleutel",
"provisioningKeysErrorDeleteMessage": "Fout bij verwijderen provisioning sleutel",
"provisioningKeysQuestionRemove": "Weet u zeker dat u deze proefsleutel van de organisatie wilt verwijderen?",
"provisioningKeysMessageRemove": "Eenmaal verwijderd, kan de sleutel niet meer worden gebruikt voor site-instructie.",
"provisioningKeysDeleteConfirm": "Bevestig Verwijderen Provisione-sleutel",
"provisioningKeysDelete": "Provisione-sleutel verwijderen",
"provisioningKeysCreate": "Genereer Provisioning Sleutel",
"provisioningKeysCreateDescription": "Een nieuwe provisioningsleutel voor de organisatie genereren",
"provisioningKeysSeeAll": "Bekijk alle provisioning sleutels",
"provisioningKeysSave": "Sla de provisioning sleutel op",
"provisioningKeysSaveDescription": "Je kunt dit slechts één keer zien. Kopieer het naar een veilige plaats.",
"provisioningKeysErrorCreate": "Fout bij aanmaken provisioning sleutel",
"provisioningKeysList": "Nieuwe provisioning sleutel",
"provisioningKeysMaxBatchSize": "Maximale batchgrootte",
"provisioningKeysUnlimitedBatchSize": "Onbeperkte batchgrootte (geen limiet)",
"provisioningKeysMaxBatchUnlimited": "Onbeperkt",
"provisioningKeysMaxBatchSizeInvalid": "Voer een geldige maximale batchgrootte in (11.000,000).",
"provisioningKeysValidUntil": "Geldig tot",
"provisioningKeysValidUntilHint": "Laat leeg voor geen vervaldatum.",
"provisioningKeysValidUntilInvalid": "Voer een geldige datum en tijd in.",
"provisioningKeysNumUsed": "Aantal keer gebruikt",
"provisioningKeysLastUsed": "Laatst gebruikt",
"provisioningKeysNoExpiry": "Geen vervaldatum",
"provisioningKeysNeverUsed": "Nooit",
"provisioningKeysEdit": "Wijzig Provisioning Sleutel",
"provisioningKeysEditDescription": "Werk de maximale batchgrootte en verlooptijd voor deze sleutel bij.",
"provisioningKeysApproveNewSites": "Goedkeuren van nieuwe sites",
"provisioningKeysApproveNewSitesDescription": "Automatisch sites goedkeuren die zich registreren met deze sleutel.",
"provisioningKeysUpdateError": "Fout tijdens bijwerken provisioning sleutel",
"provisioningKeysUpdated": "Provisie sleutel bijgewerkt",
"provisioningKeysUpdatedDescription": "Uw wijzigingen zijn opgeslagen.",
"provisioningKeysBannerTitle": "Bewerkingssleutels voor websites",
"provisioningKeysBannerDescription": "Genereer een inrichtingssleutel en gebruik deze met de Newt-connector om automatisch sites te maken bij de eerste opstart - er is geen behoefte om aparte inloggegevens voor elke site in te stellen.",
"provisioningKeysBannerButtonText": "Meer informatie",
"pendingSitesBannerTitle": "Openstaande sites",
"pendingSitesBannerDescription": "Sites die verbinding maken met een inrichtingssleutel verschijnen hier voor beoordeling.",
"pendingSitesBannerButtonText": "Meer informatie",
"apiKeysSettings": "{apiKeyName} instellingen",
"userTitle": "Alle gebruikers beheren",
"userDescription": "Bekijk en beheer alle gebruikers in het systeem",
@@ -351,6 +441,10 @@
"licenseErrorKeyActivate": "Licentiesleutel activeren mislukt",
"licenseErrorKeyActivateDescription": "Er is een fout opgetreden tijdens het activeren van de licentiesleutel.",
"licenseAbout": "Over licenties",
"licenseBannerTitle": "Activeer Uw Enterprise Licentie",
"licenseBannerDescription": "Ontgrendel enterprise-functies voor uw zelf-gehoste Pangolin-instantie. Koop een licentiesleutel om premium mogelijkheden te activeren, voeg deze vervolgens hieronder toe.",
"licenseBannerGetLicense": "Koop een Licentie",
"licenseBannerViewDocs": "Bekijk Documentatie",
"communityEdition": "Community editie",
"licenseAboutDescription": "Dit geldt voor gebruikers van bedrijven en ondernemingen die Pangolin in gebruiken in een commerciële omgeving. Als u Pangolin gebruikt voor persoonlijk gebruik, kunt u dit gedeelte negeren.",
"licenseKeyActivated": "Licentiesleutel geactiveerd",
@@ -508,9 +602,12 @@
"userSaved": "Gebruiker opgeslagen",
"userSavedDescription": "De gebruiker is bijgewerkt.",
"autoProvisioned": "Automatisch bevestigen",
"autoProvisionSettings": "Auto Provisie Instellingen",
"autoProvisionedDescription": "Toestaan dat deze gebruiker automatisch wordt beheerd door een identiteitsprovider",
"accessControlsDescription": "Beheer wat deze gebruiker toegang heeft tot en doet in de organisatie",
"accessControlsSubmit": "Bewaar Toegangsbesturing",
"singleRolePerUserPlanNotice": "Uw plan ondersteunt slechts één rol per gebruiker.",
"singleRolePerUserEditionNotice": "Deze editie ondersteunt slechts één rol per gebruiker.",
"roles": "Rollen",
"accessUsersRoles": "Beheer Gebruikers & Rollen",
"accessUsersRolesDescription": "Nodig gebruikers uit en voeg ze toe aan de rollen om toegang tot de organisatie te beheren",
@@ -567,6 +664,8 @@
"targetErrorInvalidPortDescription": "Voer een geldig poortnummer in",
"targetErrorNoSite": "Geen site geselecteerd",
"targetErrorNoSiteDescription": "Selecteer een site voor het doel",
"targetTargetsCleared": "Doelen gewist",
"targetTargetsClearedDescription": "Alle doelen zijn verwijderd van deze bron",
"targetCreated": "Doel aangemaakt",
"targetCreatedDescription": "Doel is succesvol aangemaakt",
"targetErrorCreate": "Kan doel niet aanmaken",
@@ -650,6 +749,7 @@
"resourcesErrorUpdate": "Bron wisselen mislukt",
"resourcesErrorUpdateDescription": "Er is een fout opgetreden tijdens het bijwerken van het document",
"access": "Toegangsrechten",
"accessControl": "Toegangs controle",
"shareLink": "{resource} Share link",
"resourceSelect": "Selecteer resource",
"shareLinks": "Links delen",
@@ -667,6 +767,7 @@
"newtEndpoint": "Endpoint",
"newtId": "ID",
"newtSecretKey": "Geheim",
"newtVersion": "Versie",
"architecture": "Architectuur",
"sites": "Sites",
"siteWgAnyClients": "Gebruik een willekeurige WireGuard client om verbinding te maken. Je zult interne bronnen moeten aanspreken met behulp van de peer IP.",
@@ -790,6 +891,7 @@
"accessRoleRemoved": "Rol verwijderd",
"accessRoleRemovedDescription": "De rol is succesvol verwijderd.",
"accessRoleRequiredRemove": "Voordat u deze rol verwijdert, selecteer een nieuwe rol om bestaande leden aan te dragen.",
"network": "Netwerk",
"manage": "Beheren",
"sitesNotFound": "Geen sites gevonden.",
"pangolinServerAdmin": "Serverbeheer - Pangolin",
@@ -833,6 +935,7 @@
"idpDisplayName": "Een weergavenaam voor deze identiteitsprovider",
"idpAutoProvisionUsers": "Auto Provisie Gebruikers",
"idpAutoProvisionUsersDescription": "Wanneer ingeschakeld, worden gebruikers automatisch in het systeem aangemaakt wanneer ze de eerste keer inloggen met de mogelijkheid om gebruikers toe te wijzen aan rollen en organisaties.",
"idpAutoProvisionConfigureAfterCreate": "U kunt automatische voorzieningsinstellingen configureren zodra de identiteitsprovider is aangemaakt.",
"licenseBadge": "EE",
"idpType": "Type provider",
"idpTypeDescription": "Selecteer het type identiteitsprovider dat u wilt configureren",
@@ -884,7 +987,7 @@
"defaultMappingsRole": "Standaard Rol Toewijzing",
"defaultMappingsRoleDescription": "Het resultaat van deze uitdrukking moet de rolnaam zoals gedefinieerd in de organisatie als tekenreeks teruggeven.",
"defaultMappingsOrg": "Standaard organisatie mapping",
"defaultMappingsOrgDescription": "Deze expressie moet de org-ID teruggeven of waar om de gebruiker toegang te geven tot de organisatie.",
"defaultMappingsOrgDescription": "Wanneer ingesteld, moet deze expressie de organisatie-ID of waar retourneren voor de gebruiker om toegang te krijgen tot die organisatie. Als het niet is ingesteld, is het definiëren van een roltoewijzing voldoende: de gebruiker is toegestaan zolang een geldige roltoewijzing voor hen binnen de organisatie kan worden opgelost.",
"defaultMappingsSubmit": "Standaard toewijzingen opslaan",
"orgPoliciesEdit": "Organisatie beleid bewerken",
"org": "Organisatie",
@@ -1037,7 +1140,6 @@
"pageNotFoundDescription": "Oeps! De pagina die je zoekt bestaat niet.",
"overview": "Overzicht.",
"home": "Startpagina",
"accessControl": "Toegangs controle",
"settings": "Instellingen",
"usersAll": "Alle gebruikers",
"license": "Licentie",
@@ -1100,6 +1202,12 @@
"actionGetUser": "Gebruiker ophalen",
"actionGetOrgUser": "Krijg organisatie-gebruiker",
"actionListOrgDomains": "Lijst organisatie domeinen",
"actionGetDomain": "Domein verkrijgen",
"actionCreateOrgDomain": "Domein aanmaken",
"actionUpdateOrgDomain": "Domein bijwerken",
"actionDeleteOrgDomain": "Domein verwijderen",
"actionGetDNSRecords": "Krijg DNS Records",
"actionRestartOrgDomain": "Domein opnieuw starten",
"actionCreateSite": "Site aanmaken",
"actionDeleteSite": "Site verwijderen",
"actionGetSite": "Site ophalen",
@@ -1111,6 +1219,7 @@
"setupTokenDescription": "Voer het setup-token in vanaf de serverconsole.",
"setupTokenRequired": "Setup-token is vereist",
"actionUpdateSite": "Site bijwerken",
"actionResetSiteBandwidth": "Reset organisatieschandbreedte",
"actionListSiteRoles": "Toon toegestane sitenollen",
"actionCreateResource": "Bron maken",
"actionDeleteResource": "Document verwijderen",
@@ -1140,6 +1249,7 @@
"actionRemoveUser": "Gebruiker verwijderen",
"actionListUsers": "Gebruikers weergeven",
"actionAddUserRole": "Gebruikersrol toevoegen",
"actionSetUserOrgRoles": "Stel gebruikersrollen in",
"actionGenerateAccessToken": "Genereer Toegangstoken",
"actionDeleteAccessToken": "Verwijder toegangstoken",
"actionListAccessTokens": "Lijst toegangstokens",
@@ -1184,6 +1294,7 @@
"actionViewLogs": "Logboeken bekijken",
"noneSelected": "Niet geselecteerd",
"orgNotFound2": "Geen organisaties gevonden.",
"search": "Zoeken…",
"searchPlaceholder": "Zoeken...",
"emptySearchOptions": "Geen opties gevonden",
"create": "Aanmaken",
@@ -1249,12 +1360,14 @@
"sidebarClientResources": "Privé",
"sidebarAccessControl": "Toegangs controle",
"sidebarLogsAndAnalytics": "Logs & Analytics",
"sidebarTeam": "Team",
"sidebarUsers": "Gebruikers",
"sidebarAdmin": "Beheerder",
"sidebarInvitations": "Uitnodigingen",
"sidebarRoles": "Rollen",
"sidebarShareableLinks": "Koppelingen",
"sidebarApiKeys": "API sleutels",
"sidebarProvisioning": "Provisie",
"sidebarSettings": "Instellingen",
"sidebarAllUsers": "Alle gebruikers",
"sidebarIdentityProviders": "Identiteit aanbieders",
@@ -1266,9 +1379,167 @@
"sidebarGeneral": "Beheren",
"sidebarLogAndAnalytics": "Log & Analytics",
"sidebarBluePrints": "Blauwdrukken",
"sidebarAlerting": "Waarschuwingen",
"sidebarHealthChecks": "Gezondheidscontroles",
"sidebarOrganization": "Organisatie",
"sidebarManagement": "Beheer",
"sidebarBillingAndLicenses": "Facturatie & Licenties",
"sidebarLogsAnalytics": "Analyses",
"alertingTitle": "Waarschuwingen",
"alertingDescription": "Definieer bronnen, triggers en acties voor meldingen",
"alertingRules": "Waarschuwingsregels",
"alertingSearchRules": "Zoek regels…",
"alertingAddRule": "Regel aanmaken",
"alertingColumnSource": "Bron",
"alertingColumnTrigger": "Trigger",
"alertingColumnActions": "Acties",
"alertingColumnEnabled": "Ingeschakeld",
"alertingDeleteQuestion": "Bevestig alstublieft dat u deze waarschuwingsregel wilt verwijderen.",
"alertingDeleteRule": "Verwijder waarschuwingsregel",
"alertingRuleDeleted": "Waarschuwingsregel verwijderd",
"alertingRuleSaved": "Waarschuwingsregel opgeslagen",
"alertingRuleSavedCreatedDescription": "Uw nieuwe waarschuwingsregel is aangemaakt. U kunt deze op deze pagina blijven bewerken.",
"alertingRuleSavedUpdatedDescription": "Uw wijzigingen in deze waarschuwingsregel zijn opgeslagen.",
"alertingEditRule": "Bewerk waarschuwingsregel",
"alertingCreateRule": "Waarschuwingsregel aanmaken",
"alertingRuleCredenzaDescription": "Kies wat te bekijken, wanneer het moet gebeuren en hoe te waarschuwen",
"alertingRuleNamePlaceholder": "Productiesite offline",
"alertingRuleEnabled": "Regel ingeschakeld",
"alertingSectionSource": "Bron",
"alertingSourceType": "Brontype",
"alertingSourceSite": "Site",
"alertingSourceHealthCheck": "Gezondheidscontrole",
"alertingPickSites": "Sites",
"alertingPickHealthChecks": "Gezondheidscontroles",
"alertingPickResources": "Bronnen",
"alertingAllSites": "Alle sites",
"alertingAllSitesDescription": "Waarschuwing voor elke site",
"alertingSpecificSites": "Specifieke sites",
"alertingSpecificSitesDescription": "Kies specifieke sites om in de gaten te houden",
"alertingAllHealthChecks": "Alle Gezondheidscontroles",
"alertingAllHealthChecksDescription": "Waarschuwing voor elke gezondheidscontrole",
"alertingSpecificHealthChecks": "Specifieke Gezondheidscontroles",
"alertingSpecificHealthChecksDescription": "Kies specifieke gezondheidscontroles om in de gaten te houden",
"alertingAllResources": "Alle bronnen",
"alertingAllResourcesDescription": "Waarschuwing voor elke bron",
"alertingSpecificResources": "Specifieke bronnen",
"alertingSpecificResourcesDescription": "Kies specifieke bronnen om in de gaten te houden",
"alertingSelectResources": "Selecteer bronnen…",
"alertingResourcesSelected": "{count} bronnen geselecteerd",
"alertingResourcesEmpty": "Geen bronnen met doelen in de eerste 10 resultaten.",
"alertingSectionTrigger": "Trigger",
"alertingTrigger": "Wanneer te waarschuwen",
"alertingTriggerSiteOnline": "Site online",
"alertingTriggerSiteOffline": "Site offline",
"alertingTriggerSiteToggle": "Site status wijzigt",
"alertingTriggerHcHealthy": "Gezondheidscontrole gezond",
"alertingTriggerHcUnhealthy": "Gezondheidscontrole ongezond",
"alertingTriggerHcToggle": "Gezondheidscontrole status verandert",
"alertingTriggerResourceHealthy": "Bron gezond",
"alertingTriggerResourceUnhealthy": "Bron ongezond",
"alertingTriggerResourceDegraded": "Bron gedegradeerd",
"alertingSearchHealthChecks": "Zoek gezondheidscontroles…",
"alertingHealthChecksEmpty": "Geen gezondheidscontroles beschikbaar.",
"alertingTriggerResourceToggle": "Bronstatus wijzigt",
"alertingSourceResource": "Bron",
"alertingSectionActions": "Acties",
"alertingAddAction": "Actie toevoegen",
"alertingActionNotify": "E-mail",
"alertingActionNotifyDescription": "Stuur e-mailmeldingen naar gebruikers of rollen",
"alertingActionWebhook": "Webhook",
"alertingActionWebhookDescription": "Stuur een HTTP-verzoek naar een aangepast eindpunt",
"alertingExternalIntegration": "Externe integratie",
"alertingExternalPagerDutyDescription": "Stuur waarschuwingen naar PagerDuty voor incidentbeheer",
"alertingExternalOpsgenieDescription": "Routeer waarschuwingen naar Opsgenie voor wachtdienstbeheer",
"alertingExternalServiceNowDescription": "Maak ServiceNow-incidenten aan vanuit waarschuwingsgebeurtenissen",
"alertingExternalIncidentIoDescription": "Trigger Incident.io workflows van waarschuwingsgebeurtenissen",
"alertingActionType": "Actietype",
"alertingNotifyUsers": "Gebruikers",
"alertingNotifyRoles": "Rollen",
"alertingNotifyEmails": "E-mailadressen",
"alertingEmailPlaceholder": "Voeg e-mail toe en druk op Enter",
"alertingWebhookMethod": "HTTP-methode",
"alertingWebhookSecret": "Ondertekengeheim (optioneel)",
"alertingWebhookSecretPlaceholder": "HMAC-geheim",
"alertingWebhookHeaders": "Headers",
"alertingAddHeader": "Header toevoegen",
"alertingSelectSites": "Selecteer sites…",
"alertingSitesSelected": "{count} sites geselecteerd",
"alertingSelectHealthChecks": "Selecteer gezondheidscontroles…",
"alertingHealthChecksSelected": "{count} gezondheidscontroles geselecteerd",
"alertingNoHealthChecks": "Geen doelen met ingeschakelde gezondheidscontroles",
"alertingHealthCheckStub": "Gezondheidscontrole brondeselectie is nog niet gekoppeld - u kunt nog steeds triggers en acties configureren.",
"alertingSelectUsers": "Selecteer gebruikers…",
"alertingUsersSelected": "{count} gebruikers geselecteerd",
"alertingSelectRoles": "Selecteer rollen…",
"alertingRolesSelected": "{count} rollen geselecteerd",
"alertingSummarySites": "Sites ({count})",
"alertingSummaryAllSites": "Alle sites",
"alertingSummaryHealthChecks": "Gezondheidscontroles ({count})",
"alertingSummaryAllHealthChecks": "Alle gezondheidscontroles",
"alertingSummaryResources": "Bronnen ({count})",
"alertingSummaryAllResources": "Alle bronnen",
"alertingErrorNameRequired": "Voer een naam in",
"alertingErrorActionsMin": "Voeg minimaal één actie toe",
"alertingErrorPickSites": "Selecteer minimaal één site",
"alertingErrorPickHealthChecks": "Selecteer minimaal één gezondheidscontrole",
"alertingErrorPickResources": "Selecteer minimaal één bron",
"alertingErrorTriggerSite": "Kies een site-trigger",
"alertingErrorTriggerHealth": "Kies een gezondheidscontrole-trigger",
"alertingErrorTriggerResource": "Kies een bron-trigger",
"alertingErrorNotifyRecipients": "Kies gebruikers, rollen of ten minste één e-mail",
"alertingConfigureSource": "Bron configureren",
"alertingConfigureTrigger": "Trigger configureren",
"alertingConfigureActions": "Acties configureren",
"alertingBackToRules": "Terug naar regels",
"alertingRuleCooldown": "Aflkoelperiode (seconden)",
"alertingRuleCooldownDescription": "Minimale tijd tussen herhaalwaarschuwingen voor dezelfde regel. Zet op 0 om elke keer te laten vuren.",
"alertingDraftBadge": "Concept - opslaan om deze regel op te slaan",
"alertingSidebarHint": "Klik op een stap in het canvas om deze hier te bewerken.",
"alertingGraphCanvasTitle": "Regelstroom",
"alertingGraphCanvasDescription": "Visueel overzicht van bron, trigger en acties. Selecteer een node om deze in het paneel te bewerken.",
"alertingNodeNotConfigured": "Nog niet geconfigureerd",
"alertingNodeActionsCount": "{count, plural, one {# actie} other {# acties}}",
"alertingNodeRoleSource": "Bron",
"alertingNodeRoleTrigger": "Trigger",
"alertingNodeRoleAction": "Actie",
"alertingTabRules": "Waarschuwingsregels",
"alertingTabHealthChecks": "Gezondheidscontroles",
"alertingRulesBannerTitle": "Meldingen ontvangen",
"alertingRulesBannerDescription": "Elke regel koppelt wat te bekijken (een site, gezondheidscontrole of bron), wanneer te vuren (bijvoorbeeld offline of ongezond), en hoe uw team te waarschuwen via e-mail, webhooks of integraties. Gebruik deze lijst om die regels te maken, in te schakelen en te beheren.",
"alertingHealthChecksBannerTitle": "Gezondheid & bronnen bewaken",
"alertingHealthChecksBannerDescription": "Gezondheidscontroles zijn HTTP- of TCP-monitoren die u één keer definieert. U kunt ze vervolgens als bronnen in waarschuwingsregels gebruiken, zodat u meldingen krijgt wanneer een doelwit gezond of ongezond wordt. Gezondheidscontroles van bronnen verschijnen ook hier.",
"standaloneHcTableTitle": "Gezondheidscontroles",
"standaloneHcSearchPlaceholder": "Zoek gezondheidscontroles…",
"standaloneHcAddButton": "Gezondheidscontrole aanmaken",
"standaloneHcCreateTitle": "Gezondheidscontrole aanmaken",
"standaloneHcEditTitle": "Gezondheidscontrole bewerken",
"standaloneHcDescription": "Configureer een HTTP- of TCP-gezondheidscontrole voor gebruik in waarschuwingsregels.",
"standaloneHcNameLabel": "Naam",
"standaloneHcNamePlaceholder": "Mijn HTTP-monitor",
"standaloneHcDeleteTitle": "Gezondheidscontrole verwijderen",
"standaloneHcDeleteQuestion": "Bevestig alstublieft dat u deze gezondheidscontrole wilt verwijderen.",
"standaloneHcDeleted": "Gezondheidscontrole verwijderd",
"standaloneHcSaved": "Gezondheidscontrole opgeslagen",
"standaloneHcColumnHealth": "Gezondheid",
"standaloneHcColumnMode": "Modus",
"standaloneHcColumnTarget": "Doelwit",
"standaloneHcHealthStateHealthy": "Gezond",
"standaloneHcHealthStateUnhealthy": "Ongezond",
"standaloneHcHealthStateUnknown": "Onbekend",
"standaloneHcFilterAnySite": "Alle sites",
"standaloneHcFilterAnyResource": "Alle bronnen",
"standaloneHcFilterMode": "Modus",
"standaloneHcFilterModeHttp": "HTTP",
"standaloneHcFilterModeTcp": "TCP",
"standaloneHcFilterModeSnmp": "SNMP",
"standaloneHcFilterModePing": "Ping",
"standaloneHcFilterHealth": "Gezondheid",
"standaloneHcFilterEnabled": "Ingeschakeld",
"standaloneHcFilterEnabledOn": "Ingeschakeld",
"standaloneHcFilterEnabledOff": "Uitgeschakeld",
"standaloneHcFilterSiteIdFallback": "Site {id}",
"standaloneHcFilterResourceIdFallback": "Bron {id}",
"blueprints": "Blauwdrukken",
"blueprintsDescription": "Gebruik declaratieve configuraties en bekijk vorige uitvoeringen.",
"blueprintAdd": "Blauwdruk toevoegen",
@@ -1289,7 +1560,6 @@
"parsedContents": "Geparseerde inhoud (alleen lezen)",
"enableDockerSocket": "Schakel Docker Blauwdruk in",
"enableDockerSocketDescription": "Schakel Docker Socket label in voor blauwdruk labels. Pad naar Nieuw.",
"enableDockerSocketLink": "Meer informatie",
"viewDockerContainers": "Bekijk Docker containers",
"containersIn": "Containers in {siteName}",
"selectContainerDescription": "Selecteer een container om als hostnaam voor dit doel te gebruiken. Klik op een poort om een poort te gebruiken.",
@@ -1331,7 +1601,8 @@
"initialSetupDescription": "Maak het eerste serverbeheeraccount aan. Er kan slechts één serverbeheerder bestaan. U kunt deze inloggegevens later altijd wijzigen.",
"createAdminAccount": "Maak een beheeraccount aan",
"setupErrorCreateAdmin": "Er is een fout opgetreden bij het maken van het serverbeheerdersaccount.",
"certificateStatus": "Certificaatstatus",
"certificateStatus": "Certificaat",
"certificateStatusAutoRefreshHint": "Status ververst automatisch.",
"loading": "Bezig met laden",
"loadingAnalytics": "Laden van Analytics",
"restart": "Herstarten",
@@ -1400,6 +1671,7 @@
"pangolinUpdateAvailableReleaseNotes": "Uitgaveopmerkingen bekijken",
"newtUpdateAvailable": "Update beschikbaar",
"newtUpdateAvailableInfo": "Er is een nieuwe versie van Newt beschikbaar. Update naar de nieuwste versie voor de beste ervaring.",
"pangolinNodeUpdateAvailableInfo": "Er is een nieuwe versie van Pangolin Node beschikbaar. Update naar de nieuwste versie voor de beste ervaring.",
"domainPickerEnterDomain": "Domein",
"domainPickerPlaceholder": "mijnapp.voorbeeld.nl",
"domainPickerDescription": "Voer de volledige domein van de bron in om beschikbare opties te zien.",
@@ -1417,6 +1689,7 @@
"domainPickerNamespace": "Naamruimte: {namespace}",
"domainPickerShowMore": "Meer weergeven",
"regionSelectorTitle": "Selecteer Regio",
"domainPickerRemoteExitNodeWarning": "Opgegeven domeinen worden niet ondersteund wanneer websites verbinding maken met externe sluitnodes. Gebruik in plaats daarvan een aangepast domein. Om bronnen beschikbaar te maken op externe nodes.",
"regionSelectorInfo": "Het selecteren van een regio helpt ons om betere prestaties te leveren voor uw locatie. U hoeft niet in dezelfde regio als uw server te zijn.",
"regionSelectorPlaceholder": "Kies een regio",
"regionSelectorComingSoon": "Komt binnenkort",
@@ -1570,6 +1843,16 @@
"billingFeatureLossWarning": "Kennisgeving beschikbaarheid",
"billingFeatureLossDescription": "Door downgraden worden functies die niet beschikbaar zijn in het nieuwe abonnement automatisch uitgeschakeld. Sommige instellingen en configuraties kunnen verloren gaan. Raadpleeg de prijsmatrix om te begrijpen welke functies niet langer beschikbaar zijn.",
"billingUsageExceedsLimit": "Huidig gebruik ({current}) overschrijdt limiet ({limit})",
"billingPastDueTitle": "Vervaldatum betaling",
"billingPastDueDescription": "Uw betaling is verlopen. Werk uw betaalmethode bij om uw huidige abonnementsfuncties te blijven gebruiken. Als dit niet is opgelost, zal je abonnement worden geannuleerd en zal je worden teruggezet naar de vrije rang.",
"billingUnpaidTitle": "Abonnement Onbetaald",
"billingUnpaidDescription": "Uw abonnement is niet betaald en u bent teruggekeerd naar het gratis niveau. Update uw betalingsmethode om uw abonnement te herstellen.",
"billingIncompleteTitle": "Betaling onvolledig",
"billingIncompleteDescription": "Uw betaling is onvolledig. Voltooi alstublieft het betalingsproces om uw abonnement te activeren.",
"billingIncompleteExpiredTitle": "Betaling verlopen",
"billingIncompleteExpiredDescription": "Uw betaling is nooit voltooid en verlopen. U bent teruggekeerd naar de gratis niveaus. Abonneer u opnieuw om de toegang tot betaalde functies te herstellen.",
"billingManageSubscription": "Beheer uw abonnement",
"billingResolvePaymentIssue": "Gelieve uw betalingsprobleem op te lossen voor het upgraden of downgraden",
"signUpTerms": {
"IAgreeToThe": "Ik ga akkoord met de",
"termsOfService": "servicevoorwaarden",
@@ -1628,6 +1911,7 @@
"configureHealthCheck": "Configureer Gezondheidscontrole",
"configureHealthCheckDescription": "Stel gezondheid monitor voor {target} in",
"enableHealthChecks": "Inschakelen Gezondheidscontroles",
"healthCheckDisabledStateDescription": "Wanneer uitgeschakeld, zal de site geen gezondheidscontroles uitvoeren en wordt de staat als onbekend beschouwd.",
"enableHealthChecksDescription": "Controleer de gezondheid van dit doel. U kunt een ander eindpunt monitoren dan het doel indien vereist.",
"healthScheme": "Methode",
"healthSelectScheme": "Selecteer methode",
@@ -1643,6 +1927,24 @@
"timeIsInSeconds": "Tijd is in seconden",
"requireDeviceApproval": "Vereist goedkeuring van apparaat",
"requireDeviceApprovalDescription": "Gebruikers met deze rol hebben nieuwe apparaten nodig die door een beheerder zijn goedgekeurd voordat ze verbinding kunnen maken met bronnen en deze kunnen gebruiken.",
"sshAccess": "SSH toegang",
"roleAllowSsh": "SSH toestaan",
"roleAllowSshAllow": "Toestaan",
"roleAllowSshDisallow": "Weigeren",
"roleAllowSshDescription": "Sta gebruikers met deze rol toe om verbinding te maken met bronnen via SSH. Indien uitgeschakeld kan de rol geen gebruik maken van SSH toegang.",
"sshSudoMode": "Sudo toegang",
"sshSudoModeNone": "geen",
"sshSudoModeNoneDescription": "Gebruiker kan geen commando's uitvoeren met sudo.",
"sshSudoModeFull": "Volledige Sudo",
"sshSudoModeFullDescription": "Gebruiker kan elk commando uitvoeren met een sudo.",
"sshSudoModeCommands": "Opdrachten",
"sshSudoModeCommandsDescription": "Gebruiker kan alleen de opgegeven commando's uitvoeren met de sudo.",
"sshSudo": "sudo toestaan",
"sshSudoCommands": "Sudo Commando's",
"sshSudoCommandsDescription": "Komma's gescheiden lijst van commando's waar de gebruiker een sudo mee mag uitvoeren.",
"sshCreateHomeDir": "Maak Home Directory",
"sshUnixGroups": "Unix groepen",
"sshUnixGroupsDescription": "Door komma's gescheiden Unix-groepen om de gebruiker toe te voegen aan de doelhost.",
"retryAttempts": "Herhaal Pogingen",
"expectedResponseCodes": "Verwachte Reactiecodes",
"expectedResponseCodesDescription": "HTTP-statuscode die gezonde status aangeeft. Indien leeg wordt 200-300 als gezond beschouwd.",
@@ -1659,9 +1961,20 @@
"healthCheckIntervalMin": "Controle interval moet minimaal 5 seconden zijn",
"healthCheckTimeoutMin": "Timeout moet minimaal 1 seconde zijn",
"healthCheckRetryMin": "Herhaal pogingen moet minimaal 1 zijn",
"healthCheckMode": "Controlemodus",
"healthCheckStrategy": "Strategie",
"healthCheckModeDescription": "TCP-modus verifieert alleen connectiviteit. HTTP-modus valideert de HTTP-respons.",
"healthyThreshold": "Gezonde drempel",
"healthyThresholdDescription": "Opeenvolgende successen vereist voordat gemarkeerd wordt als gezond.",
"unhealthyThreshold": "Ongezonde drempel",
"unhealthyThresholdDescription": "Opeenvolgende fouten vereist voordat gemarkeerd wordt als ongezond.",
"healthCheckHealthyThresholdMin": "Gezonde drempel moet minimaal 1 zijn",
"healthCheckUnhealthyThresholdMin": "Ongezonde drempel moet minimaal 1 zijn",
"httpMethod": "HTTP-methode",
"selectHttpMethod": "Selecteer HTTP-methode",
"domainPickerSubdomainLabel": "Subdomein",
"domainPickerWildcard": "Wildcard",
"domainPickerWildcardPaidOnly": "Wildcard-subdomeinen zijn een betaalde functie. Upgrade om deze functie te gebruiken.",
"domainPickerBaseDomainLabel": "Basisdomein",
"domainPickerSearchDomains": "Zoek domeinen...",
"domainPickerNoDomainsFound": "Geen domeinen gevonden",
@@ -1687,12 +2000,12 @@
"resourcesTableAliasAddressInfo": "Dit adres is onderdeel van het hulpprogramma subnet van de organisatie. Het wordt gebruikt om aliasrecords op te lossen met behulp van interne DNS-resolutie.",
"resourcesTableClients": "Clienten",
"resourcesTableAndOnlyAccessibleInternally": "en zijn alleen intern toegankelijk wanneer verbonden met een client.",
"resourcesTableNoTargets": "Geen doelen",
"resourcesTableHealthy": "Gezond",
"resourcesTableDegraded": "Verminderde",
"resourcesTableOffline": "Offline",
"resourcesTableUnhealthy": "Ongezond",
"resourcesTableUnknown": "onbekend",
"resourcesTableNotMonitored": "Niet gecontroleerd",
"resourcesTableNoTargets": "Geen doelen",
"editInternalResourceDialogEditClientResource": "Privépagina bewerken",
"editInternalResourceDialogUpdateResourceProperties": "Update de resource configuratie en access control voor {resourceName}",
"editInternalResourceDialogResourceProperties": "Bron eigenschappen",
@@ -1718,6 +2031,11 @@
"editInternalResourceDialogModePort": "Poort",
"editInternalResourceDialogModeHost": "Hostnaam",
"editInternalResourceDialogModeCidr": "CIDR",
"editInternalResourceDialogModeHttp": "HTTP",
"editInternalResourceDialogModeHttps": "HTTPS",
"editInternalResourceDialogScheme": "Schema",
"editInternalResourceDialogEnableSsl": "SSL inschakelen",
"editInternalResourceDialogEnableSslDescription": "Schakel SSL/TLS-encryptie in voor beveiligde HTTPS-verbindingen met de bestemming.",
"editInternalResourceDialogDestination": "Bestemming",
"editInternalResourceDialogDestinationHostDescription": "Het IP-adres of de hostnaam van de bron op het netwerk van de site.",
"editInternalResourceDialogDestinationIPDescription": "Het IP of hostnaam adres van de bron op het netwerk van de site.",
@@ -1733,6 +2051,7 @@
"createInternalResourceDialogName": "Naam",
"createInternalResourceDialogSite": "Site",
"selectSite": "Selecteer site...",
"multiSitesSelectorSitesCount": "{count, plural, one {# site} other {# sites}}",
"noSitesFound": "Geen sites gevonden.",
"createInternalResourceDialogProtocol": "Protocol",
"createInternalResourceDialogTcp": "TCP",
@@ -1761,11 +2080,19 @@
"createInternalResourceDialogModePort": "Poort",
"createInternalResourceDialogModeHost": "Hostnaam",
"createInternalResourceDialogModeCidr": "CIDR",
"createInternalResourceDialogModeHttp": "HTTP",
"createInternalResourceDialogModeHttps": "HTTPS",
"scheme": "Schema",
"createInternalResourceDialogScheme": "Schema",
"createInternalResourceDialogEnableSsl": "SSL inschakelen",
"createInternalResourceDialogEnableSslDescription": "Schakel SSL/TLS-encryptie in voor beveiligde HTTPS-verbindingen met de bestemming.",
"createInternalResourceDialogDestination": "Bestemming",
"createInternalResourceDialogDestinationHostDescription": "Het IP-adres of de hostnaam van de bron op het netwerk van de site.",
"createInternalResourceDialogDestinationCidrDescription": "Het CIDR-bereik van het document op het netwerk van de site.",
"createInternalResourceDialogAlias": "Alias",
"createInternalResourceDialogAliasDescription": "Een optionele interne DNS-alias voor dit document.",
"internalResourceDownstreamSchemeRequired": "Schema is vereist voor HTTP-bronnen",
"internalResourceHttpPortRequired": "Bestemmingspoort is vereist voor HTTP-bronnen",
"siteConfiguration": "Configuratie",
"siteAcceptClientConnections": "Accepteer clientverbindingen",
"siteAcceptClientConnectionsDescription": "Sta gebruikersapparaten en clients toegang toe tot bronnen op deze site. Dit kan later worden gewijzigd.",
@@ -1851,6 +2178,40 @@
"exitNode": "Exit Node",
"country": "Land",
"rulesMatchCountry": "Momenteel gebaseerd op bron IP",
"region": "Regio",
"selectRegion": "Selecteer regio",
"searchRegions": "Zoek regio's...",
"noRegionFound": "Geen regio gevonden.",
"rulesMatchRegion": "Selecteer een regionale groepering van landen",
"rulesErrorInvalidRegion": "Ongeldige regio",
"rulesErrorInvalidRegionDescription": "Selecteer een geldige regio.",
"regionAfrica": "Afrika",
"regionNorthernAfrica": "Noord-Afrika",
"regionEasternAfrica": "Oost Afrika",
"regionMiddleAfrica": "Midden Afrika",
"regionSouthernAfrica": "Zuidelijk Afrika",
"regionWesternAfrica": "Westelijk Afrika",
"regionAmericas": "Amerika's",
"regionCaribbean": "Caraïben",
"regionCentralAmerica": "Midden-Amerika",
"regionSouthAmerica": "Zuid Amerika",
"regionNorthernAmerica": "Noord-Amerika",
"regionAsia": "Azië",
"regionCentralAsia": "Centraal-Azië",
"regionEasternAsia": "Oost-Azië",
"regionSouthEasternAsia": "Zuid-Oost-Azië",
"regionSouthernAsia": "Zuid-Azië",
"regionWesternAsia": "Westelijk Azië",
"regionEurope": "Europa",
"regionEasternEurope": "Oost-Europa",
"regionNorthernEurope": "Noord-Europa",
"regionSouthernEurope": "Zuid-Europa",
"regionWesternEurope": "West-Europa",
"regionOceania": "Oceania",
"regionAustraliaAndNewZealand": "Australië en Nieuw-Zeeland",
"regionMelanesia": "Melanesia",
"regionMicronesia": "Micronesia",
"regionPolynesia": "Polynesia",
"managedSelfHosted": {
"title": "Beheerde Self-Hosted",
"description": "betrouwbaardere en slecht onderhouden Pangolin server met extra klokken en klokkenluiders",
@@ -1889,7 +2250,7 @@
},
"internationaldomaindetected": "Internationaal Domein Gedetecteerd",
"willbestoredas": "Zal worden opgeslagen als:",
"roleMappingDescription": "Bepaal hoe rollen worden toegewezen aan gebruikers wanneer ze inloggen wanneer Auto Provision is ingeschakeld.",
"roleMappingDescription": "Bepaal hoe rollen aan gebruikers worden toegewezen wanneer ze zich aanmelden met deze identiteitsprovider.",
"selectRole": "Selecteer een rol",
"roleMappingExpression": "Expressie",
"selectRolePlaceholder": "Kies een rol",
@@ -1899,6 +2260,25 @@
"invalidValue": "Ongeldige waarde",
"idpTypeLabel": "Identiteit provider type",
"roleMappingExpressionPlaceholder": "bijvoorbeeld bevat (groepen, 'admin') && 'Admin' ½ 'Member'",
"roleMappingModeFixedRoles": "Vaste rollen",
"roleMappingModeMappingBuilder": "Toewijzing Bouwer",
"roleMappingModeRawExpression": "Ruwe expressie",
"roleMappingFixedRolesPlaceholderSelect": "Selecteer één of meer rollen",
"roleMappingFixedRolesPlaceholderFreeform": "Typ rolnamen (exacte overeenkomst per organisatie)",
"roleMappingFixedRolesDescriptionSameForAll": "Wijs dezelfde rolset toe aan elke auto-provisioned gebruiker.",
"roleMappingFixedRolesDescriptionDefaultPolicy": "Voor standaardbeleid, typ rolnamen die bestaan in elke organisatie waar gebruikers worden opgegeven. Namen moeten exact overeenkomen.",
"roleMappingClaimPath": "Claim pad",
"roleMappingClaimPathPlaceholder": "Groepen",
"roleMappingClaimPathDescription": "Pad in de token payload die bronwaarden bevat (bijvoorbeeld groepen).",
"roleMappingMatchValue": "Kies een waarde",
"roleMappingAssignRoles": "Rollen toewijzen",
"roleMappingAddMappingRule": "Toewijzingsregel toevoegen",
"roleMappingRawExpressionResultDescription": "Expressie moet een tekenreeks of tekenreeks evalueren.",
"roleMappingRawExpressionResultDescriptionSingleRole": "Expressie moet evalueren naar een tekenreeks (een naam met één rol).",
"roleMappingMatchValuePlaceholder": "Overeenkomende waarde (bijvoorbeeld: admin)",
"roleMappingAssignRolesPlaceholderFreeform": "Typ rolnamen (exact per org)",
"roleMappingBuilderFreeformRowHint": "Rol namen moeten overeenkomen met een rol in elke doelorganisatie.",
"roleMappingRemoveRule": "Verwijderen",
"idpGoogleConfiguration": "Google Configuratie",
"idpGoogleConfigurationDescription": "Configureer de Google OAuth2-referenties",
"idpGoogleClientIdDescription": "Google OAuth2 Client ID",
@@ -1962,9 +2342,11 @@
"selectDomainForOrgAuthPage": "Selecteer een domein voor de authenticatiepagina van de organisatie",
"domainPickerProvidedDomain": "Opgegeven domein",
"domainPickerFreeProvidedDomain": "Gratis verstrekt domein",
"domainPickerFreeDomainsPaidFeature": "Geleverde domeinen zijn een betaalde functie. Abonneer je om een domein bij je plan te krijgen - je hoeft er zelf geen mee te brengen.",
"domainPickerVerified": "Geverifieerd",
"domainPickerUnverified": "Ongeverifieerd",
"domainPickerInvalidSubdomainStructure": "Dit subdomein bevat ongeldige tekens of structuur. Het zal automatisch worden gesaneerd wanneer u opslaat.",
"domainPickerManual": "Handleiding",
"domainPickerInvalidSubdomainStructure": "Ongeldige tekens worden gesaneerd bij het opslaan.",
"domainPickerError": "Foutmelding",
"domainPickerErrorLoadDomains": "Fout bij het laden van organisatiedomeinen",
"domainPickerErrorCheckAvailability": "Kan domein beschikbaarheid niet controleren",
@@ -1977,7 +2359,7 @@
"orgAuthChooseIdpDescription": "Kies uw identiteitsprovider om door te gaan",
"orgAuthNoIdpConfigured": "Deze organisatie heeft geen identiteitsproviders geconfigureerd. Je kunt in plaats daarvan inloggen met je Pangolin-identiteit.",
"orgAuthSignInWithPangolin": "Log in met Pangolin",
"orgAuthSignInToOrg": "Log in bij een organisatie",
"orgAuthSignInToOrg": "Organisatie Identiteitsprovider (SSO)",
"orgAuthSelectOrgTitle": "Organisatie Inloggen",
"orgAuthSelectOrgDescription": "Voer je organisatie-ID in om verder te gaan",
"orgAuthOrgIdPlaceholder": "jouw-organisatie",
@@ -2193,10 +2575,10 @@
},
"scale": {
"title": "Schaal",
"description": "Enterprise functies, 50 gebruikers, 50 sites en prioriteit ondersteuning."
"description": "Enterprise-functies, 50 gebruikers, 100 sites en prioritaire ondersteuning."
}
},
"personalUseOnly": "Alleen persoonlijk gebruik (gratis licentie - geen afrekenen)",
"personalUseOnly": "Alleen voor persoonlijk gebruik (gratis licentie - geen afrekening)",
"buttons": {
"continueToCheckout": "Doorgaan naar afrekenen"
},
@@ -2270,6 +2652,7 @@
"validPassword": "Geldig wachtwoord",
"validEmail": "Valid email",
"validSSO": "Valid SSO",
"connectedClient": "Verbonden Client",
"resourceBlocked": "Bron geblokkeerd",
"droppedByRule": "Achtergelaten door regel",
"noSessions": "Geen sessies",
@@ -2277,24 +2660,26 @@
"noMoreAuthMethods": "No Valid Auth",
"ip": "IP-adres",
"reason": "Reden",
"requestLogs": "Logboeken aanvragen",
"requestLogs": "HTTP-aanvraaglogboeken",
"requestAnalytics": "Analytics opvragen",
"host": "Hostnaam",
"location": "Locatie",
"actionLogs": "Actie logs",
"sidebarLogsRequest": "Logboeken aanvragen",
"sidebarLogsRequest": "HTTP-aanvraaglogboeken",
"sidebarLogsAccess": "Toegang tot logboek",
"sidebarLogsAction": "Actie logs",
"logRetention": "Log bewaring",
"logRetentionDescription": "Beheren hoe lang verschillende soorten logs bewaard worden voor deze organisatie of schakel ze uit",
"requestLogsDescription": "Bekijk gedetailleerde verzoeklogboeken voor resources in deze organisatie",
"requestAnalyticsDescription": "Bekijk gedetailleerde request analytics voor resources in deze organisatie",
"logRetentionRequestLabel": "Logboekbewaring aanvragen",
"logRetentionRequestLabel": "Bewaring van HTTP-aanvraaglogboeken",
"logRetentionRequestDescription": "Hoe lang de aanvraaglogboeken te behouden",
"logRetentionAccessLabel": "Toegang logboek bewaring",
"logRetentionAccessDescription": "Hoe lang de toegangslogboeken behouden blijven",
"logRetentionActionLabel": "Actie log bewaring",
"logRetentionActionDescription": "Hoe lang de action logs behouden moeten blijven",
"logRetentionConnectionLabel": "Connectie log bewaring",
"logRetentionConnectionDescription": "Hoe lang de verbindingslogs onderhouden",
"logRetentionDisabled": "Uitgeschakeld",
"logRetention3Days": "3 dagen",
"logRetention7Days": "7 dagen",
@@ -2305,8 +2690,15 @@
"logRetentionEndOfFollowingYear": "Einde van volgend jaar",
"actionLogsDescription": "Bekijk een geschiedenis van acties die worden uitgevoerd in deze organisatie",
"accessLogsDescription": "Toegangsverificatieverzoeken voor resources in deze organisatie bekijken",
"licenseRequiredToUse": "Een <enterpriseLicenseLink>Enterprise Edition</enterpriseLicenseLink> licentie is vereist om deze functie te gebruiken. Deze functie is ook beschikbaar in <pangolinCloudLink>Pangolin Cloud</pangolinCloudLink>.",
"ossEnterpriseEditionRequired": "De <enterpriseEditionLink>Enterprise Edition</enterpriseEditionLink> is vereist om deze functie te gebruiken. Deze functie is ook beschikbaar in <pangolinCloudLink>Pangolin Cloud</pangolinCloudLink>.",
"connectionLogs": "Connectie Logs",
"connectionLogsDescription": "Toon verbindingslogs voor tunnels in deze organisatie",
"sidebarLogsConnection": "Connectie Logs",
"sidebarLogsStreaming": "Streamen",
"sourceAddress": "Bron adres",
"destinationAddress": "Adres bestemming",
"duration": "Duur",
"licenseRequiredToUse": "Een <enterpriseLicenseLink>Enterprise Edition</enterpriseLicenseLink> licentie of <pangolinCloudLink>Pangolin Cloud</pangolinCloudLink> is vereist om deze functie te gebruiken. <bookADemoLink>Boek een demo of POC trial</bookADemoLink>.",
"ossEnterpriseEditionRequired": "De <enterpriseEditionLink>Enterprise Edition</enterpriseEditionLink> is vereist om deze functie te gebruiken. Deze functie is ook beschikbaar in <pangolinCloudLink>Pangolin Cloud</pangolinCloudLink>. <bookADemoLink>Boek een demo of POC trial</bookADemoLink>.",
"certResolver": "Certificaat Resolver",
"certResolverDescription": "Selecteer de certificaat resolver die moet worden gebruikt voor deze resource.",
"selectCertResolver": "Certificaat Resolver selecteren",
@@ -2448,6 +2840,9 @@
"machineClients": "Machine Clienten",
"install": "Installeren",
"run": "Uitvoeren",
"envFile": "Omgevingsbestand",
"serviceFile": "Servicebestand",
"enableAndStart": "Inschakelen en Starten",
"clientNameDescription": "De weergavenaam van de client die later gewijzigd kan worden.",
"clientAddress": "Klant adres (Geavanceerd)",
"setupFailedToFetchSubnet": "Kan standaard subnet niet ophalen",
@@ -2496,13 +2891,30 @@
"editInternalResourceDialogAddClients": "Clienten toevoegen",
"editInternalResourceDialogDestinationLabel": "Bestemming",
"editInternalResourceDialogDestinationDescription": "Specificeer het bestemmingsadres voor de interne bron. Dit kan een hostnaam, IP-adres of CIDR-bereik zijn, afhankelijk van de geselecteerde modus. Stel optioneel een interne DNS-alias in voor eenvoudigere identificatie.",
"internalResourceFormMultiSiteRoutingHelp": "Selecteren van meerdere sites maakt veerkrachtige routing en failover mogelijk voor hoge beschikbaarheid.",
"internalResourceFormMultiSiteRoutingHelpLearnMore": "Meer informatie",
"editInternalResourceDialogPortRestrictionsDescription": "Beperk toegang tot specifieke TCP/UDP-poorten of sta alle poorten toe/blokkeer.",
"createInternalResourceDialogHttpConfiguration": "HTTP-configuratie",
"createInternalResourceDialogHttpConfigurationDescription": "Kies het domein dat cliënten zullen gebruiken om deze bron via HTTP of HTTPS te bereiken.",
"editInternalResourceDialogHttpConfiguration": "HTTP-configuratie",
"editInternalResourceDialogHttpConfigurationDescription": "Kies het domein dat cliënten zullen gebruiken om deze bron via HTTP of HTTPS te bereiken.",
"editInternalResourceDialogTcp": "TCP",
"editInternalResourceDialogUdp": "UDP",
"editInternalResourceDialogIcmp": "ICMP",
"editInternalResourceDialogAccessControl": "Toegangs controle",
"editInternalResourceDialogAccessControlDescription": "Beheer welke rollen, gebruikers en machineclients toegang hebben tot deze bron wanneer ze zijn verbonden. Beheerders hebben altijd toegang.",
"editInternalResourceDialogPortRangeValidationError": "Poortbereik moet \"*\" zijn voor alle poorten, of een komma-gescheiden lijst van poorten en bereiken (bijv. \"80,443,8000-9000\"). Poorten moeten tussen 1 en 65535 zijn.",
"internalResourceAuthDaemonStrategy": "SSH Auth Daemon locatie",
"internalResourceAuthDaemonStrategyDescription": "Kies waar de SSH authenticatie daemon wordt uitgevoerd: op de website (Newt) of op een externe host.",
"internalResourceAuthDaemonDescription": "De SSH authenticatie daemon zorgt voor SSH sleutelondertekening en PAM authenticatie voor deze resource. Kies of het wordt uitgevoerd op de website (Nieuw) of op een afzonderlijke externe host. Zie <docsLink>de documentatie</docsLink> voor meer.",
"internalResourceAuthDaemonDocsUrl": "https://docs.pangolin.net",
"internalResourceAuthDaemonStrategyPlaceholder": "Selecteer strategie",
"internalResourceAuthDaemonStrategyLabel": "Locatie",
"internalResourceAuthDaemonSite": "In de site",
"internalResourceAuthDaemonSiteDescription": "Auth daemon draait op de site (Newt).",
"internalResourceAuthDaemonRemote": "Externe host",
"internalResourceAuthDaemonRemoteDescription": "Authenticatiedaemon draait op een host die niet de site is.",
"internalResourceAuthDaemonPort": "Daemon poort (optioneel)",
"orgAuthWhatsThis": "Waar kan ik mijn organisatie-ID vinden?",
"learnMore": "Meer informatie",
"backToHome": "Ga terug naar startpagina",
@@ -2524,6 +2936,9 @@
"maintenancePageMessagePlaceholder": "We keren snel terug! Onze site ondergaat momenteel gepland onderhoud.",
"maintenancePageMessageDescription": "Gedetailleerd bericht dat het onderhoud uitlegt",
"maintenancePageTimeTitle": "Geschatte voltooiingstijd (optioneel)",
"privateMaintenanceScreenTitle": "Privéscherm maintenance screen",
"privateMaintenanceScreenMessage": "Dit domein wordt gebruikt op een privébron. Verbind met de Pangolin client om toegang te krijgen tot deze bron.",
"privateMaintenanceScreenSteps": "Eenmaal verbonden, als u dit bericht nog steeds ziet, kan het DNS-cache van uw browser nog steeds naar het oude adres wijzen. Om dit te corrigeren: sluit en heropen dit tabblad, of uw browser, dan navigeer weer naar deze pagina.",
"maintenanceTime": "bijv. 2 uur, 1 nov om 17:00",
"maintenanceEstimatedTimeDescription": "Wanneer u verwacht dat het onderhoud voltooid is",
"editDomain": "Domein bewerken",
@@ -2632,5 +3047,209 @@
"approvalsEmptyStateStep2Title": "Toestel goedkeuringen inschakelen",
"approvalsEmptyStateStep2Description": "Bewerk een rol en schakel de optie 'Vereist Apparaat Goedkeuringen' in. Gebruikers met deze rol hebben admin goedkeuring nodig voor nieuwe apparaten.",
"approvalsEmptyStatePreviewDescription": "Voorbeeld: Indien ingeschakeld, zullen in afwachting van apparaatverzoeken hier verschijnen om te beoordelen",
"approvalsEmptyStateButtonText": "Rollen beheren"
"approvalsEmptyStateButtonText": "Rollen beheren",
"domainErrorTitle": "We ondervinden problemen bij het controleren van uw domein",
"idpAdminAutoProvisionPoliciesTabHint": "Configureer rolverrekening en organisatie beleid in het <policiesTabLink>Auto Provision Settings</policiesTabLink> tab.",
"streamingTitle": "Event streaming",
"streamingDescription": "Stream events van uw organisatie naar externe bestemmingen in realtime.",
"streamingUnnamedDestination": "Naamloze bestemming",
"streamingNoUrlConfigured": "Geen URL ingesteld",
"streamingAddDestination": "Bestemming toevoegen",
"streamingHttpWebhookTitle": "HTTP Webhook",
"streamingHttpWebhookDescription": "Stuur gebeurtenissen naar elk HTTP eindpunt met flexibele authenticatie en template.",
"streamingS3Title": "Amazon S3",
"streamingS3Description": "Stream events naar een S3-compatibele object-opslagemmer. Binnenkort beschikbaar.",
"streamingDatadogTitle": "Datadog",
"streamingDatadogDescription": "Stuur gebeurtenissen rechtstreeks door naar je Datadog account. Binnenkort beschikbaar.",
"streamingTypePickerDescription": "Kies een bestemmingstype om te beginnen.",
"streamingFailedToLoad": "Laden van bestemmingen mislukt",
"streamingUnexpectedError": "Er is een onverwachte fout opgetreden.",
"streamingFailedToUpdate": "Bijwerken bestemming mislukt",
"streamingDeletedSuccess": "Bestemming succesvol verwijderd",
"streamingFailedToDelete": "Verwijderen van bestemming mislukt",
"streamingDeleteTitle": "Verwijder bestemming",
"streamingDeleteButtonText": "Verwijder bestemming",
"streamingDeleteDialogAreYouSure": "Weet u zeker dat u wilt verwijderen",
"streamingDeleteDialogThisDestination": "deze bestemming",
"streamingDeleteDialogPermanentlyRemoved": "? Alle configuratie zal permanent worden verwijderd.",
"httpDestEditTitle": "Bewerk bestemming",
"httpDestAddTitle": "Voeg HTTP bestemming toe",
"httpDestEditDescription": "Werk de configuratie voor deze HTTP-event streaming bestemming bij.",
"httpDestAddDescription": "Configureer een nieuw HTTP-eindpunt om de gebeurtenissen van uw organisatie te ontvangen.",
"S3DestEditTitle": "Bestemming bewerken",
"S3DestAddTitle": "S3-bestemming toevoegen",
"S3DestEditDescription": "Werk de configuratie bij voor deze S3-gebeurtenisstreamingbestemming.",
"S3DestAddDescription": "Configureer een nieuw S3-eindpunt om de gebeurtenissen van uw organisatie te ontvangen.",
"datadogDestEditTitle": "Bestemming bewerken",
"datadogDestAddTitle": "Datadog-bestemming toevoegen",
"datadogDestEditDescription": "Werk de configuratie bij voor deze Datadog-gebeurtenisstreamingbestemming.",
"datadogDestAddDescription": "Configureer een nieuw Datadog-eindpunt om de gebeurtenissen van uw organisatie te ontvangen.",
"httpDestTabSettings": "Instellingen",
"httpDestTabHeaders": "Kopteksten",
"httpDestTabBody": "Lichaam",
"httpDestTabLogs": "Logboeken",
"httpDestNamePlaceholder": "Mijn HTTP-bestemming",
"httpDestUrlLabel": "Bestemming URL",
"httpDestUrlErrorHttpRequired": "URL moet http of https gebruiken",
"httpDestUrlErrorHttpsRequired": "HTTPS is vereist op cloud implementaties",
"httpDestUrlErrorInvalid": "Voer een geldige URL in (bijv. https://example.com/webhook)",
"httpDestAuthTitle": "Authenticatie",
"httpDestAuthDescription": "Kies hoe verzoeken voor uw eindpunt zijn geverifieerd.",
"httpDestAuthNoneTitle": "Geen authenticatie",
"httpDestAuthNoneDescription": "Stuurt verzoeken zonder toestemmingskop.",
"httpDestAuthBearerTitle": "Betere Token",
"httpDestAuthBearerDescription": "Voegt een Authorization: Bearer '<token>' header toe aan elk verzoek.",
"httpDestAuthBearerPlaceholder": "Uw API-sleutel of -token",
"httpDestAuthBasicTitle": "Basis authenticatie",
"httpDestAuthBasicDescription": "Voegt een Authorization: Basic '<credentials>' header toe. Verstrek inloggegevens als gebruikersnaam:wachtwoord.",
"httpDestAuthBasicPlaceholder": "Gebruikersnaam:wachtwoord",
"httpDestAuthCustomTitle": "Aangepaste koptekst",
"httpDestAuthCustomDescription": "Specificeer een aangepaste HTTP header naam en waarde voor authenticatie (bijv. X-API-Key).",
"httpDestAuthCustomHeaderNamePlaceholder": "Header naam (bijv. X-API-Key)",
"httpDestAuthCustomHeaderValuePlaceholder": "Header waarde",
"httpDestCustomHeadersTitle": "Aangepaste HTTP Headers",
"httpDestCustomHeadersDescription": "Voeg aangepaste headers toe aan elk uitgaande verzoek. Handig voor statische tokens of een aangepast Content-Type. Standaard Content-Type: application/json wordt verzonden.",
"httpDestNoHeadersConfigured": "Geen aangepaste headers geconfigureerd. Klik op \"Header\" om er een toe te voegen.",
"httpDestHeaderNamePlaceholder": "Naam koptekst",
"httpDestHeaderValuePlaceholder": "Waarde",
"httpDestAddHeader": "Koptekst toevoegen",
"httpDestBodyTemplateTitle": "Aangepaste Body Sjabloon",
"httpDestBodyTemplateDescription": "Bestuur de JSON payload structuur verzonden naar uw eindpunt. Indien uitgeschakeld, wordt een standaard JSON object verzonden voor elke event.",
"httpDestEnableBodyTemplate": "Aangepaste lichaam sjabloon inschakelen",
"httpDestBodyTemplateLabel": "Body sjabloon (JSON)",
"httpDestBodyTemplateHint": "Gebruik sjabloonvariabelen om te verwijzen naar gebeurtenisvelden in uw payload.",
"httpDestPayloadFormatTitle": "Payload formaat",
"httpDestPayloadFormatDescription": "Hoe evenementen worden geserialiseerd in elk verzoeklichaam.",
"httpDestFormatJsonArrayTitle": "JSON matrix",
"httpDestFormatJsonArrayDescription": "Eén verzoek per batch, lichaam is een JSON-array. Compatibel met de meeste algemene webhooks en Datadog.",
"httpDestFormatNdjsonTitle": "NDJSON",
"httpDestFormatNdjsonDescription": "Eén aanvraag per batch, lichaam is nieuwe JSON gescheiden - één object per regel, geen buitenste array. Vereist door Splunk HEC, Elastic / OpenSearch, en Grafana Loki.",
"httpDestFormatSingleTitle": "Eén afspraak per verzoek",
"httpDestFormatSingleDescription": "Stuurt een aparte HTTP POST voor elk individueel event. Gebruik alleen voor eindpunten die geen batches kunnen verwerken.",
"httpDestLogTypesTitle": "Log soorten",
"httpDestLogTypesDescription": "Kies welke log types doorgestuurd worden naar deze bestemming. Alleen ingeschakelde log types worden gestreden.",
"httpDestAccessLogsTitle": "Toegang tot logboek",
"httpDestAccessLogsDescription": "Hulpbrontoegangspogingen, inclusief geauthenticeerde en weigerde aanvragen.",
"httpDestActionLogsTitle": "Actie logs",
"httpDestActionLogsDescription": "Administratieve acties uitgevoerd door gebruikers binnen de organisatie.",
"httpDestConnectionLogsTitle": "Connectie Logs",
"httpDestConnectionLogsDescription": "Verbinding met de Site en tunnel maken verbroken, inclusief verbindingen en verbindingen.",
"httpDestRequestLogsTitle": "HTTP-aanvraaglogboeken",
"httpDestRequestLogsDescription": "HTTP request logs voor proxied hulpmiddelen, waaronder methode, pad en response code.",
"httpDestSaveChanges": "Wijzigingen opslaan",
"httpDestCreateDestination": "Maak bestemming aan",
"httpDestUpdatedSuccess": "Bestemming succesvol bijgewerkt",
"httpDestCreatedSuccess": "Bestemming succesvol aangemaakt",
"httpDestUpdateFailed": "Bijwerken bestemming mislukt",
"httpDestCreateFailed": "Aanmaken bestemming mislukt",
"followRedirects": "Volg omleidingen",
"followRedirectsDescription": "Volg automatisch HTTP-omleidingen voor verzoeken.",
"alertingErrorWebhookUrl": "Voer een geldige URL voor de webhook in.",
"healthCheckStrategyHttp": "Valideert connectiviteit en controleert de HTTP-responsstatus.",
"healthCheckStrategyTcp": "Verifieert alleen TCP-connectiviteit zonder de respons te inspecteren.",
"healthCheckStrategySnmp": "Maakt een SNMP-verzoek om de gezondheid van netwerkapparaten en infrastructuur te controleren.",
"healthCheckStrategyIcmp": "Gebruikt ICMP-verzoeken (pings) om te controleren of een bron bereikbaar en responsief is.",
"healthCheckTabStrategy": "Strategie",
"healthCheckTabConnection": "Verbinding",
"healthCheckTabAdvanced": "Geavanceerd",
"healthCheckStrategyNotAvailable": "Deze strategie is niet beschikbaar. Neem contact op met sales om deze functie in te schakelen.",
"uptime30d": "Beschikbaarheid (30d)",
"idpAddActionCreateNew": "Nieuwe identiteitsprovider aanmaken",
"idpAddActionImportFromOrg": "Importeer vanuit een andere organisatie",
"idpImportDialogTitle": "Importeer Identiteitsprovider",
"idpImportDialogDescription": "Kies een identiteitsprovider van een organisatie waar u beheerder bent. Het wordt gekoppeld aan deze organisatie.",
"idpImportSearchPlaceholder": "Zoek op organisatie- of providernamen...",
"idpImportEmpty": "Geen identiteitsproviders gevonden.",
"idpImportedDescription": "Identiteitsprovider succesvol geïmporteerd.",
"idpDeleteGlobalQuestion": "Weet u zeker dat u deze identiteitsprovider permanent wilt verwijderen?",
"idpDeleteGlobalDescription": "Hiermee wordt de identiteitsprovider permanent verwijderd uit alle organisaties waarmee het is geassocieerd.",
"idpUnassociateTitle": "Koppel Identiteitsprovider los",
"idpUnassociateQuestion": "Weet u zeker dat u deze identiteitsprovider van deze organisatie wilt loskoppelen?",
"idpUnassociateDescription": "Alle gebruikers die aan deze identiteitsprovider zijn gekoppeld, worden uit deze organisatie verwijderd, maar de identiteitsprovider blijft bestaan voor andere gerelateerde organisaties.",
"idpUnassociateConfirm": "Bevestig ontkoppelen identiteitsprovider",
"idpUnassociateWarning": "Dit kan niet ongedaan worden gemaakt voor deze organisatie.",
"idpUnassociatedDescription": "Identiteitsprovider succesvol losgekoppeld van deze organisatie",
"idpUnassociateMenu": "Ontkoppelen",
"idpDeleteAllOrgsMenu": "Verwijderen",
"publicIpEndpoint": "Eindpunt",
"lastTriggeredAt": "Laatste Trigger",
"reject": "Afwijzen",
"uptimeDaysAgo": "{count} dagen geleden",
"uptimeToday": "Vandaag",
"uptimeNoDataAvailable": "Geen gegevens beschikbaar",
"uptimeSuffix": "werktijd",
"uptimeDowntimeSuffix": "uitvaltijd",
"uptimeTooltipUptimeLabel": "Werktijd",
"uptimeTooltipDowntimeLabel": "Uitvaltijd",
"uptimeOngoing": "lopend",
"uptimeNoMonitoringData": "Geen monitoringgegevens",
"uptimeNoData": "Geen gegevens",
"uptimeMiniBarDown": "Onder",
"uptimeSectionTitle": "Werktijd",
"uptimeSectionDescription": "Beschikbaarheid over de laatste {days} dagen",
"uptimeAddAlert": "Alarm toevoegen",
"uptimeViewAlerts": "Meldingen bekijken",
"uptimeCreateEmailAlert": "E-mailalert aanmaken",
"uptimeAlertDescriptionSite": "Ontvang een e-mailbericht wanneer deze site offline gaat of weer online komt.",
"uptimeAlertDescriptionResource": "Ontvang een e-mailbericht wanneer deze bron offline gaat of weer online komt.",
"uptimeAlertNamePlaceholder": "Waarschuwingsnaam",
"uptimeAdditionalEmails": "Extra e-mails",
"uptimeCreateAlert": "Alarm aanmaken",
"uptimeAlertNoRecipients": "Geen ontvangers",
"uptimeAlertNoRecipientsDescription": "Voeg ten minste één gebruiker, rol of e-mail toe om te melden.",
"uptimeAlertCreated": "Alarm aangemaakt",
"uptimeAlertCreatedDescription": "U wordt op de hoogte gebracht wanneer dit van status verandert.",
"uptimeAlertCreateFailed": "Kon alarm niet aanmaken",
"webhookUrlLabel": "URL",
"webhookHeaderKeyPlaceholder": "Sleutel",
"webhookHeaderValuePlaceholder": "Waarde",
"alertLabel": "Waarschuwing",
"domainPickerWildcardSubdomainNotAllowed": "Wildcard-subdomeinen zijn niet toegestaan.",
"domainPickerWildcardCertWarning": "Wildcard-bronnen hebben mogelijk extra configuratie nodig om correct te werken.",
"domainPickerWildcardCertWarningLink": "Meer informatie",
"health": "Gezondheid",
"domainPendingErrorTitle": "Verificatieprobleem",
"memberPortalTitle": "Bronnen",
"memberPortalDescription": "Bronnen waartoe je toegang hebt binnen deze organisatie",
"memberPortalSortBy": "Sorteren op...",
"memberPortalSortNameAsc": "Naam A-Z",
"memberPortalSortNameDesc": "Naam Z-A",
"memberPortalSortDomainAsc": "Domein A-Z",
"memberPortalSortDomainDesc": "Domein Z-A",
"memberPortalSortEnabledFirst": "Ingeschakeld Eerst",
"memberPortalSortDisabledFirst": "Uitgeschakeld Eerst",
"memberPortalRefresh": "Vernieuwen",
"memberPortalRefreshResources": "Bronnen Vernieuwen",
"memberPortalFailedToLoad": "Fout bij het laden van bronnen",
"memberPortalFailedToLoadDescription": "Fout bij het laden van bronnen. Controleer uw verbinding en probeer het opnieuw.",
"memberPortalUnableToLoad": "Niet in staat om bronnen te laden",
"memberPortalTryAgain": "Probeer Opnieuw",
"memberPortalNoResourcesFound": "Geen Bronnen Gevonden",
"memberPortalNoResourcesAvailable": "Geen Bronnen Beschikbaar",
"memberPortalNoResourcesMatchSearch": "Geen bronnen komen overeen met \"{query}\". Probeer uw zoektermen aan te passen of wis de zoekopdracht om alle bronnen te zien.",
"memberPortalNoResourcesAccess": "Je hebt nog geen toegang tot bronnen. Neem contact op met je beheerder om toegang te krijgen tot de benodigde bronnen.",
"memberPortalClearSearch": "Zoekopdracht Wissen",
"memberPortalPublicResources": "Publieke Bronnen",
"memberPortalPublicResourcesDescription": "Webapplicaties en services toegankelijk via browser",
"memberPortalCopiedToClipboard": "Gekopieerd naar klembord",
"memberPortalCopiedUrlDescription": "Bron URL is naar uw klembord gekopieerd.",
"memberPortalOpenResource": "Bron Openen",
"memberPortalPrivateResources": "Privé Bronnen",
"memberPortalPrivateResourcesDescription": "Interne netwerkbronnen toegankelijk via client",
"memberPortalResourceDetails": "Bron Details",
"memberPortalMode": "Modus",
"memberPortalDestination": "Bestemming",
"memberPortalAlias": "Alias",
"memberPortalCopiedAliasDescription": "Bron alias is naar uw klembord gekopieerd.",
"memberPortalCopiedDestinationDescription": "Bron bestemming is naar uw klembord gekopieerd.",
"memberPortalRequiresClientConnection": "Clientverbinding Vereist",
"memberPortalAuthMethods": "Authenticatiemethoden",
"memberPortalSso": "Single Sign-On (SSO)",
"memberPortalPasswordProtected": "Wachtwoord Beveiligd",
"memberPortalPinCode": "Pincode",
"memberPortalEmailWhitelist": "E-mail whitelist",
"memberPortalResourceDisabled": "Bron Uitgeschakeld",
"memberPortalShowingResources": "Toont {start}-{end} van {total} bronnen",
"memberPortalPrevious": "Vorige",
"memberPortalNext": "Volgende"
}

View File

@@ -1,4 +1,8 @@
{
"contactSalesEnable": "Skontaktuj się z działem sprzedaży, aby włączyć tę funkcję.",
"contactSalesBookDemo": "Umów się na demo",
"contactSalesOr": "lub",
"contactSalesContactUs": "skontaktuj się z nami",
"setupCreate": "Utwórz organizację, witrynę i zasoby",
"headerAuthCompatibilityInfo": "Włącz to, aby wymusić odpowiedź Unauthorized 401, gdy brakuje tokena uwierzytelniania. Jest to wymagane dla przeglądarek lub określonych bibliotek HTTP, które nie wysyłają poświadczeń bez wyzwania serwera.",
"headerAuthCompatibility": "Rozszerzona kompatybilność",
@@ -19,6 +23,18 @@
"componentsInvalidKey": "Wykryto nieprawidłowe lub wygasłe klucze licencyjne. Postępuj zgodnie z warunkami licencji, aby kontynuować korzystanie ze wszystkich funkcji.",
"dismiss": "Odrzuć",
"subscriptionViolationMessage": "Nie masz ograniczeń dla aktualnego planu. Popraw problem poprzez usunięcie stron, użytkowników lub innych zasobów, aby pozostać w swoim planie.",
"trialBannerMessage": "Twój okres próbny wygasa za {countdown}. Uaktualnij, aby zachować dostęp.",
"trialBannerExpired": "Twój okres próbny wygasł. Uaktualnij teraz, aby przywrócić dostęp.",
"billingTrialBannerTitle": "Bezpłatna wersja próbna aktywna",
"billingTrialBannerDescription": "Obecnie korzystasz z bezpłatnej wersji próbnej na poziomie biznesowym. Po zakończeniu wersji próbnej, Twoje konto automatycznie powróci do funkcji i limitów poziomu Podstawowego. Możesz dokonać uaktualnienia w każdej chwili, aby zachować dostęp do funkcji obecnego planu.",
"billingTrialBannerUpgrade": "Uaktualnij teraz",
"billingTrialBadge": "Bezpłatna wersja próbna",
"trialActive": "Okres próbny aktywny",
"trialExpired": "Okres próbny wygasł",
"trialHasEnded": "Twój okres próbny dobiegł końca.",
"trialDaysRemaining": "{count, plural, one {# dzień pozostaje} few {# dni pozostają} many {# dni pozostaje} other {# dni pozostają}}",
"trialDaysLeftShort": "Pozostało {days}d próbny",
"trialGoToBilling": "Przejdź do strony rozliczeń",
"subscriptionViolationViewBilling": "Zobacz rozliczenie",
"componentsLicenseViolation": "Naruszenie licencji: Ten serwer używa stron {usedSites} , które przekraczają limit licencyjny stron {maxSites} . Postępuj zgodnie z warunkami licencji, aby kontynuować korzystanie ze wszystkich funkcji.",
"componentsSupporterMessage": "Dziękujemy za wsparcie Pangolina jako {tier}!",
@@ -81,6 +97,8 @@
"siteConfirmCopy": "Skopiowałem konfigurację",
"searchSitesProgress": "Szukaj witryn...",
"siteAdd": "Dodaj witrynę",
"sitesTableViewPublicResources": "Zobacz zasoby publiczne",
"sitesTableViewPrivateResources": "Zobacz zasoby prywatne",
"siteInstallNewt": "Zainstaluj Newt",
"siteInstallNewtDescription": "Uruchom Newt w swoim systemie",
"WgConfiguration": "Konfiguracja WireGuard",
@@ -98,6 +116,21 @@
"siteUpdatedDescription": "Strona została zaktualizowana.",
"siteGeneralDescription": "Skonfiguruj ustawienia ogólne dla tej witryny",
"siteSettingDescription": "Skonfiguruj ustawienia na stronie",
"siteResourcesTab": "Zasoby",
"siteResourcesNoneOnSite": "Ta strona nie ma jeszcze żadnych zasobów publicznych ani prywatnych.",
"siteResourcesSectionPublic": "Zasoby publiczne",
"siteResourcesSectionPrivate": "Zasoby prywatne",
"siteResourcesSectionPublicDescription": "Zasoby eksponowane zewnętrznie przez domeny lub porty.",
"siteResourcesSectionPrivateDescription": "Zasoby dostępne w twojej prywatnej sieci przez stronę.",
"siteResourcesViewAllPublic": "Zobacz wszystkie zasoby",
"siteResourcesViewAllPrivate": "Zobacz wszystkie zasoby",
"siteResourcesDialogDescription": "Przegląd zasobów publicznych i prywatnych związanych z tą stroną.",
"siteResourcesShowMore": "Pokaż więcej",
"siteResourcesPermissionDenied": "Nie masz uprawnień do wyświetlania tych zasobów.",
"siteResourcesEmptyPublic": "Brak publicznych zasobów powiązanych z tą stroną.",
"siteResourcesEmptyPrivate": "Brak prywatnych zasobów powiązanych z tą stroną.",
"siteResourcesHowToAccess": "Jak uzyskać dostęp",
"siteResourcesTargetsOnSite": "Cele na tej stronie",
"siteSetting": "Ustawienia {siteName}",
"siteNewtTunnel": "Newt Site (Rekomendowane)",
"siteNewtTunnelDescription": "Najprostszy sposób na stworzenie punktu wejścia w sieci. Nie ma dodatkowej konfiguracji.",
@@ -148,6 +181,11 @@
"createLink": "Utwórz link",
"resourcesNotFound": "Nie znaleziono zasobów",
"resourceSearch": "Szukaj zasobów",
"machineSearch": "Wyszukiwarki",
"machinesSearch": "Szukaj klientów maszyn...",
"machineNotFound": "Nie znaleziono maszyn",
"userDeviceSearch": "Szukaj urządzeń użytkownika",
"userDevicesSearch": "Szukaj urządzeń użytkownika...",
"openMenu": "Otwórz menu",
"resource": "Zasoby",
"title": "Tytuł",
@@ -175,6 +213,7 @@
"resourceHTTPDescription": "Proxy zapytań przez HTTPS przy użyciu w pełni kwalifikowanej nazwy domeny.",
"resourceRaw": "Surowy zasób TCP/UDP",
"resourceRawDescription": "Proxy zapytań przez surowe TCP/UDP przy użyciu numeru portu.",
"resourceRawDescriptionCloud": "Żądania proxy nad surowym TCP/UDP przy użyciu numeru portu. Wymaga stron aby połączyć się ze zdalnym węzłem.",
"resourceCreate": "Utwórz zasób",
"resourceCreateDescription": "Wykonaj poniższe kroki, aby utworzyć nowy zasób",
"resourceSeeAll": "Zobacz wszystkie zasoby",
@@ -261,8 +300,11 @@
"orgMissing": "Brak ID organizacji",
"orgMissingMessage": "Nie można ponownie wygenerować zaproszenia bez ID organizacji.",
"accessUsersManage": "Zarządzaj użytkownikami",
"accessUserManage": "Zarządzaj użytkownikiem",
"accessUsersDescription": "Zaproś użytkowników z dostępem do tej organizacji i zarządzaj nimi",
"accessUsersSearch": "Szukaj użytkowników...",
"accessUsersRoleFilterCount": "{count, plural, one {# rola} few {# role} many {# ról} other {# ról}}",
"accessUsersRoleFilterClear": "Wyczyść filtry ról",
"accessUserCreate": "Utwórz użytkownika",
"accessUserRemove": "Usuń użytkownika",
"username": "Nazwa użytkownika",
@@ -322,6 +364,54 @@
"apiKeysDelete": "Usuń klucz API",
"apiKeysManage": "Zarządzaj kluczami API",
"apiKeysDescription": "Klucze API służą do uwierzytelniania z API integracji",
"provisioningKeysTitle": "Klucz Zaopatrzenia",
"provisioningKeysManage": "Zarządzaj kluczami zaopatrzenia",
"provisioningKeysDescription": "Klucze zaopatrzenia są używane do uwierzytelniania zautomatyzowanego zaopatrzenia twojej organizacji.",
"provisioningManage": "Dostarczanie",
"provisioningDescription": "Zarządzaj kluczami rezerwacji i sprawdzaj oczekujące strony oczekujące na zatwierdzenie.",
"pendingSites": "Witryny oczekujące",
"siteApproveSuccess": "Witryna została pomyślnie zatwierdzona",
"siteApproveError": "Błąd zatwierdzania witryny",
"provisioningKeys": "Klucze Zaopatrzenia",
"searchProvisioningKeys": "Szukaj kluczy zaopatrzenia...",
"provisioningKeysAdd": "Wygeneruj klucz zaopatrzenia",
"provisioningKeysErrorDelete": "Błąd podczas usuwania klucza zaopatrzenia",
"provisioningKeysErrorDeleteMessage": "Błąd podczas usuwania klucza zaopatrzenia",
"provisioningKeysQuestionRemove": "Czy na pewno chcesz usunąć ten klucz rezerwacji z organizacji?",
"provisioningKeysMessageRemove": "Po usunięciu, klucz nie może być już używany do tworzenia witryny.",
"provisioningKeysDeleteConfirm": "Potwierdź usunięcie klucza zaopatrzenia",
"provisioningKeysDelete": "Usuń klucz zaopatrzenia",
"provisioningKeysCreate": "Wygeneruj klucz zaopatrzenia",
"provisioningKeysCreateDescription": "Wygeneruj nowy klucz tworzenia rezerw dla organizacji",
"provisioningKeysSeeAll": "Zobacz wszystkie klucze rezerwacji",
"provisioningKeysSave": "Zapisz klucz zaopatrzenia",
"provisioningKeysSaveDescription": "Możesz to zobaczyć tylko raz. Skopiuj je do bezpiecznego miejsca.",
"provisioningKeysErrorCreate": "Błąd podczas tworzenia klucza zaopatrzenia",
"provisioningKeysList": "Nowy klucz rezerwacji",
"provisioningKeysMaxBatchSize": "Maksymalny rozmiar partii",
"provisioningKeysUnlimitedBatchSize": "Nieograniczony rozmiar partii (bez limitu)",
"provisioningKeysMaxBatchUnlimited": "Nieograniczona",
"provisioningKeysMaxBatchSizeInvalid": "Wprowadź poprawny maksymalny rozmiar partii (11 000,000).",
"provisioningKeysValidUntil": "Ważny do",
"provisioningKeysValidUntilHint": "Pozostaw puste, aby nie wygasnąć.",
"provisioningKeysValidUntilInvalid": "Wprowadź prawidłową datę i godzinę.",
"provisioningKeysNumUsed": "Używane czasy",
"provisioningKeysLastUsed": "Ostatnio używane",
"provisioningKeysNoExpiry": "Brak wygaśnięcia",
"provisioningKeysNeverUsed": "Nigdy",
"provisioningKeysEdit": "Edytuj klucz zaopatrzenia",
"provisioningKeysEditDescription": "Zaktualizuj maksymalny rozmiar partii i czas wygaśnięcia dla tego klucza.",
"provisioningKeysApproveNewSites": "Zatwierdź nowe witryny",
"provisioningKeysApproveNewSitesDescription": "Automatycznie zatwierdzaj witryny, które rejestrują się za pomocą tego klucza.",
"provisioningKeysUpdateError": "Błąd podczas aktualizacji klucza zaopatrzenia",
"provisioningKeysUpdated": "Klucz zaopatrzenia zaktualizowany",
"provisioningKeysUpdatedDescription": "Twoje zmiany zostały zapisane.",
"provisioningKeysBannerTitle": "Klucze Zaopatrzenia witryny",
"provisioningKeysBannerDescription": "Wygeneruj klucz provisioning i użyj go z konektorem Newt do automatycznego tworzenia witryn przy pierwszym uruchomieniu - nie ma potrzeby konfigurowania oddzielnych poświadczeń dla każdej witryny.",
"provisioningKeysBannerButtonText": "Dowiedz się więcej",
"pendingSitesBannerTitle": "Witryny oczekujące",
"pendingSitesBannerDescription": "Witryny, które łączą się za pomocą klucza provisioning, pojawią się tutaj do przeglądu.",
"pendingSitesBannerButtonText": "Dowiedz się więcej",
"apiKeysSettings": "Ustawienia {apiKeyName}",
"userTitle": "Zarządzaj wszystkimi użytkownikami",
"userDescription": "Zobacz i zarządzaj wszystkimi użytkownikami w systemie",
@@ -351,6 +441,10 @@
"licenseErrorKeyActivate": "Nie udało się aktywować klucza licencji",
"licenseErrorKeyActivateDescription": "Wystąpił błąd podczas aktywacji klucza licencyjnego.",
"licenseAbout": "O licencjonowaniu",
"licenseBannerTitle": "Aktywuj swoją licencję Enterprise",
"licenseBannerDescription": "Odblokuj funkcje korporacyjne dla swojego autonomicznego wdrożenia Pangolin. Kup klucz licencyjny, aby aktywować możliwości premium, a następnie wprowadź go poniżej.",
"licenseBannerGetLicense": "Uzyskaj licencję",
"licenseBannerViewDocs": "Zobacz dokumentację",
"communityEdition": "Edycja Społecznościowa",
"licenseAboutDescription": "Dotyczy to przedsiębiorstw i przedsiębiorstw, którzy stosują Pangolin w środowisku handlowym. Jeśli używasz Pangolin do użytku osobistego, możesz zignorować tę sekcję.",
"licenseKeyActivated": "Klucz licencyjny aktywowany",
@@ -508,9 +602,12 @@
"userSaved": "Użytkownik zapisany",
"userSavedDescription": "Użytkownik został zaktualizowany.",
"autoProvisioned": "Przesłane automatycznie",
"autoProvisionSettings": "Ustawienia automatycznego dostarczania",
"autoProvisionedDescription": "Pozwól temu użytkownikowi na automatyczne zarządzanie przez dostawcę tożsamości",
"accessControlsDescription": "Zarządzaj tym, do czego użytkownik ma dostęp i co może robić w organizacji",
"accessControlsSubmit": "Zapisz kontrole dostępu",
"singleRolePerUserPlanNotice": "Twój plan obsługuje tylko jedną rolę na użytkownika.",
"singleRolePerUserEditionNotice": "Ta edycja obsługuje tylko jedną rolę na użytkownika.",
"roles": "Role",
"accessUsersRoles": "Zarządzaj użytkownikami i rolami",
"accessUsersRolesDescription": "Zaproś użytkowników i dodaj je do ról do zarządzania dostępem do organizacji",
@@ -567,6 +664,8 @@
"targetErrorInvalidPortDescription": "Wprowadź prawidłowy numer portu",
"targetErrorNoSite": "Nie wybrano witryny",
"targetErrorNoSiteDescription": "Wybierz witrynę docelową",
"targetTargetsCleared": "Cele wyczyszczone",
"targetTargetsClearedDescription": "Wszystkie cele zostały usunięte z tego zasobu",
"targetCreated": "Cel utworzony",
"targetCreatedDescription": "Cel został utworzony pomyślnie",
"targetErrorCreate": "Nie udało się utworzyć celu",
@@ -650,6 +749,7 @@
"resourcesErrorUpdate": "Nie udało się przełączyć zasobu",
"resourcesErrorUpdateDescription": "Wystąpił błąd podczas aktualizacji zasobu",
"access": "Dostęp",
"accessControl": "Kontrola dostępu",
"shareLink": "Link udostępniania {resource}",
"resourceSelect": "Wybierz zasób",
"shareLinks": "Linki udostępniania",
@@ -667,6 +767,7 @@
"newtEndpoint": "Endpoint",
"newtId": "ID",
"newtSecretKey": "Sekret",
"newtVersion": "Wersja",
"architecture": "Architektura",
"sites": "Witryny",
"siteWgAnyClients": "Użyj dowolnego klienta WireGuard, aby się połączyć. Będziesz musiał przekierować wewnętrzne zasoby za pomocą adresu IP.",
@@ -790,6 +891,7 @@
"accessRoleRemoved": "Rola usunięta",
"accessRoleRemovedDescription": "Rola została pomyślnie usunięta.",
"accessRoleRequiredRemove": "Przed usunięciem tej roli, wybierz nową rolę do której zostaną przeniesieni obecni członkowie.",
"network": "Sieć",
"manage": "Zarządzaj",
"sitesNotFound": "Nie znaleziono witryn.",
"pangolinServerAdmin": "Administrator serwera - Pangolin",
@@ -833,6 +935,7 @@
"idpDisplayName": "Nazwa wyświetlana dla tego dostawcy tożsamości",
"idpAutoProvisionUsers": "Automatyczne tworzenie użytkowników",
"idpAutoProvisionUsersDescription": "Gdy włączone, użytkownicy będą automatycznie tworzeni w systemie przy pierwszym logowaniu z możliwością mapowania użytkowników do ról i organizacji.",
"idpAutoProvisionConfigureAfterCreate": "Możesz skonfigurować automatyczne ustawienia provision, gdy dostawca tożsamości zostanie utworzony.",
"licenseBadge": "EE",
"idpType": "Typ dostawcy",
"idpTypeDescription": "Wybierz typ dostawcy tożsamości, który chcesz skonfigurować",
@@ -884,7 +987,7 @@
"defaultMappingsRole": "Domyślne mapowanie roli",
"defaultMappingsRoleDescription": "JMESPath do wydobycia informacji o roli z tokena ID. Wynik tego wyrażenia musi zwrócić nazwę roli zdefiniowaną w organizacji jako ciąg znaków.",
"defaultMappingsOrg": "Domyślne mapowanie organizacji",
"defaultMappingsOrgDescription": "JMESPath do wydobycia informacji o organizacji z tokena ID. To wyrażenie musi zwrócić ID organizacji lub true, aby użytkownik mógł uzyskać dostęp do organizacji.",
"defaultMappingsOrgDescription": "Gdy jest ustawiona, ta wyrażenie musi zwrócić identyfikator organizacji lub true, aby użytkownik mógł uzyskać dostęp do tej organizacji. Gdy nie jest ustawiona, wystarczające jest zdefiniowanie mapowania ról: użytkownik jest dopuszczony, o ile można rozwiązać dla niego ważne mapowanie ról w organizacji.",
"defaultMappingsSubmit": "Zapisz domyślne mapowania",
"orgPoliciesEdit": "Edytuj politykę organizacji",
"org": "Organizacja",
@@ -1037,7 +1140,6 @@
"pageNotFoundDescription": "Ups! Strona, której szukasz, nie istnieje.",
"overview": "Przegląd",
"home": "Strona główna",
"accessControl": "Kontrola dostępu",
"settings": "Ustawienia",
"usersAll": "Wszyscy użytkownicy",
"license": "Licencja",
@@ -1100,6 +1202,12 @@
"actionGetUser": "Pobierz użytkownika",
"actionGetOrgUser": "Pobierz użytkownika organizacji",
"actionListOrgDomains": "Lista domen organizacji",
"actionGetDomain": "Pobierz domenę",
"actionCreateOrgDomain": "Utwórz domenę",
"actionUpdateOrgDomain": "Aktualizuj domenę",
"actionDeleteOrgDomain": "Usuń domenę",
"actionGetDNSRecords": "Pobierz rekordy DNS",
"actionRestartOrgDomain": "Zrestartuj domenę",
"actionCreateSite": "Utwórz witrynę",
"actionDeleteSite": "Usuń witrynę",
"actionGetSite": "Pobierz witrynę",
@@ -1111,6 +1219,7 @@
"setupTokenDescription": "Wprowadź token konfiguracji z konsoli serwera.",
"setupTokenRequired": "Wymagany jest token konfiguracji",
"actionUpdateSite": "Aktualizuj witrynę",
"actionResetSiteBandwidth": "Zresetuj przepustowość organizacji",
"actionListSiteRoles": "Lista dozwolonych ról witryny",
"actionCreateResource": "Utwórz zasób",
"actionDeleteResource": "Usuń zasób",
@@ -1140,6 +1249,7 @@
"actionRemoveUser": "Usuń użytkownika",
"actionListUsers": "Lista użytkowników",
"actionAddUserRole": "Dodaj rolę użytkownika",
"actionSetUserOrgRoles": "Ustaw role użytkownika",
"actionGenerateAccessToken": "Wygeneruj token dostępu",
"actionDeleteAccessToken": "Usuń token dostępu",
"actionListAccessTokens": "Lista tokenów dostępu",
@@ -1184,6 +1294,7 @@
"actionViewLogs": "Zobacz dzienniki",
"noneSelected": "Nie wybrano",
"orgNotFound2": "Nie znaleziono organizacji.",
"search": "Szukaj…",
"searchPlaceholder": "Szukaj...",
"emptySearchOptions": "Nie znaleziono opcji",
"create": "Utwórz",
@@ -1249,12 +1360,14 @@
"sidebarClientResources": "Prywatny",
"sidebarAccessControl": "Kontrola dostępu",
"sidebarLogsAndAnalytics": "Logi i Analityki",
"sidebarTeam": "Drużyna",
"sidebarUsers": "Użytkownicy",
"sidebarAdmin": "Administrator",
"sidebarInvitations": "Zaproszenia",
"sidebarRoles": "Role",
"sidebarShareableLinks": "Linki",
"sidebarApiKeys": "Klucze API",
"sidebarProvisioning": "Dostarczanie",
"sidebarSettings": "Ustawienia",
"sidebarAllUsers": "Wszyscy użytkownicy",
"sidebarIdentityProviders": "Dostawcy tożsamości",
@@ -1266,9 +1379,167 @@
"sidebarGeneral": "Zarządzaj",
"sidebarLogAndAnalytics": "Dziennik & Analityka",
"sidebarBluePrints": "Schematy",
"sidebarAlerting": "Alarmowanie",
"sidebarHealthChecks": "Kontrole zdrowia",
"sidebarOrganization": "Organizacja",
"sidebarManagement": "Zarządzanie",
"sidebarBillingAndLicenses": "Płatność i licencje",
"sidebarLogsAnalytics": "Analityka",
"alertingTitle": "Alarmowanie",
"alertingDescription": "Zdefiniuj źródła, ustawienia, i działania dla powiadomień",
"alertingRules": "Reguły alarmowe",
"alertingSearchRules": "Szukaj reguł…",
"alertingAddRule": "Utwórz Regułę",
"alertingColumnSource": "Źródło",
"alertingColumnTrigger": "Ustawienie",
"alertingColumnActions": "Akcje",
"alertingColumnEnabled": "Włączone",
"alertingDeleteQuestion": "Potwierdź, że chcesz usunąć tę regułę alarmową.",
"alertingDeleteRule": "Usuń regułę alarmową",
"alertingRuleDeleted": "Reguła alarmowa usunięta",
"alertingRuleSaved": "Reguła alarmowa zapisana",
"alertingRuleSavedCreatedDescription": "Nowa reguła alarmowa została utworzona. Możesz ją kontynuować edytować na tej stronie.",
"alertingRuleSavedUpdatedDescription": "Twoje zmiany w tej regule alarmowej zostały zapisane.",
"alertingEditRule": "Edytuj regułę alarmową",
"alertingCreateRule": "Utwórz regułę alarmową",
"alertingRuleCredenzaDescription": "Wybierz, co obserwować, kiedy uruchamiać i jak powiadamiać.",
"alertingRuleNamePlaceholder": "Strona produkcyjna w dół",
"alertingRuleEnabled": "Reguła włączona",
"alertingSectionSource": "Źródło",
"alertingSourceType": "Typ źródła",
"alertingSourceSite": "Witryna",
"alertingSourceHealthCheck": "Kontrola zdrowia",
"alertingPickSites": "Witryny",
"alertingPickHealthChecks": "Kontrole zdrowia",
"alertingPickResources": "Zasoby",
"alertingAllSites": "Wszystkie witryny",
"alertingAllSitesDescription": "Alarm uruchomiony dla dowolnej witryny",
"alertingSpecificSites": "Określone witryny",
"alertingSpecificSitesDescription": "Wybierz określone witryny do obserwacji",
"alertingAllHealthChecks": "Wszystkie Kontrole Zdrowia",
"alertingAllHealthChecksDescription": "Alarm uruchomiony dla dowolnej kontroli zdrowia",
"alertingSpecificHealthChecks": "Określone Kontrole Zdrowia",
"alertingSpecificHealthChecksDescription": "Wybierz określone kontrole zdrowia do obserwacji",
"alertingAllResources": "Wszystkie zasoby",
"alertingAllResourcesDescription": "Alarm uruchomiony dla dowolnego zasobu",
"alertingSpecificResources": "Określone Zasoby",
"alertingSpecificResourcesDescription": "Wybierz określone zasoby do obserwacji",
"alertingSelectResources": "Wybierz zasoby…",
"alertingResourcesSelected": "{count} zasobów wybrano",
"alertingResourcesEmpty": "Brak zasobów z celami w pierwszych 10 wynikach.",
"alertingSectionTrigger": "Ustawienie",
"alertingTrigger": "Kiedy alarmować",
"alertingTriggerSiteOnline": "Strona online",
"alertingTriggerSiteOffline": "Strona offline",
"alertingTriggerSiteToggle": "Status strony zmienia się",
"alertingTriggerHcHealthy": "Kontrola zdrowia zdrowa",
"alertingTriggerHcUnhealthy": "Kontrola zdrowia niezdrowa",
"alertingTriggerHcToggle": "Status kontroli zdrowia zmienia się",
"alertingTriggerResourceHealthy": "Zasób zdrowy",
"alertingTriggerResourceUnhealthy": "Zasób niezdrowy",
"alertingTriggerResourceDegraded": "Zasób pogorszony",
"alertingSearchHealthChecks": "Szukaj kontroli zdrowia…",
"alertingHealthChecksEmpty": "Brak dostępnych kontroli zdrowia.",
"alertingTriggerResourceToggle": "Zmiany statusu zasobu",
"alertingSourceResource": "Zasób",
"alertingSectionActions": "Akcje",
"alertingAddAction": "Dodaj Akcję",
"alertingActionNotify": "E-mail",
"alertingActionNotifyDescription": "Wyślij powiadomienia e-mail do użytkowników lub ról",
"alertingActionWebhook": "Webhook",
"alertingActionWebhookDescription": "Wyślij żądanie HTTP do niestandardowego punktu końcowego",
"alertingExternalIntegration": "Integracja Zewnętrzna",
"alertingExternalPagerDutyDescription": "Przesyłaj alerty do PagerDuty do zarządzania incydentami",
"alertingExternalOpsgenieDescription": "Kieruj alerty do Opsgenie dla zarządzania dyżurem",
"alertingExternalServiceNowDescription": "Twórz incydenty ServiceNow z alertów",
"alertingExternalIncidentIoDescription": "Wyzwalaj przepływy Incident.io z alertów",
"alertingActionType": "Typ akcji",
"alertingNotifyUsers": "Użytkownicy",
"alertingNotifyRoles": "Role",
"alertingNotifyEmails": "Adres e-mail",
"alertingEmailPlaceholder": "Dodaj e-mail i naciśnij Enter",
"alertingWebhookMethod": "Metoda HTTP",
"alertingWebhookSecret": "Sekret podpisu (opcjonalny)",
"alertingWebhookSecretPlaceholder": "Sekret HMAC",
"alertingWebhookHeaders": "Nagłówki",
"alertingAddHeader": "Dodaj nagłówek",
"alertingSelectSites": "Wybierz witryny…",
"alertingSitesSelected": "{count} witryny wybrano",
"alertingSelectHealthChecks": "Wybierz wyniki zdrowia…",
"alertingHealthChecksSelected": "{count} wyniki zdrowia wybrane",
"alertingNoHealthChecks": "Brak celów z aktywowanymi kontrolami zdrowia",
"alertingHealthCheckStub": "Wybór źródła kontroli zdrowia jeszcze nie skonfigurowany - możesz nadal skonfigurować wyzwalacze i akcje.",
"alertingSelectUsers": "Wybierz użytkowników…",
"alertingUsersSelected": "{count} użytkowników wybrano",
"alertingSelectRoles": "Wybierz role…",
"alertingRolesSelected": "{count} ról wybrano",
"alertingSummarySites": "Witryny ({count})",
"alertingSummaryAllSites": "Wszystkie witryny",
"alertingSummaryHealthChecks": "Kontrole zdrowia ({count})",
"alertingSummaryAllHealthChecks": "Wszystkie kontrole zdrowia",
"alertingSummaryResources": "Zasoby ({count})",
"alertingSummaryAllResources": "Wszystkie zasoby",
"alertingErrorNameRequired": "Wprowadź nazwę",
"alertingErrorActionsMin": "Dodaj co najmniej jedną akcję",
"alertingErrorPickSites": "Wybierz co najmniej jedną witrynę",
"alertingErrorPickHealthChecks": "Wybierz co najmniej jedną kontrolę zdrowia",
"alertingErrorPickResources": "Wybierz co najmniej jeden zasób",
"alertingErrorTriggerSite": "Wybierz wyzwalacz witryny",
"alertingErrorTriggerHealth": "Wybierz wyzwalacz kontroli zdrowia",
"alertingErrorTriggerResource": "Wybierz wyzwalacz zasobu",
"alertingErrorNotifyRecipients": "Wybierz użytkowników, role lub co najmniej jeden e-mail",
"alertingConfigureSource": "Skonfiguruj źródło",
"alertingConfigureTrigger": "Skonfiguruj wyzwalacz",
"alertingConfigureActions": "Skonfiguruj akcje",
"alertingBackToRules": "Powrót do reguł",
"alertingRuleCooldown": "Czas ochłodzenia (sekundy)",
"alertingRuleCooldownDescription": "Minimalny czas między powtórzonymi alarmami dla tej samej reguły. Ustaw na 0, aby wyzwalać za każdym razem.",
"alertingDraftBadge": "Szkic - zapisz, aby zachować tę regułę",
"alertingSidebarHint": "Kliknij krok na kanwie, aby edytować go tutaj.",
"alertingGraphCanvasTitle": "Przepływ reguł",
"alertingGraphCanvasDescription": "Wizualny podgląd źródła, wyzwalacza i akcji. Wybierz węzeł, aby edytować go w panelu.",
"alertingNodeNotConfigured": "Nie skonfigurowano jeszcze",
"alertingNodeActionsCount": "{count, plural, one {# akcja} few {# akcje} many {# akcji} other {# akcji}}",
"alertingNodeRoleSource": "Źródło",
"alertingNodeRoleTrigger": "Wyzwalacz",
"alertingNodeRoleAction": "Akcja",
"alertingTabRules": "Reguły Alarmowe",
"alertingTabHealthChecks": "Kontrole Zdrowia",
"alertingRulesBannerTitle": "Otrzymaj Powiadomienie",
"alertingRulesBannerDescription": "Każda reguła wiąże ze sobą co obserwować (np. witryna, kontrola zdrowia czy zasób), kiedy uruchomić (np. offline lub niezdrowy), oraz jak powiadomić zespół przez e-mail, webhooks lub integracje. Użyj tej listy, aby utworzyć, włączyć i zarządzać tymi regułami.",
"alertingHealthChecksBannerTitle": "Monitor Zdrowia i Zasobów",
"alertingHealthChecksBannerDescription": "Kontrole zdrowia to monitory HTTP lub TCP, które definiujesz raz. Następnie możesz używać ich jako źródeł w regułach alarmowych, aby otrzymywać powiadomienia, kiedy cel stanie się zdrowy lub niezdrowy. Kontrole zdrowia w zasobach również pojawiają się tutaj.",
"standaloneHcTableTitle": "Kontrole Zdrowia",
"standaloneHcSearchPlaceholder": "Szukaj kontroli zdrowia…",
"standaloneHcAddButton": "Utwórz Kontrolę Zdrowia",
"standaloneHcCreateTitle": "Utwórz Kontrolę Zdrowia",
"standaloneHcEditTitle": "Edytuj Kontrolę Zdrowia",
"standaloneHcDescription": "Skonfiguruj kontrolę zdrowia HTTP lub TCP do wykorzystania w regułach alarmowych.",
"standaloneHcNameLabel": "Nazwa",
"standaloneHcNamePlaceholder": "Mój Monitor HTTP",
"standaloneHcDeleteTitle": "Usuń kontrolę zdrowia",
"standaloneHcDeleteQuestion": "Potwierdź, że chcesz usunąć tę kontrolę zdrowia.",
"standaloneHcDeleted": "Kontrola zdrowia usunięta",
"standaloneHcSaved": "Kontrola zdrowia zapisana",
"standaloneHcColumnHealth": "Zdrowie",
"standaloneHcColumnMode": "Tryb",
"standaloneHcColumnTarget": "Cel",
"standaloneHcHealthStateHealthy": "Zdrowy",
"standaloneHcHealthStateUnhealthy": "Niezdrowy",
"standaloneHcHealthStateUnknown": "Nieznany",
"standaloneHcFilterAnySite": "Wszystkie witryny",
"standaloneHcFilterAnyResource": "Wszystkie zasoby",
"standaloneHcFilterMode": "Tryb",
"standaloneHcFilterModeHttp": "HTTP",
"standaloneHcFilterModeTcp": "TCP",
"standaloneHcFilterModeSnmp": "SNMP",
"standaloneHcFilterModePing": "Ping",
"standaloneHcFilterHealth": "Zdrowie",
"standaloneHcFilterEnabled": "Włączone",
"standaloneHcFilterEnabledOn": "Włączone",
"standaloneHcFilterEnabledOff": "Wyłączone",
"standaloneHcFilterSiteIdFallback": "Witryna {id}",
"standaloneHcFilterResourceIdFallback": "Zasób {id}",
"blueprints": "Schematy",
"blueprintsDescription": "Zastosuj konfiguracje deklaracyjne i wyświetl poprzednie operacje",
"blueprintAdd": "Dodaj schemat",
@@ -1289,7 +1560,6 @@
"parsedContents": "Przetworzona zawartość (tylko do odczytu)",
"enableDockerSocket": "Włącz schemat dokera",
"enableDockerSocketDescription": "Włącz etykietowanie kieszeni dokującej dla etykiet schematów. Ścieżka do gniazda musi być dostarczona do Newt.",
"enableDockerSocketLink": "Dowiedz się więcej",
"viewDockerContainers": "Zobacz kontenery dokujące",
"containersIn": "Pojemniki w {siteName}",
"selectContainerDescription": "Wybierz dowolny kontener do użycia jako nazwa hosta dla tego celu. Kliknij port, aby użyć portu.",
@@ -1331,7 +1601,8 @@
"initialSetupDescription": "Utwórz początkowe konto administratora serwera. Może istnieć tylko jeden administrator serwera. Zawsze można zmienić te dane uwierzytelniające.",
"createAdminAccount": "Utwórz konto administratora",
"setupErrorCreateAdmin": "Wystąpił błąd podczas tworzenia konta administratora serwera.",
"certificateStatus": "Status certyfikatu",
"certificateStatus": "Certyfikat",
"certificateStatusAutoRefreshHint": "Status odświeża się automatycznie.",
"loading": "Ładowanie",
"loadingAnalytics": "Ładowanie Analityki",
"restart": "Uruchom ponownie",
@@ -1400,6 +1671,7 @@
"pangolinUpdateAvailableReleaseNotes": "Zobacz informacje o wydaniu",
"newtUpdateAvailable": "Dostępna aktualizacja",
"newtUpdateAvailableInfo": "Nowa wersja Newt jest dostępna. Prosimy o aktualizację do najnowszej wersji dla najlepszej pracy.",
"pangolinNodeUpdateAvailableInfo": "Nowa wersja Pangolin Node jest dostępna. Prosimy o aktualizację do najnowszej wersji dla najlepszej pracy.",
"domainPickerEnterDomain": "Domena",
"domainPickerPlaceholder": "mojapp.example.com",
"domainPickerDescription": "Wpisz pełną domenę zasobu, aby zobaczyć dostępne opcje.",
@@ -1417,6 +1689,7 @@
"domainPickerNamespace": "Przestrzeń nazw: {namespace}",
"domainPickerShowMore": "Pokaż więcej",
"regionSelectorTitle": "Wybierz region",
"domainPickerRemoteExitNodeWarning": "Podane domeny nie są obsługiwane, gdy witryny łączą się ze zdalnymi węzłami wyjścia. Aby zasoby były dostępne w węzłach zdalnych, użyj domeny niestandardowej.",
"regionSelectorInfo": "Wybór regionu pomaga nam zapewnić lepszą wydajność dla Twojej lokalizacji. Nie musisz być w tym samym regionie co Twój serwer.",
"regionSelectorPlaceholder": "Wybierz region",
"regionSelectorComingSoon": "Wkrótce dostępne",
@@ -1570,6 +1843,16 @@
"billingFeatureLossWarning": "Powiadomienie o dostępności funkcji",
"billingFeatureLossDescription": "Po obniżeniu wartości funkcje niedostępne w nowym planie zostaną automatycznie wyłączone. Niektóre ustawienia i konfiguracje mogą zostać utracone. Zapoznaj się z matrycą cenową, aby zrozumieć, które funkcje nie będą już dostępne.",
"billingUsageExceedsLimit": "Bieżące użycie ({current}) przekracza limit ({limit})",
"billingPastDueTitle": "Płatność w przeszłości",
"billingPastDueDescription": "Twoja płatność jest zaległa. Zaktualizuj metodę płatności, aby kontynuować korzystanie z funkcji aktualnego planu. Jeśli nie zostanie rozwiązana, Twoja subskrypcja zostanie anulowana i zostaniesz przywrócony do darmowego poziomu.",
"billingUnpaidTitle": "Subskrypcja niezapłacona",
"billingUnpaidDescription": "Twoja subskrypcja jest niezapłacona i została przywrócona do darmowego poziomu. Zaktualizuj swoją metodę płatności, aby przywrócić subskrypcję.",
"billingIncompleteTitle": "Płatność niezakończona",
"billingIncompleteDescription": "Twoja płatność jest niekompletna. Ukończ proces płatności, aby aktywować subskrypcję.",
"billingIncompleteExpiredTitle": "Płatność wygasła",
"billingIncompleteExpiredDescription": "Twoja płatność nigdy nie została zakończona i wygasła. Zostałeś przywrócony do darmowego poziomu. Zapisz się ponownie, aby przywrócić dostęp do płatnych funkcji.",
"billingManageSubscription": "Zarządzaj subskrypcją",
"billingResolvePaymentIssue": "Rozwiąż problem z płatnościami przed aktualizacją lub obniżeniem oceny",
"signUpTerms": {
"IAgreeToThe": "Zgadzam się z",
"termsOfService": "warunkami usługi",
@@ -1628,6 +1911,7 @@
"configureHealthCheck": "Skonfiguruj Kontrolę Zdrowia",
"configureHealthCheckDescription": "Skonfiguruj monitorowanie zdrowia dla {target}",
"enableHealthChecks": "Włącz Kontrole Zdrowia",
"healthCheckDisabledStateDescription": "Gdy wyłączone, strona nie będzie wykonywać kontroli zdrowia, a stan zostanie uznany za nieznany.",
"enableHealthChecksDescription": "Monitoruj zdrowie tego celu. Możesz monitorować inny punkt końcowy niż docelowy w razie potrzeby.",
"healthScheme": "Metoda",
"healthSelectScheme": "Wybierz metodę",
@@ -1643,6 +1927,24 @@
"timeIsInSeconds": "Czas w sekundach",
"requireDeviceApproval": "Wymagaj zatwierdzenia urządzenia",
"requireDeviceApprovalDescription": "Użytkownicy o tej roli potrzebują nowych urządzeń zatwierdzonych przez administratora, zanim będą mogli połączyć się i uzyskać dostęp do zasobów.",
"sshAccess": "Dostęp SSH",
"roleAllowSsh": "Zezwalaj na SSH",
"roleAllowSshAllow": "Zezwól",
"roleAllowSshDisallow": "Nie zezwalaj",
"roleAllowSshDescription": "Zezwalaj użytkownikom z tej roli na łączenie się z zasobami za pomocą SSH. Gdy wyłączone, rola nie może korzystać z dostępu SSH.",
"sshSudoMode": "Dostęp Sudo",
"sshSudoModeNone": "Brak",
"sshSudoModeNoneDescription": "Użytkownik nie może uruchamiać poleceń z sudo.",
"sshSudoModeFull": "Pełne Sudo",
"sshSudoModeFullDescription": "Użytkownik może uruchomić dowolne polecenie z sudo.",
"sshSudoModeCommands": "Polecenia",
"sshSudoModeCommandsDescription": "Użytkownik może uruchamiać tylko określone polecenia z sudo.",
"sshSudo": "Zezwól na sudo",
"sshSudoCommands": "Komendy Sudo",
"sshSudoCommandsDescription": "Lista poleceń oddzielonych przecinkami, które użytkownik może uruchamiać z sudo.",
"sshCreateHomeDir": "Utwórz katalog domowy",
"sshUnixGroups": "Grupy Unix",
"sshUnixGroupsDescription": "Oddzielone przecinkami grupy Unix, aby dodać użytkownika do docelowego hosta.",
"retryAttempts": "Próby Ponowienia",
"expectedResponseCodes": "Oczekiwane Kody Odpowiedzi",
"expectedResponseCodesDescription": "Kod statusu HTTP, który wskazuje zdrowy status. Jeśli pozostanie pusty, uznaje się 200-300 za zdrowy.",
@@ -1659,9 +1961,20 @@
"healthCheckIntervalMin": "Interwał sprawdzania musi wynosić co najmniej 5 sekund",
"healthCheckTimeoutMin": "Limit czasu musi wynosić co najmniej 1 sekundę",
"healthCheckRetryMin": "Liczba prób ponowienia musi wynosić co najmniej 1",
"healthCheckMode": "Tryb kontroli",
"healthCheckStrategy": "Strategia",
"healthCheckModeDescription": "Tryb TCP weryfikuje tylko łączność. Tryb HTTP ocenia odpowiedź HTTP.",
"healthyThreshold": "Próg zdrowia",
"healthyThresholdDescription": "Wymagane sukcesy pod rząd, zanim oznaczy się jako zdrowe.",
"unhealthyThreshold": "Próg niezdrowia",
"unhealthyThresholdDescription": "Wymagane niepowodzenia z rzędu, zanim oznaczy się jako niezdrowe.",
"healthCheckHealthyThresholdMin": "Próg zdrowia musi wynosić co najmniej 1",
"healthCheckUnhealthyThresholdMin": "Próg niezdrowia musi wynosić co najmniej 1",
"httpMethod": "Metoda HTTP",
"selectHttpMethod": "Wybierz metodę HTTP",
"domainPickerSubdomainLabel": "Poddomena",
"domainPickerWildcard": "Uniwersalny",
"domainPickerWildcardPaidOnly": "Uniwersalne subdomeny są płatną funkcją. Proszę dokonać aktualizacji, aby uzyskać dostęp do tej funkcji.",
"domainPickerBaseDomainLabel": "Domen bazowa",
"domainPickerSearchDomains": "Szukaj domen...",
"domainPickerNoDomainsFound": "Nie znaleziono domen",
@@ -1687,12 +2000,12 @@
"resourcesTableAliasAddressInfo": "Ten adres jest częścią podsieci użyteczności organizacji. Jest używany do rozwiązywania rekordów aliasu przy użyciu wewnętrznej rozdzielczości DNS.",
"resourcesTableClients": "Klientami",
"resourcesTableAndOnlyAccessibleInternally": "i są dostępne tylko wewnętrznie po połączeniu z klientem.",
"resourcesTableNoTargets": "Brak celów",
"resourcesTableHealthy": "Zdrowe",
"resourcesTableDegraded": "Degradacja",
"resourcesTableOffline": "Offline",
"resourcesTableUnhealthy": "Niezdrowy",
"resourcesTableUnknown": "Nieznane",
"resourcesTableNotMonitored": "Nie monitorowano",
"resourcesTableNoTargets": "Brak celów",
"editInternalResourceDialogEditClientResource": "Edytuj Zasoby Prywatne",
"editInternalResourceDialogUpdateResourceProperties": "Aktualizuj konfigurację zasobów i kontrolę dostępu dla {resourceName}",
"editInternalResourceDialogResourceProperties": "Właściwości zasobów",
@@ -1718,6 +2031,11 @@
"editInternalResourceDialogModePort": "Port",
"editInternalResourceDialogModeHost": "Host",
"editInternalResourceDialogModeCidr": "CIDR",
"editInternalResourceDialogModeHttp": "HTTP",
"editInternalResourceDialogModeHttps": "HTTPS",
"editInternalResourceDialogScheme": "Schemat",
"editInternalResourceDialogEnableSsl": "Włącz SSL",
"editInternalResourceDialogEnableSslDescription": "Włącz szyfrowanie SSL/TLS dla bezpiecznych połączeń HTTPS z miejscem docelowym.",
"editInternalResourceDialogDestination": "Miejsce docelowe",
"editInternalResourceDialogDestinationHostDescription": "Adres IP lub nazwa hosta zasobu w sieci witryny.",
"editInternalResourceDialogDestinationIPDescription": "Adres IP lub nazwa hosta zasobu w sieci witryny.",
@@ -1733,6 +2051,7 @@
"createInternalResourceDialogName": "Nazwa",
"createInternalResourceDialogSite": "Witryna",
"selectSite": "Wybierz stronę...",
"multiSitesSelectorSitesCount": "{count, plural, one {# witryna} few {# witryny} many {# witryn} other {# witryn}}",
"noSitesFound": "Nie znaleziono stron.",
"createInternalResourceDialogProtocol": "Protokół",
"createInternalResourceDialogTcp": "TCP",
@@ -1761,11 +2080,19 @@
"createInternalResourceDialogModePort": "Port",
"createInternalResourceDialogModeHost": "Host",
"createInternalResourceDialogModeCidr": "CIDR",
"createInternalResourceDialogModeHttp": "HTTP",
"createInternalResourceDialogModeHttps": "HTTPS",
"scheme": "Schemat",
"createInternalResourceDialogScheme": "Schemat",
"createInternalResourceDialogEnableSsl": "Włącz SSL",
"createInternalResourceDialogEnableSslDescription": "Włącz szyfrowanie SSL/TLS dla bezpiecznych połączeń HTTPS z miejscem docelowym.",
"createInternalResourceDialogDestination": "Miejsce docelowe",
"createInternalResourceDialogDestinationHostDescription": "Adres IP lub nazwa hosta zasobu w sieci witryny.",
"createInternalResourceDialogDestinationCidrDescription": "Zakres CIDR zasobu w sieci witryny.",
"createInternalResourceDialogAlias": "Alias",
"createInternalResourceDialogAliasDescription": "Opcjonalny wewnętrzny alias DNS dla tego zasobu.",
"internalResourceDownstreamSchemeRequired": "Schemat jest wymagany dla zasobów HTTP",
"internalResourceHttpPortRequired": "Port docelowy jest wymagany dla zasobów HTTP",
"siteConfiguration": "Konfiguracja",
"siteAcceptClientConnections": "Akceptuj połączenia klienta",
"siteAcceptClientConnectionsDescription": "Zezwalaj urządzeniom i klientom na dostęp do zasobów na tej stronie. Może to zostać zmienione później.",
@@ -1851,12 +2178,46 @@
"exitNode": "Węzeł Wyjściowy",
"country": "Kraj",
"rulesMatchCountry": "Obecnie bazuje na adresie IP źródła",
"region": "Region",
"selectRegion": "Wybierz region",
"searchRegions": "Szukaj regionów...",
"noRegionFound": "Nie znaleziono regionu.",
"rulesMatchRegion": "Wybierz regionalną grupę krajów",
"rulesErrorInvalidRegion": "Nieprawidłowy region",
"rulesErrorInvalidRegionDescription": "Proszę wybrać prawidłowy region.",
"regionAfrica": "Afryka",
"regionNorthernAfrica": "Afryka Północna",
"regionEasternAfrica": "Afryka Wschodnia",
"regionMiddleAfrica": "Afryka Środkowa",
"regionSouthernAfrica": "Afryka Południowa",
"regionWesternAfrica": "Afryka Zachodnia",
"regionAmericas": "Ameryka",
"regionCaribbean": "Karaiby",
"regionCentralAmerica": "Ameryka Środkowa",
"regionSouthAmerica": "Ameryka Południowej",
"regionNorthernAmerica": "Ameryka Północna",
"regionAsia": "Akwakultura",
"regionCentralAsia": "Azja Środkowa",
"regionEasternAsia": "Azja Wschodnia",
"regionSouthEasternAsia": "Azja Południowo-Wschodnia",
"regionSouthernAsia": "Azja Południowa",
"regionWesternAsia": "Azja Zachodnia",
"regionEurope": "Europa",
"regionEasternEurope": "Europa Wschodnia",
"regionNorthernEurope": "Europa Północna",
"regionSouthernEurope": "Europa Południowa",
"regionWesternEurope": "Europa Zachodnia",
"regionOceania": "Oceania",
"regionAustraliaAndNewZealand": "Australia i Nowa Zelandia",
"regionMelanesia": "Melanesia",
"regionMicronesia": "Micronesia",
"regionPolynesia": "Polynesia",
"managedSelfHosted": {
"title": "Zarządzane Samodzielnie-Hostingowane",
"description": "Większa niezawodność i niska konserwacja serwera Pangolin z dodatkowymi dzwonkami i sygnałami",
"introTitle": "Zarządzany samowystarczalny Pangolin",
"introDescription": "jest opcją wdrażania zaprojektowaną dla osób, które chcą prostoty i dodatkowej niezawodności, przy jednoczesnym utrzymaniu swoich danych prywatnych i samodzielnych.",
"introDetail": "Z tą opcją nadal obsługujesz swój własny węzeł Pangolin tunele, zakończenie SSL i ruch na Twoim serwerze. Różnica polega na tym, że zarządzanie i monitorowanie odbywa się za pomocą naszej tablicy rozdzielczej, która odblokowuje szereg korzyści:",
"introDetail": "Z tą opcją nadal obsługujesz swój własny węzeł Pangolin - tunele, zakończenie SSL i ruch na Twoim serwerze. Różnica polega na tym, że zarządzanie i monitorowanie odbywa się za pomocą naszej tablicy rozdzielczej, która odblokowuje szereg korzyści:",
"benefitSimplerOperations": {
"title": "Uproszczone operacje",
"description": "Nie ma potrzeby uruchamiania własnego serwera pocztowego lub ustawiania skomplikowanych powiadomień. Będziesz mieć kontrolę zdrowia i powiadomienia o przestoju."
@@ -1889,7 +2250,7 @@
},
"internationaldomaindetected": "Wykryto międzynarodową domenę",
"willbestoredas": "Będą przechowywane jako:",
"roleMappingDescription": "Określ jak role są przypisywane do użytkowników podczas logowania się, gdy automatyczne świadczenie jest włączone.",
"roleMappingDescription": "Określ, jak role są przypisywane użytkownikom podczas logowania się z tym dostawcą tożsamości.",
"selectRole": "Wybierz rolę",
"roleMappingExpression": "Wyrażenie",
"selectRolePlaceholder": "Wybierz rolę",
@@ -1899,6 +2260,25 @@
"invalidValue": "Nieprawidłowa wartość",
"idpTypeLabel": "Typ dostawcy tożsamości",
"roleMappingExpressionPlaceholder": "np. zawiera(grupy, 'admin') && 'Admin' || 'Członek'",
"roleMappingModeFixedRoles": "Stałe role",
"roleMappingModeMappingBuilder": "Konstruktor mapowania",
"roleMappingModeRawExpression": "Surowe wyrażenie",
"roleMappingFixedRolesPlaceholderSelect": "Wybierz jedną lub więcej ról",
"roleMappingFixedRolesPlaceholderFreeform": "Wpisz nazwy ról (dopasowanie na organizację)",
"roleMappingFixedRolesDescriptionSameForAll": "Przypisz tę samą rolę do każdego automatycznie udostępnionego użytkownika.",
"roleMappingFixedRolesDescriptionDefaultPolicy": "W przypadku domyślnych zasad nazwy ról typu które istnieją w każdej organizacji, gdzie użytkownicy są zapisywani. Nazwy muszą się dokładnie zgadzać.",
"roleMappingClaimPath": "Ścieżka przejęcia",
"roleMappingClaimPathPlaceholder": "grupy",
"roleMappingClaimPathDescription": "Ścieżka w payloadzie tokenów, która zawiera wartości źródłowe (np. grupy).",
"roleMappingMatchValue": "Wartość dopasowania",
"roleMappingAssignRoles": "Przypisz role",
"roleMappingAddMappingRule": "Dodaj regułę mapowania",
"roleMappingRawExpressionResultDescription": "Wyrażenie musi ocenić do tablicy ciągów lub ciągów.",
"roleMappingRawExpressionResultDescriptionSingleRole": "Wyrażenie musi oceniać ciąg znaków (pojedyncza nazwa).",
"roleMappingMatchValuePlaceholder": "Wartość dopasowania (na przykład: admin)",
"roleMappingAssignRolesPlaceholderFreeform": "Wpisz nazwy ról (aktywizacja na org)",
"roleMappingBuilderFreeformRowHint": "Nazwy ról muszą pasować do roli w każdej organizacji docelowej.",
"roleMappingRemoveRule": "Usuń",
"idpGoogleConfiguration": "Konfiguracja Google",
"idpGoogleConfigurationDescription": "Skonfiguruj dane logowania Google OAuth2",
"idpGoogleClientIdDescription": "Google OAuth2 Client ID",
@@ -1962,9 +2342,11 @@
"selectDomainForOrgAuthPage": "Wybierz domenę dla strony uwierzytelniania organizacji",
"domainPickerProvidedDomain": "Dostarczona domena",
"domainPickerFreeProvidedDomain": "Darmowa oferowana domena",
"domainPickerFreeDomainsPaidFeature": "Dostarczane domeny to funkcja płatna. Subskrybuj, aby uzyskać domenę w ramach swojego planu - nie ma potrzeby przynoszenia własnej.",
"domainPickerVerified": "Zweryfikowano",
"domainPickerUnverified": "Niezweryfikowane",
"domainPickerInvalidSubdomainStructure": "Ta subdomena zawiera nieprawidłowe znaki lub strukturę. Zostanie ona automatycznie oczyszczona po zapisaniu.",
"domainPickerManual": "Podręcznik",
"domainPickerInvalidSubdomainStructure": "Nieprawidłowe znaki zostaną zsanitowane, gdy zostaną zapisane.",
"domainPickerError": "Błąd",
"domainPickerErrorLoadDomains": "Nie udało się załadować domen organizacji",
"domainPickerErrorCheckAvailability": "Nie udało się sprawdzić dostępności domeny",
@@ -1977,7 +2359,7 @@
"orgAuthChooseIdpDescription": "Wybierz swojego dostawcę tożsamości, aby kontynuować",
"orgAuthNoIdpConfigured": "Ta organizacja nie ma skonfigurowanych żadnych dostawców tożsamości. Zamiast tego możesz zalogować się za pomocą swojej tożsamości Pangolin.",
"orgAuthSignInWithPangolin": "Zaloguj się używając Pangolin",
"orgAuthSignInToOrg": "Zaloguj się do organizacji",
"orgAuthSignInToOrg": "Dostawca tożsamości organizacji (SSO)",
"orgAuthSelectOrgTitle": "Logowanie do organizacji",
"orgAuthSelectOrgDescription": "Wprowadź identyfikator organizacji, aby kontynuować",
"orgAuthOrgIdPlaceholder": "twoja-organizacja",
@@ -2193,10 +2575,10 @@
},
"scale": {
"title": "Skala",
"description": "Cechy przedsiębiorstw, 50 użytkowników, 50 obiektów i wsparcie priorytetowe."
"description": "Funkcje dla przedsiębiorstw, 50 użytkowników, 100 witryn i priorytetowe wsparcie."
}
},
"personalUseOnly": "Wyłącznie do użytku osobistego (bezpłatna licencja brak zamówień)",
"personalUseOnly": "Tylko do użytku osobistego (darmowa licencja - bez płatności)",
"buttons": {
"continueToCheckout": "Przejdź do zamówienia"
},
@@ -2270,6 +2652,7 @@
"validPassword": "Prawidłowe hasło",
"validEmail": "Valid email",
"validSSO": "Valid SSO",
"connectedClient": "Połączony Klient",
"resourceBlocked": "Zasób zablokowany",
"droppedByRule": "Upuszczone przez regułę",
"noSessions": "Brak sesji",
@@ -2277,24 +2660,26 @@
"noMoreAuthMethods": "No Valid Auth",
"ip": "IP",
"reason": "Powód",
"requestLogs": "Dzienniki żądań",
"requestLogs": "Dzienniki żądań HTTP",
"requestAnalytics": "Żądanie Analityki",
"host": "Host",
"location": "Lokalizacja",
"actionLogs": "Dzienniki działań",
"sidebarLogsRequest": "Dzienniki żądań",
"sidebarLogsRequest": "Dzienniki żądań HTTP",
"sidebarLogsAccess": "Logi dostępu",
"sidebarLogsAction": "Dzienniki działań",
"logRetention": "Zachowanie dziennika",
"logRetentionDescription": "Zarządzaj jak długo różne typy logów są zachowane dla tej organizacji lub wyłącz je",
"requestLogsDescription": "Zobacz szczegółowe dzienniki żądań zasobów w tej organizacji",
"requestAnalyticsDescription": "Zobacz szczegółowe analizy żądań dla zasobów w tej organizacji",
"logRetentionRequestLabel": "Zachowanie dziennika żądań",
"logRetentionRequestLabel": "Przechowywanie dzienników żądań HTTP",
"logRetentionRequestDescription": "Jak długo zachować dzienniki żądań",
"logRetentionAccessLabel": "Zachowanie dziennika dostępu",
"logRetentionAccessDescription": "Jak długo zachować dzienniki dostępu",
"logRetentionActionLabel": "Zachowanie dziennika akcji",
"logRetentionActionDescription": "Jak długo zachować dzienniki akcji",
"logRetentionConnectionLabel": "Zachowanie dziennika połączeń",
"logRetentionConnectionDescription": "Jak długo zachować dzienniki połączeń",
"logRetentionDisabled": "Wyłączone",
"logRetention3Days": "3 dni",
"logRetention7Days": "7 dni",
@@ -2305,8 +2690,15 @@
"logRetentionEndOfFollowingYear": "Koniec następnego roku",
"actionLogsDescription": "Zobacz historię działań wykonywanych w tej organizacji",
"accessLogsDescription": "Wyświetl prośby o autoryzację dostępu do zasobów w tej organizacji",
"licenseRequiredToUse": "Do korzystania z tej funkcji wymagana jest licencja <enterpriseLicenseLink>Enterprise Edition</enterpriseLicenseLink> . Ta funkcja jest również dostępna w <pangolinCloudLink>Pangolin Cloud</pangolinCloudLink>.",
"ossEnterpriseEditionRequired": "<enterpriseEditionLink>Enterprise Edition</enterpriseEditionLink> jest wymagany do korzystania z tej funkcji. Ta funkcja jest również dostępna w <pangolinCloudLink>Pangolin Cloud</pangolinCloudLink>.",
"connectionLogs": "Dzienniki połączeń",
"connectionLogsDescription": "Wyświetl dzienniki połączeń dla tuneli w tej organizacji",
"sidebarLogsConnection": "Dzienniki połączeń",
"sidebarLogsStreaming": "Strumieniowanie",
"sourceAddress": "Adres źródłowy",
"destinationAddress": "Adres docelowy",
"duration": "Czas trwania",
"licenseRequiredToUse": "Do korzystania z tej funkcji wymagana jest licencja <enterpriseLicenseLink>Enterprise Edition</enterpriseLicenseLink> lub <pangolinCloudLink>Pangolin Cloud</pangolinCloudLink> . <bookADemoLink>Zarezerwuj wersję demonstracyjną lub wersję próbną POC</bookADemoLink>.",
"ossEnterpriseEditionRequired": "<enterpriseEditionLink>Enterprise Edition</enterpriseEditionLink> jest wymagany do korzystania z tej funkcji. Ta funkcja jest również dostępna w <pangolinCloudLink>Pangolin Cloud</pangolinCloudLink>. <bookADemoLink>Zarezerwuj demo lub okres próbny POC</bookADemoLink>.",
"certResolver": "Rozwiązywanie certyfikatów",
"certResolverDescription": "Wybierz resolver certyfikatów do użycia dla tego zasobu.",
"selectCertResolver": "Wybierz Resolver certyfikatów",
@@ -2448,6 +2840,9 @@
"machineClients": "Klienci maszyn",
"install": "Zainstaluj",
"run": "Uruchom",
"envFile": "Plik środowiska",
"serviceFile": "Plik serwisu",
"enableAndStart": "Włącz i Uruchom",
"clientNameDescription": "Wyświetlana nazwa klienta, która może zostać zmieniona później.",
"clientAddress": "Adres klienta (Zaawansowany)",
"setupFailedToFetchSubnet": "Nie udało się pobrać domyślnej podsieci",
@@ -2496,13 +2891,30 @@
"editInternalResourceDialogAddClients": "Dodaj klientów",
"editInternalResourceDialogDestinationLabel": "Miejsce docelowe",
"editInternalResourceDialogDestinationDescription": "Określ adres docelowy dla wewnętrznego zasobu. Może to być nazwa hosta, adres IP lub zakres CIDR, w zależności od wybranego trybu. Opcjonalnie ustaw wewnętrzny alias DNS dla łatwiejszej identyfikacji.",
"internalResourceFormMultiSiteRoutingHelp": "Wybór wielu stron umożliwia odporne trasowanie i awarię dla wysokiej dostępności.",
"internalResourceFormMultiSiteRoutingHelpLearnMore": "Dowiedz się więcej",
"editInternalResourceDialogPortRestrictionsDescription": "Ogranicz dostęp do konkretnych portów TCP/UDP lub zezwól/zablokuj wszystkie porty.",
"createInternalResourceDialogHttpConfiguration": "Konfiguracja HTTP",
"createInternalResourceDialogHttpConfigurationDescription": "Wybierz domenę, której klienci będą używać, aby dotrzeć do tego zasobu przez HTTP lub HTTPS.",
"editInternalResourceDialogHttpConfiguration": "Konfiguracja HTTP",
"editInternalResourceDialogHttpConfigurationDescription": "Wybierz domenę, której klienci będą używać, aby dotrzeć do tego zasobu przez HTTP lub HTTPS.",
"editInternalResourceDialogTcp": "TCP",
"editInternalResourceDialogUdp": "UDP",
"editInternalResourceDialogIcmp": "ICMP",
"editInternalResourceDialogAccessControl": "Kontrola dostępu",
"editInternalResourceDialogAccessControlDescription": "Kontroluj, które role, użytkownicy i klienci maszyn mają dostęp do tego zasobu po połączeniu. Administratorzy zawsze mają dostęp.",
"editInternalResourceDialogPortRangeValidationError": "Zakres portów musi być \"*\" dla wszystkich portów lub listą portów i zakresów oddzielonych przecinkami (np. \"80,443,8000-9000\"). Porty muszą znajdować się w przedziale od 1 do 65535.",
"internalResourceAuthDaemonStrategy": "SSH Auth Daemon Lokalizacja",
"internalResourceAuthDaemonStrategyDescription": "Wybierz, gdzie działa demon uwierzytelniania SSH: na stronie (Newt) lub na zdalnym serwerze.",
"internalResourceAuthDaemonDescription": "Uwierzytelnianie SSH obsługuje podpisywanie klucza SSH i uwierzytelnianie PAM dla tego zasobu. Wybierz, czy działa na stronie (Newt), czy na oddzielnym serwerze zdalnym. Zobacz <docsLink>dokumentację</docsLink> dla więcej.",
"internalResourceAuthDaemonDocsUrl": "https://docs.pangolin.net",
"internalResourceAuthDaemonStrategyPlaceholder": "Wybierz strategię",
"internalResourceAuthDaemonStrategyLabel": "Lokalizacja",
"internalResourceAuthDaemonSite": "Na stronie",
"internalResourceAuthDaemonSiteDescription": "Demon Auth działa na stronie (nowy).",
"internalResourceAuthDaemonRemote": "Zdalny host",
"internalResourceAuthDaemonRemoteDescription": "Demon Auth działa na serwerze, który nie jest stroną.",
"internalResourceAuthDaemonPort": "Port Daemon (opcjonalnie)",
"orgAuthWhatsThis": "Gdzie mogę znaleźć swój identyfikator organizacji?",
"learnMore": "Dowiedz się więcej",
"backToHome": "Wróć do strony głównej",
@@ -2524,6 +2936,9 @@
"maintenancePageMessagePlaceholder": "Wrócimy wkrótce! Nasza strona przechodzi obecnie zaplanowaną konserwację.",
"maintenancePageMessageDescription": "Szczegółowy komunikat wyjaśniający konserwację",
"maintenancePageTimeTitle": "Szacowany czas zakończenia (opcjonalnie)",
"privateMaintenanceScreenTitle": "Ekraan prywatnego utrzymania",
"privateMaintenanceScreenMessage": "Ta domena jest wykorzystywana na prywatnym zasobie. Połącz się za pomocą klienta Pangolin, aby uzyskać dostęp do tego zasobu.",
"privateMaintenanceScreenSteps": "Po połączeniu, jeśli nadal widzisz tę wiadomość, pamięć podręczna DNS przeglądarki może nadal wskazywać na stary adres. Aby to naprawić: zamknij i otwórz ponownie tę kartę lub przeglądarkę, a następnie przejdź z powrotem na tę stronę.",
"maintenanceTime": "np. 2 godziny, 1 listopad o 17:00",
"maintenanceEstimatedTimeDescription": "Kiedy oczekujesz zakończenia konserwacji",
"editDomain": "Edytuj domenę",
@@ -2632,5 +3047,209 @@
"approvalsEmptyStateStep2Title": "Włącz zatwierdzanie urządzenia",
"approvalsEmptyStateStep2Description": "Edytuj rolę i włącz opcję \"Wymagaj zatwierdzenia urządzenia\". Użytkownicy z tą rolą będą potrzebowali zatwierdzenia administratora dla nowych urządzeń.",
"approvalsEmptyStatePreviewDescription": "Podgląd: Gdy włączone, oczekujące prośby o sprawdzenie pojawią się tutaj",
"approvalsEmptyStateButtonText": "Zarządzaj rolami"
"approvalsEmptyStateButtonText": "Zarządzaj rolami",
"domainErrorTitle": "Mamy problem z weryfikacją Twojej domeny",
"idpAdminAutoProvisionPoliciesTabHint": "Skonfiguruj mapowanie ról i zasady organizacji na karcie <policiesTabLink>Auto Provivision Settings</policiesTabLink>.",
"streamingTitle": "Strumieniowanie wydarzeń",
"streamingDescription": "Wydarzenia strumieniowe z Twojej organizacji do zewnętrznych miejsc przeznaczenia w czasie rzeczywistym.",
"streamingUnnamedDestination": "Miejsce przeznaczenia bez nazwy",
"streamingNoUrlConfigured": "Brak skonfigurowanego adresu URL",
"streamingAddDestination": "Dodaj cel",
"streamingHttpWebhookTitle": "Webhook HTTP",
"streamingHttpWebhookDescription": "Wyślij zdarzenia do dowolnego punktu końcowego HTTP z elastycznym uwierzytelnianiem i szablonem.",
"streamingS3Title": "Amazon S3",
"streamingS3Description": "Zdarzenia strumieniowe do magazynu obiektów kompatybilnych z S3. Już wkrótce.",
"streamingDatadogTitle": "Datadog",
"streamingDatadogDescription": "Przekaż wydarzenia bezpośrednio do Twojego konta Datadog. Już wkrótce.",
"streamingTypePickerDescription": "Wybierz typ docelowy, aby rozpocząć.",
"streamingFailedToLoad": "Nie udało się załadować miejsc docelowych",
"streamingUnexpectedError": "Wystąpił nieoczekiwany błąd.",
"streamingFailedToUpdate": "Nie udało się zaktualizować miejsca docelowego",
"streamingDeletedSuccess": "Cel usunięty pomyślnie",
"streamingFailedToDelete": "Nie udało się usunąć miejsca docelowego",
"streamingDeleteTitle": "Usuń cel",
"streamingDeleteButtonText": "Usuń cel",
"streamingDeleteDialogAreYouSure": "Czy na pewno chcesz usunąć",
"streamingDeleteDialogThisDestination": "ten cel",
"streamingDeleteDialogPermanentlyRemoved": "? Wszystkie konfiguracje zostaną trwale usunięte.",
"httpDestEditTitle": "Edytuj cel",
"httpDestAddTitle": "Dodaj cel HTTP",
"httpDestEditDescription": "Aktualizuj konfigurację dla tego celu przesyłania strumieniowego zdarzeń HTTP.",
"httpDestAddDescription": "Skonfiguruj nowy punkt końcowy HTTP, aby otrzymywać wydarzenia organizacji.",
"S3DestEditTitle": "Edytuj Miejsce Docelowe",
"S3DestAddTitle": "Dodaj Miejsce Docelowe S3",
"S3DestEditDescription": "Zaktualizuj konfigurację dla tego miejsca docelowego strumieniowego zdarzeń S3.",
"S3DestAddDescription": "Skonfiguruj nowy punkt końcowy S3, aby odbierać zdarzenia Twojej organizacji.",
"datadogDestEditTitle": "Edytuj Miejsce Docelowe",
"datadogDestAddTitle": "Dodaj Miejsce Docelowe Datadog",
"datadogDestEditDescription": "Zaktualizuj konfigurację dla tego miejsca docelowego strumieniowego zdarzeń Datadog.",
"datadogDestAddDescription": "Skonfiguruj nowy punkt końcowy Datadog, aby odbierać zdarzenia Twojej organizacji.",
"httpDestTabSettings": "Ustawienia",
"httpDestTabHeaders": "Nagłówki",
"httpDestTabBody": "Ciało",
"httpDestTabLogs": "Logi",
"httpDestNamePlaceholder": "Mój cel HTTP",
"httpDestUrlLabel": "Adres docelowy",
"httpDestUrlErrorHttpRequired": "Adres URL musi używać http lub https",
"httpDestUrlErrorHttpsRequired": "HTTPS jest wymagany dla wdrożenia w chmurze",
"httpDestUrlErrorInvalid": "Wprowadź poprawny adres URL (np. https://example.com/webhook)",
"httpDestAuthTitle": "Uwierzytelnianie",
"httpDestAuthDescription": "Wybierz sposób uwierzytelniania żądań do Twojego punktu końcowego.",
"httpDestAuthNoneTitle": "Brak uwierzytelniania",
"httpDestAuthNoneDescription": "Wysyła żądania bez nagłówka autoryzacji.",
"httpDestAuthBearerTitle": "Token Bearer",
"httpDestAuthBearerDescription": "Dodaje nagłówek Authorization: Bearer '<token>' do każdego żądania.",
"httpDestAuthBearerPlaceholder": "Twój klucz API lub token",
"httpDestAuthBasicTitle": "Podstawowa Autoryzacja",
"httpDestAuthBasicDescription": "Dodaje nagłówek Authorization: Basic '<credentials>'. Podaj poświadczenia w formacie użytkownik:hasło.",
"httpDestAuthBasicPlaceholder": "Nazwa użytkownika:hasło",
"httpDestAuthCustomTitle": "Niestandardowy nagłówek",
"httpDestAuthCustomDescription": "Określ niestandardową nazwę nagłówka HTTP i wartość dla uwierzytelniania (np. X-API-Key).",
"httpDestAuthCustomHeaderNamePlaceholder": "Nazwa nagłówka (np. klucz X-API)",
"httpDestAuthCustomHeaderValuePlaceholder": "Wartość nagłówka",
"httpDestCustomHeadersTitle": "Niestandardowe nagłówki HTTP",
"httpDestCustomHeadersDescription": "Dodaj własne nagłówki do każdego wychodzącego żądania. Przydatne dla tokenów statycznych lub niestandardowego typu zawartości. Domyślnie Content-Type: aplikacja/json jest wysyłane.",
"httpDestNoHeadersConfigured": "Nie skonfigurowano nagłówków niestandardowych. Kliknij \"Dodaj nagłówek\", aby go dodać.",
"httpDestHeaderNamePlaceholder": "Nazwa nagłówka",
"httpDestHeaderValuePlaceholder": "Wartość",
"httpDestAddHeader": "Dodaj nagłówek",
"httpDestBodyTemplateTitle": "Własny szablon ciała",
"httpDestBodyTemplateDescription": "Kontroluj strukturę JSON wysyłaną do Twojego punktu końcowego. Jeśli wyłączone, dla każdego zdarzenia wysyłany jest domyślny obiekt JSON.",
"httpDestEnableBodyTemplate": "Włącz niestandardowy szablon ciała",
"httpDestBodyTemplateLabel": "Szablon ciała (JSON)",
"httpDestBodyTemplateHint": "Użyj zmiennych szablonu do odniesienia pól zdarzeń w twoim payloadzie.",
"httpDestPayloadFormatTitle": "Format obciążenia",
"httpDestPayloadFormatDescription": "Jak zdarzenia są serializowane w każdym organie żądania.",
"httpDestFormatJsonArrayTitle": "Tablica JSON",
"httpDestFormatJsonArrayDescription": "Jedna prośba na partię, treść jest tablicą JSON. Kompatybilna z najbardziej ogólnymi webhookami i Datadog.",
"httpDestFormatNdjsonTitle": "NDJSON",
"httpDestFormatNdjsonDescription": "Jedno żądanie na partię, ciałem jest plik JSON rozdzielony na newline-delimited - jeden obiekt na wiersz, bez tablicy zewnętrznej. Wymagane przez Splunk HEC, Elastic / OpenSesearch i Grafana Loki.",
"httpDestFormatSingleTitle": "Jedno wydarzenie na żądanie",
"httpDestFormatSingleDescription": "Wysyła oddzielny POST HTTP dla każdego zdarzenia. Użyj tylko dla punktów końcowych, które nie mogą obsługiwać partii.",
"httpDestLogTypesTitle": "Typy logów",
"httpDestLogTypesDescription": "Wybierz, które typy logów są przekazywane do tego miejsca docelowego. Tylko włączone typy logów będą strumieniowane.",
"httpDestAccessLogsTitle": "Logi dostępu",
"httpDestAccessLogsDescription": "Próby dostępu do zasobów, w tym uwierzytelnione i odrzucone żądania.",
"httpDestActionLogsTitle": "Dzienniki działań",
"httpDestActionLogsDescription": "Działania administracyjne wykonywane przez użytkowników w organizacji.",
"httpDestConnectionLogsTitle": "Dzienniki połączeń",
"httpDestConnectionLogsDescription": "Zdarzenia związane z miejscem i tunelem, w tym połączenia i rozłączenia.",
"httpDestRequestLogsTitle": "Dzienniki żądań HTTP",
"httpDestRequestLogsDescription": "Logi żądań HTTP dla zasobów proxy, w tym metody, ścieżki i kodu odpowiedzi.",
"httpDestSaveChanges": "Zapisz zmiany",
"httpDestCreateDestination": "Utwórz cel",
"httpDestUpdatedSuccess": "Cel został pomyślnie zaktualizowany",
"httpDestCreatedSuccess": "Cel został utworzony pomyślnie",
"httpDestUpdateFailed": "Nie udało się zaktualizować miejsca docelowego",
"httpDestCreateFailed": "Nie udało się utworzyć miejsca docelowego",
"followRedirects": "Podążaj za przekierowaniami",
"followRedirectsDescription": "Automatycznie podążaj za przekierowaniami HTTP dla żądań.",
"alertingErrorWebhookUrl": "Proszę wprowadzić poprawny URL dla web hooka.",
"healthCheckStrategyHttp": "Weryfikuje łączność i sprawdza status odpowiedzi HTTP.",
"healthCheckStrategyTcp": "Weryfikuje wyłącznie łączność TCP, bez sprawdzania odpowiedzi.",
"healthCheckStrategySnmp": "Wykonuje żądanie SNMP get w celu sprawdzenia stanu urządzeń sieciowych i infrastruktury.",
"healthCheckStrategyIcmp": "Używa żądań ICMP echo (pingów), aby sprawdzić, czy zasób jest dostępny i reagujący.",
"healthCheckTabStrategy": "Strategia",
"healthCheckTabConnection": "Łączenie",
"healthCheckTabAdvanced": "Zaawansowane",
"healthCheckStrategyNotAvailable": "Strategia ta nie jest dostępna. Skontaktuj się z działem sprzedaży, aby włączyć tę funkcję.",
"uptime30d": "Czas działania (30d)",
"idpAddActionCreateNew": "Utwórz nowego dostawcę tożsamości",
"idpAddActionImportFromOrg": "Importuj z innej organizacji",
"idpImportDialogTitle": "Importuj dostawcę tożsamości",
"idpImportDialogDescription": "Wybierz dostawcę tożsamości z organizacji, w której jesteś administratorem. Zostanie on powiązany z tą organizacją.",
"idpImportSearchPlaceholder": "Szukaj według nazwy organizacji lub dostawcy...",
"idpImportEmpty": "Nie znaleziono dostawców tożsamości.",
"idpImportedDescription": "Dostawca tożsamości został pomyślnie zaimportowany.",
"idpDeleteGlobalQuestion": "Czy na pewno chcesz trwale usunąć tego dostawcę tożsamości?",
"idpDeleteGlobalDescription": "Spowoduje to trwałe usunięcie dostawcy tożsamości ze wszystkich organizacji, z którymi jest powiązany.",
"idpUnassociateTitle": "Odłącz dostawcę tożsamości",
"idpUnassociateQuestion": "Czy na pewno chcesz odłączyć tego dostawcę tożsamości od tej organizacji?",
"idpUnassociateDescription": "Wszystkie użytkownicy powiązani z tym dostawcą tożsamości zostaną usunięci z tej organizacji, ale dostawca tożsamości będzie nadal istniał dla innych powiązanych organizacji.",
"idpUnassociateConfirm": "Potwierdź odłączenie dostawcy tożsamości",
"idpUnassociateWarning": "Tego nie można cofnąć dla tej organizacji.",
"idpUnassociatedDescription": "Dostawca tożsamości pomyślnie odłączony od tej organizacji",
"idpUnassociateMenu": "Odłącz",
"idpDeleteAllOrgsMenu": "Usuń",
"publicIpEndpoint": "Koniec punktu pracy",
"lastTriggeredAt": "Ostatnie Wyzwolenie",
"reject": "Odrzuć",
"uptimeDaysAgo": "{count} dni temu",
"uptimeToday": "Dzisiaj",
"uptimeNoDataAvailable": "Brak danych dostępnych",
"uptimeSuffix": "czas pracy",
"uptimeDowntimeSuffix": "czas przestoju",
"uptimeTooltipUptimeLabel": "Czas pracy",
"uptimeTooltipDowntimeLabel": "Czas przestoju",
"uptimeOngoing": "w toku",
"uptimeNoMonitoringData": "Brak danych monitorowania",
"uptimeNoData": "Brak danych",
"uptimeMiniBarDown": "Nieaktywny",
"uptimeSectionTitle": "Czas pracy",
"uptimeSectionDescription": "Dostępność za ostatnie {days} dni",
"uptimeAddAlert": "Dodaj Alert",
"uptimeViewAlerts": "Zobacz Alerty",
"uptimeCreateEmailAlert": "Utwórz Alert Email",
"uptimeAlertDescriptionSite": "Otrzymuj powiadomienia e-mail, gdy ta strona jest offline lub wraca online.",
"uptimeAlertDescriptionResource": "Otrzymuj powiadomienia e-mail, gdy to zasób jest offline lub wraca online.",
"uptimeAlertNamePlaceholder": "Nazwa alertu",
"uptimeAdditionalEmails": "Dodatkowe adresy e-mail",
"uptimeCreateAlert": "Utwórz Alert",
"uptimeAlertNoRecipients": "Brak odbiorców",
"uptimeAlertNoRecipientsDescription": "Proszę dodać przynajmniej jednego użytkownika, rolę lub adres email do powiadomienia.",
"uptimeAlertCreated": "Alert utworzony",
"uptimeAlertCreatedDescription": "Zostaniesz powiadomiony, gdy status się zmieni.",
"uptimeAlertCreateFailed": "Nie udało się utworzyć alertu",
"webhookUrlLabel": "URL",
"webhookHeaderKeyPlaceholder": "Klucz",
"webhookHeaderValuePlaceholder": "Wartość",
"alertLabel": "Alert",
"domainPickerWildcardSubdomainNotAllowed": "Uniwersalne subdomeny nie są dozwolone.",
"domainPickerWildcardCertWarning": "Uniwersalne zasoby mogą wymagać dodatkowej konfiguracji, aby działać poprawnie.",
"domainPickerWildcardCertWarningLink": "Dowiedz się więcej",
"health": "Zdrowie",
"domainPendingErrorTitle": "Problem z weryfikacją",
"memberPortalTitle": "Zasoby",
"memberPortalDescription": "Zasoby, do których masz dostęp w tej organizacji",
"memberPortalSortBy": "Sortuj według...",
"memberPortalSortNameAsc": "Nazwa A-Z",
"memberPortalSortNameDesc": "Nazwa Z-A",
"memberPortalSortDomainAsc": "Domena A-Z",
"memberPortalSortDomainDesc": "Domena Z-A",
"memberPortalSortEnabledFirst": "Włączone najpierw",
"memberPortalSortDisabledFirst": "Wyłączone najpierw",
"memberPortalRefresh": "Odśwież",
"memberPortalRefreshResources": "Odśwież zasoby",
"memberPortalFailedToLoad": "Nie udało się załadować zasobów",
"memberPortalFailedToLoadDescription": "Nie udało się załadować zasobów. Sprawdź połączenie i spróbuj ponownie.",
"memberPortalUnableToLoad": "Nie można załadować zasobów",
"memberPortalTryAgain": "Spróbuj ponownie",
"memberPortalNoResourcesFound": "Nie znaleziono zasobów",
"memberPortalNoResourcesAvailable": "Brak dostępnych zasobów",
"memberPortalNoResourcesMatchSearch": "Żadne zasoby nie pasują do „{query}”. Spróbuj dostosować swoje warunki wyszukiwania lub wyczyść wyszukiwanie, aby zobaczyć wszystkie zasoby.",
"memberPortalNoResourcesAccess": "Nie masz jeszcze dostępu do żadnych zasobów. Skontaktuj się z administratorem, aby uzyskać dostęp do potrzebnych zasobów.",
"memberPortalClearSearch": "Wyczyść wyszukiwanie",
"memberPortalPublicResources": "Publiczne zasoby",
"memberPortalPublicResourcesDescription": "Aplikacje i usługi internetowe dostępne za pośrednictwem przeglądarki",
"memberPortalCopiedToClipboard": "Skopiowano do schowka",
"memberPortalCopiedUrlDescription": "URL zasobu został skopiowany do schowka.",
"memberPortalOpenResource": "Otwórz zasób",
"memberPortalPrivateResources": "Prywatne zasoby",
"memberPortalPrivateResourcesDescription": "Zasoby sieci wewnętrznej dostępne za pośrednictwem klienta",
"memberPortalResourceDetails": "Szczegóły zasobu",
"memberPortalMode": "Tryb",
"memberPortalDestination": "Miejsce docelowe",
"memberPortalAlias": "Pseudonim",
"memberPortalCopiedAliasDescription": "Alias zasobu został skopiowany do schowka.",
"memberPortalCopiedDestinationDescription": "Miejsce docelowe zasobu zostało skopiowane do schowka.",
"memberPortalRequiresClientConnection": "Wymaga połączenia z klientem",
"memberPortalAuthMethods": "Metody uwierzytelniania",
"memberPortalSso": "Jednorazowe logowanie (SSO)",
"memberPortalPasswordProtected": "Chronione hasłem",
"memberPortalPinCode": "Kod PIN",
"memberPortalEmailWhitelist": "Biała lista e-mail",
"memberPortalResourceDisabled": "Zasób wyłączony",
"memberPortalShowingResources": "Wyświetlanie zasobów od {start} do {end} z {total}",
"memberPortalPrevious": "Poprzedni",
"memberPortalNext": "Następny"
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,8 @@
{
"contactSalesEnable": "联系销售以启用此功能。",
"contactSalesBookDemo": "预订演示",
"contactSalesOr": "或",
"contactSalesContactUs": "联系我们",
"setupCreate": "创建组织、站点和资源",
"headerAuthCompatibilityInfo": "启用此功能以在身份验证令牌缺失时强制返回401未授权响应。对于不在没有服务器挑战的情况下不发送凭证的浏览器或特定HTTP库这是必需的。",
"headerAuthCompatibility": "扩展兼容性",
@@ -19,6 +23,18 @@
"componentsInvalidKey": "检测到无效或过期的许可证密钥。按照许可证条款操作以继续使用所有功能。",
"dismiss": "忽略",
"subscriptionViolationMessage": "您的当前计划超出了您的限制。通过移除站点、用户或其他资源以保持在您的计划范围内来纠正问题。",
"trialBannerMessage": "您的试用将在 {countdown} 到期。升级以保持访问。",
"trialBannerExpired": "您的试用已到期。立即升级以恢复访问。",
"billingTrialBannerTitle": "免费试用激活中",
"billingTrialBannerDescription": "您目前正在商用层进行免费试用。试用结束后,您的账户将自动回到基础层功能和限制。可随时升级以保持当前计划的功能访问。",
"billingTrialBannerUpgrade": "立即升级",
"billingTrialBadge": "免费试用",
"trialActive": "免费试用中",
"trialExpired": "试用到期",
"trialHasEnded": "您的试用已结束。",
"trialDaysRemaining": "{count, plural, one {# day remaining} other {# days remaining}}",
"trialDaysLeftShort": "试用期剩余 {days} 天",
"trialGoToBilling": "转到账单页面",
"subscriptionViolationViewBilling": "查看计费",
"componentsLicenseViolation": "许可证超限:该服务器使用了 {usedSites} 个站点,已超过授权的 {maxSites} 个。请遵守许可证条款以继续使用全部功能。",
"componentsSupporterMessage": "感谢您的支持!您现在是 Pangolin 的 {tier} 用户。",
@@ -81,6 +97,8 @@
"siteConfirmCopy": "我已经复制了配置信息",
"searchSitesProgress": "搜索站点...",
"siteAdd": "添加站点",
"sitesTableViewPublicResources": "查看公共资源",
"sitesTableViewPrivateResources": "查看私有资源",
"siteInstallNewt": "安装 Newt",
"siteInstallNewtDescription": "在您的系统中运行 Newt",
"WgConfiguration": "WireGuard 配置",
@@ -98,6 +116,21 @@
"siteUpdatedDescription": "网站已更新。",
"siteGeneralDescription": "配置此站点的常规设置",
"siteSettingDescription": "配置站点设置",
"siteResourcesTab": "资源",
"siteResourcesNoneOnSite": "此站点尚无公开或私人资源。",
"siteResourcesSectionPublic": "公共资源",
"siteResourcesSectionPrivate": "私有资源",
"siteResourcesSectionPublicDescription": "通过域名或端口公开的资源。",
"siteResourcesSectionPrivateDescription": "通过站点可在您的私有网络上访问的资源。",
"siteResourcesViewAllPublic": "查看所有资源",
"siteResourcesViewAllPrivate": "查看所有资源",
"siteResourcesDialogDescription": "此站点的公开和私有资源概览。",
"siteResourcesShowMore": "显示更多",
"siteResourcesPermissionDenied": "您无权列出这些资源。",
"siteResourcesEmptyPublic": "尚无针对该站点的公共资源。",
"siteResourcesEmptyPrivate": "尚无与此站点关联的私有资源。",
"siteResourcesHowToAccess": "如何访问",
"siteResourcesTargetsOnSite": "此站点上的目标",
"siteSetting": "{siteName} 设置",
"siteNewtTunnel": "新站点 (推荐)",
"siteNewtTunnelDescription": "最简单的方式来创建任何网络的入口。没有额外的设置。",
@@ -148,6 +181,11 @@
"createLink": "创建链接",
"resourcesNotFound": "找不到资源",
"resourceSearch": "搜索资源",
"machineSearch": "搜索机",
"machinesSearch": "搜索机器客户端...",
"machineNotFound": "未找到任何机",
"userDeviceSearch": "搜索用户设备",
"userDevicesSearch": "搜索用户设备...",
"openMenu": "打开菜单",
"resource": "资源",
"title": "标题",
@@ -175,6 +213,7 @@
"resourceHTTPDescription": "通过使用完全限定的域名的HTTPS代理请求。",
"resourceRaw": "TCP/UDP 资源",
"resourceRawDescription": "通过使用端口号的原始TCP/UDP代理请求。",
"resourceRawDescriptionCloud": "正在使用端口号使用 TCP/UDP 代理请求。需要站点连接到远程节点。",
"resourceCreate": "创建资源",
"resourceCreateDescription": "按照下面的步骤创建新资源",
"resourceSeeAll": "查看所有资源",
@@ -261,8 +300,11 @@
"orgMissing": "缺少组织 ID",
"orgMissingMessage": "没有组织ID无法重新生成邀请。",
"accessUsersManage": "管理用户",
"accessUserManage": "管理用户",
"accessUsersDescription": "邀请和管理访问此组织的用户",
"accessUsersSearch": "搜索用户...",
"accessUsersRoleFilterCount": "{count, plural, one {# role} other {# roles}}",
"accessUsersRoleFilterClear": "清除角色过滤器",
"accessUserCreate": "创建用户",
"accessUserRemove": "删除用户",
"username": "用户名",
@@ -322,6 +364,54 @@
"apiKeysDelete": "删除 API 密钥",
"apiKeysManage": "管理 API 密钥",
"apiKeysDescription": "API 密钥用于认证集成 API",
"provisioningKeysTitle": "置备密钥",
"provisioningKeysManage": "管理置备键",
"provisioningKeysDescription": "置备密钥用于验证您组织的自动站点配置。",
"provisioningManage": "置备中",
"provisioningDescription": "管理预配键和审查等待批准的站点。",
"pendingSites": "待定站点",
"siteApproveSuccess": "站点批准成功",
"siteApproveError": "批准站点出错",
"provisioningKeys": "置备键",
"searchProvisioningKeys": "搜索配备密钥...",
"provisioningKeysAdd": "生成置备键",
"provisioningKeysErrorDelete": "删除预配键时出错",
"provisioningKeysErrorDeleteMessage": "删除预配键时出错",
"provisioningKeysQuestionRemove": "您确定要从组织中删除此预配键吗?",
"provisioningKeysMessageRemove": "一旦移除,密钥不能再用于站点预配。",
"provisioningKeysDeleteConfirm": "确认删除置备键",
"provisioningKeysDelete": "删除置备键",
"provisioningKeysCreate": "生成置备键",
"provisioningKeysCreateDescription": "为组织生成一个新的预置密钥",
"provisioningKeysSeeAll": "查看所有预配键",
"provisioningKeysSave": "保存预配键",
"provisioningKeysSaveDescription": "您只能看到一次。复制它到一个安全的地方。",
"provisioningKeysErrorCreate": "创建预配键时出错",
"provisioningKeysList": "新建预配键",
"provisioningKeysMaxBatchSize": "最大批量大小",
"provisioningKeysUnlimitedBatchSize": "无限批量大小(无限制)",
"provisioningKeysMaxBatchUnlimited": "无限制",
"provisioningKeysMaxBatchSizeInvalid": "输入一个有效的最大批处理大小(1-1,000,000)。",
"provisioningKeysValidUntil": "有效期至",
"provisioningKeysValidUntilHint": "留空为无过期。",
"provisioningKeysValidUntilInvalid": "输入一个有效的日期和时间。",
"provisioningKeysNumUsed": "使用的时间",
"provisioningKeysLastUsed": "上次使用",
"provisioningKeysNoExpiry": "没有过期",
"provisioningKeysNeverUsed": "永不过期",
"provisioningKeysEdit": "编辑置备键",
"provisioningKeysEditDescription": "更新此密钥的最大批量大小和过期时间。",
"provisioningKeysApproveNewSites": "批准新站点",
"provisioningKeysApproveNewSitesDescription": "自动批准使用此密钥注册的站点。",
"provisioningKeysUpdateError": "更新预配键时出错",
"provisioningKeysUpdated": "置备密钥已更新",
"provisioningKeysUpdatedDescription": "您的更改已保存。",
"provisioningKeysBannerTitle": "站点置备密钥",
"provisioningKeysBannerDescription": "生成一个供应密钥,并将其与 Newt 连接器一起使用,以在首次启动时自动创建站点 - 无需为每个站点设置单独的凭据。",
"provisioningKeysBannerButtonText": "了解更多",
"pendingSitesBannerTitle": "待定站点",
"pendingSitesBannerDescription": "使用供应密钥连接的站点将在此显示以供审核。",
"pendingSitesBannerButtonText": "了解更多",
"apiKeysSettings": "{apiKeyName} 设置",
"userTitle": "管理所有用户",
"userDescription": "查看和管理系统中的所有用户",
@@ -351,6 +441,10 @@
"licenseErrorKeyActivate": "激活许可证密钥失败",
"licenseErrorKeyActivateDescription": "激活许可证密钥时出错。",
"licenseAbout": "关于许可协议",
"licenseBannerTitle": "启用您的企业许可证",
"licenseBannerDescription": "为您自行托管的Pangolin实例解锁企业功能。购买许可证密钥以激活高级功能然后在下方添加。",
"licenseBannerGetLicense": "获取许可证",
"licenseBannerViewDocs": "查看文档",
"communityEdition": "社区版",
"licenseAboutDescription": "这是针对商业环境中使用Pangolin的商业和企业用户。 如果您正在使用 Pangolin 供个人使用,您可以忽略此部分。",
"licenseKeyActivated": "授权密钥已激活",
@@ -508,9 +602,12 @@
"userSaved": "用户已保存",
"userSavedDescription": "用户已更新。",
"autoProvisioned": "自动设置",
"autoProvisionSettings": "自动提供设置",
"autoProvisionedDescription": "允许此用户由身份提供商自动管理",
"accessControlsDescription": "管理此用户在组织中可以访问和做什么",
"accessControlsSubmit": "保存访问控制",
"singleRolePerUserPlanNotice": "您的计划仅支持每个用户一个角色。",
"singleRolePerUserEditionNotice": "此版本仅支持每个用户一个角色。",
"roles": "角色",
"accessUsersRoles": "管理用户和角色",
"accessUsersRolesDescription": "邀请用户加入角色来管理访问组织",
@@ -567,6 +664,8 @@
"targetErrorInvalidPortDescription": "请输入有效的端口号",
"targetErrorNoSite": "没有选择站点",
"targetErrorNoSiteDescription": "请选择目标站点",
"targetTargetsCleared": "目标已清除",
"targetTargetsClearedDescription": "所有目标已从此资源中移除",
"targetCreated": "目标已创建",
"targetCreatedDescription": "目标已成功创建",
"targetErrorCreate": "创建目标失败",
@@ -650,6 +749,7 @@
"resourcesErrorUpdate": "切换资源失败",
"resourcesErrorUpdateDescription": "更新资源时出错",
"access": "访问权限",
"accessControl": "访问控制",
"shareLink": "{resource} 的分享链接",
"resourceSelect": "选择资源",
"shareLinks": "分享链接",
@@ -667,6 +767,7 @@
"newtEndpoint": "Endpoint",
"newtId": "ID",
"newtSecretKey": "密钥",
"newtVersion": "版本",
"architecture": "架构",
"sites": "站点",
"siteWgAnyClients": "使用任何 WireGuard 客户端连接。您必须使用对等IP解决内部资源问题。",
@@ -790,6 +891,7 @@
"accessRoleRemoved": "角色已删除",
"accessRoleRemovedDescription": "角色已成功删除。",
"accessRoleRequiredRemove": "删除此角色之前,请选择一个新角色来转移现有成员。",
"network": "网络",
"manage": "管理",
"sitesNotFound": "未找到站点。",
"pangolinServerAdmin": "服务器管理员 - Pangolin",
@@ -833,6 +935,7 @@
"idpDisplayName": "此身份提供商的显示名称",
"idpAutoProvisionUsers": "自动提供用户",
"idpAutoProvisionUsersDescription": "如果启用,用户将在首次登录时自动在系统中创建,并且能够映射用户到角色和组织。",
"idpAutoProvisionConfigureAfterCreate": "您可以在创建身份提供者后配置自动配置设置。",
"licenseBadge": "EE",
"idpType": "提供者类型",
"idpTypeDescription": "选择您想要配置的身份提供者类型",
@@ -884,7 +987,7 @@
"defaultMappingsRole": "默认角色映射",
"defaultMappingsRoleDescription": "此表达式的结果必须返回组织中定义的角色名称作为字符串。",
"defaultMappingsOrg": "默认组织映射",
"defaultMappingsOrgDescription": "此表达式必须返回 组织IDtrue 才能允许用户访问组织。",
"defaultMappingsOrgDescription": "设置时,此表达式必须返回组织IDtrue才能用户访问组织。如果未设置,定义角色映射就足够了:只要在组织内可以为用户找出有效角色映射,用户就被允许进入。",
"defaultMappingsSubmit": "保存默认映射",
"orgPoliciesEdit": "编辑组织策略",
"org": "组织",
@@ -1037,7 +1140,6 @@
"pageNotFoundDescription": "哎呀!您正在查找的页面不存在。",
"overview": "概览",
"home": "首页",
"accessControl": "访问控制",
"settings": "设置",
"usersAll": "所有用户",
"license": "许可协议",
@@ -1100,6 +1202,12 @@
"actionGetUser": "获取用户",
"actionGetOrgUser": "获取组织用户",
"actionListOrgDomains": "列出组织域",
"actionGetDomain": "获取域",
"actionCreateOrgDomain": "创建域",
"actionUpdateOrgDomain": "更新域",
"actionDeleteOrgDomain": "删除域",
"actionGetDNSRecords": "获取 DNS 记录",
"actionRestartOrgDomain": "重新启动域",
"actionCreateSite": "创建站点",
"actionDeleteSite": "删除站点",
"actionGetSite": "获取站点",
@@ -1111,6 +1219,7 @@
"setupTokenDescription": "从服务器控制台输入设置令牌。",
"setupTokenRequired": "需要设置令牌",
"actionUpdateSite": "更新站点",
"actionResetSiteBandwidth": "重置组织带宽",
"actionListSiteRoles": "允许站点角色列表",
"actionCreateResource": "创建资源",
"actionDeleteResource": "删除资源",
@@ -1140,6 +1249,7 @@
"actionRemoveUser": "删除用户",
"actionListUsers": "列出用户",
"actionAddUserRole": "添加用户角色",
"actionSetUserOrgRoles": "设置用户角色",
"actionGenerateAccessToken": "生成访问令牌",
"actionDeleteAccessToken": "删除访问令牌",
"actionListAccessTokens": "访问令牌",
@@ -1184,6 +1294,7 @@
"actionViewLogs": "查看日志",
"noneSelected": "未选择",
"orgNotFound2": "未找到组织。",
"search": "搜索…",
"searchPlaceholder": "搜索...",
"emptySearchOptions": "未找到选项",
"create": "创建",
@@ -1249,12 +1360,14 @@
"sidebarClientResources": "非公开的",
"sidebarAccessControl": "访问控制",
"sidebarLogsAndAnalytics": "日志与分析",
"sidebarTeam": "团队",
"sidebarUsers": "用户",
"sidebarAdmin": "管理员",
"sidebarInvitations": "邀请",
"sidebarRoles": "角色",
"sidebarShareableLinks": "链接",
"sidebarApiKeys": "API密钥",
"sidebarProvisioning": "置备中",
"sidebarSettings": "设置",
"sidebarAllUsers": "所有用户",
"sidebarIdentityProviders": "身份提供商",
@@ -1266,9 +1379,167 @@
"sidebarGeneral": "管理",
"sidebarLogAndAnalytics": "日志与分析",
"sidebarBluePrints": "蓝图",
"sidebarAlerting": "告警",
"sidebarHealthChecks": "健康检查",
"sidebarOrganization": "组织",
"sidebarManagement": "管理",
"sidebarBillingAndLicenses": "帐单和许可证",
"sidebarLogsAnalytics": "分析",
"alertingTitle": "告警",
"alertingDescription": "定义通知的来源、触发器和操作",
"alertingRules": "告警规则",
"alertingSearchRules": "搜索规则…",
"alertingAddRule": "创建规则",
"alertingColumnSource": "来源",
"alertingColumnTrigger": "触发",
"alertingColumnActions": "操作",
"alertingColumnEnabled": "已启用",
"alertingDeleteQuestion": "请确认您要删除此告警规则。",
"alertingDeleteRule": "删除告警规则",
"alertingRuleDeleted": "告警规则已删除",
"alertingRuleSaved": "告警规则已保存",
"alertingRuleSavedCreatedDescription": "您的新告警规则已创建。您可以在此页面继续编辑它。",
"alertingRuleSavedUpdatedDescription": "对此告警规则的更改已保存。",
"alertingEditRule": "编辑告警规则",
"alertingCreateRule": "创建告警规则",
"alertingRuleCredenzaDescription": "选择要监视的内容、何时触发以及如何通知",
"alertingRuleNamePlaceholder": "生产站点故障",
"alertingRuleEnabled": "规则已启用",
"alertingSectionSource": "来源",
"alertingSourceType": "来源类型",
"alertingSourceSite": "站点",
"alertingSourceHealthCheck": "健康检查",
"alertingPickSites": "站点",
"alertingPickHealthChecks": "健康检查",
"alertingPickResources": "资源",
"alertingAllSites": "所有站点",
"alertingAllSitesDescription": "任何站点的告警触发",
"alertingSpecificSites": "特定站点",
"alertingSpecificSitesDescription": "选择要监视的特定站点",
"alertingAllHealthChecks": "所有健康检查",
"alertingAllHealthChecksDescription": "任何健康检查的告警触发",
"alertingSpecificHealthChecks": "特定健康检查",
"alertingSpecificHealthChecksDescription": "选择要监视的特定健康检查",
"alertingAllResources": "所有资源",
"alertingAllResourcesDescription": "任何资源的告警触发",
"alertingSpecificResources": "特定资源",
"alertingSpecificResourcesDescription": "选择要监视的特定资源",
"alertingSelectResources": "选择资源…",
"alertingResourcesSelected": "{count} 个资源已选择",
"alertingResourcesEmpty": "在前 10 个结果中没有带目标的资源。",
"alertingSectionTrigger": "触发",
"alertingTrigger": "何时告警",
"alertingTriggerSiteOnline": "站点在线",
"alertingTriggerSiteOffline": "站点离线",
"alertingTriggerSiteToggle": "站点状态变更",
"alertingTriggerHcHealthy": "健康检查正常",
"alertingTriggerHcUnhealthy": "健康检查不正常",
"alertingTriggerHcToggle": "健康检查状态变更",
"alertingTriggerResourceHealthy": "资源正常",
"alertingTriggerResourceUnhealthy": "资源不正常",
"alertingTriggerResourceDegraded": "资源降级",
"alertingSearchHealthChecks": "搜索健康检查…",
"alertingHealthChecksEmpty": "无可用健康检查。",
"alertingTriggerResourceToggle": "资源状态变更",
"alertingSourceResource": "资源",
"alertingSectionActions": "操作",
"alertingAddAction": "新增操作",
"alertingActionNotify": "电子邮件",
"alertingActionNotifyDescription": "向用户或角色发送电子邮件通知",
"alertingActionWebhook": "Webhook",
"alertingActionWebhookDescription": "发送 HTTP 请求到自定义终端",
"alertingExternalIntegration": "外部集成",
"alertingExternalPagerDutyDescription": "将告警发送给 PagerDuty 以进行事件管理",
"alertingExternalOpsgenieDescription": "将告警路由到 Opsgenie 进行电话值班管理",
"alertingExternalServiceNowDescription": "从告警事件创建 ServiceNow 事件",
"alertingExternalIncidentIoDescription": "从告警事件触发 Incident.io 工作流程",
"alertingActionType": "操作类型",
"alertingNotifyUsers": "用户",
"alertingNotifyRoles": "角色",
"alertingNotifyEmails": "电子邮件地址",
"alertingEmailPlaceholder": "添加电子邮件并按回车键",
"alertingWebhookMethod": "HTTP 方法",
"alertingWebhookSecret": "签名密钥(可选)",
"alertingWebhookSecretPlaceholder": "HMAC 密钥",
"alertingWebhookHeaders": "标头",
"alertingAddHeader": "添加标头",
"alertingSelectSites": "选择站点…",
"alertingSitesSelected": "{count} 个站点已选择",
"alertingSelectHealthChecks": "选择健康检查…",
"alertingHealthChecksSelected": "{count} 个健康检查已选择",
"alertingNoHealthChecks": "没有启用健康检查的目标",
"alertingHealthCheckStub": "健康检查来源选择尚未配置 - 你仍然可以配置触发器和操作。",
"alertingSelectUsers": "选择用户…",
"alertingUsersSelected": "{count} 个用户已选择",
"alertingSelectRoles": "选择角色…",
"alertingRolesSelected": "{count} 个角色已选择",
"alertingSummarySites": "站点 ({count})",
"alertingSummaryAllSites": "所有站点",
"alertingSummaryHealthChecks": "健康检查 ({count})",
"alertingSummaryAllHealthChecks": "所有健康检查",
"alertingSummaryResources": "资源 ({count})",
"alertingSummaryAllResources": "所有资源",
"alertingErrorNameRequired": "输入名称",
"alertingErrorActionsMin": "添加至少一个操作",
"alertingErrorPickSites": "至少选择一个站点",
"alertingErrorPickHealthChecks": "至少选择一个健康检查",
"alertingErrorPickResources": "至少选择一个资源",
"alertingErrorTriggerSite": "选择站点触发器",
"alertingErrorTriggerHealth": "选择健康检查触发器",
"alertingErrorTriggerResource": "选择资源触发器",
"alertingErrorNotifyRecipients": "选择用户、角色或至少一个电子邮件",
"alertingConfigureSource": "配置来源",
"alertingConfigureTrigger": "配置触发器",
"alertingConfigureActions": "配置操作",
"alertingBackToRules": "返回规则",
"alertingRuleCooldown": "冷却时间(秒)",
"alertingRuleCooldownDescription": "相同规则间隔重复告警的最小时间。设置为 0 固定触发。",
"alertingDraftBadge": "草稿 - 保存以存储此规则",
"alertingSidebarHint": "点击画布上的步骤在此处编辑。",
"alertingGraphCanvasTitle": "规则流程",
"alertingGraphCanvasDescription": "源、触发器和操作的视觉概况。选择一个节点,在面板上进行编辑。",
"alertingNodeNotConfigured": "尚未配置",
"alertingNodeActionsCount": "{count, plural, one {# action} other {# actions}}",
"alertingNodeRoleSource": "来源",
"alertingNodeRoleTrigger": "触发",
"alertingNodeRoleAction": "行为",
"alertingTabRules": "告警规则",
"alertingTabHealthChecks": "健康检查",
"alertingRulesBannerTitle": "获取通知",
"alertingRulesBannerDescription": "每条规则都连接要监视的对象站点、健康检查或资源触发时间例如离线或不健康以及如何通过电子邮件、Webhooks 或集成将通知发送给团队。使用此列表创建、启用和管理这些规则。",
"alertingHealthChecksBannerTitle": "监视健康和资源",
"alertingHealthChecksBannerDescription": "健康检查是您一次定义的 HTTP 或 TCP 监控。然后可以将它们用作告警规则中的来源,以便目标变得正常或不正常时得到通知。资源上的健康检查也会出现在此处。",
"standaloneHcTableTitle": "健康检查",
"standaloneHcSearchPlaceholder": "搜索健康检查…",
"standaloneHcAddButton": "创建健康检查",
"standaloneHcCreateTitle": "创建健康检查",
"standaloneHcEditTitle": "编辑健康检查",
"standaloneHcDescription": "配置 HTTP 或 TCP 健康检查以用于告警规则。",
"standaloneHcNameLabel": "名称",
"standaloneHcNamePlaceholder": "我的 HTTP 监视器",
"standaloneHcDeleteTitle": "删除健康检查",
"standaloneHcDeleteQuestion": "请确认您要删除此健康检查。",
"standaloneHcDeleted": "健康检查已删除",
"standaloneHcSaved": "健康检查已保存",
"standaloneHcColumnHealth": "健康",
"standaloneHcColumnMode": "模式",
"standaloneHcColumnTarget": "目标",
"standaloneHcHealthStateHealthy": "健康",
"standaloneHcHealthStateUnhealthy": "不健康",
"standaloneHcHealthStateUnknown": "未知",
"standaloneHcFilterAnySite": "所有站点",
"standaloneHcFilterAnyResource": "所有资源",
"standaloneHcFilterMode": "模式",
"standaloneHcFilterModeHttp": "HTTP",
"standaloneHcFilterModeTcp": "TCP",
"standaloneHcFilterModeSnmp": "SNMP",
"standaloneHcFilterModePing": "Ping",
"standaloneHcFilterHealth": "健康",
"standaloneHcFilterEnabled": "已启用",
"standaloneHcFilterEnabledOn": "已启用",
"standaloneHcFilterEnabledOff": "已禁用",
"standaloneHcFilterSiteIdFallback": "站点 {id}",
"standaloneHcFilterResourceIdFallback": "资源 {id}",
"blueprints": "蓝图",
"blueprintsDescription": "应用声明配置并查看先前运行的",
"blueprintAdd": "添加蓝图",
@@ -1289,7 +1560,6 @@
"parsedContents": "解析内容 (只读)",
"enableDockerSocket": "启用 Docker 蓝图",
"enableDockerSocketDescription": "启用 Docker Socket 标签擦除蓝图标签。套接字路径必须提供给新的。",
"enableDockerSocketLink": "了解更多",
"viewDockerContainers": "查看停靠容器",
"containersIn": "{siteName} 中的容器",
"selectContainerDescription": "选择任何容器作为目标的主机名。点击端口使用端口。",
@@ -1331,7 +1601,8 @@
"initialSetupDescription": "创建初始服务器管理员帐户。 只能存在一个服务器管理员。 您可以随时更改这些凭据。",
"createAdminAccount": "创建管理员帐户",
"setupErrorCreateAdmin": "创建服务器管理员账户时发生错误。",
"certificateStatus": "证书状态",
"certificateStatus": "证书",
"certificateStatusAutoRefreshHint": "状态自动刷新。",
"loading": "加载中",
"loadingAnalytics": "加载分析",
"restart": "重启",
@@ -1400,6 +1671,7 @@
"pangolinUpdateAvailableReleaseNotes": "查看发布说明",
"newtUpdateAvailable": "更新可用",
"newtUpdateAvailableInfo": "新版本的 Newt 已可用。请更新到最新版本以获得最佳体验。",
"pangolinNodeUpdateAvailableInfo": "新版本的 Pangolin Node 已可用。请更新到最新版本以获得最佳体验。",
"domainPickerEnterDomain": "域名",
"domainPickerPlaceholder": "example.com",
"domainPickerDescription": "输入资源的完整域名以查看可用选项。",
@@ -1417,6 +1689,7 @@
"domainPickerNamespace": "命名空间:{namespace}",
"domainPickerShowMore": "显示更多",
"regionSelectorTitle": "选择区域",
"domainPickerRemoteExitNodeWarning": "当站点连接到远程退出节点时不支持所提供的域。为了资源可在远程节点上使用,请使用自定义域名。",
"regionSelectorInfo": "选择区域以帮助提升您所在地的性能。您不必与服务器在相同的区域。",
"regionSelectorPlaceholder": "选择一个区域",
"regionSelectorComingSoon": "即将推出",
@@ -1570,6 +1843,16 @@
"billingFeatureLossWarning": "功能可用通知",
"billingFeatureLossDescription": "如果降级,新计划中不可用的功能将被自动禁用。一些设置和配置可能会丢失。 请查看定价矩阵以了解哪些功能将不再可用。",
"billingUsageExceedsLimit": "当前使用量 ({current}) 超出限制 ({limit})",
"billingPastDueTitle": "过去到期的付款",
"billingPastDueDescription": "您的付款已过期。请更新您的付款方法以继续使用您当前的计划功能。 如果不解决,您的订阅将被取消,您将被恢复到免费等级。",
"billingUnpaidTitle": "订阅未付款",
"billingUnpaidDescription": "您的订阅未付,您已恢复到免费等级。请更新您的付款方法以恢复您的订阅。",
"billingIncompleteTitle": "付款不完成",
"billingIncompleteDescription": "您的付款不完整。请完成付款过程以激活您的订阅。",
"billingIncompleteExpiredTitle": "付款已过期",
"billingIncompleteExpiredDescription": "您的付款尚未完成且已过期。您已恢复到免费级别。请再次订阅以恢复对已支付功能的访问。",
"billingManageSubscription": "管理您的订阅",
"billingResolvePaymentIssue": "请在升级或降级之前解决您的付款问题",
"signUpTerms": {
"IAgreeToThe": "我同意",
"termsOfService": "服务条款",
@@ -1628,6 +1911,7 @@
"configureHealthCheck": "配置健康检查",
"configureHealthCheckDescription": "为 {target} 设置健康监控",
"enableHealthChecks": "启用健康检查",
"healthCheckDisabledStateDescription": "禁用后,站点不会进行健康检查,状态将被视为未知。",
"enableHealthChecksDescription": "监视此目标的健康状况。如果需要,您可以监视一个不同的终点。",
"healthScheme": "方法",
"healthSelectScheme": "选择方法",
@@ -1643,6 +1927,24 @@
"timeIsInSeconds": "时间以秒为单位",
"requireDeviceApproval": "需要设备批准",
"requireDeviceApprovalDescription": "具有此角色的用户需要管理员批准的新设备才能连接和访问资源。",
"sshAccess": "SSH 访问",
"roleAllowSsh": "允许 SSH",
"roleAllowSshAllow": "允许",
"roleAllowSshDisallow": "不允许",
"roleAllowSshDescription": "允许具有此角色的用户通过 SSH 连接到资源。禁用时,角色不能使用 SSH 访问。",
"sshSudoMode": "Sudo 访问",
"sshSudoModeNone": "无",
"sshSudoModeNoneDescription": "用户不能用sudo运行命令。",
"sshSudoModeFull": "全苏多",
"sshSudoModeFullDescription": "用户可以用 sudo 运行任何命令。",
"sshSudoModeCommands": "命令",
"sshSudoModeCommandsDescription": "用户只能用 sudo 运行指定的命令。",
"sshSudo": "允许Sudo",
"sshSudoCommands": "Sudo 命令",
"sshSudoCommandsDescription": "逗号分隔的用户允许使用 sudo 运行的命令列表。",
"sshCreateHomeDir": "创建主目录",
"sshUnixGroups": "Unix 组",
"sshUnixGroupsDescription": "用逗号分隔了Unix组将用户添加到目标主机上。",
"retryAttempts": "重试次数",
"expectedResponseCodes": "期望响应代码",
"expectedResponseCodesDescription": "HTTP 状态码表示健康状态。如留空200-300 被视为健康。",
@@ -1659,9 +1961,20 @@
"healthCheckIntervalMin": "检查间隔必须至少为 5 秒",
"healthCheckTimeoutMin": "超时必须至少为 1 秒",
"healthCheckRetryMin": "重试次数必须至少为 1 次",
"healthCheckMode": "检查模式",
"healthCheckStrategy": "策略",
"healthCheckModeDescription": "TCP 模式仅验证连接性。HTTP 模式验证 HTTP 响应。",
"healthyThreshold": "正常阈值",
"healthyThresholdDescription": "标记为正常之前所需的连续成功次数。",
"unhealthyThreshold": "不正常阈值",
"unhealthyThresholdDescription": "标记为不正常之前所需的连续失败次数。",
"healthCheckHealthyThresholdMin": "健康阈值至少为 1",
"healthCheckUnhealthyThresholdMin": "不健康阈值至少为 1",
"httpMethod": "HTTP 方法",
"selectHttpMethod": "选择 HTTP 方法",
"domainPickerSubdomainLabel": "子域名",
"domainPickerWildcard": "通配符",
"domainPickerWildcardPaidOnly": "通配符子域是付费功能。请升级以使用此功能。",
"domainPickerBaseDomainLabel": "根域名",
"domainPickerSearchDomains": "搜索域名...",
"domainPickerNoDomainsFound": "未找到域名",
@@ -1687,12 +2000,12 @@
"resourcesTableAliasAddressInfo": "此地址是组织实用子网的一部分。它用来使用内部DNS解析来解析别名记录。",
"resourcesTableClients": "客户端",
"resourcesTableAndOnlyAccessibleInternally": "且仅在与客户端连接时可内部访问。",
"resourcesTableNoTargets": "没有目标",
"resourcesTableHealthy": "健康的",
"resourcesTableDegraded": "降级",
"resourcesTableOffline": "离线的",
"resourcesTableUnhealthy": "不健康",
"resourcesTableUnknown": "未知的",
"resourcesTableNotMonitored": "未监视的",
"resourcesTableNoTargets": "无目标",
"editInternalResourceDialogEditClientResource": "编辑私有资源",
"editInternalResourceDialogUpdateResourceProperties": "更新{resourceName}的资源配置和访问控制。",
"editInternalResourceDialogResourceProperties": "资源属性",
@@ -1718,6 +2031,11 @@
"editInternalResourceDialogModePort": "端口",
"editInternalResourceDialogModeHost": "主机",
"editInternalResourceDialogModeCidr": "CIDR",
"editInternalResourceDialogModeHttp": "HTTP",
"editInternalResourceDialogModeHttps": "HTTPS",
"editInternalResourceDialogScheme": "方案",
"editInternalResourceDialogEnableSsl": "启用 SSL",
"editInternalResourceDialogEnableSslDescription": "为目标的安全 HTTPS 连接启用 SSL/TLS 加密。",
"editInternalResourceDialogDestination": "目标",
"editInternalResourceDialogDestinationHostDescription": "站点网络上资源的 IP 地址或主机名。",
"editInternalResourceDialogDestinationIPDescription": "站点网络上资源的IP或主机名地址。",
@@ -1733,6 +2051,7 @@
"createInternalResourceDialogName": "名称",
"createInternalResourceDialogSite": "站点",
"selectSite": "选择站点...",
"multiSitesSelectorSitesCount": "{count, plural, one {# site} other {# sites}}",
"noSitesFound": "未找到站点。",
"createInternalResourceDialogProtocol": "协议",
"createInternalResourceDialogTcp": "TCP",
@@ -1761,11 +2080,19 @@
"createInternalResourceDialogModePort": "端口",
"createInternalResourceDialogModeHost": "主机",
"createInternalResourceDialogModeCidr": "CIDR",
"createInternalResourceDialogModeHttp": "HTTP",
"createInternalResourceDialogModeHttps": "HTTPS",
"scheme": "方案",
"createInternalResourceDialogScheme": "方案",
"createInternalResourceDialogEnableSsl": "启用 SSL",
"createInternalResourceDialogEnableSslDescription": "为目标的安全 HTTPS 连接启用 SSL/TLS 加密。",
"createInternalResourceDialogDestination": "目标",
"createInternalResourceDialogDestinationHostDescription": "站点网络上资源的 IP 地址或主机名。",
"createInternalResourceDialogDestinationCidrDescription": "站点网络上资源的 CIDR 范围。",
"createInternalResourceDialogAlias": "Alias",
"createInternalResourceDialogAliasDescription": "此资源可选的内部DNS别名。",
"internalResourceDownstreamSchemeRequired": "HTTP 资源需要方案",
"internalResourceHttpPortRequired": "HTTP 资源需要目的端口",
"siteConfiguration": "配置",
"siteAcceptClientConnections": "接受客户端连接",
"siteAcceptClientConnectionsDescription": "允许用户设备和客户端访问此站点上的资源。这可以稍后更改。",
@@ -1851,12 +2178,46 @@
"exitNode": "出口节点",
"country": "国家",
"rulesMatchCountry": "当前基于源 IP",
"region": "地区",
"selectRegion": "选择区域",
"searchRegions": "搜索区域...",
"noRegionFound": "未找到区域。",
"rulesMatchRegion": "选择一个区域国家组",
"rulesErrorInvalidRegion": "无效区域",
"rulesErrorInvalidRegionDescription": "请选择一个有效的区域。",
"regionAfrica": "非洲",
"regionNorthernAfrica": "B. 北非地区",
"regionEasternAfrica": "东部非洲",
"regionMiddleAfrica": "中东",
"regionSouthernAfrica": "D. 南 非",
"regionWesternAfrica": "D. 西部非洲",
"regionAmericas": "Americas",
"regionCaribbean": "加勒比",
"regionCentralAmerica": "中美洲:",
"regionSouthAmerica": "南 非",
"regionNorthernAmerica": "北美洲:",
"regionAsia": "亚洲",
"regionCentralAsia": "B. 亚 洲",
"regionEasternAsia": "东亚",
"regionSouthEasternAsia": "D. 东南亚区域",
"regionSouthernAsia": "D. 亚 洲",
"regionWesternAsia": "西亚",
"regionEurope": "欧洲",
"regionEasternEurope": "D. 欧 洲",
"regionNorthernEurope": "北欧洲",
"regionSouthernEurope": "南欧洲",
"regionWesternEurope": "西欧洲",
"regionOceania": "Oceania",
"regionAustraliaAndNewZealand": "澳大利亚和新西兰",
"regionMelanesia": "Melanesia",
"regionMicronesia": "Micronesia",
"regionPolynesia": "Polynesia",
"managedSelfHosted": {
"title": "托管自托管",
"description": "更可靠和低维护自我托管的 Pangolin 服务器,带有额外的铃声和告密器",
"introTitle": "托管自托管的潘戈林公司",
"introDescription": "这是一种部署选择,为那些希望简洁和额外可靠的人设计,同时仍然保持他们的数据的私密性和自我托管性。",
"introDetail": "通过此选项,您仍然运行您自己的 Pangolin 节点 — — 您的隧道、SSL 终止,并且流量在您的服务器上保持所有状态。 不同之处在于,管理和监测是通过我们的云层仪表板进行的,该仪表板开启了一些好处:",
"introDetail": "通过此选项,您仍然运行您自己的 Pangolin 节点 - - 您的隧道、SSL 终止,并且流量在您的服务器上保持所有状态。 不同之处在于,管理和监测是通过我们的云层仪表板进行的,该仪表板开启了一些好处:",
"benefitSimplerOperations": {
"title": "简单的操作",
"description": "无需运行您自己的邮件服务器或设置复杂的警报。您将从方框中获得健康检查和下限提醒。"
@@ -1889,7 +2250,7 @@
},
"internationaldomaindetected": "检测到国际域",
"willbestoredas": "储存为:",
"roleMappingDescription": "确定当用户启用自动配送时如何分配他们的角色。",
"roleMappingDescription": "确定当用户使用此身份提供者登陆时如何分配角色。",
"selectRole": "选择角色",
"roleMappingExpression": "表达式",
"selectRolePlaceholder": "选择角色",
@@ -1899,6 +2260,25 @@
"invalidValue": "无效的值",
"idpTypeLabel": "身份提供者类型",
"roleMappingExpressionPlaceholder": "例如: contains(group, 'admin' &'Admin' || 'Member'",
"roleMappingModeFixedRoles": "固定角色",
"roleMappingModeMappingBuilder": "映射构建器",
"roleMappingModeRawExpression": "原始表达式",
"roleMappingFixedRolesPlaceholderSelect": "选择一个或多个角色",
"roleMappingFixedRolesPlaceholderFreeform": "输入角色名称 (每个组织确切匹配)",
"roleMappingFixedRolesDescriptionSameForAll": "将相同的角色分配给每个自动配备的用户。",
"roleMappingFixedRolesDescriptionDefaultPolicy": "对于缺省策略,每个提供用户的组织中存在的角色名称类型。名称必须完全匹配。",
"roleMappingClaimPath": "认领路径",
"roleMappingClaimPathPlaceholder": "组",
"roleMappingClaimPathDescription": "包含源值的 token 有效负载路径 (例如组)。",
"roleMappingMatchValue": "匹配值",
"roleMappingAssignRoles": "分配角色",
"roleMappingAddMappingRule": "添加映射规则",
"roleMappingRawExpressionResultDescription": "表达式必须值为字符串或字符串。",
"roleMappingRawExpressionResultDescriptionSingleRole": "表达式必须计算到字符串(单个角色名称)。",
"roleMappingMatchValuePlaceholder": "匹配值(例如: 管理员)",
"roleMappingAssignRolesPlaceholderFreeform": "输入角色名称 (每个组织确切)",
"roleMappingBuilderFreeformRowHint": "角色名称必须匹配每个目标组织的角色。",
"roleMappingRemoveRule": "删除",
"idpGoogleConfiguration": "Google 配置",
"idpGoogleConfigurationDescription": "配置 Google OAuth2 凭据",
"idpGoogleClientIdDescription": "Google OAuth2 Client ID",
@@ -1962,9 +2342,11 @@
"selectDomainForOrgAuthPage": "选择组织认证页面的域",
"domainPickerProvidedDomain": "提供的域",
"domainPickerFreeProvidedDomain": "免费提供的域",
"domainPickerFreeDomainsPaidFeature": "提供的域名是付费功能。订阅即可将域名包含在您的计划中-无需自带域名。",
"domainPickerVerified": "已验证",
"domainPickerUnverified": "未验证",
"domainPickerInvalidSubdomainStructure": "此子域包含无效的字符或结构。当您保存时,它将被自动清除。",
"domainPickerManual": "手动",
"domainPickerInvalidSubdomainStructure": "保存时将清除无效字符。",
"domainPickerError": "错误",
"domainPickerErrorLoadDomains": "加载组织域名失败",
"domainPickerErrorCheckAvailability": "检查域可用性失败",
@@ -1977,7 +2359,7 @@
"orgAuthChooseIdpDescription": "选择您的身份提供商以继续",
"orgAuthNoIdpConfigured": "此机构没有配置任何身份提供者。您可以使用您的 Pangolin 身份登录。",
"orgAuthSignInWithPangolin": "使用 Pangolin 登录",
"orgAuthSignInToOrg": "登录到组织",
"orgAuthSignInToOrg": "组织身份提供商 (SSO)",
"orgAuthSelectOrgTitle": "组织登录",
"orgAuthSelectOrgDescription": "输入您的组织ID以继续",
"orgAuthOrgIdPlaceholder": "您的组织",
@@ -2138,7 +2520,7 @@
"alerts": {
"commercialUseDisclosure": {
"title": "使用情况披露",
"description": "选择能准确反映您预定用途的许可等级。 个人许可证允许对个人、非商业性或小型商业活动免费使用软件年收入毛额不到100 000美元。 超出这些限度的任何用途,包括在企业、组织内的用途。 或其他创收环境——需要有效的企业许可证和支付适用的许可证费用。 所有用户,不论是个人还是企业,都必须遵守寄养商业许可证条款。"
"description": "选择能准确反映您预定用途的许可等级。 个人许可证允许对个人、非商业性或小型商业活动免费使用软件年收入毛额不到100 000美元。 超出这些限度的任何用途,包括在企业、组织内的用途。 或其他创收环境--需要有效的企业许可证和支付适用的许可证费用。 所有用户,不论是个人还是企业,都必须遵守寄养商业许可证条款。"
},
"trialPeriodInformation": {
"title": "试用期信息",
@@ -2193,10 +2575,10 @@
},
"scale": {
"title": "缩放比例",
"description": "企业特征、50个用户、50个站点优先支持。"
"description": "企业功能,50个用户100个站点,以及优先支持。"
}
},
"personalUseOnly": "仅个人使用 (免费许可证-无签出)",
"personalUseOnly": "仅个人使用免费许可 - 无需结账)",
"buttons": {
"continueToCheckout": "继续签出"
},
@@ -2270,6 +2652,7 @@
"validPassword": "有效密码",
"validEmail": "Valid email",
"validSSO": "Valid SSO",
"connectedClient": "已连接客户端",
"resourceBlocked": "资源被阻止",
"droppedByRule": "被规则删除",
"noSessions": "无会话",
@@ -2289,12 +2672,14 @@
"logRetentionDescription": "管理不同类型的日志为这个机构保留多长时间或禁用这些日志",
"requestLogsDescription": "查看此机构资源的详细请求日志",
"requestAnalyticsDescription": "查看此机构资源的详细请求分析",
"logRetentionRequestLabel": "请求日志保留",
"logRetentionRequestLabel": "HTTP 请求日志保留",
"logRetentionRequestDescription": "保留请求日志的时间",
"logRetentionAccessLabel": "访问日志保留",
"logRetentionAccessDescription": "保留访问日志的时间",
"logRetentionActionLabel": "动作日志保留",
"logRetentionActionDescription": "保留操作日志的时间",
"logRetentionConnectionLabel": "连接日志保留",
"logRetentionConnectionDescription": "保留连接日志的时间",
"logRetentionDisabled": "已禁用",
"logRetention3Days": "3 天",
"logRetention7Days": "7 天",
@@ -2305,8 +2690,15 @@
"logRetentionEndOfFollowingYear": "下一年结束",
"actionLogsDescription": "查看此机构执行的操作历史",
"accessLogsDescription": "查看此机构资源的访问认证请求",
"licenseRequiredToUse": "需要 <enterpriseLicenseLink>Enterprise Edition</enterpriseLicenseLink> 许可才能使用此功能。此功能也可在 <pangolinCloudLink>Pangolin Cloud</pangolinCloudLink> 中使用。",
"ossEnterpriseEditionRequired": "<enterpriseEditionLink>Enterprise Edition</enterpriseEditionLink> 需要使用此功能。此功能也可在 <pangolinCloudLink>Pangolin Cloud</pangolinCloudLink> 中使用。",
"connectionLogs": "连接日志",
"connectionLogsDescription": "查看此机构隧道的连接日志",
"sidebarLogsConnection": "连接日志",
"sidebarLogsStreaming": "流流",
"sourceAddress": "源地址",
"destinationAddress": "目的地址",
"duration": "期限",
"licenseRequiredToUse": "使用此功能需要<enterpriseLicenseLink>企业版</enterpriseLicenseLink>许可证或<pangolinCloudLink>Pangolin Cloud</pangolinCloudLink>。<bookADemoLink>预约演示或POC试用</bookADemoLink>。",
"ossEnterpriseEditionRequired": "需要 <enterpriseEditionLink>Enterprise Edition</enterpriseEditionLink> 才能使用此功能。 此功能也可在 <pangolinCloudLink>Pangolin Cloud</pangolinCloudLink>上获取。 <bookADemoLink>预订演示或POC 试用</bookADemoLink>。",
"certResolver": "证书解决器",
"certResolverDescription": "选择用于此资源的证书解析器。",
"selectCertResolver": "选择证书解析",
@@ -2448,6 +2840,9 @@
"machineClients": "机器客户端",
"install": "安装",
"run": "运行",
"envFile": "环境文件",
"serviceFile": "服务文件",
"enableAndStart": "启用并启动",
"clientNameDescription": "可以稍后更改的客户端的显示名称。",
"clientAddress": "客户端地址 (高级)",
"setupFailedToFetchSubnet": "获取默认子网失败",
@@ -2496,13 +2891,30 @@
"editInternalResourceDialogAddClients": "添加客户端",
"editInternalResourceDialogDestinationLabel": "目标",
"editInternalResourceDialogDestinationDescription": "指定内部资源的目标地址。根据选择的模式这可以是主机名、IP地址或CIDR范围。可选的设置一个内部DNS别名以便于识别。",
"internalResourceFormMultiSiteRoutingHelp": "选择多个站点可以实现高可用性的弹性路由和故障转移。",
"internalResourceFormMultiSiteRoutingHelpLearnMore": "了解更多",
"editInternalResourceDialogPortRestrictionsDescription": "限制访问特定的TCP/UDP端口或允许/阻止所有端口。",
"createInternalResourceDialogHttpConfiguration": "HTTP 配置",
"createInternalResourceDialogHttpConfigurationDescription": "选择客户将使用的域名通过 HTTP 或 HTTPS 访问此资源。",
"editInternalResourceDialogHttpConfiguration": "HTTP 配置",
"editInternalResourceDialogHttpConfigurationDescription": "选择客户将使用的域名通过 HTTP 或 HTTPS 访问此资源。",
"editInternalResourceDialogTcp": "TCP",
"editInternalResourceDialogUdp": "UDP",
"editInternalResourceDialogIcmp": "ICMP",
"editInternalResourceDialogAccessControl": "访问控制",
"editInternalResourceDialogAccessControlDescription": "控制当连接到此资源时,哪些角色、用户和机器客户端可以访问。管理员始终具有访问权。",
"editInternalResourceDialogPortRangeValidationError": "端口范围必须为\"*\"表示所有端口,或一个用逗号分隔的端口和范围列表(例如:\"80,443,8000-9000\"。端口必须在1到65535之间。",
"internalResourceAuthDaemonStrategy": "SSH 认证守护进程位置",
"internalResourceAuthDaemonStrategyDescription": "选择 SSH 身份验证守护进程在哪里运行:站点(新建) 或远程主机。",
"internalResourceAuthDaemonDescription": "SSH 身份验证守护程序处理此资源的 SSH 密钥签名和PAM 身份验证。 选择它是在站点(新建)还是在单独的远程主机上运行。请参阅 <docsLink>文档</docsLink>。",
"internalResourceAuthDaemonDocsUrl": "https://docs.pangolin.net",
"internalResourceAuthDaemonStrategyPlaceholder": "选择策略",
"internalResourceAuthDaemonStrategyLabel": "地点",
"internalResourceAuthDaemonSite": "在站点",
"internalResourceAuthDaemonSiteDescription": "认证守护进程在站点上运行(新建)。",
"internalResourceAuthDaemonRemote": "远程主机",
"internalResourceAuthDaemonRemoteDescription": "认证守护进程运行在不是站点的主机上。",
"internalResourceAuthDaemonPort": "守护进程端口(可选)",
"orgAuthWhatsThis": "我的组织ID在哪里可以找到",
"learnMore": "了解更多",
"backToHome": "返回首页",
@@ -2524,6 +2936,9 @@
"maintenancePageMessagePlaceholder": "我们很快回来! 我们的网站目前正在进行计划中的维护。",
"maintenancePageMessageDescription": "详细说明维护的消息",
"maintenancePageTimeTitle": "预计完成时间(可选)",
"privateMaintenanceScreenTitle": "私有占位符界面",
"privateMaintenanceScreenMessage": "此域名正在私有资源上使用。请连接 Pangolin 客户端以访问此资源。",
"privateMaintenanceScreenSteps": "连接后如果您仍然看到此消息说明您的浏览器的DNS缓存可能仍指向旧地址。解决方法完全关闭并重新打开此标签页或浏览器然后返回此页面。",
"maintenanceTime": "例如2小时11月1日下午5:00",
"maintenanceEstimatedTimeDescription": "您期望维护完成的时间",
"editDomain": "编辑域名",
@@ -2632,5 +3047,209 @@
"approvalsEmptyStateStep2Title": "启用设备批准",
"approvalsEmptyStateStep2Description": "编辑角色并启用“需要设备审批”选项。具有此角色的用户需要管理员批准新设备。",
"approvalsEmptyStatePreviewDescription": "预览:如果启用,待处理设备请求将出现在这里供审核",
"approvalsEmptyStateButtonText": "管理角色"
"approvalsEmptyStateButtonText": "管理角色",
"domainErrorTitle": "我们在验证您的域名时遇到了问题",
"idpAdminAutoProvisionPoliciesTabHint": "在 <policiesTabLink>自动供应设置</policiesTabLink> 选项卡上配置角色映射和组织策略。",
"streamingTitle": "事件流",
"streamingDescription": "实时将事件从您的组织流到外部目的地。",
"streamingUnnamedDestination": "未命名目标",
"streamingNoUrlConfigured": "未配置URL",
"streamingAddDestination": "添加目标",
"streamingHttpWebhookTitle": "HTTP Webhook",
"streamingHttpWebhookDescription": "将事件发送到任意HTTP端点并灵活验证和模板。",
"streamingS3Title": "Amazon S3",
"streamingS3Description": "将事件串流到 S3 兼容的对象存储桶。即将推出。",
"streamingDatadogTitle": "Datadog",
"streamingDatadogDescription": "直接转发事件到您的Datadog 帐户。即将推出。",
"streamingTypePickerDescription": "选择要开始的目标类型。",
"streamingFailedToLoad": "加载目的地失败",
"streamingUnexpectedError": "发生意外错误.",
"streamingFailedToUpdate": "更新目标失败",
"streamingDeletedSuccess": "目标删除成功",
"streamingFailedToDelete": "删除目标失败",
"streamingDeleteTitle": "删除目标",
"streamingDeleteButtonText": "删除目标",
"streamingDeleteDialogAreYouSure": "您确定要删除吗?",
"streamingDeleteDialogThisDestination": "这个目标",
"streamingDeleteDialogPermanentlyRemoved": "? 所有配置将被永久删除。",
"httpDestEditTitle": "编辑目标",
"httpDestAddTitle": "添加 HTTP 目标",
"httpDestEditDescription": "更新此 HTTP 事件流媒体目的地的配置。",
"httpDestAddDescription": "配置新的 HTTP 端点来接收您的组织事件。",
"S3DestEditTitle": "编辑目的地",
"S3DestAddTitle": "添加 S3 目的地",
"S3DestEditDescription": "更新此 S3 事件流目的地的配置。",
"S3DestAddDescription": "配置新的 S3 终端以接收您的组织事件。",
"datadogDestEditTitle": "编辑目的地",
"datadogDestAddTitle": "添加 Datadog 目的地",
"datadogDestEditDescription": "更新此 Datadog 事件流目的地的配置。",
"datadogDestAddDescription": "配置新的 Datadog 终端以接收您的组织事件。",
"httpDestTabSettings": "设置",
"httpDestTabHeaders": "信头",
"httpDestTabBody": "正文内容",
"httpDestTabLogs": "日志",
"httpDestNamePlaceholder": "我的 HTTP 目标",
"httpDestUrlLabel": "目标网址",
"httpDestUrlErrorHttpRequired": "URL 必须使用 http 或 https",
"httpDestUrlErrorHttpsRequired": "云端部署需要HTTPS",
"httpDestUrlErrorInvalid": "输入一个有效的 URL (例如https://example.com/webhook)",
"httpDestAuthTitle": "认证",
"httpDestAuthDescription": "选择如何验证您的端点的请求。",
"httpDestAuthNoneTitle": "无身份验证",
"httpDestAuthNoneDescription": "在没有授权头的情况下发送请求。",
"httpDestAuthBearerTitle": "持有者令牌",
"httpDestAuthBearerDescription": "在每个请求中添加授权Bearer “<token>” 头。",
"httpDestAuthBearerPlaceholder": "您的 API 密钥或令牌",
"httpDestAuthBasicTitle": "基本认证",
"httpDestAuthBasicDescription": "添加一个Authorization: Basic \"<凭据>\" 标头。 以用户名:密码形式提供凭据。",
"httpDestAuthBasicPlaceholder": "用户名:密码",
"httpDestAuthCustomTitle": "自定义标题",
"httpDestAuthCustomDescription": "指定自定义 HTTP 头名称和身份验证值 (例如X-API 键)。",
"httpDestAuthCustomHeaderNamePlaceholder": "标题名称(例如X-API-键)",
"httpDestAuthCustomHeaderValuePlaceholder": "页眉值",
"httpDestCustomHeadersTitle": "自定义 HTTP 头",
"httpDestCustomHeadersDescription": "向每个输出请求添加自定义标题。用于静态令牌或自定义内容类型。默认情况下,内容类型:应用程序/json已发送。",
"httpDestNoHeadersConfigured": "未配置自定义头。单击\"添加头\"以添加一个。",
"httpDestHeaderNamePlaceholder": "标题名称",
"httpDestHeaderValuePlaceholder": "值",
"httpDestAddHeader": "添加标题",
"httpDestBodyTemplateTitle": "自定义实体模板",
"httpDestBodyTemplateDescription": "控制发送到您的端点的 JSON 有效载荷结构。如果禁用,将为每个事件发送一个 JSON 默认对象。",
"httpDestEnableBodyTemplate": "启用自定义实体模板",
"httpDestBodyTemplateLabel": "身体模板 (JSON)",
"httpDestBodyTemplateHint": "将模板变量用于您有效载荷中的参考事件字段。",
"httpDestPayloadFormatTitle": "有效载荷格式",
"httpDestPayloadFormatDescription": "事件如何序列化为每个请求实体。",
"httpDestFormatJsonArrayTitle": "JSON 数组",
"httpDestFormatJsonArrayDescription": "每批一个请求,实体是一个 JSON 数组。与大多数通用的 Web 钩子和数据兼容。",
"httpDestFormatNdjsonTitle": "NDJSON",
"httpDestFormatNdjsonDescription": "每批有一个请求,物体是换行符限制的 JSON --每行一个对象,不是外部数组。 Sluk HEC、Elastic / OpenSearch和Grafana Loki所需。",
"httpDestFormatSingleTitle": "每个请求一个事件",
"httpDestFormatSingleDescription": "为每个事件单独发送一个 HTTP POST。仅用于无法处理批量的端点。",
"httpDestLogTypesTitle": "日志类型",
"httpDestLogTypesDescription": "选择转发到此目的地的日志类型。只有启用的日志类型才会被连续使用。",
"httpDestAccessLogsTitle": "访问日志",
"httpDestAccessLogsDescription": "资源访问尝试,包括已验证和拒绝的请求。",
"httpDestActionLogsTitle": "操作日志",
"httpDestActionLogsDescription": "组织内部用户采取的行政行动。",
"httpDestConnectionLogsTitle": "连接日志",
"httpDestConnectionLogsDescription": "站点和隧道连接事件,包括连接和断开连接。",
"httpDestRequestLogsTitle": "请求日志",
"httpDestRequestLogsDescription": "HTTP 请求代理资源日志,包括方法、路径和响应代码。",
"httpDestSaveChanges": "保存更改",
"httpDestCreateDestination": "创建目标",
"httpDestUpdatedSuccess": "目标已成功更新",
"httpDestCreatedSuccess": "目标创建成功",
"httpDestUpdateFailed": "更新目标失败",
"httpDestCreateFailed": "创建目标失败",
"followRedirects": "遵循重定向",
"followRedirectsDescription": "自动跟踪请求的 HTTP 重定向。",
"alertingErrorWebhookUrl": "请输入有效的 Webhook URL。",
"healthCheckStrategyHttp": "验证连接并检查 HTTP 响应状态。",
"healthCheckStrategyTcp": "只验证 TCP 连接性,不检查响应。",
"healthCheckStrategySnmp": "进行 SNMP get 请求以检查网络设备和基础架构的健康状况。",
"healthCheckStrategyIcmp": "使用 ICMP 回显请求ping检查资源是否可达并响应。",
"healthCheckTabStrategy": "策略",
"healthCheckTabConnection": "连接",
"healthCheckTabAdvanced": "高级",
"healthCheckStrategyNotAvailable": "此策略不可用。请联系销售以启用此功能。",
"uptime30d": "正常运行时间30天",
"idpAddActionCreateNew": "创建新的身份提供者",
"idpAddActionImportFromOrg": "从另一个组织导入",
"idpImportDialogTitle": "导入身份提供者",
"idpImportDialogDescription": "从您是管理员的组织中选择一个身份提供者。它将关联到本组织。",
"idpImportSearchPlaceholder": "按组织或提供者名称搜索……",
"idpImportEmpty": "未找到身份提供者。",
"idpImportedDescription": "身份提供者已成功导入。",
"idpDeleteGlobalQuestion": "您确定要永久删除此身份提供者吗?",
"idpDeleteGlobalDescription": "这将永久删除与其关联的所有组织中的身份提供者。",
"idpUnassociateTitle": "取消关联身份提供者",
"idpUnassociateQuestion": "您确定要将此身份提供者从此组织中取消关联吗?",
"idpUnassociateDescription": "与此身份提供者关联的所有用户将从该组织中移除,但身份提供者仍会继续存在于关联的其他组织中。",
"idpUnassociateConfirm": "确认取消关联身份提供者",
"idpUnassociateWarning": "此操作无法对该组织撤销。",
"idpUnassociatedDescription": "身份提供者已成功从该组织中取消关联",
"idpUnassociateMenu": "取消关联",
"idpDeleteAllOrgsMenu": "删除",
"publicIpEndpoint": "终端",
"lastTriggeredAt": "最后触发",
"reject": "拒绝",
"uptimeDaysAgo": "{count} 天前",
"uptimeToday": "今天",
"uptimeNoDataAvailable": "暂无数据",
"uptimeSuffix": "正常运行时间",
"uptimeDowntimeSuffix": "停机时间",
"uptimeTooltipUptimeLabel": "正常运行",
"uptimeTooltipDowntimeLabel": "停机",
"uptimeOngoing": "正在进行",
"uptimeNoMonitoringData": "无监控数据",
"uptimeNoData": "无数据",
"uptimeMiniBarDown": "停机",
"uptimeSectionTitle": "正常运行时间",
"uptimeSectionDescription": "过去 {days} 天的可用性",
"uptimeAddAlert": "添加警报",
"uptimeViewAlerts": "查看警报",
"uptimeCreateEmailAlert": "创建电子邮件警报",
"uptimeAlertDescriptionSite": "当此站点下线或恢复上线时,将通过电子邮件通知您。",
"uptimeAlertDescriptionResource": "当此资源下线或恢复上线时,将通过电子邮件通知您。",
"uptimeAlertNamePlaceholder": "警报名称",
"uptimeAdditionalEmails": "附加电子邮件",
"uptimeCreateAlert": "创建警报",
"uptimeAlertNoRecipients": "无收件人",
"uptimeAlertNoRecipientsDescription": "请至少添加一个用户、角色或电子邮件进行通知。",
"uptimeAlertCreated": "警报已创建",
"uptimeAlertCreatedDescription": "状态变化时将通知您。",
"uptimeAlertCreateFailed": "创建警报失败",
"webhookUrlLabel": "URL",
"webhookHeaderKeyPlaceholder": "关键字",
"webhookHeaderValuePlaceholder": "值",
"alertLabel": "警报",
"domainPickerWildcardSubdomainNotAllowed": "不允许使用通配符子域。",
"domainPickerWildcardCertWarning": "通配符资源可能需要额外配置才能正常工作。",
"domainPickerWildcardCertWarningLink": "了解更多",
"health": "健康",
"domainPendingErrorTitle": "验证问题",
"memberPortalTitle": "资源",
"memberPortalDescription": "您在此组织中可以访问的资源",
"memberPortalSortBy": "排序依据……",
"memberPortalSortNameAsc": "名称 A-Z",
"memberPortalSortNameDesc": "名称 Z-A",
"memberPortalSortDomainAsc": "域名 A-Z",
"memberPortalSortDomainDesc": "域名 Z-A",
"memberPortalSortEnabledFirst": "启用优先",
"memberPortalSortDisabledFirst": "禁用优先",
"memberPortalRefresh": "刷新",
"memberPortalRefreshResources": "刷新资源",
"memberPortalFailedToLoad": "加载资源失败",
"memberPortalFailedToLoadDescription": "加载资源失败。请检查您的连接并再试一次。",
"memberPortalUnableToLoad": "无法加载资源",
"memberPortalTryAgain": "再试一次",
"memberPortalNoResourcesFound": "找不到资源",
"memberPortalNoResourcesAvailable": "无可用资源",
"memberPortalNoResourcesMatchSearch": "没有与\"{query}\"匹配的资源。尝试调整您的搜索词或清除搜索以查看所有资源。",
"memberPortalNoResourcesAccess": "您尚无访问任何资源的权限。请联系您的管理员获取所需资源的访问权限。",
"memberPortalClearSearch": "清除搜索",
"memberPortalPublicResources": "公共资源",
"memberPortalPublicResourcesDescription": "通过浏览器可访问的网络应用和服务",
"memberPortalCopiedToClipboard": "已复制到剪贴板",
"memberPortalCopiedUrlDescription": "资源 URL 已复制到您的剪贴板。",
"memberPortalOpenResource": "打开资源",
"memberPortalPrivateResources": "私有资源",
"memberPortalPrivateResourcesDescription": "通过客户端可访问的内部网络资源",
"memberPortalResourceDetails": "资源详情",
"memberPortalMode": "模式",
"memberPortalDestination": "目标",
"memberPortalAlias": "别名",
"memberPortalCopiedAliasDescription": "资源别名已复制到您的剪贴板。",
"memberPortalCopiedDestinationDescription": "资源目的地已复制到您的剪贴板。",
"memberPortalRequiresClientConnection": "需要客户端连接",
"memberPortalAuthMethods": "身份验证方法",
"memberPortalSso": "单一登录 (SSO)",
"memberPortalPasswordProtected": "密码保护",
"memberPortalPinCode": "PIN 码",
"memberPortalEmailWhitelist": "电子邮件白名单",
"memberPortalResourceDisabled": "资源已禁用",
"memberPortalShowingResources": "显示 {start}-{end} 共 {total} 个资源",
"memberPortalPrevious": "上一页",
"memberPortalNext": "下一页"
}

File diff suppressed because it is too large Load Diff

5787
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -32,8 +32,8 @@
"format": "prettier --write ."
},
"dependencies": {
"@asteasolutions/zod-to-openapi": "8.4.0",
"@aws-sdk/client-s3": "3.989.0",
"@asteasolutions/zod-to-openapi": "8.4.1",
"@aws-sdk/client-s3": "3.1011.0",
"@faker-js/faker": "10.3.0",
"@headlessui/react": "2.2.9",
"@hookform/resolvers": "5.2.2",
@@ -59,16 +59,16 @@
"@radix-ui/react-tabs": "1.1.13",
"@radix-ui/react-toast": "1.2.15",
"@radix-ui/react-tooltip": "1.2.8",
"@react-email/components": "1.0.7",
"@react-email/components": "1.0.8",
"@react-email/render": "2.0.4",
"@react-email/tailwind": "2.0.4",
"@simplewebauthn/browser": "13.2.2",
"@simplewebauthn/server": "13.2.2",
"@react-email/tailwind": "2.0.5",
"@simplewebauthn/browser": "13.3.0",
"@simplewebauthn/server": "13.3.0",
"@tailwindcss/forms": "0.5.11",
"@tanstack/react-query": "5.90.21",
"@tanstack/react-table": "8.21.3",
"arctic": "3.7.0",
"axios": "1.13.5",
"axios": "1.15.0",
"better-sqlite3": "11.9.1",
"canvas-confetti": "1.9.4",
"class-variance-authority": "0.7.1",
@@ -78,63 +78,63 @@
"cors": "2.8.6",
"crypto-js": "4.2.0",
"d3": "7.9.0",
"drizzle-orm": "0.45.1",
"drizzle-orm": "0.45.2",
"express": "5.2.1",
"express-rate-limit": "8.2.1",
"glob": "13.0.3",
"express-rate-limit": "8.3.0",
"glob": "13.0.6",
"helmet": "8.1.0",
"http-errors": "2.0.1",
"input-otp": "1.4.2",
"ioredis": "5.9.3",
"ioredis": "5.10.0",
"jmespath": "0.16.0",
"js-yaml": "4.1.1",
"jsonwebtoken": "9.0.3",
"lucide-react": "0.563.0",
"lucide-react": "0.577.0",
"maxmind": "5.0.5",
"moment": "2.30.1",
"next": "15.5.12",
"next-intl": "4.8.2",
"next": "15.5.15",
"next-intl": "4.8.3",
"next-themes": "0.4.6",
"nextjs-toploader": "3.9.17",
"node-cache": "5.1.2",
"nodemailer": "8.0.1",
"nodemailer": "8.0.5",
"oslo": "1.2.1",
"pg": "8.18.0",
"posthog-node": "5.24.15",
"pg": "8.20.0",
"posthog-node": "5.28.0",
"qrcode.react": "4.2.0",
"react": "19.2.4",
"react-day-picker": "9.13.2",
"react-day-picker": "9.14.0",
"react-dom": "19.2.4",
"react-easy-sort": "1.8.0",
"react-hook-form": "7.71.1",
"react-icons": "5.5.0",
"react-hook-form": "7.71.2",
"react-icons": "5.6.0",
"recharts": "2.15.4",
"reodotdev": "1.0.0",
"reodotdev": "1.1.0",
"resend": "6.9.2",
"semver": "7.7.4",
"sshpk": "^1.18.0",
"stripe": "20.3.1",
"sshpk": "1.18.0",
"stripe": "20.4.1",
"swagger-ui-express": "5.0.1",
"tailwind-merge": "3.4.0",
"tailwind-merge": "3.5.0",
"topojson-client": "3.1.0",
"tw-animate-css": "1.4.0",
"use-debounce": "^10.1.0",
"use-debounce": "10.1.0",
"uuid": "13.0.0",
"vaul": "1.1.2",
"visionscarto-world-atlas": "1.0.0",
"winston": "3.19.0",
"winston-daily-rotate-file": "5.0.0",
"ws": "8.19.0",
"yaml": "2.8.2",
"yaml": "2.8.3",
"yargs": "18.0.0",
"zod": "4.3.6",
"zod-validation-error": "5.0.0"
},
"devDependencies": {
"@dotenvx/dotenvx": "1.52.0",
"@dotenvx/dotenvx": "1.54.1",
"@esbuild-plugins/tsconfig-paths": "0.1.2",
"@react-email/preview-server": "5.2.8",
"@tailwindcss/postcss": "4.1.18",
"@react-email/preview-server": "5.2.10",
"@tailwindcss/postcss": "4.2.2",
"@tanstack/react-query-devtools": "5.91.3",
"@types/better-sqlite3": "7.6.13",
"@types/cookie-parser": "1.4.10",
@@ -146,31 +146,35 @@
"@types/jmespath": "0.15.2",
"@types/js-yaml": "4.0.9",
"@types/jsonwebtoken": "9.0.10",
"@types/node": "25.2.3",
"@types/nodemailer": "7.0.9",
"@types/node": "25.3.5",
"@types/nodemailer": "7.0.11",
"@types/nprogress": "0.2.3",
"@types/pg": "8.16.0",
"@types/pg": "8.18.0",
"@types/react": "19.2.14",
"@types/react-dom": "19.2.3",
"@types/semver": "7.7.1",
"@types/sshpk": "^1.17.4",
"@types/sshpk": "1.17.4",
"@types/swagger-ui-express": "4.1.8",
"@types/topojson-client": "3.1.5",
"@types/ws": "8.18.1",
"@types/yargs": "17.0.35",
"babel-plugin-react-compiler": "1.0.0",
"drizzle-kit": "0.31.9",
"esbuild": "0.27.3",
"drizzle-kit": "0.31.10",
"esbuild": "0.27.4",
"esbuild-node-externals": "1.20.1",
"eslint": "9.39.2",
"eslint-config-next": "16.1.6",
"postcss": "8.5.6",
"eslint": "10.0.3",
"eslint-config-next": "16.1.7",
"postcss": "8.5.8",
"prettier": "3.8.1",
"react-email": "5.2.8",
"tailwindcss": "4.1.18",
"react-email": "5.2.10",
"tailwindcss": "4.2.2",
"tsc-alias": "1.8.16",
"tsx": "4.21.0",
"typescript": "5.9.3",
"typescript-eslint": "8.55.0"
"typescript-eslint": "8.56.1"
},
"overrides": {
"esbuild": "0.27.4",
"dompurify": "3.3.2"
}
}

BIN
public/idp/openid.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 484 KiB

After

Width:  |  Height:  |  Size: 621 KiB

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