summaryrefslogtreecommitdiff
path: root/src/bin
diff options
context:
space:
mode:
authormo khan <mo@mokhan.ca>2025-07-10 12:52:39 -0600
committermo khan <mo@mokhan.ca>2025-07-10 12:52:39 -0600
commit7f253078df95ea0ec725ccbd000f11723697b64d (patch)
tree388e9f1298ccf394cfff32e4ad5a4f8090aa7fd4 /src/bin
parentffed217e230f6c6e725383c00900c5d5b4981f6c (diff)
feat: hack together a CLI to generate an entitites.json file
Diffstat (limited to 'src/bin')
-rw-r--r--src/bin/cli.rs60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/bin/cli.rs b/src/bin/cli.rs
new file mode 100644
index 00000000..275bd410
--- /dev/null
+++ b/src/bin/cli.rs
@@ -0,0 +1,60 @@
+use authzd::{generate_entities_from_api, write_entities_file};
+use clap::{Parser, Subcommand};
+
+#[derive(Parser, Debug)]
+#[command(
+ author,
+ version,
+ about = "Authorization CLI for managing Cedar entities and policies"
+)]
+struct Args {
+ #[command(subcommand)]
+ command: Commands,
+}
+
+#[derive(Subcommand, Debug)]
+enum Commands {
+ /// Generate entities from GitLab API
+ Generate {
+ /// Project ID or path (e.g., gitlab-org/gitlab)
+ #[arg(short, long)]
+ project: String,
+
+ /// Output file path
+ #[arg(short, long, default_value = "entities.json")]
+ output: String,
+
+ /// GitLab API token
+ #[arg(short, long, env = "GITLAB_TOKEN")]
+ token: String,
+
+ /// GitLab instance URL
+ #[arg(
+ short = 'H',
+ long,
+ env = "GITLAB_HOST",
+ default_value = "https://gitlab.com"
+ )]
+ host: String,
+ },
+}
+
+#[tokio::main]
+async fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let args = Args::parse();
+
+ match args.command {
+ Commands::Generate {
+ project,
+ output,
+ token,
+ host,
+ } => {
+ let entities = generate_entities_from_api(token, host, project).await?;
+
+ write_entities_file(&entities, &output)?;
+ }
+ }
+
+ Ok(())
+}