cloud_terrastodon_entrypoint 0.35.1

Main entrypoint for the Cloud Terrastodon CLI
use cloud_terrastodon_azure::AzureTenantId;
use cloud_terrastodon_azure::pick_oauth2_permission_grants;
use cloud_terrastodon_azure::remove_oauth2_permission_grant;
use cloud_terrastodon_user_input::are_you_sure;
use eyre::Result;
use itertools::Itertools;
use tracing::info;

pub async fn remove_oauth2_permission_grants(tenant_id: AzureTenantId) -> Result<()> {
    let to_remove = pick_oauth2_permission_grants(tenant_id).await?;
    info!(
        "You chose:\n{}",
        to_remove.iter().map(|x| x.to_string()).join("\n")
    );
    if !are_you_sure(format!(
        "Are you sure you want to remove {} grants?",
        to_remove.len()
    ))? {
        return Ok(());
    }
    if !are_you_sure(format!(
        "Are you super sure you want to remove {} grants?",
        to_remove.len()
    ))? {
        return Ok(());
    }

    for grant in to_remove {
        info!("Removing {grant:#?}");
        remove_oauth2_permission_grant(tenant_id, &grant.grant.id).await?;
    }

    Ok(())
}