@serve.zone/dcrouter 17.7.1 → 17.9.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.
- package/deno.json +1 -1
- package/dist_serve/bundle.js +712 -709
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/classes.dcrouter.d.ts +2 -0
- package/dist_ts/classes.dcrouter.js +23 -1
- package/dist_ts/config/classes.db-seeder.js +9 -1
- package/dist_ts/config/classes.gateway-client-manager.js +3 -1
- package/dist_ts/config/helpers.http-redirects.js +28 -1
- package/dist_ts/config/helpers.special-forwards.js +12 -9
- package/dist_ts/db/documents/classes.cached.email.d.ts +7 -0
- package/dist_ts/db/documents/classes.cached.email.js +52 -2
- package/dist_ts/db/documents/classes.webpush-admission.doc.d.ts +19 -0
- package/dist_ts/db/documents/classes.webpush-admission.doc.js +124 -0
- package/dist_ts/db/documents/classes.webpush-binding.doc.d.ts +65 -0
- package/dist_ts/db/documents/classes.webpush-binding.doc.js +205 -0
- package/dist_ts/db/documents/classes.webpush-spool.doc.d.ts +44 -0
- package/dist_ts/db/documents/classes.webpush-spool.doc.js +277 -0
- package/dist_ts/db/documents/index.d.ts +3 -0
- package/dist_ts/db/documents/index.js +5 -1
- package/dist_ts/email/classes.accepted-email-spool.d.ts +5 -0
- package/dist_ts/email/classes.accepted-email-spool.js +28 -3
- package/dist_ts/email/classes.email-route-builder.js +5 -1
- package/dist_ts/email/classes.workapp-mail-manager.d.ts +5 -1
- package/dist_ts/email/classes.workapp-mail-manager.js +87 -12
- package/dist_ts/index.d.ts +1 -0
- package/dist_ts/index.js +3 -1
- package/dist_ts/opsserver/classes.opsserver.d.ts +2 -0
- package/dist_ts/opsserver/classes.opsserver.js +5 -1
- package/dist_ts/opsserver/handlers/gatewayclient.handler.js +33 -6
- package/dist_ts/opsserver/handlers/index.d.ts +2 -0
- package/dist_ts/opsserver/handlers/index.js +3 -1
- package/dist_ts/opsserver/handlers/webpush-app.handler.d.ts +9 -0
- package/dist_ts/opsserver/handlers/webpush-app.handler.js +66 -0
- package/dist_ts/opsserver/handlers/webpush-control.handler.d.ts +14 -0
- package/dist_ts/opsserver/handlers/webpush-control.handler.js +163 -0
- package/dist_ts/plugins.d.ts +5 -2
- package/dist_ts/plugins.js +6 -3
- package/dist_ts/remoteingress/edge-derivation-routes.js +5 -1
- package/dist_ts/security/classes.route-policy-augmenter.d.ts +10 -6
- package/dist_ts/security/classes.route-policy-augmenter.js +65 -51
- package/dist_ts/webpush/classes.webpush-crypto.d.ts +38 -0
- package/dist_ts/webpush/classes.webpush-crypto.js +231 -0
- package/dist_ts/webpush/classes.webpush-manager.d.ts +153 -0
- package/dist_ts/webpush/classes.webpush-manager.js +2374 -0
- package/dist_ts/webpush/classes.webpush-transport.d.ts +45 -0
- package/dist_ts/webpush/classes.webpush-transport.js +161 -0
- package/dist_ts/webpush/helpers.webpush-endpoint.d.ts +21 -0
- package/dist_ts/webpush/helpers.webpush-endpoint.js +111 -0
- package/dist_ts/webpush/index.d.ts +4 -0
- package/dist_ts/webpush/index.js +5 -0
- package/dist_ts/webpush/webpush-indexes.d.ts +11 -0
- package/dist_ts/webpush/webpush-indexes.js +123 -0
- package/dist_ts_interfaces/data/remoteingress.d.ts +14 -2
- package/dist_ts_interfaces/data/route-management.d.ts +2 -0
- package/dist_ts_interfaces/data/route-management.js +1 -1
- package/dist_ts_migrations/index.js +285 -11
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/elements/network/ops-view-routes.js +41 -1
- package/dist_ts_web/elements/network/special-forward-dialog.js +2 -2
- package/package.json +14 -10
- package/readme.md +27 -0
- package/third-party-notices.md +37 -0
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.dcrouter.ts +29 -0
- package/ts/config/classes.db-seeder.ts +8 -0
- package/ts/config/classes.gateway-client-manager.ts +2 -0
- package/ts/config/helpers.http-redirects.ts +31 -1
- package/ts/config/helpers.special-forwards.ts +11 -8
- package/ts/db/documents/classes.cached.email.ts +47 -0
- package/ts/db/documents/classes.webpush-admission.doc.ts +48 -0
- package/ts/db/documents/classes.webpush-binding.doc.ts +147 -0
- package/ts/db/documents/classes.webpush-spool.doc.ts +136 -0
- package/ts/db/documents/index.ts +5 -0
- package/ts/email/classes.accepted-email-spool.ts +41 -2
- package/ts/email/classes.email-route-builder.ts +4 -0
- package/ts/email/classes.workapp-mail-manager.ts +97 -10
- package/ts/index.ts +3 -0
- package/ts/opsserver/classes.opsserver.ts +4 -0
- package/ts/opsserver/handlers/gatewayclient.handler.ts +34 -4
- package/ts/opsserver/handlers/index.ts +2 -0
- package/ts/opsserver/handlers/webpush-app.handler.ts +105 -0
- package/ts/opsserver/handlers/webpush-control.handler.ts +257 -0
- package/ts/plugins.ts +6 -0
- package/ts/remoteingress/edge-derivation-routes.ts +4 -0
- package/ts/security/classes.route-policy-augmenter.ts +70 -57
- package/ts/webpush/classes.webpush-crypto.ts +306 -0
- package/ts/webpush/classes.webpush-manager.ts +3173 -0
- package/ts/webpush/classes.webpush-transport.ts +241 -0
- package/ts/webpush/helpers.webpush-endpoint.ts +150 -0
- package/ts/webpush/index.ts +4 -0
- package/ts/webpush/webpush-indexes.ts +141 -0
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements/network/ops-view-routes.ts +38 -0
- package/ts_web/elements/network/special-forward-dialog.ts +1 -1
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import * as plugins from '../../plugins.js';
|
|
2
|
+
import { requireGatewayMachineAuth, } from '../helpers/gateway-client-auth.js';
|
|
3
|
+
export class WebPushControlHandler {
|
|
4
|
+
opsServerRef;
|
|
5
|
+
typedrouter = new plugins.typedrequest.TypedRouter();
|
|
6
|
+
constructor(opsServerRef) {
|
|
7
|
+
this.opsServerRef = opsServerRef;
|
|
8
|
+
this.opsServerRef.typedrouter.addTypedRouter(this.typedrouter);
|
|
9
|
+
this.registerHandlers();
|
|
10
|
+
}
|
|
11
|
+
registerHandlers() {
|
|
12
|
+
this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('listWebPushBindings', async (dataArg) => {
|
|
13
|
+
const auth = await this.requireControlAuth(dataArg.auth, 'readWebPush');
|
|
14
|
+
const owner = this.scopeOwnerFilter(auth, dataArg.owner);
|
|
15
|
+
const manager = this.opsServerRef.dcRouterRef.webPushManager;
|
|
16
|
+
return {
|
|
17
|
+
bindings: await manager.listBindings(owner),
|
|
18
|
+
};
|
|
19
|
+
}));
|
|
20
|
+
this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('syncWebPushBinding', async (dataArg) => {
|
|
21
|
+
try {
|
|
22
|
+
const request = dataArg;
|
|
23
|
+
const auth = await this.requireControlAuth(dataArg.auth, 'manageWebPush');
|
|
24
|
+
this.assertExactOwner(auth, dataArg.binding.owner);
|
|
25
|
+
const result = await this.opsServerRef.dcRouterRef.webPushManager.syncBinding(dataArg.binding, request.controller, auth.userId);
|
|
26
|
+
return {
|
|
27
|
+
success: true,
|
|
28
|
+
binding: result.binding,
|
|
29
|
+
credential: result.credential,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
return {
|
|
34
|
+
success: false,
|
|
35
|
+
message: this.safeMessage(error),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
}));
|
|
39
|
+
this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('deleteWebPushBinding', async (dataArg) => {
|
|
40
|
+
try {
|
|
41
|
+
const request = dataArg;
|
|
42
|
+
const auth = await this.requireControlAuth(dataArg.auth, 'manageWebPush');
|
|
43
|
+
this.assertExactOwner(auth, request.owner);
|
|
44
|
+
return {
|
|
45
|
+
success: await this.opsServerRef.dcRouterRef.webPushManager.deleteBinding({
|
|
46
|
+
...(request.id !== undefined ? { id: request.id } : {}),
|
|
47
|
+
owner: request.owner,
|
|
48
|
+
controller: request.controller,
|
|
49
|
+
}, auth.userId),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
return {
|
|
54
|
+
success: false,
|
|
55
|
+
message: this.safeMessage(error),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
}));
|
|
59
|
+
this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('rotateWebPushCredential', async (dataArg) => {
|
|
60
|
+
try {
|
|
61
|
+
const auth = await this.requireControlAuth(dataArg.auth, 'manageWebPush');
|
|
62
|
+
const manager = this.opsServerRef.dcRouterRef.webPushManager;
|
|
63
|
+
const binding = await manager.getBindingByCredentialId(dataArg.credentialId);
|
|
64
|
+
if (!binding) {
|
|
65
|
+
throw new plugins.typedrequest.TypedResponseError('Web Push binding not found');
|
|
66
|
+
}
|
|
67
|
+
this.assertExactOwner(auth, this.bindingOwner(binding));
|
|
68
|
+
return {
|
|
69
|
+
success: true,
|
|
70
|
+
credential: await manager.rotateCredential(dataArg.credentialId),
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
return {
|
|
75
|
+
success: false,
|
|
76
|
+
message: this.safeMessage(error),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
}));
|
|
80
|
+
this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('rotateWebPushVapidKey', async (dataArg) => {
|
|
81
|
+
try {
|
|
82
|
+
const auth = await this.requireControlAuth(dataArg.auth, 'manageWebPush');
|
|
83
|
+
const binding = await this.requireAuthorizedBinding(auth, dataArg.bindingId);
|
|
84
|
+
return {
|
|
85
|
+
success: true,
|
|
86
|
+
binding: await this.opsServerRef.dcRouterRef.webPushManager.rotateVapidKey(binding.id),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
return {
|
|
91
|
+
success: false,
|
|
92
|
+
message: this.safeMessage(error),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
}));
|
|
96
|
+
}
|
|
97
|
+
async requireControlAuth(authArg, capabilityArg) {
|
|
98
|
+
const auth = await requireGatewayMachineAuth(this.opsServerRef, authArg, capabilityArg === 'manageWebPush'
|
|
99
|
+
? 'gateway-clients:write'
|
|
100
|
+
: 'gateway-clients:read');
|
|
101
|
+
if (auth.isAdmin)
|
|
102
|
+
return auth;
|
|
103
|
+
if (auth.policy?.role !== 'gatewayClient'
|
|
104
|
+
|| auth.policy.capabilities?.[capabilityArg] !== true) {
|
|
105
|
+
throw new plugins.typedrequest.TypedResponseError(`token capability missing: ${capabilityArg}`);
|
|
106
|
+
}
|
|
107
|
+
return auth;
|
|
108
|
+
}
|
|
109
|
+
scopeOwnerFilter(authArg, requestedArg) {
|
|
110
|
+
if (authArg.isAdmin)
|
|
111
|
+
return requestedArg || {};
|
|
112
|
+
const gatewayClient = authArg.gatewayClient;
|
|
113
|
+
if (!gatewayClient) {
|
|
114
|
+
throw new plugins.typedrequest.TypedResponseError('gateway-client credential required');
|
|
115
|
+
}
|
|
116
|
+
if (requestedArg?.gatewayClientType !== undefined
|
|
117
|
+
&& requestedArg.gatewayClientType !== gatewayClient.type) {
|
|
118
|
+
throw new plugins.typedrequest.TypedResponseError('gateway-client credential cannot access another Web Push owner');
|
|
119
|
+
}
|
|
120
|
+
if (requestedArg?.gatewayClientId !== undefined
|
|
121
|
+
&& requestedArg.gatewayClientId !== gatewayClient.id) {
|
|
122
|
+
throw new plugins.typedrequest.TypedResponseError('gateway-client credential cannot access another Web Push owner');
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
gatewayClientType: gatewayClient.type,
|
|
126
|
+
gatewayClientId: gatewayClient.id,
|
|
127
|
+
...(requestedArg?.appInstanceId !== undefined
|
|
128
|
+
? { appInstanceId: requestedArg.appInstanceId }
|
|
129
|
+
: {}),
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
assertExactOwner(authArg, ownerArg) {
|
|
133
|
+
if (authArg.isAdmin)
|
|
134
|
+
return;
|
|
135
|
+
const gatewayClient = authArg.gatewayClient;
|
|
136
|
+
if (!gatewayClient
|
|
137
|
+
|| ownerArg.gatewayClientType !== gatewayClient.type
|
|
138
|
+
|| ownerArg.gatewayClientId !== gatewayClient.id) {
|
|
139
|
+
throw new plugins.typedrequest.TypedResponseError('gateway-client credential cannot access another Web Push owner');
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
async requireAuthorizedBinding(authArg, bindingIdArg) {
|
|
143
|
+
const binding = await this.opsServerRef.dcRouterRef.webPushManager.getBindingById(bindingIdArg);
|
|
144
|
+
if (!binding) {
|
|
145
|
+
throw new plugins.typedrequest.TypedResponseError('Web Push binding not found');
|
|
146
|
+
}
|
|
147
|
+
this.assertExactOwner(authArg, this.bindingOwner(binding));
|
|
148
|
+
return binding;
|
|
149
|
+
}
|
|
150
|
+
bindingOwner(bindingArg) {
|
|
151
|
+
return {
|
|
152
|
+
gatewayClientType: bindingArg.ownerGatewayClientType,
|
|
153
|
+
gatewayClientId: bindingArg.ownerGatewayClientId,
|
|
154
|
+
appInstanceId: bindingArg.ownerAppInstanceId,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
safeMessage(errorArg) {
|
|
158
|
+
return errorArg instanceof plugins.typedrequest.TypedResponseError
|
|
159
|
+
? errorArg.message
|
|
160
|
+
: 'Web Push control operation failed';
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2VicHVzaC1jb250cm9sLmhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9vcHNzZXJ2ZXIvaGFuZGxlcnMvd2VicHVzaC1jb250cm9sLmhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUk1QyxPQUFPLEVBQ0wseUJBQXlCLEdBRTFCLE1BQU0sbUNBQW1DLENBQUM7QUFJM0MsTUFBTSxPQUFPLHFCQUFxQjtJQUdJO0lBRjdCLFdBQVcsR0FBRyxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7SUFFNUQsWUFBb0MsWUFBdUI7UUFBdkIsaUJBQVksR0FBWixZQUFZLENBQVc7UUFDekQsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUM5QixJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUduQyxxQkFBcUIsRUFDckIsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDeEUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDO1lBQzdELE9BQU87Z0JBQ0wsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7YUFD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
|
package/dist_ts/plugins.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import * as dns from 'node:dns';
|
|
|
2
2
|
import * as fs from 'node:fs';
|
|
3
3
|
import * as crypto from 'node:crypto';
|
|
4
4
|
import * as http from 'node:http';
|
|
5
|
+
import * as https from 'node:https';
|
|
5
6
|
import * as net from 'node:net';
|
|
6
7
|
import * as buffer from 'node:buffer';
|
|
7
8
|
import * as os from 'node:os';
|
|
@@ -9,7 +10,7 @@ import * as path from 'node:path';
|
|
|
9
10
|
import * as tls from 'node:tls';
|
|
10
11
|
import * as util from 'node:util';
|
|
11
12
|
import * as url from 'node:url';
|
|
12
|
-
export { dns, fs, crypto, http, net, buffer, os, path, tls, util, url, };
|
|
13
|
+
export { dns, fs, crypto, http, https, net, buffer, os, path, tls, util, url, };
|
|
13
14
|
import * as servezoneInterfaces from '@serve.zone/interfaces';
|
|
14
15
|
import * as remoteingress from '@serve.zone/remoteingress';
|
|
15
16
|
export { servezoneInterfaces, remoteingress, };
|
|
@@ -50,5 +51,7 @@ import * as cloudflare from '@apiclient.xyz/cloudflare';
|
|
|
50
51
|
export { cloudflare, };
|
|
51
52
|
import * as tsclass from '@tsclass/tsclass';
|
|
52
53
|
export { tsclass, };
|
|
54
|
+
import ipaddr from 'ipaddr.js';
|
|
53
55
|
import * as uuid from 'uuid';
|
|
54
|
-
|
|
56
|
+
import webpush from 'web-push';
|
|
57
|
+
export { ipaddr, uuid, webpush, };
|
package/dist_ts/plugins.js
CHANGED
|
@@ -3,6 +3,7 @@ import * as dns from 'node:dns';
|
|
|
3
3
|
import * as fs from 'node:fs';
|
|
4
4
|
import * as crypto from 'node:crypto';
|
|
5
5
|
import * as http from 'node:http';
|
|
6
|
+
import * as https from 'node:https';
|
|
6
7
|
import * as net from 'node:net';
|
|
7
8
|
import * as buffer from 'node:buffer';
|
|
8
9
|
import * as os from 'node:os';
|
|
@@ -10,7 +11,7 @@ import * as path from 'node:path';
|
|
|
10
11
|
import * as tls from 'node:tls';
|
|
11
12
|
import * as util from 'node:util';
|
|
12
13
|
import * as url from 'node:url';
|
|
13
|
-
export { dns, fs, crypto, http, net, buffer, os, path, tls, util, url, };
|
|
14
|
+
export { dns, fs, crypto, http, https, net, buffer, os, path, tls, util, url, };
|
|
14
15
|
// @serve.zone scope
|
|
15
16
|
import * as servezoneInterfaces from '@serve.zone/interfaces';
|
|
16
17
|
import * as remoteingress from '@serve.zone/remoteingress';
|
|
@@ -57,6 +58,8 @@ export { cloudflare, };
|
|
|
57
58
|
import * as tsclass from '@tsclass/tsclass';
|
|
58
59
|
export { tsclass, };
|
|
59
60
|
// third party
|
|
61
|
+
import ipaddr from 'ipaddr.js';
|
|
60
62
|
import * as uuid from 'uuid';
|
|
61
|
-
|
|
62
|
-
|
|
63
|
+
import webpush from 'web-push';
|
|
64
|
+
export { ipaddr, uuid, webpush, };
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYztBQUNkLE9BQU8sS0FBSyxHQUFHLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sS0FBSyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxHQUFHLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sS0FBSyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxHQUFHLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxHQUFHLE1BQU0sVUFBVSxDQUFDO0FBRWhDLE9BQU8sRUFDTCxHQUFHLEVBQ0gsRUFBRSxFQUNGLE1BQU0sRUFDTixJQUFJLEVBQ0osS0FBSyxFQUNMLEdBQUcsRUFDSCxNQUFNLEVBQ04sRUFBRSxFQUNGLElBQUksRUFDSixHQUFHLEVBQ0gsSUFBSSxFQUNKLEdBQUcsR0FDSixDQUFBO0FBRUQsb0JBQW9CO0FBQ3BCLE9BQU8sS0FBSyxtQkFBbUIsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RCxPQUFPLEtBQUssYUFBYSxNQUFNLDJCQUEyQixDQUFDO0FBRTNELE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsYUFBYSxHQUNkLENBQUE7QUFFRCxvQkFBb0I7QUFDcEIsT0FBTyxLQUFLLFlBQVksTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEtBQUssV0FBVyxNQUFNLHlC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
|
|
@@ -19,10 +19,14 @@ export function buildEdgeOnlyDerivationRoutes(options) {
|
|
|
19
19
|
type: 'forward',
|
|
20
20
|
targets: [{ host: '127.0.0.1', port: 53 }],
|
|
21
21
|
},
|
|
22
|
+
ingress: {
|
|
23
|
+
directHub: false,
|
|
24
|
+
smartVpn: false,
|
|
25
|
+
},
|
|
22
26
|
remoteIngress: {
|
|
23
27
|
enabled: true,
|
|
24
28
|
edgeFilter: [REMOTE_INGRESS_DNS_TAG],
|
|
25
29
|
},
|
|
26
30
|
}];
|
|
27
31
|
}
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZS1kZXJpdmF0aW9uLXJvdXRlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL3JlbW90ZWluZ3Jlc3MvZWRnZS1kZXJpdmF0aW9uLXJvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUVuRjs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSw2QkFBNkIsQ0FBQyxPQUFvQztJQUNoRixJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUNsQyxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFDRCxPQUFPLENBQUM7WUFDTixJQUFJLEVBQUUsd0JBQXdCO1lBQzlCLEtBQUssRUFBRTtnQkFDTCxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ1gsU0FBUyxFQUFFLEtBQUs7YUFDakI7WUFDRCxNQUFNLEVBQUU7Z0JBQ04sSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQzthQUMzQztZQUNELE9BQU8sRUFBRTtnQkFDUCxTQUFTLEVBQUUsS0FBSztnQkFDaEIsUUFBUSxFQUFFLEtBQUs7YUFDaEI7WUFDRCxhQUFhLEVBQUU7Z0JBQ2IsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsVUFBVSxFQUFFLENBQUMsc0JBQXNCLENBQUM7YUFDckM7U0FDc0IsQ0FBQyxDQUFDO0FBQzdCLENBQUMifQ==
|
|
@@ -3,20 +3,24 @@ import type { ISecurityCompiledPolicy } from '../../dist_ts_interfaces/data/secu
|
|
|
3
3
|
import type { DcRouter } from '../classes.dcrouter.js';
|
|
4
4
|
/**
|
|
5
5
|
* Pure route-policy transformations applied before routes reach SmartProxy:
|
|
6
|
-
*
|
|
7
|
-
*
|
|
6
|
+
* route-level trusted ingress authorization, listener-level inbound PROXY
|
|
7
|
+
* protocol policy, and merging of compiled security policies.
|
|
8
8
|
*/
|
|
9
9
|
export declare class RoutePolicyAugmenter {
|
|
10
10
|
private dcRouterRef;
|
|
11
11
|
constructor(dcRouterRef: DcRouter);
|
|
12
12
|
/**
|
|
13
|
-
*
|
|
14
|
-
*
|
|
13
|
+
* Compile each dcrouter ingress policy into SmartProxy route security, then
|
|
14
|
+
* derive one compatible PROXY protocol mode for every shared listener.
|
|
15
|
+
*
|
|
16
|
+
* The listener mode only controls parsing. Route security remains the
|
|
17
|
+
* authorization boundary, so a direct request cannot fall through to a
|
|
18
|
+
* wildcard route that only permits RemoteIngress or SmartVPN.
|
|
15
19
|
*/
|
|
16
20
|
applyInboundProxyProtocolPolicies(routes: plugins.smartproxy.IRouteConfig[]): plugins.smartproxy.IRouteConfig[];
|
|
17
21
|
/** Union blocked IPs/CIDRs across configured and compiled security policies. */
|
|
18
22
|
mergeSecurityPolicies(...policies: Array<Partial<ISecurityCompiledPolicy> | undefined>): ISecurityCompiledPolicy | undefined;
|
|
19
|
-
private
|
|
23
|
+
private getAllowedIngressOrigins;
|
|
24
|
+
private getListenerProxyProtocolPolicy;
|
|
20
25
|
private getInboundProxyListenerKeys;
|
|
21
|
-
private mergeInboundProxyProtocolPolicies;
|
|
22
26
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as plugins from '../plugins.js';
|
|
2
2
|
/**
|
|
3
3
|
* Pure route-policy transformations applied before routes reach SmartProxy:
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* route-level trusted ingress authorization, listener-level inbound PROXY
|
|
5
|
+
* protocol policy, and merging of compiled security policies.
|
|
6
6
|
*/
|
|
7
7
|
export class RoutePolicyAugmenter {
|
|
8
8
|
dcRouterRef;
|
|
@@ -10,42 +10,53 @@ export class RoutePolicyAugmenter {
|
|
|
10
10
|
this.dcRouterRef = dcRouterRef;
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
|
-
*
|
|
14
|
-
*
|
|
13
|
+
* Compile each dcrouter ingress policy into SmartProxy route security, then
|
|
14
|
+
* derive one compatible PROXY protocol mode for every shared listener.
|
|
15
|
+
*
|
|
16
|
+
* The listener mode only controls parsing. Route security remains the
|
|
17
|
+
* authorization boundary, so a direct request cannot fall through to a
|
|
18
|
+
* wildcard route that only permits RemoteIngress or SmartVPN.
|
|
15
19
|
*/
|
|
16
20
|
applyInboundProxyProtocolPolicies(routes) {
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
continue;
|
|
21
|
+
const routesWithIngressSecurity = routes.map((route) => {
|
|
22
|
+
const allowedOrigins = this.getAllowedIngressOrigins(route);
|
|
23
|
+
if (allowedOrigins.length === 0) {
|
|
24
|
+
throw new Error(`Route '${route.name}' has no enabled ingress path`);
|
|
22
25
|
}
|
|
26
|
+
return {
|
|
27
|
+
...route,
|
|
28
|
+
security: {
|
|
29
|
+
...route.security,
|
|
30
|
+
ingress: {
|
|
31
|
+
allowedOrigins,
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
});
|
|
36
|
+
const originsByListener = new Map();
|
|
37
|
+
for (const route of routesWithIngressSecurity) {
|
|
38
|
+
const origins = route.security.ingress.allowedOrigins;
|
|
23
39
|
for (const listenerKey of this.getInboundProxyListenerKeys(route)) {
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
40
|
+
const listenerOrigins = originsByListener.get(listenerKey) || new Set();
|
|
41
|
+
for (const origin of origins) {
|
|
42
|
+
listenerOrigins.add(origin);
|
|
27
43
|
}
|
|
44
|
+
originsByListener.set(listenerKey, listenerOrigins);
|
|
28
45
|
}
|
|
29
46
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
return routes.map((route) => {
|
|
34
|
-
if (route.match?.inboundProxyProtocol) {
|
|
35
|
-
return route;
|
|
36
|
-
}
|
|
37
|
-
let listenerPolicy;
|
|
47
|
+
return routesWithIngressSecurity.map((route) => {
|
|
48
|
+
const listenerOrigins = new Set();
|
|
38
49
|
for (const listenerKey of this.getInboundProxyListenerKeys(route)) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
return route;
|
|
50
|
+
for (const origin of originsByListener.get(listenerKey) || []) {
|
|
51
|
+
listenerOrigins.add(origin);
|
|
52
|
+
}
|
|
43
53
|
}
|
|
54
|
+
const inboundProxyProtocol = this.getListenerProxyProtocolPolicy(listenerOrigins);
|
|
44
55
|
return {
|
|
45
56
|
...route,
|
|
46
57
|
match: {
|
|
47
58
|
...route.match,
|
|
48
|
-
inboundProxyProtocol
|
|
59
|
+
inboundProxyProtocol,
|
|
49
60
|
},
|
|
50
61
|
};
|
|
51
62
|
});
|
|
@@ -72,19 +83,37 @@ export class RoutePolicyAugmenter {
|
|
|
72
83
|
blockedCidrs: [...blockedCidrs].sort(),
|
|
73
84
|
};
|
|
74
85
|
}
|
|
75
|
-
|
|
86
|
+
getAllowedIngressOrigins(route) {
|
|
76
87
|
const dcRoute = route;
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
if (
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
88
|
+
const origins = new Set();
|
|
89
|
+
if (dcRoute.ingress) {
|
|
90
|
+
if (dcRoute.ingress.directHub)
|
|
91
|
+
origins.add('direct');
|
|
92
|
+
if (dcRoute.ingress.smartVpn)
|
|
93
|
+
origins.add('smartVpn');
|
|
83
94
|
}
|
|
84
|
-
if (
|
|
85
|
-
|
|
95
|
+
else if (dcRoute.vpnOnly) {
|
|
96
|
+
origins.add('smartVpn');
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
// Compatibility for runtime routes and producers predating the explicit
|
|
100
|
+
// contract. Persisted routes are backfilled by the versioned migration.
|
|
101
|
+
origins.add('direct');
|
|
102
|
+
origins.add('smartVpn');
|
|
86
103
|
}
|
|
87
|
-
|
|
104
|
+
if (dcRoute.remoteIngress?.enabled) {
|
|
105
|
+
origins.add('trustedProxy');
|
|
106
|
+
}
|
|
107
|
+
return [...origins];
|
|
108
|
+
}
|
|
109
|
+
getListenerProxyProtocolPolicy(origins) {
|
|
110
|
+
const allowsDirect = origins.has('direct');
|
|
111
|
+
const allowsProxied = origins.has('trustedProxy') || origins.has('smartVpn');
|
|
112
|
+
if (allowsDirect && allowsProxied)
|
|
113
|
+
return { mode: 'optional' };
|
|
114
|
+
if (allowsProxied)
|
|
115
|
+
return { mode: 'required' };
|
|
116
|
+
return { mode: 'reject' };
|
|
88
117
|
}
|
|
89
118
|
getInboundProxyListenerKeys(route) {
|
|
90
119
|
const ports = plugins.smartproxy.expandPortRange(route.match.ports);
|
|
@@ -101,20 +130,5 @@ export class RoutePolicyAugmenter {
|
|
|
101
130
|
}
|
|
102
131
|
return keys;
|
|
103
132
|
}
|
|
104
|
-
mergeInboundProxyProtocolPolicies(current, next) {
|
|
105
|
-
if (!current)
|
|
106
|
-
return next;
|
|
107
|
-
if (!next)
|
|
108
|
-
return current;
|
|
109
|
-
if (current.mode === 'required')
|
|
110
|
-
return current;
|
|
111
|
-
if (next.mode === 'required')
|
|
112
|
-
return next;
|
|
113
|
-
if (current.mode === 'optional')
|
|
114
|
-
return current;
|
|
115
|
-
if (next.mode === 'optional')
|
|
116
|
-
return next;
|
|
117
|
-
return current;
|
|
118
|
-
}
|
|
119
133
|
}
|
|
120
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5yb3V0ZS1wb2xpY3ktYXVnbWVudGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvc2VjdXJpdHkvY2xhc3Nlcy5yb3V0ZS1wb2xpY3ktYXVnbWVudGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBVXpDOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sb0JBQW9CO0lBQ1g7SUFBcEIsWUFBb0IsV0FBcUI7UUFBckIsZ0JBQVcsR0FBWCxXQUFXLENBQVU7SUFBRyxDQUFDO0lBRTdDOzs7Ozs7O09BT0c7SUFDSSxpQ0FBaUMsQ0FDdEMsTUFBeUM7UUFFekMsTUFBTSx5QkFBeUIsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDckQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVELElBQUksY0FBYyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssQ0FBQyxJQUFJLCtCQUErQixDQUFDLENBQUM7WUFDdkUsQ0FBQztZQUNELE9BQU87Z0JBQ0wsR0FBRyxLQUFLO2dCQUNSLFFBQVEsRUFBRTtvQkFDUixHQUFHLEtBQUssQ0FBQyxRQUFRO29CQUNqQixPQUFPLEVBQUU7d0JBQ1AsY0FBYztxQkFDZjtpQkFDRjthQUNGLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0saUJBQWlCLEdBQUcsSUFBSSxHQUFHLEVBQStCLENBQUM7UUFDakUsS0FBSyxNQUFNLEtBQUssSUFBSSx5QkFBeUIsRUFBRSxDQUFDO1lBQzlDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxRQUFTLENBQUMsT0FBUSxDQUFDLGNBQWMsQ0FBQztZQUN4RCxLQUFLLE1BQU0sV0FBVyxJQUFJLElBQUksQ0FBQywy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
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export interface IWebPushKeyRing {
|
|
2
|
+
currentKeyId: string;
|
|
3
|
+
keys: ReadonlyMap<string, Buffer>;
|
|
4
|
+
}
|
|
5
|
+
export interface IWebPushEncryptedEnvelope {
|
|
6
|
+
version: 1;
|
|
7
|
+
algorithm: 'aes-256-gcm';
|
|
8
|
+
keyId: string;
|
|
9
|
+
nonce: string;
|
|
10
|
+
ciphertext: string;
|
|
11
|
+
tag: string;
|
|
12
|
+
}
|
|
13
|
+
export interface IWebPushAadContext {
|
|
14
|
+
gatewayClientId: string;
|
|
15
|
+
appInstanceId: string;
|
|
16
|
+
bindingId: string;
|
|
17
|
+
documentType: string;
|
|
18
|
+
documentId: string;
|
|
19
|
+
}
|
|
20
|
+
export type TWebPushHmacDomain = 'credential' | 'idempotency-key' | 'request' | 'endpoint' | 'topic';
|
|
21
|
+
export declare function parseWebPushKeyRing(rawValueArg: unknown, labelArg: string): IWebPushKeyRing;
|
|
22
|
+
export declare function assertDistinctWebPushKeyRings(encryptionRingArg: IWebPushKeyRing, hmacRingArg: IWebPushKeyRing): void;
|
|
23
|
+
export declare function buildWebPushAad(contextArg: IWebPushAadContext): Buffer;
|
|
24
|
+
export declare function canonicalJson(valueArg: unknown): string;
|
|
25
|
+
export declare class WebPushCrypto {
|
|
26
|
+
private readonly encryptionRing;
|
|
27
|
+
private readonly hmacRing;
|
|
28
|
+
constructor(encryptionRing: IWebPushKeyRing, hmacRing: IWebPushKeyRing);
|
|
29
|
+
get currentEncryptionKeyId(): string;
|
|
30
|
+
get currentHmacKeyId(): string;
|
|
31
|
+
encryptJson(valueArg: unknown, aadContextArg: IWebPushAadContext): IWebPushEncryptedEnvelope;
|
|
32
|
+
decryptJson<T>(envelopeArg: IWebPushEncryptedEnvelope, aadContextArg: IWebPushAadContext): T;
|
|
33
|
+
hmac(domainArg: TWebPushHmacDomain, valueArg: string, keyIdArg?: string): {
|
|
34
|
+
keyId: string;
|
|
35
|
+
digest: string;
|
|
36
|
+
};
|
|
37
|
+
verifyHmac(domainArg: TWebPushHmacDomain, valueArg: string, keyIdArg: string, expectedDigestArg: string): boolean;
|
|
38
|
+
}
|