use alloc::collections::BTreeMap;
use alloc::string::String;
use alloc::vec::Vec;
#[cfg(feature = "schemars")]
use schemars::JsonSchema;
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Clone, Debug, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
pub struct RepoSkin {
pub tenant_id: String,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub tenant_name: Option<String>,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub product_name: Option<String>,
pub theme: RepoSkinTheme,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub layout: Option<RepoSkinLayout>,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub worker_panel: Option<RepoWorkerPanel>,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub links: Option<RepoSkinLinks>,
}
#[derive(Clone, Debug, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
pub struct RepoSkinTheme {
pub logo_url: String,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub favicon_url: Option<String>,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub hero_image_url: Option<String>,
pub primary_color: String,
pub accent_color: String,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub background_color: Option<String>,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub background_gradient: Option<String>,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub font_family: Option<String>,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub success_color: Option<String>,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub warning_color: Option<String>,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub danger_color: Option<String>,
}
#[derive(Clone, Debug, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", serde(default))]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
pub struct RepoSkinLayout {
pub show_dashboard: bool,
pub show_repositories: bool,
pub show_pipeline: bool,
pub show_packs: bool,
pub show_trust_access: bool,
pub show_audit_compliance: bool,
pub show_admin_config: Option<bool>,
pub show_hero_band: Option<bool>,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub hero_title: Option<String>,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub hero_subtitle: Option<String>,
}
#[derive(Clone, Debug, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
pub struct RepoWorkerPanel {
pub enabled: bool,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub title: Option<String>,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub default_open: Option<bool>,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub position: Option<String>,
}
#[derive(Clone, Debug, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", serde(default))]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
pub struct RepoSkinLinks {
pub docs_url: Option<String>,
pub support_url: Option<String>,
pub status_url: Option<String>,
}
#[derive(Clone, Debug, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
pub struct RepoAuth {
pub tenant_id: String,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Vec::is_empty")
)]
pub identity_providers: Vec<IdentityProviderOption>,
}
#[derive(Clone, Debug, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
pub struct IdentityProviderOption {
pub id: String,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub kind: Option<String>,
pub label: String,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub icon: Option<String>,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub button_style: Option<String>,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub order: Option<i32>,
pub login_url: String,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub description: Option<String>,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub recommended: Option<bool>,
}
#[derive(Clone, Debug, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
pub struct RepoTenantConfig {
pub tenant_id: String,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Vec::is_empty")
)]
pub enabled_tabs: Vec<String>,
pub enabled_packs: EnabledPacks,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub default_pipeline: Option<DefaultPipeline>,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub stores: Option<Vec<StoreTarget>>,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub distributors: Option<Vec<DistributorTarget>>,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub features: Option<RepoConfigFeatures>,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub page_handlers: Option<BTreeMap<String, String>>,
}
#[derive(Clone, Debug, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", serde(default))]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
pub struct EnabledPacks {
pub identity_providers: Option<Vec<String>>,
pub source_providers: Option<Vec<String>>,
pub scanners: Option<Vec<String>>,
pub signing: Option<Vec<String>>,
pub attestation: Option<Vec<String>>,
pub policy_engines: Option<Vec<String>>,
pub oci_providers: Option<Vec<String>>,
}
#[derive(Clone, Debug, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", serde(default))]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
pub struct DefaultPipeline {
pub scanners: Option<Vec<String>>,
pub signing: Option<String>,
pub attestation: Option<String>,
pub policy_engine: Option<String>,
pub oci_provider: Option<String>,
}
#[derive(Clone, Debug, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
pub struct StoreTarget {
pub id: String,
pub label: String,
pub url: String,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub description: Option<String>,
}
#[derive(Clone, Debug, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
pub struct DistributorTarget {
pub id: String,
pub label: String,
pub url: String,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub description: Option<String>,
}
#[derive(Clone, Debug, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", serde(default))]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
pub struct RepoConfigFeatures {
pub allow_manual_approve: Option<bool>,
pub show_advanced_scan_views: Option<bool>,
pub show_experimental_modules: Option<bool>,
}
#[derive(Clone, Debug, PartialEq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
pub struct TenantDidDocument {
#[cfg_attr(feature = "serde", serde(rename = "@context", default))]
pub raw_context: Option<DidContext>,
pub id: String,
#[cfg_attr(
feature = "serde",
serde(
rename = "verificationMethod",
default,
skip_serializing_if = "Option::is_none"
)
)]
pub verification_method: Option<Vec<VerificationMethod>>,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub authentication: Option<Vec<String>>,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Vec::is_empty")
)]
pub service: Vec<DidService>,
}
impl TenantDidDocument {
pub fn context(&self) -> Vec<String> {
match &self.raw_context {
Some(DidContext::Single(value)) => alloc::vec![value.clone()],
Some(DidContext::Multiple(values)) => values.clone(),
None => Vec::new(),
}
}
}
#[derive(Clone, Debug, PartialEq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", serde(untagged))]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
pub enum DidContext {
Single(String),
Multiple(Vec<String>),
}
#[derive(Clone, Debug, PartialEq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
pub struct VerificationMethod {
pub id: String,
#[cfg_attr(feature = "serde", serde(rename = "type"))]
pub r#type: String,
pub controller: String,
#[cfg_attr(
feature = "serde",
serde(
rename = "publicKeyJwk",
default,
skip_serializing_if = "Option::is_none"
)
)]
pub public_key_jwk: Option<Value>,
#[cfg_attr(
feature = "serde",
serde(
rename = "publicKeyMultibase",
default,
skip_serializing_if = "Option::is_none"
)
)]
pub public_key_multibase: Option<String>,
}
#[derive(Clone, Debug, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
pub struct DidService {
pub id: String,
#[cfg_attr(feature = "serde", serde(rename = "type"))]
pub r#type: String,
#[cfg_attr(feature = "serde", serde(rename = "serviceEndpoint"))]
pub service_endpoint: String,
}