mirror of
https://github.com/Xevion/dynamic-preauth.git
synced 2025-12-06 05:15:00 -06:00
demo: separate request function, switch to 0xABCD hex form, add debug / forced token env, add port to localhost default host
This commit is contained in:
@@ -12,15 +12,12 @@ struct KeyData<'a> {
|
|||||||
static KEY: &'static str = include_str!(concat!(env!("OUT_DIR"), "/key.json"));
|
static KEY: &'static str = include_str!(concat!(env!("OUT_DIR"), "/key.json"));
|
||||||
const HOST_INFO: (&'static str, &'static str) = match option_env!("RAILWAY_PUBLIC_DOMAIN") {
|
const HOST_INFO: (&'static str, &'static str) = match option_env!("RAILWAY_PUBLIC_DOMAIN") {
|
||||||
Some(domain) => ("https", domain),
|
Some(domain) => ("https", domain),
|
||||||
None => ("http", "localhost"),
|
None => ("http", "localhost:5800"),
|
||||||
};
|
};
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let key_data: KeyData = serde_json::from_str(KEY).unwrap();
|
let key_data: KeyData = serde_json::from_str(KEY).unwrap();
|
||||||
|
|
||||||
let (protocol, domain) = HOST_INFO;
|
|
||||||
println!("Protocol: {}, Domain: {}", protocol, domain);
|
|
||||||
|
|
||||||
// Print the key data
|
// Print the key data
|
||||||
let args: Vec<String> = std::env::args().collect();
|
let args: Vec<String> = std::env::args().collect();
|
||||||
if args.contains(&"--help".to_string()) {
|
if args.contains(&"--help".to_string()) {
|
||||||
@@ -37,16 +34,42 @@ fn main() {
|
|||||||
let value_hash = sha2::Sha256::digest(key_data.value.as_bytes());
|
let value_hash = sha2::Sha256::digest(key_data.value.as_bytes());
|
||||||
let hash_match = hex::encode(value_hash) == key_data.value_hash;
|
let hash_match = hex::encode(value_hash) == key_data.value_hash;
|
||||||
|
|
||||||
// if hash_match {
|
if hash_match {
|
||||||
// return;
|
eprintln!("Value has not been changed since build");
|
||||||
// }
|
|
||||||
|
|
||||||
// TODO: Use token to make request
|
// Only fail immediately if built in Railway CI
|
||||||
|
if option_env!("RAILWAY_PUBLIC_DOMAIN").is_some() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut token = key_data.value.trim().parse::<u32>();
|
||||||
|
|
||||||
|
if let Some(forced_token) = option_env!("FORCED_TOKEN") {
|
||||||
|
token = forced_token.parse::<u32>();
|
||||||
|
}
|
||||||
|
|
||||||
|
match token {
|
||||||
|
Ok(token) => {
|
||||||
|
println!("Token: {:08X}", token);
|
||||||
|
request(token);
|
||||||
|
}
|
||||||
|
Err(e) => {
|
||||||
|
eprintln!("Token was changed, but is not a valid u32 integer: {}", e);
|
||||||
|
eprintln!("Original Value: {}", key_data.value);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
println!("Hash match: {}", hash_match);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn request(token: u32) {
|
||||||
let client = reqwest::blocking::Client::new();
|
let client = reqwest::blocking::Client::new();
|
||||||
let response = client
|
let response = client
|
||||||
.post(&format!(
|
.post(&format!(
|
||||||
"{}://{}/notify?key={}",
|
"{}://{}/notify?key=0x{:08X}",
|
||||||
HOST_INFO.0, HOST_INFO.1, key_data.value
|
HOST_INFO.0, HOST_INFO.1, token
|
||||||
))
|
))
|
||||||
.send();
|
.send();
|
||||||
|
|
||||||
@@ -75,8 +98,9 @@ fn main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
println!("Request URL: {}", resp.url());
|
||||||
println!(
|
println!(
|
||||||
"Response body: {}",
|
"Response body: \n{}",
|
||||||
resp.text()
|
resp.text()
|
||||||
.unwrap_or_else(|_| "Failed to read response body".to_string())
|
.unwrap_or_else(|_| "Failed to read response body".to_string())
|
||||||
);
|
);
|
||||||
@@ -87,6 +111,4 @@ fn main() {
|
|||||||
println!("Request error: {}", e);
|
println!("Request error: {}", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
println!("Hash match: {}", hash_match);
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user