git.delta.rocks / jrsonnet / refs/commits / 1d31a621fa6f

difftreelog

source

src/cmds/generate_secrets.rs1.0 KiBsourcehistory
1use std::collections::HashSet;23use anyhow::Result;4use clap::Clap;5use log::info;67use crate::db::{8	keys::KeyDb,9	secret::{list_secrets, SecretDb},10	Db, DbData,11};1213#[derive(Clap)]14pub struct GenerateSecrets {15	/// If set - remove orphaned secrets16	#[clap(long)]17	cleanup: bool,18}1920impl GenerateSecrets {21	pub fn run(self) -> Result<()> {22		let db = Db::new(".fleet")?;23		let mut secrets = SecretDb::open(&db)?;2425		let defined_secrets = list_secrets()?;26		for (secret, data) in defined_secrets.iter() {27			let keys = KeyDb::open(&db)?;28			secrets.ensure_generated(&keys, &secret, &data)?;29		}30		let key_names = defined_secrets31			.keys()32			.filter(|s| !secrets.has_secret(s))33			.cloned()34			.collect::<HashSet<_>>();35		if !key_names.is_empty() {36			if self.cleanup {37				info!("Removed orphan secrets:");38			} else {39				info!("Orphan secrets found, run with --cleanup to remove them from db:");40			}41			for key in key_names {42				info!("- {}", key);43				if self.cleanup {44					secrets.remove_secret(&key)45				}46			}47		}4849		Ok(())50	}51}