summaryrefslogtreecommitdiff
path: root/src/bin/cli.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/cli.rs')
-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(())
+}