use super::responses::{
CrossSignResponse, GenerateCertificateResponse, GenerateIntermediateCSRResponse,
GenerateIntermediateResponse, GenerateRootResponse, ImportIssuerResponse,
ListCertificatesResponse, ListIssuersResponse, ListRolesResponse, ReadCRLConfigResponse,
ReadCertificateResponse, ReadIssuerCertificateResponse, ReadRoleResponse, ReadURLsResponse,
RevokeCertificateResponse, RotateCRLsResponse, SetDefaultIssuerResponse,
SignCertificateResponse, SignIntermediateIssuerResponse, SignIntermediateResponse,
SignSelfIssuedResponse, UpdateIssuerResponse,
};
use rustify_derive::Endpoint;
use serde::Serialize;
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(path = "{self.mount}/config/ca", method = "POST", builder = "true")]
#[builder(setter(into, strip_option), default)]
pub struct SubmitCARequest {
#[endpoint(skip)]
pub mount: String,
pub pem_bundle: String,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(
path = "{self.mount}/root/generate/{self.cert_type}",
method = "POST",
response = "Option<GenerateRootResponse>",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct GenerateRootRequest {
#[endpoint(skip)]
pub mount: String,
#[endpoint(skip)]
pub cert_type: String,
pub alt_names: Option<String>,
pub common_name: Option<String>,
pub country: Option<Vec<String>>,
pub exclude_cn_from_sans: Option<bool>,
pub format: Option<String>,
pub locality: Option<Vec<String>>,
pub key_bits: Option<u64>,
pub key_type: Option<String>,
pub ip_sans: Option<String>,
pub max_path_length: Option<i32>,
pub organization: Option<Vec<String>>,
pub other_sans: Option<Vec<String>>,
pub ou: Option<Vec<String>>,
pub permitted_dns_domains: Vec<String>,
pub postal_code: Option<Vec<String>>,
pub private_key_format: Option<String>,
pub province: Option<Vec<String>>,
pub serial_number: Option<String>,
pub street_address: Option<Vec<String>>,
pub ttl: Option<String>,
pub uri_sans: Option<String>,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(path = "{self.mount}/root", method = "DELETE", builder = "true")]
#[builder(setter(into, strip_option), default)]
pub struct DeleteRootRequest {
#[endpoint(skip)]
pub mount: String,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(
path = "{self.mount}/sign/{self.role}",
method = "POST",
response = "SignCertificateResponse",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct SignCertificateRequest {
#[endpoint(skip)]
pub mount: String,
#[endpoint(skip)]
pub role: String,
pub alt_names: Option<String>,
pub common_name: Option<String>,
pub csr: Option<String>,
pub exclude_cn_from_sans: Option<bool>,
pub format: Option<String>,
pub ip_sans: Option<String>,
pub other_sans: Option<Vec<String>>,
pub serial_number: Option<String>,
pub ttl: Option<String>,
pub uri_sans: Option<String>,
pub remove_roots_from_chain: Option<bool>,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(
path = "{self.mount}/root/sign-intermediate",
method = "POST",
response = "SignIntermediateResponse",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct SignIntermediateRequest {
#[endpoint(skip)]
pub mount: String,
pub alt_names: Option<String>,
pub common_name: Option<String>,
pub country: Option<Vec<String>>,
pub csr: Option<String>,
pub exclude_cn_from_sans: Option<bool>,
pub format: Option<String>,
pub locality: Option<Vec<String>>,
pub ip_sans: Option<String>,
pub max_path_length: Option<i32>,
pub organization: Option<Vec<String>>,
pub other_sans: Option<Vec<String>>,
pub ou: Option<Vec<String>>,
pub permitted_dns_domains: Option<Vec<String>>,
pub postal_code: Option<Vec<String>>,
pub province: Option<Vec<String>>,
pub serial_number: Option<String>,
pub street_address: Option<Vec<String>>,
pub ttl: Option<String>,
pub uri_sans: Option<String>,
pub use_csr_values: Option<bool>,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(
path = "{self.mount}/root/sign-self-issued",
method = "POST",
response = "SignSelfIssuedResponse",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct SignSelfIssuedRequest {
#[endpoint(skip)]
pub mount: String,
pub certificate: String,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(
path = "{self.mount}/certs",
method = "LIST",
response = "ListCertificatesResponse",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct ListCertificatesRequest {
#[endpoint(skip)]
pub mount: String,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(
path = "{self.mount}/cert/{self.serial}",
response = "ReadCertificateResponse",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct ReadCertificateRequest {
#[endpoint(skip)]
pub mount: String,
#[endpoint(skip)]
pub serial: String,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(
path = "{self.mount}/issue/{self.role}",
method = "POST",
response = "GenerateCertificateResponse",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct GenerateCertificateRequest {
#[endpoint(skip)]
pub mount: String,
#[endpoint(skip)]
pub role: String,
pub alt_names: Option<String>,
pub common_name: Option<String>,
pub exclude_cn_from_sans: Option<bool>,
pub format: Option<String>,
pub ip_sans: Option<String>,
pub other_sans: Option<Vec<String>>,
pub private_key_format: Option<String>,
pub ttl: Option<String>,
pub uri_sans: Option<String>,
pub remove_roots_from_chain: Option<bool>,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(
path = "{self.mount}/revoke",
method = "POST",
response = "RevokeCertificateResponse",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct RevokeCertificateRequest {
#[endpoint(skip)]
pub mount: String,
pub serial_number: String,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(
path = "{self.mount}/config/crl",
response = "ReadCRLConfigResponse",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct ReadCRLConfigRequest {
#[endpoint(skip)]
pub mount: String,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(path = "{self.mount}/config/crl", method = "POST", builder = "true")]
#[builder(setter(into, strip_option), default)]
pub struct SetCRLConfigRequest {
#[endpoint(skip)]
pub mount: String,
pub expiry: Option<String>,
pub disable: Option<bool>,
pub ocsp_disable: Option<bool>,
pub ocsp_expiry: Option<String>,
pub auto_rebuild: Option<bool>,
pub auto_rebuild_grace_period: Option<String>,
pub enable_delta: Option<bool>,
pub delta_rebuild_interval: Option<String>,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(
path = "{self.mount}/crl/rotate",
response = "RotateCRLsResponse",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct RotateCRLsRequest {
#[endpoint(skip)]
pub mount: String,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(
path = "{self.mount}/config/urls",
response = "ReadURLsResponse",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct ReadURLsRequest {
#[endpoint(skip)]
pub mount: String,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(path = "{self.mount}/config/urls", method = "POST", builder = "true")]
#[builder(setter(into, strip_option), default)]
pub struct SetURLsRequest {
#[endpoint(skip)]
pub mount: String,
pub issuing_certificates: Option<Vec<String>>,
pub crl_distribution_points: Option<Vec<String>>,
pub ocsp_servers: Option<Vec<String>>,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(
path = "{self.mount}/intermediate/generate/{self.cert_type}",
method = "POST",
response = "GenerateIntermediateResponse",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct GenerateIntermediateRequest {
#[endpoint(skip)]
pub mount: String,
#[endpoint(skip)]
pub cert_type: String,
pub alt_names: Option<String>,
pub common_name: Option<String>,
pub country: Option<Vec<String>>,
pub exclude_cn_from_sans: Option<bool>,
pub format: Option<String>,
pub locality: Option<Vec<String>>,
pub key_type: Option<String>,
pub key_name: Option<String>,
pub key_ref: Option<String>,
pub key_bits: Option<u64>,
pub signature_bits: Option<u64>,
pub key_format: Option<String>,
pub ip_sans: Option<String>,
pub organization: Option<Vec<String>>,
pub other_sans: Option<Vec<String>>,
pub ou: Option<Vec<String>>,
pub postal_code: Option<Vec<String>>,
pub private_key_format: Option<String>,
pub province: Option<Vec<String>>,
pub serial_number: Option<String>,
pub street_address: Option<Vec<String>>,
pub uri_sans: Option<String>,
pub add_basic_constrains: Option<bool>,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(
path = "{self.mount}/intermediate/set-signed",
method = "POST",
builder = "true",
response = "ImportIssuerResponse"
)]
#[builder(setter(into, strip_option), default)]
pub struct SetSignedIntermediateRequest {
#[endpoint(skip)]
pub mount: String,
pub certificate: String,
}
#[derive(Builder, Debug, Default, Endpoint, Serialize)]
#[endpoint(
path = "{self.mount}/intermediate/cross-sign",
method = "POST",
response = "CrossSignResponse",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct CrossSignRequest {
#[endpoint(skip)]
pub mount: String,
pub add_basic_constraints: Option<bool>,
pub alt_names: Option<String>,
#[serde(rename = "type")]
pub cert_type: String,
pub common_name: Option<String>,
pub country: Option<Vec<String>>,
pub exclude_cn_from_sans: Option<bool>,
pub format: Option<String>,
pub ip_sans: Option<String>,
pub key_bits: Option<u64>,
pub key_name: Option<String>,
pub key_ref: Option<String>,
pub key_type: Option<String>,
pub locality: Option<Vec<String>>,
pub organization: Option<Vec<String>>,
pub other_sans: Option<Vec<String>>,
pub ou: Option<Vec<String>>,
pub postal_code: Option<Vec<String>>,
pub private_key_format: Option<String>,
pub province: Option<Vec<String>>,
pub serial_number: Option<String>,
pub signature_bits: u16,
pub street_address: Option<Vec<String>>,
pub uri_sans: Option<String>,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(
path = "{self.mount}/roles",
method = "LIST",
response = "ListRolesResponse",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct ListRolesRequest {
#[endpoint(skip)]
pub mount: String,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(
path = "{self.mount}/roles/{self.name}",
response = "ReadRoleResponse",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct ReadRoleRequest {
#[endpoint(skip)]
pub mount: String,
#[endpoint(skip)]
pub name: String,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(
path = "{self.mount}/roles/{self.name}",
method = "POST",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct SetRoleRequest {
#[endpoint(skip)]
pub mount: String,
#[endpoint(skip)]
pub name: String,
pub issuer_ref: Option<String>,
pub allow_any_name: Option<bool>,
pub allow_bare_domains: Option<bool>,
pub allow_glob_domains: Option<bool>,
pub allow_ip_sans: Option<bool>,
pub allow_localhost: Option<bool>,
pub allow_subdomains: Option<bool>,
pub allow_token_displayname: Option<bool>,
pub allowed_domains: Option<Vec<String>>,
pub allowed_domains_template: Option<bool>,
pub allowed_other_sans: Option<Vec<String>>,
pub allowed_serial_numbers: Option<Vec<String>>,
pub allowed_uri_sans: Option<Vec<String>>,
pub basic_constraints_valid_for_non_ca: Option<bool>,
pub client_flag: Option<bool>,
pub code_signing_flag: Option<bool>,
pub country: Option<Vec<String>>,
pub email_protection_flag: Option<bool>,
pub enforce_hostnames: Option<bool>,
pub ext_key_usage: Option<Vec<String>>,
pub ext_key_usage_oids: Option<Vec<String>>,
pub generate_lease: Option<bool>,
pub key_bits: Option<u64>,
pub key_type: Option<String>,
pub key_usage: Option<Vec<String>>,
pub locality: Option<Vec<String>>,
pub max_ttl: Option<String>,
pub no_store: Option<bool>,
pub not_before_duration: Option<u64>,
pub organization: Option<Vec<String>>,
pub ou: Option<Vec<String>>,
pub policy_identifiers: Option<Vec<String>>,
pub postal_code: Option<Vec<String>>,
pub province: Option<Vec<String>>,
pub require_cn: Option<bool>,
pub server_flag: Option<bool>,
pub street_address: Option<Vec<String>>,
pub ttl: Option<String>,
pub use_csr_common_name: Option<bool>,
pub use_csr_sans: Option<bool>,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(
path = "{self.mount}/roles/{self.name}",
method = "DELETE",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct DeleteRoleRequest {
#[endpoint(skip)]
pub mount: String,
#[endpoint(skip)]
pub name: String,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(
path = "{self.mount}/tidy",
method = "POST",
response = "()",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct TidyRequest {
#[endpoint(skip)]
pub mount: String,
pub tidy_cert_store: Option<bool>,
pub tidy_revoked_certs: Option<bool>,
pub safety_buffer: Option<String>,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(
path = "{self.mount}/issuers",
method = "LIST",
response = "ListIssuersResponse",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct ListIssuersRequest {
#[endpoint(skip)]
pub mount: String,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(
path = "{self.mount}/issuer/{self.issuer}/json",
response = "ReadIssuerCertificateResponse",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct ReadIssuerCertificateRequest {
#[endpoint(skip)]
pub mount: String,
#[endpoint(skip)]
pub issuer: String,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(
path = "{self.mount}/issuer/{self.issuer}/sign-intermediate",
method = "POST",
response = "SignIntermediateIssuerResponse",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct SignIntermediateIssuerRequest {
#[endpoint(skip)]
pub mount: String,
pub alt_names: Option<String>,
pub csr: String,
pub common_name: String,
pub country: Option<Vec<String>>,
pub exclude_cn_from_sans: Option<bool>,
pub format: Option<String>,
pub ip_sans: Option<String>,
pub issuer: String,
pub locality: Option<Vec<String>>,
pub max_path_length: Option<i32>,
pub not_after: Option<String>,
pub not_before_duration: Option<u64>,
pub organization: Option<Vec<String>>,
pub other_sans: Option<Vec<String>>,
pub ou: Option<Vec<String>>,
pub postal_code: Option<Vec<String>>,
pub province: Option<Vec<String>>,
pub permitted_dns_domains: Vec<String>,
pub serial_number: Option<String>,
pub signature_bits: Option<u16>,
pub skid: Option<String>,
pub street_address: Option<Vec<String>>,
pub ttl: Option<String>,
pub uri_sans: Option<String>,
pub use_pss: Option<bool>,
pub use_csr_values: Option<bool>,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(
path = "{self.mount}/issuers/import/bundle",
method = "POST",
response = "ImportIssuerResponse",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct ImportIssuerRequest {
#[endpoint(skip)]
pub mount: String,
pub pem_bundle: String,
}
#[derive(Builder, Debug, Default, Endpoint, Serialize)]
#[endpoint(
path = "{self.mount}/config/issuers",
method = "POST",
response = "SetDefaultIssuerResponse",
builder = "false"
)]
#[builder(setter(into, strip_option), default)]
pub struct SetDefaultIssuerRequest {
#[endpoint(skip)]
pub mount: String,
#[serde(rename = "default")]
pub default_issuer: String,
}
#[derive(Builder, Debug, Default, Endpoint, Serialize)]
#[endpoint(
path = "{self.mount}/issuer/{self.issuer_ref}",
method = "POST",
response = "UpdateIssuerResponse",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct UpdateIssuerRequest {
#[endpoint(skip)]
pub mount: String,
#[endpoint(skip)]
pub issuer_ref: String,
pub issuer_name: Option<String>,
pub leaf_not_after_behavior: Option<String>,
pub manual_chain: Option<Vec<String>>,
pub usage: Option<Vec<String>>,
pub revocation_signature_algorithm: Option<String>,
pub issuing_certificates: Option<Vec<String>>,
pub crl_distribution_points: Option<Vec<String>>,
pub delta_crl_distribution_points: Option<Vec<String>>,
pub ocsp_servers: Option<Vec<String>>,
pub enable_aia_url_templating: Option<bool>,
pub disable_critical_extension_checks: Option<bool>,
pub disable_path_length_checks: Option<bool>,
pub disable_name_checks: Option<bool>,
pub disable_name_constraint_checks: Option<bool>,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(
path = "{self.mount}/issuer/{self.issuer}",
method = "DELETE",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct DeleteIssuerRequest {
#[endpoint(skip)]
pub mount: String,
#[endpoint(skip)]
pub issuer: String,
}
#[derive(Builder, Debug, Default, Endpoint, Serialize)]
#[endpoint(
path = "{self.mount}/issuers/generate/intermediate/{self.request_type}",
method = "POST",
response = "GenerateIntermediateCSRResponse",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct GenerateIntermediateCSRRequest {
#[endpoint(skip)]
pub mount: String,
#[endpoint(skip)]
#[serde(rename = "type")]
pub request_type: String,
pub add_basic_constraints: Option<bool>,
pub alt_names: Option<String>,
pub common_name: Option<String>,
pub country: Option<Vec<String>>,
pub exclude_cn_from_sans: Option<bool>,
pub format: Option<String>,
pub ip_sans: Option<String>,
pub key_bits: Option<u64>,
pub key_name: Option<String>,
pub key_ref: Option<String>,
pub key_type: Option<String>,
pub locality: Option<Vec<String>>,
pub organization: Option<Vec<String>>,
pub other_sans: Option<Vec<String>>,
pub ou: Option<Vec<String>>,
pub postal_code: Option<Vec<String>>,
pub private_key_format: Option<String>,
pub province: Option<Vec<String>>,
pub serial_number: Option<String>,
pub signature_bits: u16,
pub street_address: Option<Vec<String>>,
pub uri_sans: Option<String>,
}
#[derive(Builder, Debug, Default, Endpoint)]
#[endpoint(
path = "{self.mount}/key/{self.key}",
method = "DELETE",
builder = "true"
)]
#[builder(setter(into, strip_option), default)]
pub struct DeleteKeyRequest {
#[endpoint(skip)]
pub mount: String,
#[endpoint(skip)]
pub key: String,
}