account/src/nasc/util.rs
2026-06-07 13:55:34 +02:00

40 lines
No EOL
1.1 KiB
Rust

use chrono::Local;
pub fn nintendo_base64_decode(encoded: &str) -> String {
let standard_b64 = encoded
.replace('.', "+")
.replace('-', "/")
.replace('*', "=");
match base64::Engine::decode(&base64::engine::general_purpose::STANDARD, standard_b64) {
Ok(bytes) => String::from_utf8_lossy(&bytes).into_owned(),
Err(_) => String::new(),
}
}
pub fn nintendo_base64_encode(decoded: &[u8]) -> String {
let standard_b64 = base64::Engine::encode(&base64::engine::general_purpose::STANDARD, decoded);
standard_b64
.replace('+', ".")
.replace('/', "-")
.replace('=', "*")
}
pub fn nasc_date_time() -> String {
Local::now().format("%Y%m%d%H%M%S").to_string()
}
pub fn nasc_error(error_code: &str) -> String {
let return_cd = if error_code == "null" {
error_code.to_string()
} else {
nintendo_base64_encode(error_code.as_bytes())
};
format!(
"retry={}&returncd={}&datetime={}",
nintendo_base64_encode(b"1"),
return_cd,
nintendo_base64_encode(nasc_date_time().as_bytes())
)
}