fix(mail): align queue, outbound hostname, and DKIM selector behavior across the mail server APIs
This commit is contained in:
@@ -1,12 +1,13 @@
|
||||
import { logger } from '../../logger.js';
|
||||
import { DKIMCreator } from '../security/classes.dkimcreator.js';
|
||||
import { hasStorageManagerMethods, type IStorageManagerLike } from '../interfaces.storage.js';
|
||||
import { DomainRegistry } from './classes.domain.registry.js';
|
||||
import { RustSecurityBridge } from '../../security/classes.rustsecuritybridge.js';
|
||||
import { Email } from '../core/classes.email.js';
|
||||
|
||||
/** External DcRouter interface shape used by DkimManager */
|
||||
interface DcRouter {
|
||||
storageManager: any;
|
||||
storageManager?: IStorageManagerLike;
|
||||
dnsServer?: any;
|
||||
}
|
||||
|
||||
@@ -39,11 +40,19 @@ export class DkimManager {
|
||||
let keyPair: { privateKey: string; publicKey: string };
|
||||
|
||||
try {
|
||||
keyPair = await this.dkimCreator.readDKIMKeys(domain);
|
||||
keyPair = selector === 'default'
|
||||
? await this.dkimCreator.readDKIMKeys(domain)
|
||||
: await this.dkimCreator.readDKIMKeysForSelector(domain, selector);
|
||||
logger.log('info', `Using existing DKIM keys for domain: ${domain}`);
|
||||
} catch (error) {
|
||||
keyPair = await this.dkimCreator.createDKIMKeys();
|
||||
await this.dkimCreator.createAndStoreDKIMKeys(domain);
|
||||
} catch {
|
||||
await this.dkimCreator.handleDKIMKeysForSelector(
|
||||
domain,
|
||||
selector,
|
||||
domainConfig.dkim?.keySize || 2048,
|
||||
);
|
||||
keyPair = selector === 'default'
|
||||
? await this.dkimCreator.readDKIMKeys(domain)
|
||||
: await this.dkimCreator.readDKIMKeysForSelector(domain, selector);
|
||||
logger.log('info', `Generated new DKIM keys for domain: ${domain}`);
|
||||
}
|
||||
|
||||
@@ -106,10 +115,12 @@ export class DkimManager {
|
||||
|
||||
logger.log('info', `DKIM DNS handler registered for new selector: ${newSelector}._domainkey.${domain}`);
|
||||
|
||||
await this.dcRouter.storageManager.set(
|
||||
`/email/dkim/${domain}/public.key`,
|
||||
keyPair.publicKey
|
||||
);
|
||||
if (hasStorageManagerMethods(this.dcRouter.storageManager, ['set'])) {
|
||||
await this.dcRouter.storageManager.set(
|
||||
`/email/dkim/${domain}/public.key`,
|
||||
keyPair.publicKey
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
this.dkimCreator.cleanupOldKeys(domain, 30).catch(error => {
|
||||
@@ -127,8 +138,10 @@ export class DkimManager {
|
||||
|
||||
async handleDkimSigning(email: Email, domain: string, selector: string): Promise<void> {
|
||||
try {
|
||||
await this.dkimCreator.handleDKIMKeysForDomain(domain);
|
||||
const { privateKey } = await this.dkimCreator.readDKIMKeys(domain);
|
||||
await this.dkimCreator.handleDKIMKeysForSelector(domain, selector);
|
||||
const { privateKey } = selector === 'default'
|
||||
? await this.dkimCreator.readDKIMKeys(domain)
|
||||
: await this.dkimCreator.readDKIMKeysForSelector(domain, selector);
|
||||
const rawEmail = email.toRFC822String();
|
||||
|
||||
// Detect key type from PEM header
|
||||
|
||||
Reference in New Issue
Block a user