@lamalibre/create-portlama 1.0.26 → 1.0.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/package.json +1 -1
  2. package/src/tasks/nginx.js +47 -4
  3. package/vendor/panel-client/dist/assets/index-BmFKj_xF.js +629 -0
  4. package/vendor/panel-client/dist/assets/{index-BJf-al85.css → index-C2U2_-6h.css} +1 -1
  5. package/vendor/panel-client/dist/docs/01-concepts/certificates.md +14 -1
  6. package/vendor/panel-client/dist/docs/01-concepts/security-model.md +2 -0
  7. package/vendor/panel-client/dist/docs/02-guides/certificate-management.md +4 -0
  8. package/vendor/panel-client/dist/docs/02-guides/disaster-recovery.md +28 -9
  9. package/vendor/panel-client/dist/docs/02-guides/mac-client-setup.md +10 -0
  10. package/vendor/panel-client/dist/docs/03-architecture/nginx-configuration.md +28 -7
  11. package/vendor/panel-client/dist/docs/03-architecture/overview.md +15 -4
  12. package/vendor/panel-client/dist/docs/04-api-reference/certificates.md +271 -32
  13. package/vendor/panel-client/dist/docs/04-api-reference/overview.md +37 -10
  14. package/vendor/panel-client/dist/docs/06-reference/config-files.md +1 -0
  15. package/vendor/panel-client/dist/index.html +2 -2
  16. package/vendor/panel-server/package.json +4 -1
  17. package/vendor/panel-server/src/cli/reset-admin.js +230 -0
  18. package/vendor/panel-server/src/index.js +14 -0
  19. package/vendor/panel-server/src/lib/config.js +1 -0
  20. package/vendor/panel-server/src/lib/csr-signing.js +308 -0
  21. package/vendor/panel-server/src/lib/enrollment.js +204 -0
  22. package/vendor/panel-server/src/lib/mtls.js +43 -11
  23. package/vendor/panel-server/src/lib/nginx.js +42 -2
  24. package/vendor/panel-server/src/lib/plugins.js +369 -0
  25. package/vendor/panel-server/src/lib/push-install.js +413 -0
  26. package/vendor/panel-server/src/routes/enrollment.js +63 -0
  27. package/vendor/panel-server/src/routes/management/certs.js +152 -7
  28. package/vendor/panel-server/src/routes/management/plugins.js +556 -0
  29. package/vendor/panel-server/src/routes/management.js +2 -0
  30. package/vendor/panel-server/src/routes/plugin-router.js +139 -0
  31. package/vendor/panel-client/dist/assets/index-CAjlrdwT.js +0 -619
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lamalibre/create-portlama",
3
- "version": "1.0.26",
3
+ "version": "1.0.28",
4
4
  "description": "One-command setup for secure reverse tunnels with a management dashboard",
5
5
  "type": "module",
6
6
  "license": "SEE LICENSE IN LICENSE.md",
@@ -52,7 +52,7 @@ export function nginxTasks(ctx, task) {
52
52
  }
53
53
 
54
54
  const mtlsSnippet = `ssl_client_certificate ${pkiDir}/ca.crt;
55
- ssl_verify_client on;
55
+ ssl_verify_client optional;
56
56
  `;
57
57
  await writeFile('/etc/nginx/snippets/portlama-mtls.conf', mtlsSnippet);
58
58
 
@@ -63,7 +63,10 @@ ssl_verify_client on;
63
63
  {
64
64
  title: 'Writing IP-based panel vhost',
65
65
  task: async (_ctx, subtask) => {
66
- const vhostConfig = `map $http_upgrade $connection_upgrade {
66
+ const vhostConfig = `# Rate limit zone for public enrollment endpoint (5 requests/minute per IP)
67
+ limit_req_zone $binary_remote_addr zone=enroll:1m rate=5r/m;
68
+
69
+ map $http_upgrade $connection_upgrade {
67
70
  default upgrade;
68
71
  '' close;
69
72
  }
@@ -89,8 +92,11 @@ server {
89
92
  internal;
90
93
  }
91
94
 
92
- # Proxy to panel-server
95
+ # Proxy to panel-server (mTLS required — reject if cert missing or invalid)
93
96
  location / {
97
+ if ($ssl_client_verify != SUCCESS) {
98
+ return 496;
99
+ }
94
100
  proxy_pass http://127.0.0.1:3100;
95
101
 
96
102
  # Client cert headers — set from nginx TLS variables, never passed through from client
@@ -105,8 +111,45 @@ server {
105
111
  proxy_set_header X-Forwarded-Proto $scheme;
106
112
  }
107
113
 
108
- # API paths with WebSocket upgrade support
114
+ # Public API paths (no mTLS verification check).
115
+ # ssl_verify_client is 'optional' at server level, so TLS handshake
116
+ # succeeds without a cert. These locations skip the $ssl_client_verify
117
+ # check and clear cert headers so the backend sees no client identity.
118
+ location /api/enroll {
119
+ limit_req zone=enroll burst=5 nodelay;
120
+ proxy_pass http://127.0.0.1:3100;
121
+ proxy_http_version 1.1;
122
+
123
+ # Clear cert headers so the backend sees no client cert
124
+ proxy_set_header X-SSL-Client-Verify "";
125
+ proxy_set_header X-SSL-Client-DN "";
126
+ proxy_set_header X-SSL-Client-Serial "";
127
+
128
+ proxy_set_header Host $host;
129
+ proxy_set_header X-Real-IP $remote_addr;
130
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
131
+ proxy_set_header X-Forwarded-Proto $scheme;
132
+ }
133
+
134
+ location /api/invite {
135
+ proxy_pass http://127.0.0.1:3100;
136
+ proxy_http_version 1.1;
137
+
138
+ proxy_set_header X-SSL-Client-Verify "";
139
+ proxy_set_header X-SSL-Client-DN "";
140
+ proxy_set_header X-SSL-Client-Serial "";
141
+
142
+ proxy_set_header Host $host;
143
+ proxy_set_header X-Real-IP $remote_addr;
144
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
145
+ proxy_set_header X-Forwarded-Proto $scheme;
146
+ }
147
+
148
+ # API paths with WebSocket upgrade support (mTLS required)
109
149
  location /api {
150
+ if ($ssl_client_verify != SUCCESS) {
151
+ return 496;
152
+ }
110
153
  proxy_pass http://127.0.0.1:3100;
111
154
  proxy_http_version 1.1;
112
155