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,
|
|
|
|
);
|
|
|
|
},
|
|
|
|
};
|
|
|
|
}
|