feat: add tenant credential management #63

Merged
johnride merged 1 commits from feat/tenantCredentials into master 2025-06-17 18:28:08 +00:00
5 changed files with 56 additions and 0 deletions
Showing only changes of commit a2bac9ac10 - Show all commits

1
Cargo.lock generated
View File

@ -1422,6 +1422,7 @@ name = "harmony"
version = "0.1.0"
dependencies = [
"async-trait",
"chrono",
"cidr",
"convert_case",
"derive-new",

View File

@ -36,6 +36,7 @@ serde-value = "0.7.0"
http = "1.2.0"
inquire = "0.7.5"
convert_case = "0.8.0"
chrono = "0.4"
[workspace.dependencies.uuid]
version = "1.11.0"

View File

@ -42,6 +42,7 @@ dockerfile_builder = "0.1.5"
temp-file = "0.1.9"
convert_case.workspace = true
email_address = "0.2.9"
chrono.workspace = true
fqdn = { version = "0.4.6", features = [
"domain-label-cannot-start-or-end-with-hyphen",
"domain-label-length-limited-to-63",

View File

@ -0,0 +1,50 @@
use async_trait::async_trait;
use chrono::{DateTime, Utc};
use serde::Serialize;
use crate::{interpret::InterpretError, score::Score, topology::Topology};
/// Create and manage Tenant Credentials.
///
/// This is meant to be used by cluster administrators who need to provide their tenant users and
/// services with credentials to access their resources.
#[derive(Debug, Clone, Serialize)]
pub struct TenantCredentialScore;
impl<T: Topology + TenantCredentialManager> Score<T> for TenantCredentialScore {
fn create_interpret(&self) -> Box<dyn crate::interpret::Interpret<T>> {
todo!()
}
fn name(&self) -> String {
todo!()
}
}
#[async_trait]
pub trait TenantCredentialManager {
async fn create_user(&self) -> Result<TenantCredentialBundle, InterpretError>;
}
#[derive(Debug, Clone)]
pub struct CredentialMetadata {
pub tenant_id: String,
pub credential_id: String,
pub description: String,
pub created_at: DateTime<Utc>,
pub expires_at: Option<DateTime<Utc>>,
}
#[derive(Debug, Clone)]
pub enum CredentialData {
/// Used to store login instructions destined to a human. Akin to AWS login instructions email
/// upon new console user creation.
PlainText(String),
}
pub struct TenantCredentialBundle {
_metadata: CredentialMetadata,
_content: CredentialData,
}
impl TenantCredentialBundle {}

View File

@ -1,3 +1,6 @@
mod credentials;
pub use credentials::*;
use async_trait::async_trait;
use serde::Serialize;