use std::fmt;
use rpki::{
ca::{
idexchange::{ChildHandle, ParentHandle},
provisioning::{
IssuanceRequest, ParentResourceClassName, ResourceClassName,
RevocationRequest,
},
},
crypto::KeyIdentifier,
repository::resources::ResourceSet,
};
use serde::{Deserialize, Serialize};
use crate::api::admin::{ParentCaContact, RepositoryContact};
use crate::api::aspa::CustomerAsn;
use crate::api::bgpsec::BgpSecAsnKey;
use crate::api::ca::{IdCertInfo, ReceivedCert, RtaName};
use crate::api::roa::RoaPayloadJsonMapKey;
use crate::server::ca::bgpsec::{BgpSecCertificateUpdates, StoredBgpSecCsr};
use crate::server::ca::certauth::Rfc8183Id;
use crate::server::ca::child::ChildCertificateUpdates;
use crate::server::ca::events::CertAuthEvent;
use crate::server::ca::keys::CertifiedKey;
use crate::server::ca::roa::RoaUpdates;
use crate::server::ca::rta::{PreparedRta, SignedRta};
use super::aspa::{
Pre0_14_0AspaDefinition, Pre0_14_0AspaObjectsUpdates,
Pre0_14_0AspaProvidersUpdate,
};
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[allow(clippy::large_enum_variant)]
#[serde(rename_all = "snake_case")]
#[serde(tag = "type")]
pub enum Pre0_14_0CertAuthEvent {
ChildAdded {
child: ChildHandle,
id_cert: IdCertInfo,
resources: ResourceSet,
},
ChildCertificateIssued {
child: ChildHandle,
resource_class_name: ResourceClassName,
ki: KeyIdentifier,
},
ChildKeyRevoked {
child: ChildHandle,
resource_class_name: ResourceClassName,
ki: KeyIdentifier,
},
ChildCertificatesUpdated {
resource_class_name: ResourceClassName,
updates: ChildCertificateUpdates,
},
ChildUpdatedIdCert {
child: ChildHandle,
id_cert: IdCertInfo,
},
ChildUpdatedResources {
child: ChildHandle,
resources: ResourceSet,
},
ChildUpdatedResourceClassNameMapping {
child: ChildHandle,
name_in_parent: ResourceClassName,
name_for_child: ResourceClassName,
},
ChildRemoved {
child: ChildHandle,
},
ChildSuspended {
child: ChildHandle,
},
ChildUnsuspended {
child: ChildHandle,
},
IdUpdated {
id: Rfc8183Id,
},
ParentAdded {
parent: ParentHandle,
contact: ParentCaContact,
},
ParentUpdated {
parent: ParentHandle,
contact: ParentCaContact,
},
ParentRemoved {
parent: ParentHandle,
},
ResourceClassAdded {
resource_class_name: ResourceClassName,
parent: ParentHandle,
parent_resource_class_name: ParentResourceClassName,
pending_key: KeyIdentifier,
},
ResourceClassRemoved {
resource_class_name: ResourceClassName,
parent: ParentHandle,
revoke_requests: Vec<RevocationRequest>,
},
CertificateRequested {
resource_class_name: ResourceClassName,
req: IssuanceRequest,
ki: KeyIdentifier, },
CertificateReceived {
resource_class_name: ResourceClassName,
rcvd_cert: ReceivedCert,
ki: KeyIdentifier, },
KeyRollPendingKeyAdded {
resource_class_name: ResourceClassName,
pending_key_id: KeyIdentifier,
},
KeyPendingToNew {
resource_class_name: ResourceClassName,
new_key: CertifiedKey,
},
KeyPendingToActive {
resource_class_name: ResourceClassName,
current_key: CertifiedKey,
},
KeyRollActivated {
resource_class_name: ResourceClassName,
revoke_req: RevocationRequest,
},
KeyRollFinished {
resource_class_name: ResourceClassName,
},
UnexpectedKeyFound {
resource_class_name: ResourceClassName,
revoke_req: RevocationRequest,
},
RouteAuthorizationAdded {
auth: RoaPayloadJsonMapKey,
},
RouteAuthorizationComment {
auth: RoaPayloadJsonMapKey,
comment: Option<String>,
},
RouteAuthorizationRemoved {
auth: RoaPayloadJsonMapKey,
},
RoasUpdated {
resource_class_name: ResourceClassName,
updates: RoaUpdates,
},
AspaConfigAdded {
aspa_config: Pre0_14_0AspaDefinition,
},
AspaConfigUpdated {
customer: CustomerAsn,
update: Pre0_14_0AspaProvidersUpdate,
},
AspaConfigRemoved {
customer: CustomerAsn,
},
AspaObjectsUpdated {
resource_class_name: ResourceClassName,
updates: Pre0_14_0AspaObjectsUpdates,
},
BgpSecDefinitionAdded {
key: BgpSecAsnKey,
csr: StoredBgpSecCsr,
},
BgpSecDefinitionUpdated {
key: BgpSecAsnKey,
csr: StoredBgpSecCsr,
},
BgpSecDefinitionRemoved {
key: BgpSecAsnKey,
},
BgpSecCertificatesUpdated {
resource_class_name: ResourceClassName,
updates: BgpSecCertificateUpdates,
},
RepoUpdated {
contact: RepositoryContact,
},
RtaSigned {
name: RtaName,
rta: SignedRta,
},
RtaPrepared {
name: RtaName,
prepared: PreparedRta,
},
}
impl fmt::Display for Pre0_14_0CertAuthEvent {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{self:?}")
}
}
impl From<Pre0_14_0CertAuthEvent> for CertAuthEvent {
fn from(old: Pre0_14_0CertAuthEvent) -> CertAuthEvent {
match old {
Pre0_14_0CertAuthEvent::AspaConfigAdded { .. } => unimplemented!("not migrated"),
Pre0_14_0CertAuthEvent::AspaConfigUpdated { .. } => unimplemented!("not migrated"),
Pre0_14_0CertAuthEvent::AspaConfigRemoved { .. } => unimplemented!("not migrated"),
Pre0_14_0CertAuthEvent::AspaObjectsUpdated { .. } => unimplemented!("not migrated"),
Pre0_14_0CertAuthEvent::ChildAdded {
child,
id_cert,
resources,
} => CertAuthEvent::ChildAdded {
child,
id_cert,
resources,
},
Pre0_14_0CertAuthEvent::ChildCertificateIssued {
child,
resource_class_name,
ki,
} => CertAuthEvent::ChildCertificateIssued {
child,
resource_class_name,
ki,
},
Pre0_14_0CertAuthEvent::ChildKeyRevoked {
child,
resource_class_name,
ki,
} => CertAuthEvent::ChildKeyRevoked {
child,
resource_class_name,
ki,
},
Pre0_14_0CertAuthEvent::ChildCertificatesUpdated {
resource_class_name,
updates,
} => CertAuthEvent::ChildCertificatesUpdated {
resource_class_name,
updates,
},
Pre0_14_0CertAuthEvent::ChildUpdatedIdCert { child, id_cert } => {
CertAuthEvent::ChildUpdatedIdCert { child, id_cert }
}
Pre0_14_0CertAuthEvent::ChildUpdatedResources { child, resources } => {
CertAuthEvent::ChildUpdatedResources { child, resources }
}
Pre0_14_0CertAuthEvent::ChildUpdatedResourceClassNameMapping {
child,
name_in_parent,
name_for_child,
} => CertAuthEvent::ChildUpdatedResourceClassNameMapping {
child,
name_in_parent,
name_for_child,
},
Pre0_14_0CertAuthEvent::ChildRemoved { child } => CertAuthEvent::ChildRemoved { child },
Pre0_14_0CertAuthEvent::ChildSuspended { child } => CertAuthEvent::ChildSuspended { child },
Pre0_14_0CertAuthEvent::ChildUnsuspended { child } => CertAuthEvent::ChildUnsuspended { child },
Pre0_14_0CertAuthEvent::IdUpdated { id } => CertAuthEvent::IdUpdated { id },
Pre0_14_0CertAuthEvent::ParentAdded { parent, contact } => CertAuthEvent::ParentAdded { parent, contact },
Pre0_14_0CertAuthEvent::ParentUpdated { parent, contact } => {
CertAuthEvent::ParentUpdated { parent, contact }
}
Pre0_14_0CertAuthEvent::ParentRemoved { parent } => CertAuthEvent::ParentRemoved { parent },
Pre0_14_0CertAuthEvent::ResourceClassAdded {
resource_class_name,
parent,
parent_resource_class_name,
pending_key,
} => CertAuthEvent::ResourceClassAdded {
resource_class_name,
parent,
parent_resource_class_name,
pending_key,
},
Pre0_14_0CertAuthEvent::ResourceClassRemoved {
resource_class_name,
parent,
revoke_requests,
} => CertAuthEvent::ResourceClassRemoved {
resource_class_name,
parent,
revoke_requests,
},
Pre0_14_0CertAuthEvent::CertificateRequested {
resource_class_name,
req,
ki,
} => CertAuthEvent::CertificateRequested {
resource_class_name,
req,
ki,
},
Pre0_14_0CertAuthEvent::CertificateReceived {
resource_class_name,
rcvd_cert,
ki,
} => CertAuthEvent::CertificateReceived {
resource_class_name,
rcvd_cert,
ki,
},
Pre0_14_0CertAuthEvent::KeyRollPendingKeyAdded {
resource_class_name,
pending_key_id,
} => CertAuthEvent::KeyRollPendingKeyAdded {
resource_class_name,
pending_key_id,
},
Pre0_14_0CertAuthEvent::KeyPendingToNew {
resource_class_name,
new_key,
} => CertAuthEvent::KeyPendingToNew {
resource_class_name,
new_key,
},
Pre0_14_0CertAuthEvent::KeyPendingToActive {
resource_class_name,
current_key,
} => CertAuthEvent::KeyPendingToActive {
resource_class_name,
current_key,
},
Pre0_14_0CertAuthEvent::KeyRollActivated {
resource_class_name,
revoke_req,
} => CertAuthEvent::KeyRollActivated {
resource_class_name,
revoke_req,
},
Pre0_14_0CertAuthEvent::KeyRollFinished { resource_class_name } => {
CertAuthEvent::KeyRollFinished { resource_class_name }
}
Pre0_14_0CertAuthEvent::UnexpectedKeyFound {
resource_class_name,
revoke_req,
} => CertAuthEvent::UnexpectedKeyFound {
resource_class_name,
revoke_req,
},
Pre0_14_0CertAuthEvent::RouteAuthorizationAdded { auth } => CertAuthEvent::RouteAuthorizationAdded { auth },
Pre0_14_0CertAuthEvent::RouteAuthorizationComment { auth, comment } => {
CertAuthEvent::RouteAuthorizationComment { auth, comment }
}
Pre0_14_0CertAuthEvent::RouteAuthorizationRemoved { auth } => {
CertAuthEvent::RouteAuthorizationRemoved { auth }
}
Pre0_14_0CertAuthEvent::RoasUpdated {
resource_class_name,
updates,
} => CertAuthEvent::RoasUpdated {
resource_class_name,
updates,
},
Pre0_14_0CertAuthEvent::BgpSecDefinitionAdded { key, csr } => {
CertAuthEvent::BgpSecDefinitionAdded { key, csr }
}
Pre0_14_0CertAuthEvent::BgpSecDefinitionUpdated { key, csr } => {
CertAuthEvent::BgpSecDefinitionUpdated { key, csr }
}
Pre0_14_0CertAuthEvent::BgpSecDefinitionRemoved { key } => CertAuthEvent::BgpSecDefinitionRemoved { key },
Pre0_14_0CertAuthEvent::BgpSecCertificatesUpdated {
resource_class_name,
updates,
} => CertAuthEvent::BgpSecCertificatesUpdated {
resource_class_name,
updates,
},
Pre0_14_0CertAuthEvent::RepoUpdated { contact } => CertAuthEvent::RepoUpdated { contact },
Pre0_14_0CertAuthEvent::RtaSigned { name, rta } => CertAuthEvent::RtaSigned { name, rta },
Pre0_14_0CertAuthEvent::RtaPrepared { name, prepared } => CertAuthEvent::RtaPrepared { name, prepared },
}
}
}