DKIM2 verification

This commit is contained in:
Maurus Decimus
2026-07-01 16:20:02 +02:00
parent e3c6f95bfd
commit 186d9feecb
33 changed files with 640 additions and 206 deletions

View File

@@ -19,8 +19,8 @@ use registry::{
enums::{DkimRotationStage, DkimSignatureType, DnsRecordType},
prelude::{Object, ObjectType, Property},
structs::{
Dkim1Signature, DkimManagement, DkimSignature, DnsManagement, Domain, SecretText,
SecretTextValue, Task, TaskDomainManagement, TaskStatus,
Dkim1Signature, Dkim2Signature, DkimManagement, DkimSignature, DnsManagement, Domain,
SecretText, SecretTextValue, Task, TaskDomainManagement, TaskStatus,
},
},
types::{datetime::UTCDateTime, id::ObjectId},
@@ -148,10 +148,11 @@ async fn dkim_management(server: &Server, task: &TaskDomainManagement) -> trc::R
let secret = {
if dkim.selector_template.contains("dummy") {
match algorithm {
DkimSignatureType::Dkim1Ed25519Sha256 => TEST_ED25519_KEY.to_string(),
DkimSignatureType::Dkim1RsaSha256 => TEST_RSA_KEY.to_string(),
DkimSignatureType::Dkim2Ed25519Sha256
| DkimSignatureType::Dkim2RsaSha256 => todo!(),
DkimSignatureType::Dkim1Ed25519Sha256
| DkimSignatureType::Dkim2Ed25519Sha256 => TEST_ED25519_KEY.to_string(),
DkimSignatureType::Dkim1RsaSha256 | DkimSignatureType::Dkim2RsaSha256 => {
TEST_RSA_KEY.to_string()
}
}
} else {
generate_dkim_private_key(algorithm).await.unwrap().unwrap()
@@ -177,18 +178,38 @@ async fn dkim_management(server: &Server, task: &TaskDomainManagement) -> trc::R
};
// Build key
let signature = Dkim1Signature {
stage: DkimRotationStage::Active,
domain_id: task.domain_id,
member_tenant_id: domain.member_tenant_id,
selector: selector.clone(),
private_key: SecretText::Text(SecretTextValue { secret }),
..Default::default()
};
let private_key = SecretText::Text(SecretTextValue { secret });
let mut signature = match algorithm {
DkimSignatureType::Dkim1Ed25519Sha256 => DkimSignature::Dkim1Ed25519Sha256(signature),
DkimSignatureType::Dkim1RsaSha256 => DkimSignature::Dkim1RsaSha256(signature),
DkimSignatureType::Dkim2Ed25519Sha256 | DkimSignatureType::Dkim2RsaSha256 => todo!(),
DkimSignatureType::Dkim1Ed25519Sha256 | DkimSignatureType::Dkim1RsaSha256 => {
let signature = Dkim1Signature {
stage: DkimRotationStage::Active,
domain_id: task.domain_id,
member_tenant_id: domain.member_tenant_id,
selector: selector.clone(),
private_key,
..Default::default()
};
if algorithm == DkimSignatureType::Dkim1Ed25519Sha256 {
DkimSignature::Dkim1Ed25519Sha256(signature)
} else {
DkimSignature::Dkim1RsaSha256(signature)
}
}
DkimSignatureType::Dkim2Ed25519Sha256 | DkimSignatureType::Dkim2RsaSha256 => {
let signature = Dkim2Signature {
stage: DkimRotationStage::Active,
domain_id: task.domain_id,
member_tenant_id: domain.member_tenant_id,
selector: selector.clone(),
private_key,
..Default::default()
};
if algorithm == DkimSignatureType::Dkim2Ed25519Sha256 {
DkimSignature::Dkim2Ed25519Sha256(signature)
} else {
DkimSignature::Dkim2RsaSha256(signature)
}
}
};
// Publish key