@serve.zone/dcrouter 13.33.0 → 13.34.0

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 (32) hide show
  1. package/dist_serve/bundle.js +12 -5
  2. package/dist_ts/00_commitinfo_data.js +1 -1
  3. package/dist_ts/classes.dcrouter.js +9 -4
  4. package/dist_ts/config/classes.target-profile-manager.d.ts +16 -3
  5. package/dist_ts/config/classes.target-profile-manager.js +197 -6
  6. package/dist_ts/db/documents/classes.target-profile.doc.d.ts +1 -0
  7. package/dist_ts/db/documents/classes.target-profile.doc.js +8 -2
  8. package/dist_ts/opsserver/handlers/target-profile.handler.js +3 -1
  9. package/dist_ts/opsserver/handlers/vpn.handler.js +3 -1
  10. package/dist_ts/vpn/classes.vpn-manager.d.ts +15 -1
  11. package/dist_ts/vpn/classes.vpn-manager.js +138 -6
  12. package/dist_ts_interfaces/data/target-profile.d.ts +2 -0
  13. package/dist_ts_interfaces/data/vpn.d.ts +4 -0
  14. package/dist_ts_interfaces/requests/target-profiles.d.ts +2 -0
  15. package/dist_ts_web/00_commitinfo_data.js +1 -1
  16. package/dist_ts_web/appstate.d.ts +2 -0
  17. package/dist_ts_web/appstate.js +3 -1
  18. package/dist_ts_web/elements/network/ops-view-targetprofiles.js +10 -1
  19. package/dist_ts_web/elements/network/ops-view-vpn.js +3 -1
  20. package/package.json +1 -1
  21. package/readme.md +13 -0
  22. package/ts/00_commitinfo_data.ts +1 -1
  23. package/ts/classes.dcrouter.ts +10 -2
  24. package/ts/config/classes.target-profile-manager.ts +229 -5
  25. package/ts/db/documents/classes.target-profile.doc.ts +3 -0
  26. package/ts/opsserver/handlers/target-profile.handler.ts +2 -0
  27. package/ts/opsserver/handlers/vpn.handler.ts +2 -0
  28. package/ts/vpn/classes.vpn-manager.ts +158 -3
  29. package/ts_web/00_commitinfo_data.ts +1 -1
  30. package/ts_web/appstate.ts +4 -0
  31. package/ts_web/elements/network/ops-view-targetprofiles.ts +9 -0
  32. package/ts_web/elements/network/ops-view-vpn.ts +2 -0
@@ -97,6 +97,7 @@ export class OpsViewTargetProfiles extends DeesElement {
97
97
  'Route Refs': profile.routeRefs?.length
98
98
  ? html`${profile.routeRefs.map(r => html`<span class="tagBadge">${this.formatRouteRef(r)}</span>`)}`
99
99
  : '-',
100
+ 'Client Source IP Routes': profile.allowRoutesByClientSourceIp ? 'Yes' : 'No',
100
101
  Created: new Date(profile.createdAt).toLocaleDateString(),
101
102
  })}
102
103
  .dataActions=${[
@@ -223,6 +224,7 @@ export class OpsViewTargetProfiles extends DeesElement {
223
224
  <dees-input-list .key=${'domains'} .label=${'Domains'} .placeholder=${'e.g. *.example.com'} .allowFreeform=${true}></dees-input-list>
224
225
  <dees-input-list .key=${'targets'} .label=${'Targets'} .description=${'Format: ip:port, e.g. 10.0.0.1:443'} .placeholder=${'e.g. 10.0.0.1:443'} .allowFreeform=${true}></dees-input-list>
225
226
  <dees-input-list .key=${'routeRefs'} .label=${'Route Refs'} .placeholder=${'Type to search routes...'} .candidates=${routeCandidates} .allowFreeform=${true}></dees-input-list>
227
+ <dees-input-checkbox .key=${'allowRoutesByClientSourceIp'} .label=${'Allow routes by VPN client source IP'} .description=${'Also grant access to non-VPN-only routes that would allow the client\'s real connecting IP'} .value=${false}></dees-input-checkbox>
226
228
  </dees-form>
227
229
  `,
228
230
  menuOptions: [
@@ -258,6 +260,7 @@ export class OpsViewTargetProfiles extends DeesElement {
258
260
  domains: domains.length > 0 ? domains : undefined,
259
261
  targets: targets.length > 0 ? targets : undefined,
260
262
  routeRefs: routeRefs.length > 0 ? routeRefs : undefined,
263
+ allowRoutesByClientSourceIp: data.allowRoutesByClientSourceIp === true,
261
264
  });
262
265
  modalArg.destroy();
263
266
  },
@@ -284,6 +287,7 @@ export class OpsViewTargetProfiles extends DeesElement {
284
287
  <dees-input-list .key=${'domains'} .label=${'Domains'} .placeholder=${'e.g. *.example.com'} .allowFreeform=${true} .value=${currentDomains}></dees-input-list>
285
288
  <dees-input-list .key=${'targets'} .label=${'Targets'} .description=${'Format: ip:port, e.g. 10.0.0.1:443'} .placeholder=${'e.g. 10.0.0.1:443'} .allowFreeform=${true} .value=${currentTargets}></dees-input-list>
286
289
  <dees-input-list .key=${'routeRefs'} .label=${'Route Refs'} .placeholder=${'Type to search routes...'} .candidates=${routeCandidates} .allowFreeform=${true} .value=${currentRouteRefs}></dees-input-list>
290
+ <dees-input-checkbox .key=${'allowRoutesByClientSourceIp'} .label=${'Allow routes by VPN client source IP'} .description=${'Also grant access to non-VPN-only routes that would allow the client\'s real connecting IP'} .value=${profile.allowRoutesByClientSourceIp === true}></dees-input-checkbox>
287
291
  </dees-form>
288
292
  `,
289
293
  menuOptions: [
@@ -319,6 +323,7 @@ export class OpsViewTargetProfiles extends DeesElement {
319
323
  domains,
320
324
  targets,
321
325
  routeRefs,
326
+ allowRoutesByClientSourceIp: data.allowRoutesByClientSourceIp === true,
322
327
  });
323
328
  modalArg.destroy();
324
329
  },
@@ -389,6 +394,10 @@ export class OpsViewTargetProfiles extends DeesElement {
389
394
  : '-'}
390
395
  </div>
391
396
  </div>
397
+ <div>
398
+ <div style="font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; color: ${cssManager.bdTheme('#6b7280', '#9ca3af')};">Client Source IP Routes</div>
399
+ <div style="font-size: 14px; margin-top: 4px;">${profile.allowRoutesByClientSourceIp ? 'Enabled' : 'Disabled'}</div>
400
+ </div>
392
401
  <div>
393
402
  <div style="font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; color: ${cssManager.bdTheme('#6b7280', '#9ca3af')};">Created</div>
394
403
  <div style="font-size: 14px; margin-top: 4px;">${new Date(profile.createdAt).toLocaleString()} by ${profile.createdBy}</div>
@@ -339,6 +339,7 @@ export class OpsViewVpn extends DeesElement {
339
339
  'Status': statusHtml,
340
340
  'Routing': routingHtml,
341
341
  'VPN IP': client.assignedIp || '-',
342
+ 'Source IP': conn?.sourceIp || '-',
342
343
  'Target Profiles': this.renderTargetProfileBadges(client.targetProfileIds),
343
344
  'Description': client.description || '-',
344
345
  'Created': new Date(client.createdAt).toLocaleDateString(),
@@ -487,6 +488,7 @@ export class OpsViewVpn extends DeesElement {
487
488
  ${conn ? html`
488
489
  <div class="infoItem"><span class="infoLabel">Connected Since</span><span class="infoValue">${new Date(conn.connectedSince).toLocaleString()}</span></div>
489
490
  <div class="infoItem"><span class="infoLabel">Transport</span><span class="infoValue">${conn.transport}</span></div>
491
+ <div class="infoItem"><span class="infoLabel">Source IP</span><span class="infoValue">${conn.sourceIp || '-'}</span></div>
490
492
  ` : ''}
491
493
  <div class="infoItem"><span class="infoLabel">Description</span><span class="infoValue">${client.description || '-'}</span></div>
492
494
  <div class="infoItem"><span class="infoLabel">Target Profiles</span><span class="infoValue">${this.resolveProfileIdsToLabels(client.targetProfileIds)?.join(', ') || '-'}</span></div>