fedimovies/src/bin/mitractl.rs

102 lines
2.7 KiB
Rust
Raw Normal View History

2021-04-09 00:22:17 +00:00
use clap::Clap;
use tokio;
use uuid::Uuid;
use mitra::config;
use mitra::database::{create_pool, get_database_client};
use mitra::database::migrate::apply_migrations;
use mitra::ethereum::utils::generate_ethereum_address;
use mitra::logger::configure_logger;
2021-09-25 20:46:19 +00:00
use mitra::models::posts::queries::delete_post;
2021-04-09 00:22:17 +00:00
use mitra::models::profiles::queries as profiles;
use mitra::models::users::queries::{
generate_invite_code,
get_invite_codes,
};
2021-09-25 20:46:19 +00:00
use mitra::utils::files::remove_files;
2021-04-09 00:22:17 +00:00
/// Admin CLI tool
#[derive(Clap)]
struct Opts {
#[clap(subcommand)]
subcmd: SubCommand,
}
#[derive(Clap)]
enum SubCommand {
DeleteProfile(DeleteProfile),
2021-09-25 20:46:19 +00:00
DeletePost(DeletePost),
2021-04-09 00:22:17 +00:00
GenerateInviteCode(GenerateInviteCode),
ListInviteCodes(ListInviteCodes),
GenerateEthereumAddress(GenerateEthereumAddress),
}
/// Delete profile
#[derive(Clap)]
struct DeleteProfile {
2021-09-25 20:46:19 +00:00
#[clap(short)]
id: Uuid,
}
/// Delete post
#[derive(Clap)]
struct DeletePost {
2021-04-09 00:22:17 +00:00
#[clap(short)]
id: Uuid,
}
/// Generate invite code
#[derive(Clap)]
struct GenerateInviteCode { }
/// List invite codes
#[derive(Clap)]
struct ListInviteCodes { }
/// Generate ethereum address
#[derive(Clap)]
struct GenerateEthereumAddress { }
#[tokio::main]
async fn main() {
let config = config::parse_config();
configure_logger();
let db_pool = create_pool(&config.database_url);
apply_migrations(&db_pool).await;
2021-09-25 20:46:19 +00:00
let db_client = &mut **get_database_client(&db_pool).await.unwrap();
2021-04-09 00:22:17 +00:00
let opts: Opts = Opts::parse();
match opts.subcmd {
SubCommand::DeleteProfile(subopts) => {
2021-09-25 20:46:19 +00:00
profiles::delete_profile(db_client, &subopts.id).await.unwrap();
2021-04-09 00:22:17 +00:00
println!("profile deleted");
},
2021-09-25 20:46:19 +00:00
SubCommand::DeletePost(subopts) => {
let orphaned_files = delete_post(db_client, &subopts.id).await.unwrap();
remove_files(orphaned_files, &config.media_dir());
println!("post deleted");
},
2021-04-09 00:22:17 +00:00
SubCommand::GenerateInviteCode(_) => {
2021-09-25 20:46:19 +00:00
let invite_code = generate_invite_code(db_client).await.unwrap();
2021-04-09 00:22:17 +00:00
println!("generated invite code: {}", invite_code);
},
SubCommand::ListInviteCodes(_) => {
2021-09-25 20:46:19 +00:00
let invite_codes = get_invite_codes(db_client).await.unwrap();
2021-04-09 00:22:17 +00:00
if invite_codes.len() == 0 {
println!("no invite codes found");
return;
}
for code in invite_codes {
println!("{}", code);
}
},
SubCommand::GenerateEthereumAddress(_) => {
let (private_key, address) = generate_ethereum_address();
println!(
"address {:?}; private key {}",
address, private_key,
);
},
};
}