use core::fmt::Display;
use ockam_core::api::Method;
use ockam_core::compat::string::{String, ToString};
use ockam_core::Route;
use crate::Identifier;
enum CredentialIssuerServiceAddress {
Controller,
AuthorityNode,
}
impl Display for CredentialIssuerServiceAddress {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
match self {
CredentialIssuerServiceAddress::Controller => write!(f, "accounts"),
CredentialIssuerServiceAddress::AuthorityNode => write!(f, "credential_issuer"),
}
}
}
enum CredentialIssuerApiServiceAddress {
ControllerAccount,
ControllerProject { project_id: String },
AuthorityNode,
}
impl Display for CredentialIssuerApiServiceAddress {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
match self {
CredentialIssuerApiServiceAddress::ControllerAccount => write!(f, "/v0/account"),
CredentialIssuerApiServiceAddress::ControllerProject { project_id } => {
write!(f, "/v0/project/{}", project_id)
}
CredentialIssuerApiServiceAddress::AuthorityNode => write!(f, "/"),
}
}
}
#[derive(Debug, Clone)]
pub struct RemoteCredentialRetrieverInfo {
pub issuer: Identifier,
pub route: Route,
pub service_address: String,
pub api_service_address: String,
pub request_method: Method,
}
impl RemoteCredentialRetrieverInfo {
pub fn create_for_project_member(issuer: Identifier, route: Route) -> Self {
Self::new(
issuer,
route,
CredentialIssuerServiceAddress::AuthorityNode.to_string(),
CredentialIssuerApiServiceAddress::AuthorityNode.to_string(),
Method::Post,
)
}
pub fn create_for_project_admin(issuer: Identifier, route: Route, project_id: String) -> Self {
Self::new(
issuer,
route,
CredentialIssuerServiceAddress::Controller.to_string(),
CredentialIssuerApiServiceAddress::ControllerProject { project_id }.to_string(),
Method::Get,
)
}
pub fn create_for_account_admin(issuer: Identifier, route: Route) -> Self {
Self::new(
issuer,
route,
CredentialIssuerServiceAddress::Controller.to_string(),
CredentialIssuerApiServiceAddress::ControllerAccount.to_string(),
Method::Get,
)
}
pub fn new(
issuer: Identifier,
route: Route,
service_address: String,
api_service_address: String,
request_method: Method,
) -> Self {
Self {
issuer,
route,
service_address,
api_service_address,
request_method,
}
}
}