forked from spacebar/account
40 lines
No EOL
1.1 KiB
Rust
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())
|
|
)
|
|
} |