@serve.zone/dcrouter 15.3.1 → 15.4.1
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_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/classes.dcrouter.js +5 -1
- package/dist_ts/dns/classes.dns-server-runtime.d.ts +1 -0
- package/dist_ts/dns/classes.dns-server-runtime.js +11 -3
- package/dist_ts/email/classes.workapp-mail-manager.d.ts +34 -2
- package/dist_ts/email/classes.workapp-mail-manager.js +215 -22
- package/dist_ts/opsserver/handlers/gatewayclient.handler.d.ts +5 -0
- package/dist_ts/opsserver/handlers/gatewayclient.handler.js +100 -16
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/package.json +2 -2
- package/readme.md +5 -3
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.dcrouter.ts +4 -0
- package/ts/dns/classes.dns-server-runtime.ts +16 -1
- package/ts/email/classes.workapp-mail-manager.ts +277 -23
- package/ts/opsserver/handlers/gatewayclient.handler.ts +130 -15
- package/ts/readme.md +2 -1
- package/ts_web/00_commitinfo_data.ts +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { IUnifiedEmailServerOptions } from '@push.rocks/smartmta';
|
|
1
|
+
import type { IMessageAcceptanceContext, IMessageAcceptanceDecision, IUnifiedEmailServerOptions } from '@push.rocks/smartmta';
|
|
2
2
|
import * as plugins from '../plugins.js';
|
|
3
3
|
import type * as interfaces from '../../dist_ts_interfaces/index.js';
|
|
4
4
|
type TSyncRequest = {
|
|
@@ -17,16 +17,37 @@ type TMailAddressBinding = plugins.servezoneInterfaces.data.IMailAddressBinding;
|
|
|
17
17
|
type TMailAddressBindingSync = plugins.servezoneInterfaces.requests.mail.TMailAddressBindingSync;
|
|
18
18
|
type TMailAddressBindingSyncResponse = plugins.servezoneInterfaces.requests.mail.IReq_SyncMailAddressBinding['response'];
|
|
19
19
|
type TMailAddressBindingDeleteResponse = plugins.servezoneInterfaces.requests.mail.IReq_DeleteMailAddressBinding['response'];
|
|
20
|
+
type TMailCredentialRotateResponse = plugins.servezoneInterfaces.requests.mail.IReq_RotateMailCredential['response'];
|
|
20
21
|
type TWorkAppMailBinding = plugins.servezoneInterfaces.data.IWorkAppMailBinding;
|
|
21
|
-
interface IStoredWorkAppMailIdentity
|
|
22
|
+
interface IStoredWorkAppMailIdentity {
|
|
23
|
+
id: string;
|
|
24
|
+
externalKey: string;
|
|
25
|
+
ownership: interfaces.data.IWorkAppMailOwnership;
|
|
26
|
+
address: string;
|
|
27
|
+
localPart: string;
|
|
28
|
+
domain: string;
|
|
29
|
+
enabled: boolean;
|
|
30
|
+
displayName?: string;
|
|
31
|
+
inbound?: interfaces.data.IWorkAppMailInboundRoute;
|
|
32
|
+
smtp: {
|
|
33
|
+
enabled: boolean;
|
|
34
|
+
username: string;
|
|
35
|
+
};
|
|
36
|
+
createdAt: number;
|
|
37
|
+
updatedAt: number;
|
|
38
|
+
createdBy: string;
|
|
22
39
|
smtpPassword: string;
|
|
40
|
+
smtpLastRotatedAt?: number;
|
|
23
41
|
}
|
|
24
42
|
export declare class WorkAppMailManager {
|
|
25
43
|
private dcRouterRef;
|
|
26
44
|
private readonly storageKey;
|
|
45
|
+
private identityMutationPromise;
|
|
27
46
|
constructor(dcRouterRef: any);
|
|
28
47
|
listMailIdentities(ownership?: Partial<interfaces.data.IWorkAppMailOwnership>): Promise<interfaces.data.IWorkAppMailIdentity[]>;
|
|
29
48
|
syncMailIdentity(request: TSyncRequest, createdBy: string): Promise<interfaces.data.IWorkAppMailIdentitySyncResult>;
|
|
49
|
+
private runIdentityMutationExclusive;
|
|
50
|
+
private syncMailIdentityInner;
|
|
30
51
|
listMailAddressBindings(options?: {
|
|
31
52
|
owner?: Partial<TMailResourceOwner>;
|
|
32
53
|
domain?: string;
|
|
@@ -34,18 +55,26 @@ export declare class WorkAppMailManager {
|
|
|
34
55
|
}): Promise<TMailAddressBinding[]>;
|
|
35
56
|
listWorkAppMailBindings(owner?: Partial<TMailResourceOwner>): Promise<TWorkAppMailBinding[]>;
|
|
36
57
|
syncMailAddressBinding(binding: TMailAddressBindingSync, createdBy: string): Promise<TMailAddressBindingSyncResponse>;
|
|
58
|
+
rotateMailCredential(credentialId: string, createdBy: string, owner?: Partial<TMailResourceOwner>): Promise<TMailCredentialRotateResponse>;
|
|
59
|
+
private rotateMailCredentialInner;
|
|
60
|
+
enforceManagedSmtpSender(context: IMessageAcceptanceContext): Promise<IMessageAcceptanceDecision | undefined>;
|
|
37
61
|
deleteMailAddressBinding(id: string, createdBy: string): Promise<TMailAddressBindingDeleteResponse>;
|
|
62
|
+
private deleteMailAddressBindingInner;
|
|
38
63
|
applyStoredIdentitiesToEmailConfig<TConfig extends IUnifiedEmailServerOptions>(emailConfig: TConfig): Promise<TConfig>;
|
|
39
64
|
applyStoredIdentitiesToRuntime(identities?: IStoredWorkAppMailIdentity[] | undefined): Promise<void>;
|
|
40
65
|
private readStoredIdentities;
|
|
41
66
|
private writeStoredIdentities;
|
|
42
67
|
private mergeIdentitiesIntoEmailConfig;
|
|
43
68
|
private buildInboundRoute;
|
|
69
|
+
private buildOutboundRoute;
|
|
44
70
|
private ensureEmailDomainConfigured;
|
|
45
71
|
private normalizeOwnership;
|
|
46
72
|
private normalizeDomain;
|
|
47
73
|
private normalizeLocalPart;
|
|
48
74
|
private normalizeAddress;
|
|
75
|
+
private normalizeMailboxAddress;
|
|
76
|
+
private extractSingleHeaderFromAddress;
|
|
77
|
+
private rejectSenderAuthorization;
|
|
49
78
|
private normalizeMailResourceOwner;
|
|
50
79
|
private normalizeMailAddressParts;
|
|
51
80
|
private toLegacyInboundRoute;
|
|
@@ -56,11 +85,14 @@ export declare class WorkAppMailManager {
|
|
|
56
85
|
private buildSmtpUsername;
|
|
57
86
|
private buildMailOwnerKey;
|
|
58
87
|
private buildRouteName;
|
|
88
|
+
private buildOutboundRouteName;
|
|
59
89
|
private hashExternalKey;
|
|
60
90
|
private generateSmtpPassword;
|
|
61
91
|
private isManagedMailRouteName;
|
|
62
92
|
private isManagedSmtpUsername;
|
|
63
93
|
private buildSmtpCredentials;
|
|
94
|
+
private toMailCredentialPublic;
|
|
95
|
+
private toMailCredentialSecret;
|
|
64
96
|
private toMailOwner;
|
|
65
97
|
private toMailInboundTarget;
|
|
66
98
|
private toMailAddressBinding;
|
|
@@ -2,6 +2,7 @@ import * as plugins from '../plugins.js';
|
|
|
2
2
|
export class WorkAppMailManager {
|
|
3
3
|
dcRouterRef;
|
|
4
4
|
storageKey = '/workhosters/mail-identities.json';
|
|
5
|
+
identityMutationPromise = Promise.resolve();
|
|
5
6
|
constructor(dcRouterRef) {
|
|
6
7
|
this.dcRouterRef = dcRouterRef;
|
|
7
8
|
}
|
|
@@ -12,6 +13,16 @@ export class WorkAppMailManager {
|
|
|
12
13
|
.map((identity) => this.toPublicIdentity(identity));
|
|
13
14
|
}
|
|
14
15
|
async syncMailIdentity(request, createdBy) {
|
|
16
|
+
return await this.runIdentityMutationExclusive(async () => {
|
|
17
|
+
return await this.syncMailIdentityInner(request, createdBy);
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
async runIdentityMutationExclusive(actionArg) {
|
|
21
|
+
const actionPromise = this.identityMutationPromise.catch(() => undefined).then(actionArg);
|
|
22
|
+
this.identityMutationPromise = actionPromise.then(() => undefined, () => undefined);
|
|
23
|
+
return await actionPromise;
|
|
24
|
+
}
|
|
25
|
+
async syncMailIdentityInner(request, createdBy) {
|
|
15
26
|
if (!this.dcRouterRef.options.emailConfig) {
|
|
16
27
|
return { success: false, message: 'Email server is not configured' };
|
|
17
28
|
}
|
|
@@ -38,9 +49,10 @@ export class WorkAppMailManager {
|
|
|
38
49
|
await this.ensureEmailDomainConfigured(domain);
|
|
39
50
|
const existingIdentity = existingIndex >= 0 ? identities[existingIndex] : undefined;
|
|
40
51
|
const now = Date.now();
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
52
|
+
const shouldRotateSmtpPassword = !existingIdentity || request.resetSmtpPassword;
|
|
53
|
+
const smtpPassword = shouldRotateSmtpPassword
|
|
54
|
+
? this.generateSmtpPassword()
|
|
55
|
+
: existingIdentity.smtpPassword;
|
|
44
56
|
const identity = {
|
|
45
57
|
id: existingIdentity?.id || plugins.smartunique.shortId(),
|
|
46
58
|
externalKey,
|
|
@@ -59,6 +71,9 @@ export class WorkAppMailManager {
|
|
|
59
71
|
updatedAt: now,
|
|
60
72
|
createdBy: existingIdentity?.createdBy || createdBy,
|
|
61
73
|
smtpPassword,
|
|
74
|
+
smtpLastRotatedAt: shouldRotateSmtpPassword
|
|
75
|
+
? now
|
|
76
|
+
: existingIdentity?.smtpLastRotatedAt || existingIdentity?.createdAt || now,
|
|
62
77
|
};
|
|
63
78
|
if (existingIndex >= 0) {
|
|
64
79
|
identities[existingIndex] = identity;
|
|
@@ -101,32 +116,106 @@ export class WorkAppMailManager {
|
|
|
101
116
|
return Array.from(groups.values()).map((group) => this.toWorkAppMailBinding(group));
|
|
102
117
|
}
|
|
103
118
|
async syncMailAddressBinding(binding, createdBy) {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
119
|
+
return await this.runIdentityMutationExclusive(async () => {
|
|
120
|
+
const ownership = this.normalizeMailResourceOwner(binding.owner);
|
|
121
|
+
const { localPart, domain } = this.normalizeMailAddressParts(binding);
|
|
122
|
+
const syncRequest = {
|
|
123
|
+
ownership,
|
|
124
|
+
localPart,
|
|
125
|
+
domain,
|
|
126
|
+
inbound: this.toLegacyInboundRoute(binding.inboundTarget),
|
|
127
|
+
enabled: binding.enabled,
|
|
128
|
+
};
|
|
129
|
+
if (binding.outboundEnabled !== undefined) {
|
|
130
|
+
syncRequest.smtpEnabled = binding.outboundEnabled;
|
|
131
|
+
}
|
|
132
|
+
else if (binding.outboundIdentityId !== undefined) {
|
|
133
|
+
syncRequest.smtpEnabled = Boolean(binding.outboundIdentityId);
|
|
134
|
+
}
|
|
135
|
+
const result = await this.syncMailIdentityInner(syncRequest, createdBy);
|
|
136
|
+
const storedIdentity = result.identity
|
|
137
|
+
? (await this.readStoredIdentities()).find((identity) => identity.id === result.identity.id)
|
|
138
|
+
: undefined;
|
|
139
|
+
return {
|
|
140
|
+
success: result.success,
|
|
141
|
+
binding: storedIdentity ? this.toMailAddressBinding(storedIdentity) : undefined,
|
|
142
|
+
message: result.message,
|
|
143
|
+
};
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
async rotateMailCredential(credentialId, createdBy, owner) {
|
|
147
|
+
return await this.runIdentityMutationExclusive(async () => {
|
|
148
|
+
return await this.rotateMailCredentialInner(credentialId, createdBy, owner);
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
async rotateMailCredentialInner(credentialId, createdBy, owner) {
|
|
152
|
+
if (!this.dcRouterRef.options.emailConfig) {
|
|
153
|
+
return { success: false, message: 'Email server is not configured' };
|
|
154
|
+
}
|
|
155
|
+
const normalizedCredentialId = credentialId?.trim();
|
|
156
|
+
if (!normalizedCredentialId) {
|
|
157
|
+
return { success: false, message: 'credentialId is required' };
|
|
115
158
|
}
|
|
116
|
-
const
|
|
159
|
+
const identities = await this.readStoredIdentities();
|
|
160
|
+
const identityIndex = identities.findIndex((identityArg) => {
|
|
161
|
+
return this.matchesMailOwner(this.toMailOwner(identityArg.ownership), owner)
|
|
162
|
+
&& (identityArg.id === normalizedCredentialId
|
|
163
|
+
|| identityArg.externalKey === normalizedCredentialId
|
|
164
|
+
|| identityArg.smtp.username === normalizedCredentialId);
|
|
165
|
+
});
|
|
166
|
+
if (identityIndex < 0) {
|
|
167
|
+
return { success: false, message: 'Mail credential not found' };
|
|
168
|
+
}
|
|
169
|
+
const identity = identities[identityIndex];
|
|
170
|
+
if (!identity.enabled || !identity.smtp.enabled) {
|
|
171
|
+
return { success: false, message: 'Mail credential is disabled' };
|
|
172
|
+
}
|
|
173
|
+
const now = Date.now();
|
|
174
|
+
identities[identityIndex] = {
|
|
175
|
+
...identity,
|
|
176
|
+
smtpPassword: this.generateSmtpPassword(),
|
|
177
|
+
smtpLastRotatedAt: now,
|
|
178
|
+
updatedAt: now,
|
|
179
|
+
};
|
|
180
|
+
await this.writeStoredIdentities(identities);
|
|
181
|
+
await this.applyStoredIdentitiesToRuntime(identities);
|
|
117
182
|
return {
|
|
118
|
-
success:
|
|
119
|
-
|
|
120
|
-
message: result.message,
|
|
183
|
+
success: true,
|
|
184
|
+
credential: this.toMailCredentialSecret(identities[identityIndex]),
|
|
121
185
|
};
|
|
122
186
|
}
|
|
187
|
+
async enforceManagedSmtpSender(context) {
|
|
188
|
+
const username = context.session.user?.username;
|
|
189
|
+
if (!username || !this.isManagedSmtpUsername(username)) {
|
|
190
|
+
return undefined;
|
|
191
|
+
}
|
|
192
|
+
const identities = await this.readStoredIdentities();
|
|
193
|
+
const identity = identities.find((identityArg) => identityArg.smtp.username === username);
|
|
194
|
+
if (!identity || !identity.enabled || !identity.smtp.enabled) {
|
|
195
|
+
return this.rejectSenderAuthorization('Managed SMTP credential is not active');
|
|
196
|
+
}
|
|
197
|
+
const envelopeFrom = this.normalizeMailboxAddress(context.session.envelope?.mailFrom?.address || context.session.mailFrom || '');
|
|
198
|
+
const headerFrom = this.extractSingleHeaderFromAddress(context.rawMessage, context.email.from);
|
|
199
|
+
if (!envelopeFrom || !headerFrom) {
|
|
200
|
+
return this.rejectSenderAuthorization('Managed SMTP sender must use exactly one From address');
|
|
201
|
+
}
|
|
202
|
+
if (envelopeFrom !== identity.address || headerFrom !== identity.address) {
|
|
203
|
+
return this.rejectSenderAuthorization('Managed SMTP sender is not authorized for this From address');
|
|
204
|
+
}
|
|
205
|
+
return undefined;
|
|
206
|
+
}
|
|
123
207
|
async deleteMailAddressBinding(id, createdBy) {
|
|
208
|
+
return await this.runIdentityMutationExclusive(async () => {
|
|
209
|
+
return await this.deleteMailAddressBindingInner(id, createdBy);
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
async deleteMailAddressBindingInner(id, createdBy) {
|
|
124
213
|
const identities = await this.readStoredIdentities();
|
|
125
214
|
const identity = identities.find((storedIdentity) => storedIdentity.id === id || storedIdentity.externalKey === id);
|
|
126
215
|
if (!identity) {
|
|
127
216
|
return { success: true };
|
|
128
217
|
}
|
|
129
|
-
const result = await this.
|
|
218
|
+
const result = await this.syncMailIdentityInner({
|
|
130
219
|
ownership: identity.ownership,
|
|
131
220
|
localPart: identity.localPart,
|
|
132
221
|
domain: identity.domain,
|
|
@@ -170,6 +259,9 @@ export class WorkAppMailManager {
|
|
|
170
259
|
const generatedRoutes = identities
|
|
171
260
|
.filter((identity) => identity.enabled && identity.inbound?.enabled)
|
|
172
261
|
.map((identity) => this.buildInboundRoute(identity));
|
|
262
|
+
const generatedOutboundRoutes = identities
|
|
263
|
+
.filter((identity) => identity.enabled && identity.smtp.enabled)
|
|
264
|
+
.map((identity) => this.buildOutboundRoute(identity));
|
|
173
265
|
const configuredRoutes = (emailConfig.routes || [])
|
|
174
266
|
.filter((route) => !this.isManagedMailRouteName(route.name));
|
|
175
267
|
const generatedUsers = identities
|
|
@@ -182,7 +274,7 @@ export class WorkAppMailManager {
|
|
|
182
274
|
.filter((user) => !this.isManagedSmtpUsername(user.username));
|
|
183
275
|
return {
|
|
184
276
|
...emailConfig,
|
|
185
|
-
routes: [...configuredRoutes, ...generatedRoutes],
|
|
277
|
+
routes: [...configuredRoutes, ...generatedRoutes, ...generatedOutboundRoutes],
|
|
186
278
|
auth: {
|
|
187
279
|
...(emailConfig.auth || {}),
|
|
188
280
|
users: [...configuredUsers, ...generatedUsers],
|
|
@@ -213,6 +305,33 @@ export class WorkAppMailManager {
|
|
|
213
305
|
},
|
|
214
306
|
};
|
|
215
307
|
}
|
|
308
|
+
buildOutboundRoute(identity) {
|
|
309
|
+
return {
|
|
310
|
+
name: this.buildOutboundRouteName(identity.externalKey),
|
|
311
|
+
priority: 900,
|
|
312
|
+
match: {
|
|
313
|
+
authenticated: true,
|
|
314
|
+
senders: identity.address,
|
|
315
|
+
},
|
|
316
|
+
action: {
|
|
317
|
+
type: 'process',
|
|
318
|
+
allowRelay: true,
|
|
319
|
+
process: {
|
|
320
|
+
dkim: true,
|
|
321
|
+
queue: 'normal',
|
|
322
|
+
},
|
|
323
|
+
options: {
|
|
324
|
+
mtaOptions: {
|
|
325
|
+
dkimSign: true,
|
|
326
|
+
dkimOptions: {
|
|
327
|
+
domainName: identity.domain,
|
|
328
|
+
keySelector: 'default',
|
|
329
|
+
},
|
|
330
|
+
},
|
|
331
|
+
},
|
|
332
|
+
},
|
|
333
|
+
};
|
|
334
|
+
}
|
|
216
335
|
async ensureEmailDomainConfigured(domain) {
|
|
217
336
|
const emailConfig = this.dcRouterRef.options.emailConfig;
|
|
218
337
|
if (emailConfig?.domains?.some((domainConfig) => domainConfig.domain.toLowerCase() === domain)) {
|
|
@@ -263,6 +382,55 @@ export class WorkAppMailManager {
|
|
|
263
382
|
}
|
|
264
383
|
return `${this.normalizeLocalPart(localPart)}@${this.normalizeDomain(domain)}`;
|
|
265
384
|
}
|
|
385
|
+
normalizeMailboxAddress(addressArg) {
|
|
386
|
+
const trimmed = addressArg?.trim();
|
|
387
|
+
if (!trimmed || trimmed === '<>')
|
|
388
|
+
return undefined;
|
|
389
|
+
const angleMatch = trimmed.match(/<([^<>]+)>/);
|
|
390
|
+
const candidate = (angleMatch ? angleMatch[1] : trimmed).replace(/^mailto:/i, '').trim();
|
|
391
|
+
try {
|
|
392
|
+
return this.normalizeAddress(candidate);
|
|
393
|
+
}
|
|
394
|
+
catch {
|
|
395
|
+
return undefined;
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
extractSingleHeaderFromAddress(rawMessageArg, parsedFromArg) {
|
|
399
|
+
const headerSlice = rawMessageArg.subarray(0, 64 * 1024);
|
|
400
|
+
const crlfHeaderEnd = headerSlice.indexOf('\r\n\r\n');
|
|
401
|
+
const lfHeaderEnd = headerSlice.indexOf('\n\n');
|
|
402
|
+
const headerEnd = crlfHeaderEnd >= 0
|
|
403
|
+
? crlfHeaderEnd
|
|
404
|
+
: lfHeaderEnd >= 0
|
|
405
|
+
? lfHeaderEnd
|
|
406
|
+
: headerSlice.length;
|
|
407
|
+
const headersText = headerSlice.subarray(0, headerEnd).toString('utf8');
|
|
408
|
+
const unfoldedLines = [];
|
|
409
|
+
for (const line of headersText.split(/\r?\n/)) {
|
|
410
|
+
if (/^[\t ]/.test(line) && unfoldedLines.length > 0) {
|
|
411
|
+
unfoldedLines[unfoldedLines.length - 1] += ` ${line.trim()}`;
|
|
412
|
+
}
|
|
413
|
+
else {
|
|
414
|
+
unfoldedLines.push(line);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
const fromHeaders = unfoldedLines.filter((line) => /^from\s*:/i.test(line));
|
|
418
|
+
if (fromHeaders.length > 1)
|
|
419
|
+
return undefined;
|
|
420
|
+
const headerValue = fromHeaders.length === 1
|
|
421
|
+
? fromHeaders[0].replace(/^from\s*:/i, '').trim()
|
|
422
|
+
: parsedFromArg;
|
|
423
|
+
if (!headerValue || headerValue.includes(','))
|
|
424
|
+
return undefined;
|
|
425
|
+
return this.normalizeMailboxAddress(headerValue);
|
|
426
|
+
}
|
|
427
|
+
rejectSenderAuthorization(messageArg) {
|
|
428
|
+
return {
|
|
429
|
+
accepted: false,
|
|
430
|
+
smtpCode: 553,
|
|
431
|
+
smtpMessage: messageArg,
|
|
432
|
+
};
|
|
433
|
+
}
|
|
266
434
|
normalizeMailResourceOwner(owner) {
|
|
267
435
|
const gatewayClientType = owner.gatewayClientType;
|
|
268
436
|
const gatewayClientId = owner.gatewayClientId?.trim();
|
|
@@ -365,6 +533,9 @@ export class WorkAppMailManager {
|
|
|
365
533
|
buildRouteName(externalKey) {
|
|
366
534
|
return `workapp-mail-${this.hashExternalKey(externalKey).slice(0, 32)}`;
|
|
367
535
|
}
|
|
536
|
+
buildOutboundRouteName(externalKey) {
|
|
537
|
+
return `workapp-mail-outbound-${this.hashExternalKey(externalKey).slice(0, 32)}`;
|
|
538
|
+
}
|
|
368
539
|
hashExternalKey(externalKey) {
|
|
369
540
|
return plugins.crypto.createHash('sha256').update(externalKey).digest('hex');
|
|
370
541
|
}
|
|
@@ -390,6 +561,25 @@ export class WorkAppMailManager {
|
|
|
390
561
|
},
|
|
391
562
|
};
|
|
392
563
|
}
|
|
564
|
+
toMailCredentialPublic(identity) {
|
|
565
|
+
return {
|
|
566
|
+
id: identity.smtp.username,
|
|
567
|
+
type: 'smtp',
|
|
568
|
+
status: identity.enabled && identity.smtp.enabled ? 'active' : 'disabled',
|
|
569
|
+
username: identity.smtp.username,
|
|
570
|
+
scopes: [`from:${identity.address}`],
|
|
571
|
+
createdAt: identity.createdAt,
|
|
572
|
+
updatedAt: identity.updatedAt,
|
|
573
|
+
lastRotatedAt: identity.smtpLastRotatedAt || identity.createdAt,
|
|
574
|
+
};
|
|
575
|
+
}
|
|
576
|
+
toMailCredentialSecret(identity) {
|
|
577
|
+
return {
|
|
578
|
+
credential: this.toMailCredentialPublic(identity),
|
|
579
|
+
secret: identity.smtpPassword,
|
|
580
|
+
secretShownOnce: true,
|
|
581
|
+
};
|
|
582
|
+
}
|
|
393
583
|
toMailOwner(ownership) {
|
|
394
584
|
return {
|
|
395
585
|
gatewayClientType: ownership.workHosterType,
|
|
@@ -421,6 +611,9 @@ export class WorkAppMailManager {
|
|
|
421
611
|
status: identity.enabled ? 'active' : 'disabled',
|
|
422
612
|
inboundTarget: this.toMailInboundTarget(identity.inbound),
|
|
423
613
|
outboundIdentityId: identity.smtp.enabled ? identity.smtp.username : undefined,
|
|
614
|
+
...(identity.smtp.enabled ? {
|
|
615
|
+
outboundCredential: this.toMailCredentialPublic(identity),
|
|
616
|
+
} : {}),
|
|
424
617
|
recipientPolicy: {
|
|
425
618
|
mode: 'staticList',
|
|
426
619
|
staticRecipients: [identity.address],
|
|
@@ -450,8 +643,8 @@ export class WorkAppMailManager {
|
|
|
450
643
|
};
|
|
451
644
|
}
|
|
452
645
|
toPublicIdentity(identity) {
|
|
453
|
-
const { smtpPassword, ...publicIdentity } = identity;
|
|
646
|
+
const { smtpPassword, smtpLastRotatedAt, ...publicIdentity } = identity;
|
|
454
647
|
return publicIdentity;
|
|
455
648
|
}
|
|
456
649
|
}
|
|
457
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy53b3JrYXBwLW1haWwtbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2VtYWlsL2NsYXNzZXMud29ya2FwcC1tYWlsLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxlQUFlLENBQUM7QUE4QnpDLE1BQU0sT0FBTyxrQkFBa0I7SUFHVDtJQUZILFVBQVUsR0FBRyxtQ0FBbUMsQ0FBQztJQUVsRSxZQUFvQixXQUFnQjtRQUFoQixnQkFBVyxHQUFYLFdBQVcsQ0FBSztJQUFHLENBQUM7SUFFakMsS0FBSyxDQUFDLGtCQUFrQixDQUM3QixTQUEwRDtRQUUxRCxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3JELE9BQU8sVUFBVTthQUNkLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7YUFDMUUsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRU0sS0FBSyxDQUFDLGdCQUFnQixDQUMzQixPQUFxQixFQUNyQixTQUFpQjtRQUVqQixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDMUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLENBQUM7UUFDdkUsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsTUFB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
|
|
650
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy53b3JrYXBwLW1haWwtbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2VtYWlsL2NsYXNzZXMud29ya2FwcC1tYWlsLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0EsT0FBTyxLQUFLLE9BQU8sTUFBTSxlQUFlLENBQUM7QUFnRHpDLE1BQU0sT0FBTyxrQkFBa0I7SUFJVDtJQUhILFVBQVUsR0FBRyxtQ0FBbUMsQ0FBQztJQUMxRCx1QkFBdUIsR0FBcUIsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBRXRFLFlBQW9CLFdBQWdCO1FBQWhCLGdCQUFXLEdBQVgsV0FBVyxDQUFLO0lBQUcsQ0FBQztJQUVqQyxLQUFLLENBQUMsa0JBQWtCLENBQzdCLFNBQTBEO1FBRTFELE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDckQsT0FBTyxVQUFVO2FBQ2QsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQzthQUMxRSxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFTSxLQUFLLENBQUMsZ0JBQWdCLENBQzNCLE9BQXFCLEVBQ3JCLFNBQWlCO1FBRWpCLE9BQU8sTUFBTSxJQUFJLENBQUMsNEJBQTRCLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDeEQsT0FBTyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDOUQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sS0FBSyxDQUFDLDRCQUE0QixDQUFJLFNBQTJCO1FBQ3ZFLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyx1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
|
|
@@ -19,6 +19,11 @@ export declare class GatewayClientHandler {
|
|
|
19
19
|
private assertGatewayClientOwnership;
|
|
20
20
|
private assertRouteTargetsAllowed;
|
|
21
21
|
private assertMailForwardTargetAllowed;
|
|
22
|
+
private isMailForwardTargetAllowed;
|
|
23
|
+
private assertMailAddressAllowed;
|
|
24
|
+
private filterMailBindingsAllowed;
|
|
25
|
+
private filterWorkAppMailBindingsAllowed;
|
|
26
|
+
private isMailAddressAllowed;
|
|
22
27
|
private matchesHostnamePatterns;
|
|
23
28
|
private getRouteHostnames;
|
|
24
29
|
private getOwnedRoutes;
|