diff --git a/Cargo.toml b/Cargo.toml index 0d41947..e0d40b7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,6 +2,15 @@ name = "kensho" version = "0.1.0" edition = "2021" +default-run = "kensho" + +[[bin]] +name = "kensho" +path = "src/main.rs" + +[[bin]] +name = "register" +path = "src/bin/register.rs" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/src/bin/register.rs b/src/bin/register.rs new file mode 100644 index 0000000..aff0033 --- /dev/null +++ b/src/bin/register.rs @@ -0,0 +1,53 @@ +use megalodon::generator; +use std::env; + +#[tokio::main] +async fn main() { + env_logger::init(); + + let Ok(url) = env::var("MASTODON_URL") else { + println!("Specify MASTODON_URL!!"); + return; + }; + let client = generator(megalodon::SNS::Mastodon, url, None, None); + let options = megalodon::megalodon::AppInputOptions { + scopes: Some(["read".to_string()].to_vec()), + ..Default::default() + }; + + match client.register_app("kensho".to_string(), &options).await { + Ok(app_data) => { + let client_id = app_data.client_id; + let client_secret = app_data.client_secret; + println!("Authorization URL is generated"); + println!("{}", app_data.url.unwrap()); + + println!("Enter authorization code from website: "); + let mut code = String::new(); + std::io::stdin().read_line(&mut code).ok(); + + match client + .fetch_access_token( + client_id, + client_secret, + code.trim().to_string(), + megalodon::default::NO_REDIRECT.to_string(), + ) + .await + { + Ok(token_data) => { + println!("access_token: {}", token_data.access_token); + if let Some(refresh) = token_data.refresh_token { + println!("refresh_token: {}", refresh); + } + } + Err(err) => { + println!("{:#?}", err); + } + } + } + Err(err) => { + println!("{:#?}", err); + } + } +}