forte-cli 0.5.1

CLI for the Forte fullstack web framework
use anyhow::{Result, anyhow};
use std::path::PathBuf;

use super::project_config::read_project_id;

#[allow(clippy::too_many_arguments)]
pub async fn connect(
    project_dir: PathBuf,
    account_id: String,
    zone_id: String,
    api_token: Option<String>,
    zone_name: Option<String>,
    worker_access_key_id: Option<String>,
    worker_secret: Option<String>,
    frontend_asset_access_key_id: Option<String>,
    frontend_asset_secret: Option<String>,
    purge_token: Option<String>,
) -> Result<()> {
    let id = read_project_id(&project_dir)?;
    match (
        api_token,
        zone_name,
        worker_access_key_id,
        worker_secret,
        frontend_asset_access_key_id,
        frontend_asset_secret,
        purge_token,
    ) {
        (Some(api_token), ..) => {
            fn0_deploy::cloudflare_connect_managed(&id, &account_id, &zone_id, &api_token).await
        }
        (
            None,
            Some(zone_name),
            Some(worker_key_id),
            Some(worker_secret),
            Some(asset_key_id),
            Some(asset_secret),
            Some(purge),
        ) => {
            fn0_deploy::cloudflare_connect_manual(
                &id,
                &account_id,
                &zone_id,
                &zone_name,
                &worker_key_id,
                &worker_secret,
                &asset_key_id,
                &asset_secret,
                &purge,
            )
            .await
        }
        _ => Err(anyhow!(
            "pass --api-token to let the CLI provision and mint, or run `forte cloudflare \
             provision` first and pass --zone-name --worker-access-key-id --worker-secret \
             --frontend-asset-access-key-id --frontend-asset-secret --purge-token"
        )),
    }
}

pub async fn provision(
    project_dir: PathBuf,
    account_id: String,
    zone_id: String,
    api_token: String,
) -> Result<()> {
    let id = read_project_id(&project_dir)?;
    fn0_deploy::cloudflare_provision(&id, &account_id, &zone_id, &api_token).await
}

pub async fn status(project_dir: PathBuf) -> Result<()> {
    let id = read_project_id(&project_dir)?;
    fn0_deploy::cloudflare_status(&id).await
}