tangled-cli 0.1.0

CLI for interacting with Tangled, an AT Protocol-based git collaboration platform
//! CI secret management on a spindle, authenticated with ServiceAuth.

use anyhow::Result;
use tangled_api::lexicon::sh::tangled::repo as tangled_repo;

use super::auth::PdsAuth;
use super::types::Secret;
use super::{http, service_auth};

pub async fn list_repo_secrets(
    service_base: &str,
    pds_base: &str,
    auth: &PdsAuth,
    repo_at: &str,
) -> Result<Vec<Secret>> {
    let token = service_auth::mint(
        pds_base,
        auth,
        service_base,
        tangled_repo::list_secrets::NSID,
    )
    .await?;
    let params = tangled_repo::list_secrets::Params {
        repo: repo_at.to_string(),
    };
    let rb = tangled_repo::list_secrets(http(), service_base, &params)
        .bearer_auth(&token);
    let res: tangled_repo::list_secrets::Output = super::xrpc_send(rb).await?;
    Ok(res.secrets)
}

pub async fn add_repo_secret(
    service_base: &str,
    pds_base: &str,
    auth: &PdsAuth,
    repo_at: &str,
    key: &str,
    value: &str,
) -> Result<()> {
    let token = service_auth::mint(
        pds_base,
        auth,
        service_base,
        tangled_repo::add_secret::NSID,
    )
    .await?;
    let input = tangled_repo::add_secret::Input {
        repo: repo_at.to_string(),
        key: key.to_string(),
        value: value.to_string(),
    };
    let rb = tangled_repo::add_secret(http(), service_base, &input)
        .bearer_auth(&token);
    super::xrpc_send_unit(rb).await?;
    Ok(())
}

pub async fn remove_repo_secret(
    service_base: &str,
    pds_base: &str,
    auth: &PdsAuth,
    repo_at: &str,
    key: &str,
) -> Result<()> {
    let token = service_auth::mint(
        pds_base,
        auth,
        service_base,
        tangled_repo::remove_secret::NSID,
    )
    .await?;
    let input = tangled_repo::remove_secret::Input {
        repo: repo_at.to_string(),
        key: key.to_string(),
    };
    let rb = tangled_repo::remove_secret(http(), service_base, &input)
        .bearer_auth(&token);
    super::xrpc_send_unit(rb).await?;
    Ok(())
}