2022-11-30 00:29:17 +03:00
|
|
|
mod change_user_address;
|
2022-11-26 07:25:53 +03:00
|
|
|
mod change_user_tier;
|
2022-12-28 19:43:44 +03:00
|
|
|
mod change_user_tier_by_address;
|
2022-11-16 10:19:42 +03:00
|
|
|
mod change_user_tier_by_key;
|
2022-08-15 20:23:13 +03:00
|
|
|
mod check_config;
|
2022-11-30 08:51:31 +03:00
|
|
|
mod cost_calculator;
|
2023-01-03 04:06:36 +03:00
|
|
|
mod count_users;
|
2022-08-06 03:07:12 +03:00
|
|
|
mod create_user;
|
2022-11-16 10:19:42 +03:00
|
|
|
mod drop_migration_lock;
|
2022-11-28 09:10:34 +03:00
|
|
|
mod health_compass;
|
2022-11-22 01:52:47 +03:00
|
|
|
mod list_user_tier;
|
2023-01-10 04:50:09 +03:00
|
|
|
mod transfer_key;
|
2022-11-22 01:52:47 +03:00
|
|
|
mod user_export;
|
|
|
|
mod user_import;
|
2022-11-14 22:35:33 +03:00
|
|
|
|
2022-08-06 03:07:12 +03:00
|
|
|
use argh::FromArgs;
|
2022-11-16 10:19:42 +03:00
|
|
|
use std::fs;
|
2022-11-14 22:35:33 +03:00
|
|
|
use web3_proxy::{
|
|
|
|
app::{get_db, get_migrated_db},
|
|
|
|
config::TopConfig,
|
|
|
|
};
|
2022-08-06 03:07:12 +03:00
|
|
|
|
|
|
|
#[derive(Debug, FromArgs)]
|
2022-08-06 08:46:33 +03:00
|
|
|
/// Command line interface for admins to interact with web3_proxy
|
2022-11-14 22:35:33 +03:00
|
|
|
pub struct CliConfig {
|
|
|
|
/// path to the application config (optional).
|
|
|
|
#[argh(option)]
|
|
|
|
pub config: Option<String>,
|
|
|
|
|
|
|
|
/// if no config, what database the client should connect to. Defaults to dev db.
|
2022-08-06 03:07:12 +03:00
|
|
|
#[argh(
|
|
|
|
option,
|
2022-08-06 08:49:52 +03:00
|
|
|
default = "\"mysql://root:dev_web3_proxy@127.0.0.1:13306/dev_web3_proxy\".to_string()"
|
2022-08-06 03:07:12 +03:00
|
|
|
)]
|
|
|
|
pub db_url: String,
|
|
|
|
|
|
|
|
/// this one cli can do multiple things
|
|
|
|
#[argh(subcommand)]
|
|
|
|
sub_command: SubCommand,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(FromArgs, PartialEq, Debug)]
|
|
|
|
#[argh(subcommand)]
|
|
|
|
enum SubCommand {
|
2023-01-03 04:06:36 +03:00
|
|
|
ChangeUserAddress(change_user_address::ChangeUserAddressSubCommand),
|
|
|
|
ChangeUserTier(change_user_tier::ChangeUserTierSubCommand),
|
|
|
|
ChangeUserTierByAddress(change_user_tier_by_address::ChangeUserTierByAddressSubCommand),
|
|
|
|
ChangeUserTierByKey(change_user_tier_by_key::ChangeUserTierByKeySubCommand),
|
2022-08-15 20:23:13 +03:00
|
|
|
CheckConfig(check_config::CheckConfigSubCommand),
|
2023-01-03 04:06:36 +03:00
|
|
|
CostCalculator(cost_calculator::CostCalculatorSubCommand),
|
|
|
|
CountUsers(count_users::CountUsersSubCommand),
|
2022-11-16 10:19:42 +03:00
|
|
|
CreateUser(create_user::CreateUserSubCommand),
|
|
|
|
DropMigrationLock(drop_migration_lock::DropMigrationLockSubCommand),
|
2022-11-28 09:10:34 +03:00
|
|
|
HealthCompass(health_compass::HealthCompassSubCommand),
|
2023-01-10 04:50:09 +03:00
|
|
|
TransferKey(transfer_key::TransferKeySubCommand),
|
2022-11-22 01:52:47 +03:00
|
|
|
UserExport(user_export::UserExportSubCommand),
|
2022-11-22 08:42:02 +03:00
|
|
|
UserImport(user_import::UserImportSubCommand),
|
|
|
|
// TODO: sub command to downgrade migrations? sea-orm has this but doing downgrades here would be easier+safer
|
|
|
|
// TODO: sub command to add new api keys to an existing user?
|
|
|
|
// TODO: sub command to change a user's tier
|
2022-08-06 03:07:12 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
#[tokio::main]
|
|
|
|
async fn main() -> anyhow::Result<()> {
|
|
|
|
// if RUST_LOG isn't set, configure a default
|
|
|
|
// TODO: is there a better way to do this?
|
|
|
|
if std::env::var("RUST_LOG").is_err() {
|
|
|
|
// std::env::set_var("RUST_LOG", "info,web3_proxy=debug,web3_proxy_cli=debug");
|
|
|
|
std::env::set_var("RUST_LOG", "info,web3_proxy=debug,web3_proxy_cli=debug");
|
|
|
|
}
|
|
|
|
|
2022-11-12 11:24:32 +03:00
|
|
|
env_logger::init();
|
2022-08-06 03:07:12 +03:00
|
|
|
|
|
|
|
// this probably won't matter for us in docker, but better safe than sorry
|
|
|
|
fdlimit::raise_fd_limit();
|
|
|
|
|
2022-11-14 22:35:33 +03:00
|
|
|
let mut cli_config: CliConfig = argh::from_env();
|
|
|
|
|
|
|
|
let _top_config = if let Some(top_config_path) = cli_config.config.clone() {
|
|
|
|
let top_config: String = fs::read_to_string(top_config_path)?;
|
|
|
|
let top_config: TopConfig = toml::from_str(&top_config)?;
|
|
|
|
|
|
|
|
if let Some(top_config_db_url) = top_config.app.db_url.clone() {
|
|
|
|
cli_config.db_url = top_config_db_url;
|
|
|
|
}
|
|
|
|
|
|
|
|
Some(top_config)
|
|
|
|
} else {
|
|
|
|
None
|
|
|
|
};
|
2022-08-06 03:07:12 +03:00
|
|
|
|
|
|
|
match cli_config.sub_command {
|
2022-11-30 00:29:17 +03:00
|
|
|
SubCommand::ChangeUserAddress(x) => {
|
|
|
|
let db_conn = get_db(cli_config.db_url, 1, 1).await?;
|
|
|
|
|
|
|
|
x.main(&db_conn).await
|
|
|
|
}
|
2022-11-26 07:25:53 +03:00
|
|
|
SubCommand::ChangeUserTier(x) => {
|
|
|
|
let db_conn = get_db(cli_config.db_url, 1, 1).await?;
|
|
|
|
|
|
|
|
x.main(&db_conn).await
|
|
|
|
}
|
2022-12-28 19:43:44 +03:00
|
|
|
SubCommand::ChangeUserTierByAddress(x) => {
|
|
|
|
let db_conn = get_db(cli_config.db_url, 1, 1).await?;
|
|
|
|
|
|
|
|
x.main(&db_conn).await
|
|
|
|
}
|
2022-11-16 10:19:42 +03:00
|
|
|
SubCommand::ChangeUserTierByKey(x) => {
|
|
|
|
let db_conn = get_db(cli_config.db_url, 1, 1).await?;
|
|
|
|
|
|
|
|
x.main(&db_conn).await
|
|
|
|
}
|
|
|
|
SubCommand::CheckConfig(x) => x.main().await,
|
2022-08-06 03:07:12 +03:00
|
|
|
SubCommand::CreateUser(x) => {
|
2022-10-20 09:17:20 +03:00
|
|
|
let db_conn = get_migrated_db(cli_config.db_url, 1, 1).await?;
|
2022-08-06 03:07:12 +03:00
|
|
|
|
2022-10-20 09:17:20 +03:00
|
|
|
x.main(&db_conn).await
|
2022-08-06 03:07:12 +03:00
|
|
|
}
|
2023-01-03 04:06:36 +03:00
|
|
|
SubCommand::CostCalculator(x) => {
|
|
|
|
let db_conn = get_db(cli_config.db_url, 1, 1).await?;
|
|
|
|
|
|
|
|
x.main(&db_conn).await
|
|
|
|
}
|
|
|
|
SubCommand::CountUsers(x) => {
|
2022-11-30 08:51:31 +03:00
|
|
|
let db_conn = get_db(cli_config.db_url, 1, 1).await?;
|
|
|
|
|
|
|
|
x.main(&db_conn).await
|
|
|
|
}
|
2022-11-14 22:13:42 +03:00
|
|
|
SubCommand::DropMigrationLock(x) => {
|
2022-11-22 01:52:47 +03:00
|
|
|
// very intentionally, do NOT run migrations here
|
2022-11-14 22:13:42 +03:00
|
|
|
let db_conn = get_db(cli_config.db_url, 1, 1).await?;
|
|
|
|
|
2022-11-22 01:52:47 +03:00
|
|
|
x.main(&db_conn).await
|
|
|
|
}
|
2022-11-28 09:10:34 +03:00
|
|
|
SubCommand::HealthCompass(x) => x.main().await,
|
2023-01-10 04:50:09 +03:00
|
|
|
SubCommand::TransferKey(x) => {
|
|
|
|
let db_conn = get_db(cli_config.db_url, 1, 1).await?;
|
|
|
|
|
|
|
|
x.main(&db_conn).await
|
|
|
|
}
|
2022-11-22 01:52:47 +03:00
|
|
|
SubCommand::UserExport(x) => {
|
|
|
|
let db_conn = get_migrated_db(cli_config.db_url, 1, 1).await?;
|
|
|
|
|
|
|
|
x.main(&db_conn).await
|
|
|
|
}
|
|
|
|
SubCommand::UserImport(x) => {
|
|
|
|
let db_conn = get_migrated_db(cli_config.db_url, 1, 1).await?;
|
|
|
|
|
2022-11-14 22:13:42 +03:00
|
|
|
x.main(&db_conn).await
|
|
|
|
}
|
2022-08-06 03:07:12 +03:00
|
|
|
}
|
|
|
|
}
|