cnctd_aws 0.1.10

Wrapper around AWS methods
Documentation
use aws_sdk_secretsmanager::Client;
use anyhow::anyhow;
use crate::config::CnctdAwsConfig;

pub struct CnctdAwsSecrets;

impl CnctdAwsSecrets {
    pub async fn create_secret(
        cnctd_config: CnctdAwsConfig,
        key: &str,
        value: &str,
    ) -> anyhow::Result<()> {
        let sdk_config = cnctd_config.get_aws_sdk_config().await?;
        println!(
            "Creating secret: {} with value: {}, config: {:?}",
            key,
            value,
            sdk_config.endpoint_url()
        );
        let client = Client::new(&sdk_config);
        let _response = client
            .create_secret()
            .name(key)
            .secret_string(value)
            .send()
            .await?;

        Ok(())
    }

    pub async fn get_secret(
        cnctd_config: CnctdAwsConfig,
        key: &str,
    ) -> anyhow::Result<String> {
        let sdk_config = cnctd_config.get_aws_sdk_config().await?;
        let client = Client::new(&sdk_config);
        let response = client
            .get_secret_value()
            .secret_id(key)
            .send()
            .await?;

        let secret = response.secret_string.ok_or(anyhow!("Secret not found"))?;
        Ok(secret)
    }

    pub async fn delete_secret(
        cnctd_config: CnctdAwsConfig,
        key: &str,
    ) -> anyhow::Result<()> {
        let sdk_config = cnctd_config.get_aws_sdk_config().await?;
        let client = Client::new(&sdk_config);
        let _response = client
            .delete_secret()
            .secret_id(key)
            .send()
            .await?;

        Ok(())
    }

    pub async fn update_secret(
        cnctd_config: CnctdAwsConfig,
        key: &str,
        value: &str,
    ) -> anyhow::Result<()> {
        let sdk_config = cnctd_config.get_aws_sdk_config().await?;
        let client = Client::new(&sdk_config);
        let _response = client
            .update_secret()
            .secret_id(key)
            .secret_string(value)
            .send()
            .await?;

        Ok(())
    }

    pub async fn list_secrets(
        cnctd_config: CnctdAwsConfig,
    ) -> anyhow::Result<Vec<String>> {
        let sdk_config = cnctd_config.get_aws_sdk_config().await?;
        let client = Client::new(&sdk_config);
        let response = client.list_secrets().send().await?;

        let secret_ids = response
            .secret_list
            .ok_or(anyhow!("Secrets not found"))?
            .iter()
            .filter_map(|secret| secret.name.clone())
            .collect();

        Ok(secret_ids)
    }

    pub async fn permanently_delete_secret(
        cnctd_config: CnctdAwsConfig,
        key: &str,
    ) -> anyhow::Result<()> {
        let sdk_config = cnctd_config.get_aws_sdk_config().await?;
        let client = Client::new(&sdk_config);
        let _response = client
            .delete_secret()
            .secret_id(key)
            .force_delete_without_recovery(true)
            .send()
            .await?;

        Ok(())
    }
}