use crate::codec::support::{from_wire_timestamp, to_wire_timestamp};
use crate::external_credential::{
CreateExternalCredentialRequest, DeleteExternalCredentialRequest,
ExchangeExternalCredentialRequest, ExchangeExternalCredentialResponse, ExternalCredential,
ExternalCredentialAuthConfig, ExternalCredentialClientInfo, ExternalCredentialCredential,
ExternalCredentialGrant, ExternalCredentialOpaque, ExternalCredentialTokenExchangeDriver,
ExternalCredentialTokenResponse, GetExternalCredentialRequest, ListExternalCredentialsRequest,
ListExternalCredentialsResponse, ResolveExternalCredentialRequest,
ResolveExternalCredentialResponse, UpsertExternalCredentialRequest,
ValidateExternalCredentialConfigRequest,
};
use crate::generated::v1;
pub(crate) fn to_wire_create_external_credential_request(
value: CreateExternalCredentialRequest,
) -> v1::CreateExternalCredentialRequest {
v1::CreateExternalCredentialRequest {
credential: value.credential.map(to_wire_external_credential),
}
}
pub(crate) fn to_wire_delete_external_credential_request(
value: DeleteExternalCredentialRequest,
) -> v1::DeleteExternalCredentialRequest {
v1::DeleteExternalCredentialRequest { id: value.id }
}
pub(crate) fn to_wire_exchange_external_credential_request(
value: ExchangeExternalCredentialRequest,
) -> v1::ExchangeExternalCredentialRequest {
v1::ExchangeExternalCredentialRequest {
provider: value.provider,
connection: value.connection,
connection_id: value.connection_id,
credential_subject_id: value.credential_subject_id,
actor_subject_id: value.actor_subject_id,
instance: value.instance,
auth: value.auth.map(to_wire_external_credential_auth_config),
credential_json: value.credential_json,
connection_params: value.connection_params,
}
}
pub(crate) fn from_wire_exchange_external_credential_response(
value: v1::ExchangeExternalCredentialResponse,
) -> ExchangeExternalCredentialResponse {
ExchangeExternalCredentialResponse {
token_response: value
.token_response
.map(from_wire_external_credential_token_response),
}
}
pub(crate) fn to_wire_external_credential(value: ExternalCredential) -> v1::ExternalCredential {
v1::ExternalCredential {
id: value.id,
subject: value.subject,
audience: value.audience,
qualifier: value.qualifier,
metadata_json: value.metadata_json,
created_at: value.created_at.map(to_wire_timestamp),
updated_at: value.updated_at.map(to_wire_timestamp),
credential: value.credential.map(to_wire_external_credential_credential),
}
}
pub(crate) fn from_wire_external_credential(value: v1::ExternalCredential) -> ExternalCredential {
ExternalCredential {
id: value.id,
subject: value.subject,
audience: value.audience,
qualifier: value.qualifier,
metadata_json: value.metadata_json,
created_at: value.created_at.map(from_wire_timestamp),
updated_at: value.updated_at.map(from_wire_timestamp),
credential: value
.credential
.map(from_wire_external_credential_credential),
}
}
pub(crate) fn to_wire_external_credential_credential(
value: ExternalCredentialCredential,
) -> v1::external_credential::Credential {
match value {
ExternalCredentialCredential::Grant(value) => {
v1::external_credential::Credential::Grant(to_wire_external_credential_grant(value))
}
ExternalCredentialCredential::Client(value) => v1::external_credential::Credential::Client(
to_wire_external_credential_client_info(value),
),
ExternalCredentialCredential::Opaque(value) => {
v1::external_credential::Credential::Opaque(to_wire_external_credential_opaque(value))
}
}
}
pub(crate) fn from_wire_external_credential_credential(
value: v1::external_credential::Credential,
) -> ExternalCredentialCredential {
match value {
v1::external_credential::Credential::Grant(value) => {
ExternalCredentialCredential::Grant(from_wire_external_credential_grant(value))
}
v1::external_credential::Credential::Client(value) => {
ExternalCredentialCredential::Client(from_wire_external_credential_client_info(value))
}
v1::external_credential::Credential::Opaque(value) => {
ExternalCredentialCredential::Opaque(from_wire_external_credential_opaque(value))
}
}
}
pub(crate) fn to_wire_external_credential_auth_config(
value: ExternalCredentialAuthConfig,
) -> v1::ExternalCredentialAuthConfig {
v1::ExternalCredentialAuthConfig {
r#type: value.r#type,
token: value.token,
token_prefix: value.token_prefix,
grant_type: value.grant_type,
token_url: value.token_url,
client_id: value.client_id,
client_secret: value.client_secret,
client_auth: value.client_auth,
token_exchange: value.token_exchange,
scopes: value.scopes,
scope_param: value.scope_param,
scope_separator: value.scope_separator,
token_params: value.token_params,
refresh_params: value.refresh_params,
accept_header: value.accept_header,
access_token_path: value.access_token_path,
token_exchange_drivers: value
.token_exchange_drivers
.into_iter()
.map(to_wire_external_credential_token_exchange_driver)
.collect(),
refresh_token: value.refresh_token,
}
}
pub(crate) fn to_wire_external_credential_client_info(
value: ExternalCredentialClientInfo,
) -> v1::ExternalCredentialClientInfo {
v1::ExternalCredentialClientInfo {
client_id: value.client_id,
client_secret: value.client_secret,
client_secret_expires_at: value.client_secret_expires_at.map(to_wire_timestamp),
}
}
pub(crate) fn from_wire_external_credential_client_info(
value: v1::ExternalCredentialClientInfo,
) -> ExternalCredentialClientInfo {
ExternalCredentialClientInfo {
client_id: value.client_id,
client_secret: value.client_secret,
client_secret_expires_at: value.client_secret_expires_at.map(from_wire_timestamp),
}
}
pub(crate) fn to_wire_external_credential_grant(
value: ExternalCredentialGrant,
) -> v1::ExternalCredentialGrant {
v1::ExternalCredentialGrant {
access_token: value.access_token,
refresh_token: value.refresh_token,
scope: value.scope,
expires_at: value.expires_at.map(to_wire_timestamp),
last_refreshed_at: value.last_refreshed_at.map(to_wire_timestamp),
refresh_error_count: value.refresh_error_count,
}
}
pub(crate) fn from_wire_external_credential_grant(
value: v1::ExternalCredentialGrant,
) -> ExternalCredentialGrant {
ExternalCredentialGrant {
access_token: value.access_token,
refresh_token: value.refresh_token,
scope: value.scope,
expires_at: value.expires_at.map(from_wire_timestamp),
last_refreshed_at: value.last_refreshed_at.map(from_wire_timestamp),
refresh_error_count: value.refresh_error_count,
}
}
pub(crate) fn to_wire_external_credential_opaque(
value: ExternalCredentialOpaque,
) -> v1::ExternalCredentialOpaque {
v1::ExternalCredentialOpaque {
fields: value.fields,
}
}
pub(crate) fn from_wire_external_credential_opaque(
value: v1::ExternalCredentialOpaque,
) -> ExternalCredentialOpaque {
ExternalCredentialOpaque {
fields: value.fields,
}
}
pub(crate) fn to_wire_external_credential_token_exchange_driver(
value: ExternalCredentialTokenExchangeDriver,
) -> v1::ExternalCredentialTokenExchangeDriver {
v1::ExternalCredentialTokenExchangeDriver {
r#type: value.r#type,
target_principal: value.target_principal,
scopes: value.scopes,
lifetime_seconds: value.lifetime_seconds,
endpoint: value.endpoint,
params: value.params,
}
}
pub(crate) fn from_wire_external_credential_token_response(
value: v1::ExternalCredentialTokenResponse,
) -> ExternalCredentialTokenResponse {
ExternalCredentialTokenResponse {
access_token: value.access_token,
refresh_token: value.refresh_token,
expires_in: value.expires_in,
token_type: value.token_type,
extra_json: value.extra_json,
refresh_source: value.refresh_source,
}
}
pub(crate) fn to_wire_get_external_credential_request(
value: GetExternalCredentialRequest,
) -> v1::GetExternalCredentialRequest {
v1::GetExternalCredentialRequest {
subject: value.subject,
audience: value.audience,
qualifier: value.qualifier,
}
}
pub(crate) fn to_wire_list_external_credentials_request(
value: ListExternalCredentialsRequest,
) -> v1::ListExternalCredentialsRequest {
v1::ListExternalCredentialsRequest {
subject: value.subject,
audience: value.audience,
}
}
pub(crate) fn from_wire_list_external_credentials_response(
value: v1::ListExternalCredentialsResponse,
) -> ListExternalCredentialsResponse {
ListExternalCredentialsResponse {
credentials: value
.credentials
.into_iter()
.map(from_wire_external_credential)
.collect(),
}
}
pub(crate) fn to_wire_resolve_external_credential_request(
value: ResolveExternalCredentialRequest,
) -> v1::ResolveExternalCredentialRequest {
v1::ResolveExternalCredentialRequest {
provider: value.provider,
connection: value.connection,
connection_id: value.connection_id,
mode: value.mode,
credential_subject_id: value.credential_subject_id,
actor_subject_id: value.actor_subject_id,
instance: value.instance,
auth: value.auth.map(to_wire_external_credential_auth_config),
connection_params: value.connection_params,
}
}
pub(crate) fn from_wire_resolve_external_credential_response(
value: v1::ResolveExternalCredentialResponse,
) -> ResolveExternalCredentialResponse {
ResolveExternalCredentialResponse {
token: value.token,
expires_at: value.expires_at.map(from_wire_timestamp),
metadata_json: value.metadata_json,
params: value.params,
credential: value.credential.map(from_wire_external_credential),
}
}
pub(crate) fn to_wire_upsert_external_credential_request(
value: UpsertExternalCredentialRequest,
) -> v1::UpsertExternalCredentialRequest {
v1::UpsertExternalCredentialRequest {
credential: value.credential.map(to_wire_external_credential),
}
}
pub(crate) fn to_wire_validate_external_credential_config_request(
value: ValidateExternalCredentialConfigRequest,
) -> v1::ValidateExternalCredentialConfigRequest {
v1::ValidateExternalCredentialConfigRequest {
provider: value.provider,
connection: value.connection,
connection_id: value.connection_id,
mode: value.mode,
auth: value.auth.map(to_wire_external_credential_auth_config),
connection_params: value.connection_params,
}
}