use serde::Deserialize;
use serde_json::Value;
use crate::signer::SignerError;
use super::client::UpstreamError;
#[derive(Debug, Deserialize)]
pub(super) struct UpstreamOrderView {
pub(super) status: String,
#[serde(default)]
pub(super) authorizations: Vec<String>,
#[serde(default)]
pub(super) finalize: Option<String>,
#[serde(default)]
pub(super) certificate: Option<String>,
#[serde(default)]
pub(super) error: Option<Value>,
}
#[derive(Debug, Deserialize)]
pub(super) struct RenewalInfoView {
#[serde(rename = "suggestedWindow")]
pub(super) suggested_window: SuggestedWindow,
#[serde(rename = "explanationURL", default)]
pub(super) explanation_url: Option<String>,
}
#[derive(Debug, Deserialize)]
pub(super) struct SuggestedWindow {
pub(super) start: String,
pub(super) end: String,
}
pub(super) fn parse_rfc3339(value: &str) -> Result<i64, SignerError> {
time::OffsetDateTime::parse(value, &time::format_description::well_known::Rfc3339)
.map(|parsed| parsed.unix_timestamp())
.map_err(|error| {
SignerError::Internal(format!("upstream ARI window was not RFC3339: {error}"))
})
}
pub(super) fn upstream_to_signer_error(error: UpstreamError) -> SignerError {
if error.is_bad_csr() {
SignerError::BadCsr
} else {
SignerError::Internal(error.to_string())
}
}
#[derive(Debug, Deserialize)]
pub(super) struct UpstreamAuthzView {
pub(super) status: String,
pub(super) identifier: UpstreamIdentifier,
#[serde(default)]
pub(super) challenges: Vec<UpstreamChallengeView>,
}
#[derive(Debug, Deserialize)]
pub(super) struct UpstreamIdentifier {
pub(super) value: String,
}
#[derive(Debug, Deserialize)]
pub(super) struct UpstreamChallengeView {
#[serde(rename = "type")]
pub(super) typ: String,
pub(super) url: String,
pub(super) token: String,
}