use crate::config::SmartIDConfig;
use crate::models::api::response::SmartIdAPIResponse;
use crate::models::common::{CertificateLevel, RequestProperties};
use serde::{Deserialize, Serialize};
use serde_with::skip_serializing_none;
#[skip_serializing_none]
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CertificateChoiceDeviceLinkRequest {
#[serde(rename = "relyingPartyUUID")]
pub relying_party_uuid: String,
pub relying_party_name: String,
pub initial_callback_url: Option<String>,
pub certificate_level: CertificateLevel,
pub nonce: Option<String>,
pub capabilities: Option<Vec<String>>,
pub request_properties: Option<RequestProperties>,
}
impl CertificateChoiceDeviceLinkRequest {
pub fn new(cfg: &SmartIDConfig) -> Self {
CertificateChoiceDeviceLinkRequest {
relying_party_uuid: cfg.relying_party_uuid.clone(),
relying_party_name: cfg.relying_party_name.clone(),
certificate_level: CertificateLevel::QUALIFIED,
..Self::default()
}
}
}
#[allow(dead_code)]
pub(crate) type CertificateChoiceDeviceLinkResponse =
SmartIdAPIResponse<CertificateChoiceDeviceLinkSession>;
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CertificateChoiceDeviceLinkSession {
#[serde(rename = "sessionID")]
pub session_id: String,
pub session_token: String,
pub session_secret: String,
pub device_link_base: String,
}
#[skip_serializing_none]
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CertificateChoiceNotificationRequest {
#[serde(rename = "relyingPartyUUID")]
pub relying_party_uuid: String,
pub relying_party_name: String,
pub initial_callback_url: Option<String>,
pub certificate_level: CertificateLevel,
pub nonce: Option<String>,
pub capabilities: Option<Vec<String>>,
pub request_properties: Option<RequestProperties>,
}
impl CertificateChoiceNotificationRequest {
pub fn new(cfg: &SmartIDConfig) -> Self {
CertificateChoiceNotificationRequest {
relying_party_uuid: cfg.relying_party_uuid.clone(),
relying_party_name: cfg.relying_party_name.clone(),
certificate_level: CertificateLevel::QUALIFIED,
..Self::default()
}
}
}
pub(crate) type CertificateChoiceNotificationResponse =
SmartIdAPIResponse<CertificateChoiceNotificationSession>;
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CertificateChoiceNotificationSession {
#[serde(rename = "sessionID")]
pub session_id: String,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SigningCertificateRequest {
#[serde(rename = "relyingPartyUUID")]
pub relying_party_uuid: String,
pub relying_party_name: String,
pub certificate_level: CertificateLevel,
}
#[allow(dead_code)]
pub(crate) type SigningCertificateResponse = SmartIdAPIResponse<SigningCertificateResult>;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SigningCertificateResult {
pub state: SigningCertificateResponseState,
pub cert: SigningCertificate,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "UPPERCASE")]
#[allow(non_camel_case_types)]
pub enum SigningCertificateResponseState {
OK,
DOCUMENT_UNUSABLE,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SigningCertificate {
pub value: String, pub certificate_level: CertificateLevel, }