use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use utoipa::ToSchema;
use uuid::Uuid;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "lowercase")]
pub enum UrlMode {
Public,
Signed,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, ToSchema)]
pub struct StorageBackendView {
pub id: Uuid,
pub name: String,
pub kind: String,
pub active: bool,
pub endpoint: String,
pub bucket: String,
pub region: String,
pub access_key_id: String,
pub secret_set: bool,
pub force_path_style: bool,
pub prefix: Option<String>,
pub public_base_url: Option<String>,
pub url_mode: UrlMode,
pub signed_url_ttl_secs: i64,
pub supports_sha256_checksum: bool,
pub connectivity_status: Option<serde_json::Value>,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
}
fn default_ttl_secs() -> i64 {
600
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct CreateStorageBackendRequest {
pub name: String,
pub endpoint: String,
pub bucket: String,
pub region: String,
pub access_key_id: String,
pub access_key_secret: String,
#[serde(default)]
pub force_path_style: bool,
#[serde(default)]
pub prefix: Option<String>,
#[serde(default)]
pub public_base_url: Option<String>,
pub url_mode: UrlMode,
#[serde(default = "default_ttl_secs")]
pub signed_url_ttl_secs: i64,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, ToSchema)]
pub struct UpdateStorageBackendRequest {
#[serde(default)]
pub name: Option<String>,
#[serde(default)]
pub endpoint: Option<String>,
#[serde(default)]
pub bucket: Option<String>,
#[serde(default)]
pub region: Option<String>,
#[serde(default)]
pub access_key_id: Option<String>,
#[serde(default)]
pub access_key_secret: Option<String>,
#[serde(default)]
pub force_path_style: Option<bool>,
#[serde(default)]
pub prefix: Option<String>,
#[serde(default)]
pub public_base_url: Option<String>,
#[serde(default)]
pub url_mode: Option<UrlMode>,
#[serde(default)]
pub signed_url_ttl_secs: Option<i64>,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct StorageTestResult {
pub ok: bool,
pub supports_sha256_checksum: bool,
pub detail: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct CorsConfigRequest {
pub allowed_origins: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct CorsConfigResult {
pub ok: bool,
pub detail: String,
}