@serve.zone/dcrouter 32.6.3 → 32.7.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_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/classes.dcrouter.d.ts +14 -20
- package/dist_ts/classes.dcrouter.js +48 -85
- package/dist_ts/db/documents/classes.email-server-settings.doc.d.ts +3 -1
- package/dist_ts/db/documents/classes.email-server-settings.doc.js +9 -2
- package/dist_ts/email/classes.email-route-builder.d.ts +8 -0
- package/dist_ts/email/classes.email-route-builder.js +20 -13
- package/dist_ts/email/classes.email-settings.manager.d.ts +5 -1
- package/dist_ts/email/classes.email-settings.manager.js +34 -1
- package/dist_ts/email/classes.email-tls-manager.d.ts +99 -0
- package/dist_ts/email/classes.email-tls-manager.js +321 -0
- package/dist_ts/email/index.d.ts +1 -0
- package/dist_ts/email/index.js +2 -1
- package/dist_ts/opsserver/handlers/email-settings.handler.js +5 -1
- package/dist_ts_interfaces/data/email-settings.d.ts +43 -0
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/package.json +8 -8
- package/readme.md +7 -4
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.dcrouter.ts +50 -93
- package/ts/db/documents/classes.email-server-settings.doc.ts +5 -1
- package/ts/email/classes.email-route-builder.ts +22 -13
- package/ts/email/classes.email-settings.manager.ts +42 -0
- package/ts/email/classes.email-tls-manager.ts +398 -0
- package/ts/email/index.ts +1 -0
- package/ts/opsserver/handlers/email-settings.handler.ts +4 -0
- package/ts_web/00_commitinfo_data.ts +1 -1
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import type { IUnifiedEmailServerOptions } from '@push.rocks/smartmta';
|
|
2
2
|
import * as plugins from '../../plugins.js';
|
|
3
|
-
import type { IEmailPortConfig, TEmailOutboundMode } from '../../../dist_ts_interfaces/data/email-settings.js';
|
|
3
|
+
import type { IEmailPortConfig, TEmailOutboundMode, TEmailTlsSource } from '../../../dist_ts_interfaces/data/email-settings.js';
|
|
4
4
|
export declare class EmailServerSettingsDoc extends plugins.smartdata.SmartDataDbDoc<EmailServerSettingsDoc, EmailServerSettingsDoc> {
|
|
5
5
|
settingsId: string;
|
|
6
6
|
enabled: boolean;
|
|
7
7
|
emailConfig?: IUnifiedEmailServerOptions;
|
|
8
8
|
outboundMode: TEmailOutboundMode;
|
|
9
9
|
emailPortConfig?: IEmailPortConfig;
|
|
10
|
+
/** SMTP certificate source; absent on settings persisted before it existed (see TEmailTlsSource). */
|
|
11
|
+
tlsSource?: TEmailTlsSource;
|
|
10
12
|
updatedAt: number;
|
|
11
13
|
updatedBy: string;
|
|
12
14
|
constructor();
|
|
@@ -56,6 +56,9 @@ let EmailServerSettingsDoc = (() => {
|
|
|
56
56
|
let _emailPortConfig_decorators;
|
|
57
57
|
let _emailPortConfig_initializers = [];
|
|
58
58
|
let _emailPortConfig_extraInitializers = [];
|
|
59
|
+
let _tlsSource_decorators;
|
|
60
|
+
let _tlsSource_initializers = [];
|
|
61
|
+
let _tlsSource_extraInitializers = [];
|
|
59
62
|
let _updatedAt_decorators;
|
|
60
63
|
let _updatedAt_initializers = [];
|
|
61
64
|
let _updatedAt_extraInitializers = [];
|
|
@@ -71,6 +74,7 @@ let EmailServerSettingsDoc = (() => {
|
|
|
71
74
|
_emailConfig_decorators = [plugins.smartdata.svDb()];
|
|
72
75
|
_outboundMode_decorators = [plugins.smartdata.svDb()];
|
|
73
76
|
_emailPortConfig_decorators = [plugins.smartdata.svDb()];
|
|
77
|
+
_tlsSource_decorators = [plugins.smartdata.svDb()];
|
|
74
78
|
_updatedAt_decorators = [plugins.smartdata.svDb()];
|
|
75
79
|
_updatedBy_decorators = [plugins.smartdata.svDb()];
|
|
76
80
|
__esDecorate(null, null, _settingsId_decorators, { kind: "field", name: "settingsId", static: false, private: false, access: { has: obj => "settingsId" in obj, get: obj => obj.settingsId, set: (obj, value) => { obj.settingsId = value; } }, metadata: _metadata }, _settingsId_initializers, _settingsId_extraInitializers);
|
|
@@ -78,6 +82,7 @@ let EmailServerSettingsDoc = (() => {
|
|
|
78
82
|
__esDecorate(null, null, _emailConfig_decorators, { kind: "field", name: "emailConfig", static: false, private: false, access: { has: obj => "emailConfig" in obj, get: obj => obj.emailConfig, set: (obj, value) => { obj.emailConfig = value; } }, metadata: _metadata }, _emailConfig_initializers, _emailConfig_extraInitializers);
|
|
79
83
|
__esDecorate(null, null, _outboundMode_decorators, { kind: "field", name: "outboundMode", static: false, private: false, access: { has: obj => "outboundMode" in obj, get: obj => obj.outboundMode, set: (obj, value) => { obj.outboundMode = value; } }, metadata: _metadata }, _outboundMode_initializers, _outboundMode_extraInitializers);
|
|
80
84
|
__esDecorate(null, null, _emailPortConfig_decorators, { kind: "field", name: "emailPortConfig", static: false, private: false, access: { has: obj => "emailPortConfig" in obj, get: obj => obj.emailPortConfig, set: (obj, value) => { obj.emailPortConfig = value; } }, metadata: _metadata }, _emailPortConfig_initializers, _emailPortConfig_extraInitializers);
|
|
85
|
+
__esDecorate(null, null, _tlsSource_decorators, { kind: "field", name: "tlsSource", static: false, private: false, access: { has: obj => "tlsSource" in obj, get: obj => obj.tlsSource, set: (obj, value) => { obj.tlsSource = value; } }, metadata: _metadata }, _tlsSource_initializers, _tlsSource_extraInitializers);
|
|
81
86
|
__esDecorate(null, null, _updatedAt_decorators, { kind: "field", name: "updatedAt", static: false, private: false, access: { has: obj => "updatedAt" in obj, get: obj => obj.updatedAt, set: (obj, value) => { obj.updatedAt = value; } }, metadata: _metadata }, _updatedAt_initializers, _updatedAt_extraInitializers);
|
|
82
87
|
__esDecorate(null, null, _updatedBy_decorators, { kind: "field", name: "updatedBy", static: false, private: false, access: { has: obj => "updatedBy" in obj, get: obj => obj.updatedBy, set: (obj, value) => { obj.updatedBy = value; } }, metadata: _metadata }, _updatedBy_initializers, _updatedBy_extraInitializers);
|
|
83
88
|
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
@@ -90,7 +95,9 @@ let EmailServerSettingsDoc = (() => {
|
|
|
90
95
|
emailConfig = (__runInitializers(this, _enabled_extraInitializers), __runInitializers(this, _emailConfig_initializers, void 0));
|
|
91
96
|
outboundMode = (__runInitializers(this, _emailConfig_extraInitializers), __runInitializers(this, _outboundMode_initializers, 'remoteIngress'));
|
|
92
97
|
emailPortConfig = (__runInitializers(this, _outboundMode_extraInitializers), __runInitializers(this, _emailPortConfig_initializers, void 0));
|
|
93
|
-
|
|
98
|
+
/** SMTP certificate source; absent on settings persisted before it existed (see TEmailTlsSource). */
|
|
99
|
+
tlsSource = (__runInitializers(this, _emailPortConfig_extraInitializers), __runInitializers(this, _tlsSource_initializers, void 0));
|
|
100
|
+
updatedAt = (__runInitializers(this, _tlsSource_extraInitializers), __runInitializers(this, _updatedAt_initializers, 0));
|
|
94
101
|
updatedBy = (__runInitializers(this, _updatedAt_extraInitializers), __runInitializers(this, _updatedBy_initializers, ''));
|
|
95
102
|
constructor() {
|
|
96
103
|
super();
|
|
@@ -106,4 +113,4 @@ let EmailServerSettingsDoc = (() => {
|
|
|
106
113
|
return EmailServerSettingsDoc = _classThis;
|
|
107
114
|
})();
|
|
108
115
|
export { EmailServerSettingsDoc };
|
|
109
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
116
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5lbWFpbC1zZXJ2ZXItc2V0dGluZ3MuZG9jLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHMvZGIvZG9jdW1lbnRzL2NsYXNzZXMuZW1haWwtc2VydmVyLXNldHRpbmdzLmRvYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHdkQsTUFBTSxLQUFLLEdBQUcsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBR3hDLHNCQUFzQjs0QkFEbEMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7Ozs7c0JBQ0EsT0FBTyxDQUFDLFNBQVMsQ0FBQyxjQUFjOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3NDQUF4QyxTQUFRLFdBQWdGOzs7O3NDQUN6SCxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxFQUN2QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTttQ0FHeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7dUNBR3hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO3dDQUd4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTsyQ0FHeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7cUNBSXhCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO3FDQUd4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtxQ0FHeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7WUFyQnpCLGdMQUFPLFVBQVUsNkJBQVYsVUFBVSwrRkFBbUM7WUFHcEQsdUtBQU8sT0FBTyw2QkFBUCxPQUFPLHlGQUFrQjtZQUdoQyxtTEFBTyxXQUFXLDZCQUFYLFdBQVcsaUdBQThCO1lBR2hELHNMQUFPLFlBQVksNkJBQVosWUFBWSxtR0FBdUM7WUFHMUQsK0xBQU8sZUFBZSw2QkFBZixlQUFlLHlHQUFvQjtZQUkxQyw2S0FBTyxTQUFTLDZCQUFULFNBQVMsNkZBQW1CO1lBR25DLDZLQUFPLFNBQVMsNkJBQVQsU0FBUyw2RkFBYTtZQUc3Qiw2S0FBTyxTQUFTLDZCQUFULFNBQVMsNkZBQWM7WUF6QmhDLDZLQXNDQzs7O1lBdENZLHVEQUFzQjs7UUFHMUIsVUFBVSxxREFBVyx1QkFBdUIsRUFBQztRQUc3QyxPQUFPLDJHQUFZLEtBQUssR0FBQztRQUd6QixXQUFXLHFIQUE4QjtRQUd6QyxZQUFZLGlIQUF1QixlQUFlLEdBQUM7UUFHbkQsZUFBZSw4SEFBb0I7UUFFMUMscUdBQXFHO1FBRTlGLFNBQVMsMkhBQW1CO1FBRzVCLFNBQVMsNEdBQVcsQ0FBQyxHQUFDO1FBR3RCLFNBQVMsNEdBQVcsRUFBRSxHQUFDO1FBRTlCO1lBQ0UsS0FBSyxFQUFFLENBQUM7O1NBQ1Q7UUFFTSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUk7WUFDdEIsT0FBTyxNQUFNLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxFQUFFLFVBQVUsRUFBRSx1QkFBdUIsRUFBRSxDQUFDLENBQUM7UUFDM0YsQ0FBQztRQUVNLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTztZQUN6QixPQUFPLE1BQU0sc0JBQXNCLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7Ozs7U0FyQ1Usc0JBQXNCIn0=
|
|
@@ -25,6 +25,14 @@ export declare class EmailRouteBuilder {
|
|
|
25
25
|
*/
|
|
26
26
|
hydrateStoredRouteForRuntime(storedRoute: IRoute): plugins.smartproxy.IRouteConfig | undefined;
|
|
27
27
|
private getCurrentGeneratedEmailRouteNames;
|
|
28
|
+
/**
|
|
29
|
+
* Hostnames every mail certificate must cover, normalized: the mail
|
|
30
|
+
* hostname and every enabled mail-edge hostname. The SMTPS route requests
|
|
31
|
+
* its certificate for exactly these names, and the SMTP listener's
|
|
32
|
+
* certificate is checked against them. `hostnameArg` evaluates a hostname
|
|
33
|
+
* that is not applied yet.
|
|
34
|
+
*/
|
|
35
|
+
getMailCertificateHostnames(hostnameArg?: string | undefined): string[];
|
|
28
36
|
private getSmtpsCertificateHostnames;
|
|
29
37
|
private shouldHydrateGeneratedEmailRoute;
|
|
30
38
|
private createServerFirstEmailRuntimeRoute;
|
|
@@ -176,27 +176,34 @@ export class EmailRouteBuilder {
|
|
|
176
176
|
: [];
|
|
177
177
|
return new Set(sourceRoutes.map((route) => route.name).filter(Boolean));
|
|
178
178
|
}
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
179
|
+
/**
|
|
180
|
+
* Hostnames every mail certificate must cover, normalized: the mail
|
|
181
|
+
* hostname and every enabled mail-edge hostname. The SMTPS route requests
|
|
182
|
+
* its certificate for exactly these names, and the SMTP listener's
|
|
183
|
+
* certificate is checked against them. `hostnameArg` evaluates a hostname
|
|
184
|
+
* that is not applied yet.
|
|
185
|
+
*/
|
|
186
|
+
getMailCertificateHostnames(hostnameArg = this.dcRouterRef.options.emailConfig?.hostname) {
|
|
187
|
+
if (typeof hostnameArg !== 'string' || !hostnameArg.trim()) {
|
|
188
|
+
throw new Error('Mail certificates require a non-empty configured email hostname');
|
|
183
189
|
}
|
|
184
190
|
const candidates = [
|
|
185
|
-
|
|
191
|
+
hostnameArg,
|
|
186
192
|
...(this.dcRouterRef.remoteIngressManager?.getMailEdges() || [])
|
|
187
193
|
.filter((edge) => edge.enabled && edge.tags?.includes(REMOTE_INGRESS_MAIL_TAG))
|
|
188
194
|
.map((edge) => edge.mailHostname)
|
|
189
195
|
.filter((hostname) => typeof hostname === 'string' && Boolean(hostname.trim())),
|
|
190
196
|
];
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
197
|
+
return [...new Set(candidates.map((candidate) => candidate.trim().toLowerCase().replace(/\.$/, '')))].sort();
|
|
198
|
+
}
|
|
199
|
+
getSmtpsCertificateHostnames() {
|
|
200
|
+
const hostnames = this.getMailCertificateHostnames();
|
|
201
|
+
for (const hostname of hostnames) {
|
|
202
|
+
if (normalizeOwnershipHostname(hostname) !== hostname) {
|
|
203
|
+
throw new Error(`SMTPS certificate hostname '${hostname}' is not a valid fully qualified domain name`);
|
|
196
204
|
}
|
|
197
|
-
hostnames.add(normalized);
|
|
198
205
|
}
|
|
199
|
-
return
|
|
206
|
+
return hostnames;
|
|
200
207
|
}
|
|
201
208
|
shouldHydrateGeneratedEmailRoute(storedRoute) {
|
|
202
209
|
if (storedRoute.origin !== 'email') {
|
|
@@ -325,4 +332,4 @@ export class EmailRouteBuilder {
|
|
|
325
332
|
return `PROXY ${protocol} ${sourceIp} ${destinationAddress} ${sourcePort} ${destinationPort}\r\n`;
|
|
326
333
|
}
|
|
327
334
|
}
|
|
328
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5lbWFpbC1yb3V0ZS1idWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvZW1haWwvY2xhc3Nlcy5lbWFpbC1yb3V0ZS1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFJdEMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFFcEYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFJeEU7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxpQkFBaUI7SUFDUjtJQUFwQixZQUFvQixXQUFxQjtRQUFyQixnQkFBVyxHQUFYLFdBQVcsQ0FBVTtJQUFHLENBQUM7SUFFdEMsbUJBQW1CLENBQUMsV0FBdUM7UUFDaEUsTUFBTSxXQUFXLEdBQTJCLEVBQUUsQ0FBQztRQUUvQyxvQ0FBb0M7UUFDcEMsS0FBSyxNQUFNLElBQUksSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDckMsNERBQTREO1lBQzVELElBQUksU0FBUyxHQUFHLGFBQWEsQ0FBQztZQUM5QixJQUFJLE9BQWdDLENBQUM7WUFFckMsMkNBQTJDO1lBQzNDLFFBQVEsSUFBSSxFQUFFLENBQUM7Z0JBQ2IsS0FBSyxFQUFFLEVBQUUsT0FBTztvQkFDZCxTQUFTLEdBQUcsWUFBWSxDQUFDO29CQUN6QixNQUFNO2dCQUVSLEtBQUssR0FBRyxFQUFFLGFBQWE7b0JBQ3JCLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQztvQkFDL0IsTUFBTTtnQkFFUixLQUFLLEdBQUcsRUFBRSxRQUFRO29CQUNoQixTQUFTLEdBQUcsYUFBYSxDQUFDO29CQUMxQixPQUFPLEdBQUcsV0FBVyxDQUFDLENBQUMsZ0VBQWdFO29CQUN2RixNQUFNO2dCQUVSO29CQUNFLFNBQVMsR0FBRyxj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
|
|
335
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5lbWFpbC1yb3V0ZS1idWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvZW1haWwvY2xhc3Nlcy5lbWFpbC1yb3V0ZS1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFJdEMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFFcEYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFJeEU7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxpQkFBaUI7SUFDUjtJQUFwQixZQUFvQixXQUFxQjtRQUFyQixnQkFBVyxHQUFYLFdBQVcsQ0FBVTtJQUFHLENBQUM7SUFFdEMsbUJBQW1CLENBQUMsV0FBdUM7UUFDaEUsTUFBTSxXQUFXLEdBQTJCLEVBQUUsQ0FBQztRQUUvQyxvQ0FBb0M7UUFDcEMsS0FBSyxNQUFNLElBQUksSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDckMsNERBQTREO1lBQzVELElBQUksU0FBUyxHQUFHLGFBQWEsQ0FBQztZQUM5QixJQUFJLE9BQWdDLENBQUM7WUFFckMsMkNBQTJDO1lBQzNDLFFBQVEsSUFBSSxFQUFFLENBQUM7Z0JBQ2IsS0FBSyxFQUFFLEVBQUUsT0FBTztvQkFDZCxTQUFTLEdBQUcsWUFBWSxDQUFDO29CQUN6QixNQUFNO2dCQUVSLEtBQUssR0FBRyxFQUFFLGFBQWE7b0JBQ3JCLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQztvQkFDL0IsTUFBTTtnQkFFUixLQUFLLEdBQUcsRUFBRSxRQUFRO29CQUNoQixTQUFTLEdBQUcsYUFBYSxDQUFDO29CQUMxQixPQUFPLEdBQUcsV0FBVyxDQUFDLENBQUMsZ0VBQWdFO29CQUN2RixNQUFNO2dCQUVSO29CQUNFLFNBQVMsR0FBRyxj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
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import type { IUnifiedEmailServerOptions } from '@push.rocks/smartmta';
|
|
2
2
|
import type { IDcRouterOptions } from '../classes.dcrouter.js';
|
|
3
|
-
import type { IEmailPortConfig, IEmailServerSettings, TEmailOutboundMode, TEmailServerSettingsUpdate } from '../../dist_ts_interfaces/data/email-settings.js';
|
|
3
|
+
import type { IEmailPortConfig, IEmailServerSettings, TEmailOutboundMode, TEmailServerSettingsUpdate, TEmailTlsSource } from '../../dist_ts_interfaces/data/email-settings.js';
|
|
4
4
|
export declare class EmailSettingsManager {
|
|
5
5
|
private options;
|
|
6
6
|
private cachedEmailConfig?;
|
|
7
7
|
private cachedEmailPortConfig?;
|
|
8
8
|
private outboundMode;
|
|
9
|
+
private tlsSource;
|
|
9
10
|
private enabled;
|
|
10
11
|
private updatedAt;
|
|
11
12
|
private updatedBy;
|
|
@@ -24,12 +25,15 @@ export declare class EmailSettingsManager {
|
|
|
24
25
|
getEmailConfig(): IUnifiedEmailServerOptions | undefined;
|
|
25
26
|
getEmailPortConfig(): IEmailPortConfig | undefined;
|
|
26
27
|
getOutboundMode(): TEmailOutboundMode;
|
|
28
|
+
/** Effective SMTP certificate source, including the default for settings persisted without one. */
|
|
29
|
+
getTlsSource(): TEmailTlsSource;
|
|
27
30
|
getPublicSettings(): IEmailServerSettings;
|
|
28
31
|
updateSettings(updates: TEmailServerSettingsUpdate, updatedBy: string): Promise<IEmailServerSettings>;
|
|
29
32
|
private loadFromDoc;
|
|
30
33
|
private applyToRuntimeOptions;
|
|
31
34
|
private patchOutboundMode;
|
|
32
35
|
private normalizeOutboundMode;
|
|
36
|
+
private normalizeTlsSource;
|
|
33
37
|
private patchEmailConfig;
|
|
34
38
|
/**
|
|
35
39
|
* Remove persisted legacy routes by exact name — the internal-relay
|
|
@@ -2,6 +2,7 @@ import { EmailServerSettingsDoc } from '../db/index.js';
|
|
|
2
2
|
import { logger } from '../logger.js';
|
|
3
3
|
import { isSmtpAccountRouteName } from './classes.smtp-account.manager.js';
|
|
4
4
|
import { isWorkAppManagedMailRouteName } from './classes.workapp-mail-manager.js';
|
|
5
|
+
import { deriveEmailTlsSource, hasConfiguredEmailTlsMaterial, withoutConfiguredEmailTlsMaterial, } from './classes.email-tls-manager.js';
|
|
5
6
|
const defaultEmailPorts = [25, 587, 465];
|
|
6
7
|
function clonePlain(value) {
|
|
7
8
|
if (value === undefined)
|
|
@@ -16,6 +17,7 @@ export class EmailSettingsManager {
|
|
|
16
17
|
cachedEmailConfig;
|
|
17
18
|
cachedEmailPortConfig;
|
|
18
19
|
outboundMode = 'remoteIngress';
|
|
20
|
+
tlsSource = 'managedCertificate';
|
|
19
21
|
enabled = false;
|
|
20
22
|
updatedAt = 0;
|
|
21
23
|
updatedBy = 'default';
|
|
@@ -77,6 +79,10 @@ export class EmailSettingsManager {
|
|
|
77
79
|
getOutboundMode() {
|
|
78
80
|
return this.outboundMode;
|
|
79
81
|
}
|
|
82
|
+
/** Effective SMTP certificate source, including the default for settings persisted without one. */
|
|
83
|
+
getTlsSource() {
|
|
84
|
+
return this.tlsSource;
|
|
85
|
+
}
|
|
80
86
|
getPublicSettings() {
|
|
81
87
|
const emailConfig = this.cachedEmailConfig;
|
|
82
88
|
const emailPortConfig = this.cachedEmailPortConfig;
|
|
@@ -88,6 +94,7 @@ export class EmailSettingsManager {
|
|
|
88
94
|
portMapping: emailPortConfig?.portMapping ? { ...emailPortConfig.portMapping } : null,
|
|
89
95
|
receivedEmailsPath: emailPortConfig?.receivedEmailsPath || null,
|
|
90
96
|
maxMessageSize: emailConfig?.maxMessageSize ?? null,
|
|
97
|
+
tlsSource: this.tlsSource,
|
|
91
98
|
domainCount: emailConfig?.domains?.length || 0,
|
|
92
99
|
routeCount: emailConfig?.routes?.length || 0,
|
|
93
100
|
authUserCount: emailConfig?.auth?.users?.length || 0,
|
|
@@ -102,13 +109,20 @@ export class EmailSettingsManager {
|
|
|
102
109
|
doc.settingsId = 'email-server-settings';
|
|
103
110
|
}
|
|
104
111
|
const nextEnabled = hasOwn(updates, 'enabled') ? Boolean(updates.enabled) : doc.enabled;
|
|
112
|
+
const nextTlsSource = updates.tlsSource === undefined
|
|
113
|
+
? doc.tlsSource
|
|
114
|
+
: this.normalizeTlsSource(updates.tlsSource);
|
|
105
115
|
const nextEmailConfig = this.patchEmailConfig(doc.emailConfig ?? undefined, updates, nextEnabled);
|
|
116
|
+
if (updates.tlsSource === 'configuredMaterial' && !hasConfiguredEmailTlsMaterial(nextEmailConfig?.tls)) {
|
|
117
|
+
throw new Error('The configuredMaterial email TLS source requires emailConfig.tls certificate material (certPem/keyPem or certPath/keyPath); none is persisted');
|
|
118
|
+
}
|
|
106
119
|
const nextEmailPortConfig = this.patchEmailPortConfig(doc.emailPortConfig ?? undefined, updates);
|
|
107
120
|
const nextOutboundMode = this.patchOutboundMode(doc.outboundMode, updates);
|
|
108
121
|
doc.enabled = nextEnabled;
|
|
109
122
|
doc.emailConfig = nextEmailConfig;
|
|
110
123
|
doc.emailPortConfig = nextEmailPortConfig;
|
|
111
124
|
doc.outboundMode = nextOutboundMode;
|
|
125
|
+
doc.tlsSource = nextTlsSource;
|
|
112
126
|
doc.updatedAt = Date.now();
|
|
113
127
|
doc.updatedBy = updatedBy;
|
|
114
128
|
if (doc.creationStatus === 'new') {
|
|
@@ -123,6 +137,7 @@ export class EmailSettingsManager {
|
|
|
123
137
|
updatedBy: doc.updatedBy,
|
|
124
138
|
...(doc.emailConfig !== undefined ? { emailConfig: doc.emailConfig } : {}),
|
|
125
139
|
...(doc.emailPortConfig !== undefined ? { emailPortConfig: doc.emailPortConfig } : {}),
|
|
140
|
+
...(doc.tlsSource !== undefined ? { tlsSource: doc.tlsSource } : {}),
|
|
126
141
|
},
|
|
127
142
|
$unset: {
|
|
128
143
|
...((hasOwn(updates, 'portMapping') || hasOwn(updates, 'receivedEmailsPath'))
|
|
@@ -141,6 +156,7 @@ export class EmailSettingsManager {
|
|
|
141
156
|
this.cachedEmailConfig = clonePlain(doc.emailConfig ?? undefined);
|
|
142
157
|
this.cachedEmailPortConfig = clonePlain(doc.emailPortConfig ?? undefined);
|
|
143
158
|
this.outboundMode = this.normalizeOutboundMode(doc.outboundMode);
|
|
159
|
+
this.tlsSource = doc.tlsSource ?? deriveEmailTlsSource(doc.emailConfig?.tls);
|
|
144
160
|
this.updatedAt = doc.updatedAt;
|
|
145
161
|
this.updatedBy = doc.updatedBy;
|
|
146
162
|
}
|
|
@@ -163,6 +179,12 @@ export class EmailSettingsManager {
|
|
|
163
179
|
}
|
|
164
180
|
return mode;
|
|
165
181
|
}
|
|
182
|
+
normalizeTlsSource(sourceArg) {
|
|
183
|
+
if (sourceArg !== 'managedCertificate' && sourceArg !== 'configuredMaterial') {
|
|
184
|
+
throw new Error(`Invalid email TLS source: ${String(sourceArg)}`);
|
|
185
|
+
}
|
|
186
|
+
return sourceArg;
|
|
187
|
+
}
|
|
166
188
|
patchEmailConfig(existingConfig, updates, nextEnabled) {
|
|
167
189
|
const nextConfig = clonePlain(existingConfig) || (nextEnabled ? {
|
|
168
190
|
hostname: 'localhost',
|
|
@@ -198,6 +220,17 @@ export class EmailSettingsManager {
|
|
|
198
220
|
if (hasOwn(updates, 'removeRouteNames') && updates.removeRouteNames?.length) {
|
|
199
221
|
nextConfig.routes = this.removeRoutesByName(nextConfig.routes || [], updates.removeRouteNames);
|
|
200
222
|
}
|
|
223
|
+
// The managed certificate supersedes operator-managed material, so the
|
|
224
|
+
// material is removed rather than left behind as a dormant override.
|
|
225
|
+
if (updates.tlsSource === 'managedCertificate') {
|
|
226
|
+
const remainingTls = withoutConfiguredEmailTlsMaterial(nextConfig.tls);
|
|
227
|
+
if (remainingTls) {
|
|
228
|
+
nextConfig.tls = remainingTls;
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
delete nextConfig.tls;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
201
234
|
if (nextEnabled) {
|
|
202
235
|
if (!nextConfig.hostname?.trim()) {
|
|
203
236
|
throw new Error('Email hostname is required when email is enabled');
|
|
@@ -280,4 +313,4 @@ export class EmailSettingsManager {
|
|
|
280
313
|
return normalized;
|
|
281
314
|
}
|
|
282
315
|
}
|
|
283
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5lbWFpbC1zZXR0aW5ncy5tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvZW1haWwvY2xhc3Nlcy5lbWFpbC1zZXR0aW5ncy5tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDM0UsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFTbEYsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFFekMsU0FBUyxVQUFVLENBQUksS0FBb0I7SUFDekMsSUFBSSxLQUFLLEtBQUssU0FBUztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzFDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFNLENBQUM7QUFDaEQsQ0FBQztBQUVELFNBQVMsTUFBTSxDQUFDLFNBQWlCLEVBQUUsTUFBYztJQUMvQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDakUsQ0FBQztBQUVELE1BQU0sT0FBTyxvQkFBb0I7SUFRWDtJQVBaLGlCQUFpQixDQUE4QjtJQUMvQyxxQkFBcUIsQ0FBb0I7SUFDekMsWUFBWSxHQUF1QixlQUFlLENBQUM7SUFDbkQsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNoQixTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUU5QixZQUFvQixPQUF5QjtRQUF6QixZQUFPLEdBQVAsT0FBTyxDQUFrQjtJQUFHLENBQUM7SUFFMUMsS0FBSyxDQUFDLEtBQUs7UUFDaEIsSUFBSSxHQUFHLEdBQUcsTUFBTSxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUU5QyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDVCxHQUFHLEdBQUcsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO1lBQ25DLEdBQUcsQ0FBQyxVQUFVLEdBQUcsdUJBQXVCLENBQUM7WUFDekMsR0FBRyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDcEIsR0FBRyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDM0IsR0FBRyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7WUFDMUIsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkIsQ0FBQztRQUVELE1BQU0sSUFBSSxDQUFDLDhCQUE4QixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxHQUEyQjtRQUN0RSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQztRQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFBRSxPQUFPO1FBQ25DLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxLQUFVLEVBQVcsRUFBRSxDQUNwRCxLQUFLLEVBQUUsSUFBSSxLQUFLLGdCQUFnQjtlQUM3QixLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksS0FBSyxRQUFRO2VBQ2hDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEtBQUssR0FBRzttQkFDL0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzlILE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMvRSxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBRS9DLEdBQUcsQ0FBQyxXQUFZLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztRQUNwQyxHQUFHLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMzQixHQUFHLENBQUMsU0FBUyxHQUFHLHFDQUFxQyxDQUFDO1FBQ3RELE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pCLE1BQU0sQ0FBQyxHQUFHLENBQ1IsTUFBTSxFQUNOLHlJQUF5SSxDQUMxSSxDQUFDO0lBQ0osQ0FBQztJQUVNLEtBQUssQ0FBQyxJQUFJO1FBQ2YsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQztRQUNuQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsU0FBUyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxTQUFTO1FBQ2QsT0FBTyxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRU0sY0FBYztRQUNuQixPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDM0UsQ0FBQztJQUVNLGtCQUFrQjtRQUN2QixPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDL0UsQ0FBQztJQUVNLGVBQWU7UUFDcEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFTSxpQkFBaUI7UUFDdEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQzNDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztRQUNuRCxPQUFPO1lBQ0wsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDekIsUUFBUSxFQUFFLFdBQVcsRUFBRSxRQUFRLElBQUksSUFBSTtZQUN2QyxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7WUFDL0IsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7WUFDdEMsV0FBVyxFQUFFLGVBQWUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDckYsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixJQUFJLElBQUk7WUFDL0QsY0FBYyxFQUFFLFdBQVcsRUFBRSxjQUFjLElBQUksSUFBSTtZQUNuRCxXQUFXLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztZQUM5QyxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLElBQUksQ0FBQztZQUM1QyxhQUFhLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7WUFDcEQsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztTQUMxQixDQUFDO0lBQ0osQ0FBQztJQUVNLEtBQUssQ0FBQyxjQUFjLENBQ3pCLE9BQW1DLEVBQ25DLFNBQWlCO1FBRWpCLElBQUksR0FBRyxHQUFHLE1BQU0sc0JBQXNCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1QsR0FBRyxHQUFHLElBQUksc0JBQXNCLEVBQUUsQ0FBQztZQUNuQyxHQUFHLENBQUMsVUFBVSxHQUFHLHVCQUF1QixDQUFDO1FBQzNDLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBQ3hGLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLFNBQVMsRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDbEcsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLGVBQWUsSUFBSSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDakcsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUUzRSxHQUFHLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQztRQUMxQixHQUFHLENBQUMsV0FBVyxHQUFHLGVBQWUsQ0FBQztRQUNsQyxHQUFHLENBQUMsZUFBZSxHQUFHLG1CQUFtQixDQUFDO1FBQzFDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsZ0JBQWdCLENBQUM7UUFDcEMsR0FBRyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDM0IsR0FBRyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDMUIsSUFBSSxHQUFHLENBQUMsY0FBYyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ2pDLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ25CLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxTQUFTLEdBQUcsTUFBTSxzQkFBc0IsQ0FBQyxZQUFZLENBQUMsRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFO2dCQUMxRixJQUFJLEVBQUU7b0JBQ0osT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPO29CQUNwQixZQUFZLEVBQUUsR0FBRyxDQUFDLFlBQVk7b0JBQzlCLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUztvQkFDeEIsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTO29CQUN4QixHQUFHLENBQUMsR0FBRyxDQUFDLFdBQVcsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUMxRSxHQUFHLENBQUMsR0FBRyxDQUFDLGVBQWUsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLEdBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2lCQUN2RjtnQkFDRCxNQUFNLEVBQUU7b0JBQ04sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLG9CQUFvQixDQUFDLENBQUM7MkJBQ3hFLEdBQUcsQ0FBQyxlQUFlLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2lCQUN6RTthQUNGLENBQUMsQ0FBQztZQUNILElBQUksU0FBUyxDQUFDLFlBQVksS0FBSyxDQUFDO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQztRQUN2RyxDQUFDO1FBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3QixPQUFPLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFTyxXQUFXLENBQUMsR0FBMkI7UUFDN0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBQzNCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLFdBQVcsSUFBSSxTQUFTLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMscUJBQXFCLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxlQUFlLElBQUksU0FBUyxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQztRQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUM7SUFDakMsQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDakQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDekQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQ3JELENBQUM7SUFFTyxpQkFBaUIsQ0FDdkIsWUFBNEMsRUFDNUMsT0FBbUM7UUFFbkMsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxZQUFZLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDMUUsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzFELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU8scUJBQXFCLENBQUMsSUFBb0M7UUFDaEUsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPLGVBQWUsQ0FBQztRQUNsQyxJQUFJLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxLQUFLLGVBQWUsRUFBRSxDQUFDO1lBQ2xELE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUNqRCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sZ0JBQWdCLENBQ3RCLGNBQXNELEVBQ3RELE9BQW1DLEVBQ25DLFdBQW9CO1FBRXBCLE1BQU0sVUFBVSxHQUEyQyxVQUFVLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ3RHLFFBQVEsRUFBRSxXQUFXO1lBQ3JCLEtBQUssRUFBRSxDQUFDLEdBQUcsaUJBQWlCLENBQUM7WUFDN0IsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRTtZQUNqQyxPQUFPLEVBQUUsRUFBRTtZQUNYLE1BQU0sRUFBRSxFQUFFO1NBQ1gsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFZixJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU8sU0FBUyxDQUFDO1FBRWxDLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ2hELElBQUksV0FBVyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsa0RBQWtELENBQUMsQ0FBQztZQUN0RSxDQUFDO1lBQ0QsVUFBVSxDQUFDLFFBQVEsR0FBRyxRQUFRLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUN4RCxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDN0IsVUFBVSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7UUFDOUQsQ0FBQztRQUVELElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7WUFDdEMsSUFBSSxPQUFPLENBQUMsY0FBYyxLQUFLLElBQUksSUFBSSxPQUFPLENBQUMsY0FBYyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUM1RSxPQUFPLFVBQVUsQ0FBQyxjQUFjLENBQUM7WUFDbkMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLGNBQWMsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDN0QsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO2dCQUMvRCxDQUFDO2dCQUNELFVBQVUsQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1lBQzdDLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLGtCQUFrQixDQUFDLElBQUksT0FBTyxDQUFDLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQzVFLFVBQVUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2pHLENBQUM7UUFFRCxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQUMsa0RBQWtELENBQUMsQ0FBQztZQUN0RSxDQUFDO1lBQ0QsVUFBVSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7UUFDakUsQ0FBQztRQUVELFVBQVUsQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDOUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUM1QyxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxrQkFBa0IsQ0FDeEIsTUFBeUQsRUFDekQsVUFBb0I7UUFFcEIsSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDO1FBQ3ZCLEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxFQUFFLENBQUM7WUFDbkMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztZQUNuRSxDQUFDO1lBQ0QsSUFBSSw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN4RSxNQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsSUFBSSw4RUFBOEUsQ0FBQyxDQUFDO1lBQ2hILENBQUM7WUFDRCxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO1lBQzlELElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0RBQWdELElBQUksRUFBRSxDQUFDLENBQUM7WUFDMUUsQ0FBQztZQUNELFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDbkIsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFTyxvQkFBb0IsQ0FDMUIsa0JBQWdELEVBQ2hELE9BQW1DO1FBRW5DLE1BQU0sY0FBYyxHQUFxQixVQUFVLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUUsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDbkMsSUFBSSxPQUFPLENBQUMsV0FBVyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUNqQyxPQUFPLGNBQWMsQ0FBQyxXQUFXLENBQUM7WUFDcEMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGNBQWMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLENBQUM7WUFDcEYsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsb0JBQW9CLENBQUMsRUFBRSxDQUFDO1lBQzFDLE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUNwRSxJQUFJLGtCQUFrQixFQUFFLENBQUM7Z0JBQ3ZCLGNBQWMsQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztZQUN6RCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxjQUFjLENBQUMsa0JBQWtCLENBQUM7WUFDM0MsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDN0UsQ0FBQztJQUVPLGNBQWMsQ0FBQyxLQUFlO1FBQ3BDLE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkUsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztRQUMvRSxDQUFDO1FBQ0QsS0FBSyxNQUFNLElBQUksSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQztnQkFDeEQsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNqRCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU8sb0JBQW9CLENBQUMsV0FBbUM7UUFDOUQsTUFBTSxVQUFVLEdBQTJCLEVBQUUsQ0FBQztRQUM5QyxLQUFLLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUNsRixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUNoRCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUMvQyxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLEtBQUssRUFBRSxDQUFDO29CQUN4RCxNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUMvRCxDQUFDO1lBQ0gsQ0FBQztZQUNELFVBQVUsQ0FBQyxZQUFZLENBQUMsR0FBRyxZQUFZLENBQUM7UUFDMUMsQ0FBQztRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7Q0FDRiJ9
|
|
316
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5lbWFpbC1zZXR0aW5ncy5tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvZW1haWwvY2xhc3Nlcy5lbWFpbC1zZXR0aW5ncy5tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDM0UsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEYsT0FBTyxFQUNMLG9CQUFvQixFQUNwQiw2QkFBNkIsRUFDN0IsaUNBQWlDLEdBQ2xDLE1BQU0sZ0NBQWdDLENBQUM7QUFVeEMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFFekMsU0FBUyxVQUFVLENBQUksS0FBb0I7SUFDekMsSUFBSSxLQUFLLEtBQUssU0FBUztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzFDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFNLENBQUM7QUFDaEQsQ0FBQztBQUVELFNBQVMsTUFBTSxDQUFDLFNBQWlCLEVBQUUsTUFBYztJQUMvQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDakUsQ0FBQztBQUVELE1BQU0sT0FBTyxvQkFBb0I7SUFTWDtJQVJaLGlCQUFpQixDQUE4QjtJQUMvQyxxQkFBcUIsQ0FBb0I7SUFDekMsWUFBWSxHQUF1QixlQUFlLENBQUM7SUFDbkQsU0FBUyxHQUFvQixvQkFBb0IsQ0FBQztJQUNsRCxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ2hC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
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import type { UnifiedEmailServer } from '@push.rocks/smartmta';
|
|
2
|
+
import * as plugins from '../plugins.js';
|
|
3
|
+
import type { IDcRouterEmailTlsConfig } from '../classes.dcrouter.js';
|
|
4
|
+
import type { IEmailTlsCertificateStatus, TEmailTlsSource } from '../../dist_ts_interfaces/data/email-settings.js';
|
|
5
|
+
/** PEM material for the SMTP listener and where it was read from. */
|
|
6
|
+
export interface IEmailTlsMaterial {
|
|
7
|
+
certPem: string;
|
|
8
|
+
keyPem: string;
|
|
9
|
+
origin: string;
|
|
10
|
+
}
|
|
11
|
+
/** The part of the SMTP listener that takes replacement TLS material. */
|
|
12
|
+
export type TEmailTlsListener = Pick<UnifiedEmailServer, 'updateOptions'>;
|
|
13
|
+
export interface IEmailTlsRequest {
|
|
14
|
+
source: TEmailTlsSource;
|
|
15
|
+
tls: IDcRouterEmailTlsConfig | undefined;
|
|
16
|
+
/** Mail hostname plus every enabled mail-edge hostname. */
|
|
17
|
+
requiredHostnames: string[];
|
|
18
|
+
}
|
|
19
|
+
/** A stored certificate that covers at least one required hostname. */
|
|
20
|
+
export interface IStoredEmailCertificate {
|
|
21
|
+
domain: string;
|
|
22
|
+
certPem: string;
|
|
23
|
+
keyPem: string;
|
|
24
|
+
certificate: plugins.crypto.X509Certificate;
|
|
25
|
+
names: string[];
|
|
26
|
+
uncoveredHostnames: string[];
|
|
27
|
+
currentlyValid: boolean;
|
|
28
|
+
}
|
|
29
|
+
/** Whether `emailConfig.tls` carries operator-managed certificate material. */
|
|
30
|
+
export declare const hasConfiguredEmailTlsMaterial: (tlsArg: IDcRouterEmailTlsConfig | undefined) => boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Source for settings persisted without one: the material they served before
|
|
33
|
+
* the source existed — configured material when present, otherwise the
|
|
34
|
+
* managed certificate.
|
|
35
|
+
*/
|
|
36
|
+
export declare const deriveEmailTlsSource: (tlsArg: IDcRouterEmailTlsConfig | undefined) => TEmailTlsSource;
|
|
37
|
+
/** The `tls` block without certificate material; undefined when nothing else remains. */
|
|
38
|
+
export declare const withoutConfiguredEmailTlsMaterial: (tlsArg: IDcRouterEmailTlsConfig | undefined) => IDcRouterEmailTlsConfig | undefined;
|
|
39
|
+
/** The `tls` block handed to SmartMTA: configured options plus the resolved PEM material. */
|
|
40
|
+
export declare const composeEmailServerTls: (tlsArg: IDcRouterEmailTlsConfig | undefined, materialArg: IEmailTlsMaterial | undefined) => IDcRouterEmailTlsConfig | undefined;
|
|
41
|
+
/** DNS subject alternative names of a certificate, lowercased. */
|
|
42
|
+
export declare const getCertificateDnsNames: (certificateArg: plugins.crypto.X509Certificate) => string[];
|
|
43
|
+
/**
|
|
44
|
+
* RFC 6125 name matching: exact, or a `*.` wildcard standing for exactly one
|
|
45
|
+
* left-most label. Implemented here because X509Certificate.checkHost does not
|
|
46
|
+
* match wildcards on every runtime dcrouter ships on.
|
|
47
|
+
*/
|
|
48
|
+
export declare const certificateNameCovers: (nameArg: string, hostnameArg: string) => boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Owns the SMTP listener's certificate: resolves it from the selected source
|
|
51
|
+
* on every listener start and relevant renewal, and reports what is served.
|
|
52
|
+
*
|
|
53
|
+
* Resolved material is held here and never written back into the email
|
|
54
|
+
* configuration, so every resolution reads the source of truth again.
|
|
55
|
+
*/
|
|
56
|
+
export declare class EmailTlsManager {
|
|
57
|
+
private served;
|
|
58
|
+
/** Resolve the listener material from the selected source and record it as served. */
|
|
59
|
+
resolve(requestArg: IEmailTlsRequest): Promise<IEmailTlsMaterial | undefined>;
|
|
60
|
+
/**
|
|
61
|
+
* Push an issued or renewed certificate to the running listener when it can
|
|
62
|
+
* change what the listener should serve. Returns the applied material.
|
|
63
|
+
*/
|
|
64
|
+
applyIssuance(domainArg: string, listenerArg: TEmailTlsListener, requestArg: IEmailTlsRequest): Promise<IEmailTlsMaterial | undefined>;
|
|
65
|
+
/** Forget the served certificate (the listener is stopped). */
|
|
66
|
+
clear(): void;
|
|
67
|
+
/**
|
|
68
|
+
* Whether an issued or renewed certificate can change what the listener
|
|
69
|
+
* should serve. Only the managed source follows issuance; the stored
|
|
70
|
+
* certificate is keyed by the requested route domain, so a wildcard or
|
|
71
|
+
* sibling issuance is matched by the names it covers, not by its key.
|
|
72
|
+
*/
|
|
73
|
+
isRelevantIssuance(domainArg: string, requiredHostnamesArg: string[]): Promise<boolean>;
|
|
74
|
+
/**
|
|
75
|
+
* The best stored certificate for the required hostnames: currently valid
|
|
76
|
+
* and covering every name first, then valid, then the most names covered,
|
|
77
|
+
* then the latest expiry. Undefined when none covers any required hostname.
|
|
78
|
+
*/
|
|
79
|
+
selectStoredCertificate(requiredHostnamesArg: string[], nowArg?: number): Promise<IStoredEmailCertificate | undefined>;
|
|
80
|
+
/**
|
|
81
|
+
* Gate for switching to the managed source: refuses unless a currently
|
|
82
|
+
* valid stored certificate covers every required hostname.
|
|
83
|
+
*/
|
|
84
|
+
assertManagedCertificateAvailable(requiredHostnamesArg: string[]): Promise<IStoredEmailCertificate>;
|
|
85
|
+
/**
|
|
86
|
+
* The served certificate checked against the required hostnames now, so
|
|
87
|
+
* expiry while running shows up without a new resolution.
|
|
88
|
+
*/
|
|
89
|
+
getStatus(requiredHostnamesArg: string[], nowArg?: number): IEmailTlsCertificateStatus | undefined;
|
|
90
|
+
/**
|
|
91
|
+
* Operator-managed material. Paths that cannot be read FAIL listener
|
|
92
|
+
* startup: continuing without TLS is what once produced a cleartext
|
|
93
|
+
* submission port, so a broken explicit configuration must be impossible
|
|
94
|
+
* to miss.
|
|
95
|
+
*/
|
|
96
|
+
private resolveConfiguredMaterial;
|
|
97
|
+
private resolveManagedCertificate;
|
|
98
|
+
private checkKeyPair;
|
|
99
|
+
}
|