remora/crates/remora-contracts/src/credentials.rs

149 lines
4.1 KiB
Rust

use std::collections::BTreeMap;
use remora_domain::OpaqueId;
use serde::{Deserialize, Serialize};
use crate::{DateTimeDto, NullableDto};
#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum SourceCredentialKindDto {
BasicAuth,
BearerToken,
HttpHeaders,
ObjectStore,
HuggingFace,
}
#[derive(Clone, Deserialize, Eq, PartialEq, Serialize)]
#[serde(deny_unknown_fields)]
pub struct BasicAuthMaterialDto {
pub username: String,
pub password: String,
}
#[derive(Clone, Deserialize, Eq, PartialEq, Serialize)]
#[serde(deny_unknown_fields)]
pub struct TokenMaterialDto {
pub token: String,
}
#[derive(Clone, Deserialize, Eq, PartialEq, Serialize)]
#[serde(deny_unknown_fields)]
pub struct HttpHeadersMaterialDto {
pub headers: BTreeMap<String, String>,
}
#[derive(Clone, Deserialize, Eq, PartialEq, Serialize)]
#[serde(deny_unknown_fields)]
pub struct ObjectStoreCredentialMaterialDto {
pub access_key_id: String,
pub secret_access_key: String,
#[serde(
default,
deserialize_with = "crate::dto::optional_non_null",
skip_serializing_if = "Option::is_none"
)]
pub session_token: Option<String>,
}
#[derive(Clone, Deserialize, Eq, PartialEq, Serialize)]
#[serde(untagged)]
pub enum CredentialMaterialDto {
BasicAuth(BasicAuthMaterialDto),
Token(TokenMaterialDto),
HttpHeaders(HttpHeadersMaterialDto),
ObjectStore(ObjectStoreCredentialMaterialDto),
}
#[derive(Clone, Deserialize, Eq, PartialEq, Serialize)]
#[serde(tag = "kind", rename_all = "snake_case")]
pub enum SourceCredentialCreateDto {
BasicAuth(BasicAuthCredentialCreateDto),
BearerToken(BearerTokenCredentialCreateDto),
HttpHeaders(HttpHeadersCredentialCreateDto),
ObjectStore(ObjectStoreCredentialCreateDto),
HuggingFace(HuggingFaceCredentialCreateDto),
}
#[derive(Clone, Deserialize, Eq, PartialEq, Serialize)]
#[serde(deny_unknown_fields)]
pub struct BasicAuthCredentialCreateDto {
pub label: String,
pub material: BasicAuthMaterialDto,
}
#[derive(Clone, Deserialize, Eq, PartialEq, Serialize)]
#[serde(deny_unknown_fields)]
pub struct BearerTokenCredentialCreateDto {
pub label: String,
pub material: TokenMaterialDto,
}
#[derive(Clone, Deserialize, Eq, PartialEq, Serialize)]
#[serde(deny_unknown_fields)]
pub struct HttpHeadersCredentialCreateDto {
pub label: String,
pub material: HttpHeadersMaterialDto,
}
#[derive(Clone, Deserialize, Eq, PartialEq, Serialize)]
#[serde(deny_unknown_fields)]
pub struct ObjectStoreCredentialCreateDto {
pub label: String,
pub material: ObjectStoreCredentialMaterialDto,
}
#[derive(Clone, Deserialize, Eq, PartialEq, Serialize)]
#[serde(deny_unknown_fields)]
pub struct HuggingFaceCredentialCreateDto {
pub label: String,
pub material: TokenMaterialDto,
}
#[derive(Clone, Deserialize, Eq, PartialEq, Serialize)]
#[serde(deny_unknown_fields)]
pub struct SourceCredentialRotateDto {
pub material: CredentialMaterialDto,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[serde(deny_unknown_fields)]
pub struct SourceCredentialVersionDto {
pub id: OpaqueId,
pub created_at: DateTimeDto,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[serde(deny_unknown_fields)]
pub struct CredentialGrantVersionDto {
pub credential_id: OpaqueId,
pub version_id: OpaqueId,
}
#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum SourceCredentialStatusDto {
Active,
Revoked,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[serde(deny_unknown_fields)]
pub struct SourceCredentialDto {
pub id: OpaqueId,
pub owner: OpaqueId,
pub label: String,
pub kind: SourceCredentialKindDto,
pub status: SourceCredentialStatusDto,
pub active_version: NullableDto<SourceCredentialVersionDto>,
pub created_at: DateTimeDto,
pub updated_at: DateTimeDto,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[serde(deny_unknown_fields)]
pub struct SourceCredentialPageDto {
pub items: Vec<SourceCredentialDto>,
pub next_cursor: NullableDto<String>,
}