forked from NationTech/harmony
Adds the foundation for managing tenant credentials, including: - `TenantCredentialScore` for scoring credential-related operations. - `TenantCredentialManager` trait for creating users. - `CredentialMetadata` struct to store credential information. - `CredentialData` enum to hold credential content. - `TenantCredentialBundle` struct to encapsulate metadata and content. This provides a starting point for implementing credential creation, storage, and retrieval within the harmony system. Reviewed-on: NationTech/harmony#63 Co-authored-by: Jean-Gabriel Gill-Couture <jg@nationtech.io> Co-committed-by: Jean-Gabriel Gill-Couture <jg@nationtech.io>
51 lines
1.3 KiB
Rust
51 lines
1.3 KiB
Rust
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 {}
|