#[allow(unused_imports)]
use super::types::*;
#[derive(Clone)]
pub struct DelegatedKeysClient {
client: crate::client::Client,
}
impl DelegatedKeysClient {
pub fn new(client: crate::client::Client) -> Self {
DelegatedKeysClient { client }
}
pub async fn list_keys(
&self,
query: Option<ListKeysQuery>,
) -> Result<ListKeysResponse, crate::error::Error> {
let mut path = String::from("/keys");
if let Some(query) = &query {
let mut q: Vec<String> = Vec::new();
if let Some(v) = &query.limit {
q.push(format!("limit={}", urlencoding::encode(&v.to_string())));
}
if let Some(v) = &query.pagination_token {
q.push(format!(
"paginationToken={}",
urlencoding::encode(&v.to_string())
));
}
if let Some(v) = &query.owner {
q.push(format!("owner={}", urlencoding::encode(&v.to_string())));
}
if !q.is_empty() {
path.push('?');
path.push_str(&q.join("&"));
}
}
self.client
.request::<ListKeysResponse>(reqwest::Method::GET, &path, None, false)
.await
}
pub async fn create_key_init(
&self,
body: CreateKeyRequest,
) -> Result<crate::signer::UserActionChallenge, crate::error::Error> {
let path = String::from("/keys");
let body = serde_json::to_value(&body)?;
self.client
.create_user_action_challenge(reqwest::Method::POST, &path, Some(&body))
.await
}
pub async fn create_key_complete(
&self,
body: CreateKeyRequest,
challenge_identifier: String,
assertion: crate::signer::CredentialAssertion,
) -> Result<CreateKeyResponse, crate::error::Error> {
let path = String::from("/keys");
let body = serde_json::to_value(&body)?;
let user_action = self
.client
.complete_user_action_signing(challenge_identifier, &assertion)
.await?;
self.client
.request_with_user_action::<CreateKeyResponse>(
reqwest::Method::POST,
&path,
Some(&body),
&user_action,
)
.await
}
pub async fn delegate_key_init(
&self,
key_id: String,
body: DelegateKeyRequest,
) -> Result<crate::signer::UserActionChallenge, crate::error::Error> {
let path = format!("/keys/{}/delegate", urlencoding::encode(&key_id));
let body = serde_json::to_value(&body)?;
self.client
.create_user_action_challenge(reqwest::Method::POST, &path, Some(&body))
.await
}
pub async fn delegate_key_complete(
&self,
key_id: String,
body: DelegateKeyRequest,
challenge_identifier: String,
assertion: crate::signer::CredentialAssertion,
) -> Result<DelegateKeyResponse, crate::error::Error> {
let path = format!("/keys/{}/delegate", urlencoding::encode(&key_id));
let body = serde_json::to_value(&body)?;
let user_action = self
.client
.complete_user_action_signing(challenge_identifier, &assertion)
.await?;
self.client
.request_with_user_action::<DelegateKeyResponse>(
reqwest::Method::POST,
&path,
Some(&body),
&user_action,
)
.await
}
pub async fn get_key(&self, key_id: String) -> Result<GetKeyResponse, crate::error::Error> {
let path = format!("/keys/{}", urlencoding::encode(&key_id));
self.client
.request::<GetKeyResponse>(reqwest::Method::GET, &path, None, false)
.await
}
pub async fn update_key_init(
&self,
key_id: String,
body: UpdateKeyRequest,
) -> Result<crate::signer::UserActionChallenge, crate::error::Error> {
let path = format!("/keys/{}", urlencoding::encode(&key_id));
let body = serde_json::to_value(&body)?;
self.client
.create_user_action_challenge(reqwest::Method::PUT, &path, Some(&body))
.await
}
pub async fn update_key_complete(
&self,
key_id: String,
body: UpdateKeyRequest,
challenge_identifier: String,
assertion: crate::signer::CredentialAssertion,
) -> Result<UpdateKeyResponse, crate::error::Error> {
let path = format!("/keys/{}", urlencoding::encode(&key_id));
let body = serde_json::to_value(&body)?;
let user_action = self
.client
.complete_user_action_signing(challenge_identifier, &assertion)
.await?;
self.client
.request_with_user_action::<UpdateKeyResponse>(
reqwest::Method::PUT,
&path,
Some(&body),
&user_action,
)
.await
}
pub async fn delete_key_init(
&self,
key_id: String,
) -> Result<crate::signer::UserActionChallenge, crate::error::Error> {
let path = format!("/keys/{}", urlencoding::encode(&key_id));
self.client
.create_user_action_challenge(reqwest::Method::DELETE, &path, None)
.await
}
pub async fn delete_key_complete(
&self,
key_id: String,
challenge_identifier: String,
assertion: crate::signer::CredentialAssertion,
) -> Result<DeleteKeyResponse, crate::error::Error> {
let path = format!("/keys/{}", urlencoding::encode(&key_id));
let user_action = self
.client
.complete_user_action_signing(challenge_identifier, &assertion)
.await?;
self.client
.request_with_user_action::<DeleteKeyResponse>(
reqwest::Method::DELETE,
&path,
None,
&user_action,
)
.await
}
pub async fn derive_key_init(
&self,
key_id: String,
body: DeriveKeyRequest,
) -> Result<crate::signer::UserActionChallenge, crate::error::Error> {
let path = format!("/keys/{}/derive", urlencoding::encode(&key_id));
let body = serde_json::to_value(&body)?;
self.client
.create_user_action_challenge(reqwest::Method::POST, &path, Some(&body))
.await
}
pub async fn derive_key_complete(
&self,
key_id: String,
body: DeriveKeyRequest,
challenge_identifier: String,
assertion: crate::signer::CredentialAssertion,
) -> Result<DeriveKeyResponse, crate::error::Error> {
let path = format!("/keys/{}/derive", urlencoding::encode(&key_id));
let body = serde_json::to_value(&body)?;
let user_action = self
.client
.complete_user_action_signing(challenge_identifier, &assertion)
.await?;
self.client
.request_with_user_action::<DeriveKeyResponse>(
reqwest::Method::POST,
&path,
Some(&body),
&user_action,
)
.await
}
pub async fn export_key_init(
&self,
key_id: String,
body: ExportKeyRequest,
) -> Result<crate::signer::UserActionChallenge, crate::error::Error> {
let path = format!("/keys/{}/export", urlencoding::encode(&key_id));
let body = serde_json::to_value(&body)?;
self.client
.create_user_action_challenge(reqwest::Method::POST, &path, Some(&body))
.await
}
pub async fn export_key_complete(
&self,
key_id: String,
body: ExportKeyRequest,
challenge_identifier: String,
assertion: crate::signer::CredentialAssertion,
) -> Result<ExportKeyResponse, crate::error::Error> {
let path = format!("/keys/{}/export", urlencoding::encode(&key_id));
let body = serde_json::to_value(&body)?;
let user_action = self
.client
.complete_user_action_signing(challenge_identifier, &assertion)
.await?;
self.client
.request_with_user_action::<ExportKeyResponse>(
reqwest::Method::POST,
&path,
Some(&body),
&user_action,
)
.await
}
pub async fn list_signatures(
&self,
key_id: String,
query: Option<ListSignaturesQuery>,
) -> Result<ListSignaturesResponse, crate::error::Error> {
let mut path = format!("/keys/{}/signatures", urlencoding::encode(&key_id));
if let Some(query) = &query {
let mut q: Vec<String> = Vec::new();
if let Some(v) = &query.limit {
q.push(format!("limit={}", urlencoding::encode(&v.to_string())));
}
if let Some(v) = &query.pagination_token {
q.push(format!(
"paginationToken={}",
urlencoding::encode(&v.to_string())
));
}
if !q.is_empty() {
path.push('?');
path.push_str(&q.join("&"));
}
}
self.client
.request::<ListSignaturesResponse>(reqwest::Method::GET, &path, None, false)
.await
}
pub async fn generate_signature_init(
&self,
key_id: String,
body: GenerateSignatureRequest,
) -> Result<crate::signer::UserActionChallenge, crate::error::Error> {
let path = format!("/keys/{}/signatures", urlencoding::encode(&key_id));
let body = serde_json::to_value(&body)?;
self.client
.create_user_action_challenge(reqwest::Method::POST, &path, Some(&body))
.await
}
pub async fn generate_signature_complete(
&self,
key_id: String,
body: GenerateSignatureRequest,
challenge_identifier: String,
assertion: crate::signer::CredentialAssertion,
) -> Result<GenerateSignatureResponse, crate::error::Error> {
let path = format!("/keys/{}/signatures", urlencoding::encode(&key_id));
let body = serde_json::to_value(&body)?;
let user_action = self
.client
.complete_user_action_signing(challenge_identifier, &assertion)
.await?;
self.client
.request_with_user_action::<GenerateSignatureResponse>(
reqwest::Method::POST,
&path,
Some(&body),
&user_action,
)
.await
}
pub async fn get_signature(
&self,
key_id: String,
signature_id: String,
) -> Result<GetSignatureResponse, crate::error::Error> {
let path = format!(
"/keys/{}/signatures/{}",
urlencoding::encode(&key_id),
urlencoding::encode(&signature_id)
);
self.client
.request::<GetSignatureResponse>(reqwest::Method::GET, &path, None, false)
.await
}
pub async fn import_key_init(
&self,
body: ImportKeyRequest,
) -> Result<crate::signer::UserActionChallenge, crate::error::Error> {
let path = String::from("/keys/import");
let body = serde_json::to_value(&body)?;
self.client
.create_user_action_challenge(reqwest::Method::POST, &path, Some(&body))
.await
}
pub async fn import_key_complete(
&self,
body: ImportKeyRequest,
challenge_identifier: String,
assertion: crate::signer::CredentialAssertion,
) -> Result<ImportKeyResponse, crate::error::Error> {
let path = String::from("/keys/import");
let body = serde_json::to_value(&body)?;
let user_action = self
.client
.complete_user_action_signing(challenge_identifier, &assertion)
.await?;
self.client
.request_with_user_action::<ImportKeyResponse>(
reqwest::Method::POST,
&path,
Some(&body),
&user_action,
)
.await
}
}