use serde::{Deserialize, Serialize};
use super::error::SignError;
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum Platform {
Ios,
Android,
}
impl Platform {
pub fn as_str(&self) -> &str {
match self {
Platform::Ios => "ios",
Platform::Android => "android",
}
}
}
impl std::str::FromStr for Platform {
type Err = SignError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s.to_lowercase().as_str() {
"ios" => Ok(Platform::Ios),
"android" => Ok(Platform::Android),
_ => Err(SignError::InvalidPlatform(format!(
"Invalid platform: {}. Must be 'ios' or 'android'",
s
))),
}
}
}
impl std::fmt::Display for Platform {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.as_str())
}
}
#[derive(Debug, Deserialize)]
pub struct CertificateSigningRequest {
pub csr: String,
pub metadata: Option<CSRMetadata>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct CSRMetadata {
pub device_id: Option<String>,
pub app_version: Option<String>,
}
#[derive(Debug, Serialize)]
pub struct SignedCertificateResponse {
pub certificate_id: String,
pub certificate_chain: String,
pub expires_at: chrono::DateTime<chrono::Utc>,
pub serial_number: String,
}
#[derive(Debug, Deserialize)]
pub struct C2PASigningRequest {
pub claim: String,
#[serde(default)]
pub platform: String,
pub client_data_hash: Option<String>,
pub client_data_json: Option<String>,
pub key_id: Option<String>,
pub assertion: Option<String>,
#[serde(alias = "token")]
pub device_id: Option<String>,
pub integrity_token: Option<String>,
pub nonce: Option<String>,
pub package_name: Option<String>,
pub counter: Option<i64>,
pub timestamp: Option<i64>,
pub request_signature: Option<String>,
}
#[derive(Debug, Serialize)]
pub struct C2PASigningResponse {
pub signature: String,
}
#[derive(Debug, Serialize)]
pub struct IntegrityChallengeResponse {
pub challenge: String,
pub message: String,
}
#[derive(Debug, Serialize)]
pub struct C2PAConfiguration {
pub algorithm: String,
pub timestamp_url: String,
pub signing_url: String,
pub certificate_chain: String,
}