todo: fix UserData decryption
This commit is contained in:
@@ -15,6 +15,7 @@ cache = ["dep:redb"]
|
||||
|
||||
[dependencies]
|
||||
sdgb-api = { workspace = true, features = ["bincode"] }
|
||||
spdlog-rs = { workspace = true }
|
||||
|
||||
snafu = { workspace = true }
|
||||
serde_json = { workspace = true }
|
||||
@@ -25,10 +26,6 @@ compio = { workspace = true, features = ["macros"], optional = true }
|
||||
nyquest-preset = { version = "0.2.0", features = ["async"] }
|
||||
|
||||
palc = { version = "0.0.1", features = ["derive"] }
|
||||
spdlog-rs = { version = "0.4.3", default-features = false, features = [
|
||||
"level-info",
|
||||
"release-level-info",
|
||||
] }
|
||||
futures-util = "0.3.31"
|
||||
redb = { version = "2.6.1", optional = true }
|
||||
ctrlc = { version = "3.4.7", features = ["termination"] }
|
||||
|
||||
@@ -36,6 +36,10 @@ pub enum Commands {
|
||||
#[arg(short, long)]
|
||||
user_id: u32,
|
||||
},
|
||||
Userdata {
|
||||
#[arg(short, long)]
|
||||
user_id: u32,
|
||||
},
|
||||
|
||||
ListAllUser,
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ use std::{
|
||||
use futures_util::StreamExt;
|
||||
use nyquest_preset::nyquest::ClientBuilder;
|
||||
use palc::Parser;
|
||||
use spdlog::{Level, LevelFilter::MoreSevereEqual};
|
||||
|
||||
use sdgb_api::{
|
||||
ApiError,
|
||||
@@ -16,8 +17,8 @@ use sdgb_api::{
|
||||
MaiVersionExt, Sdgb1_40, Sdgb1_50,
|
||||
methods::APIMethod,
|
||||
model::{
|
||||
GetUserPreviewApi, GetUserPreviewApiResp, Ping, PingResp, UserLogoutApi,
|
||||
UserLogoutApiResp,
|
||||
GetUserDataApi, GetUserDataApiResp, GetUserPreviewApi, GetUserPreviewApiResp, Ping,
|
||||
PingResp, UserLoginApi, UserLoginApiResp, UserLogoutApi, UserLogoutApiResp,
|
||||
},
|
||||
},
|
||||
};
|
||||
@@ -36,6 +37,12 @@ static EARLY_QUIT: AtomicBool = AtomicBool::new(false);
|
||||
async fn main() -> Result<(), Box<dyn snafu::Error>> {
|
||||
nyquest_preset::register();
|
||||
|
||||
if cfg!(debug_assertions) {
|
||||
spdlog::default_logger().set_level_filter(MoreSevereEqual(Level::Debug));
|
||||
} else {
|
||||
spdlog::default_logger().set_level_filter(MoreSevereEqual(Level::Info));
|
||||
}
|
||||
|
||||
ctrlc::set_handler(|| {
|
||||
warn!("received early-quit request! will abort soon");
|
||||
EARLY_QUIT.store(true, Ordering::Relaxed);
|
||||
@@ -45,6 +52,7 @@ async fn main() -> Result<(), Box<dyn snafu::Error>> {
|
||||
|
||||
let client = ClientBuilder::default().build_async().await?;
|
||||
|
||||
// TODO: refactor via enum_dispatch
|
||||
match cmd.command {
|
||||
commands::Commands::Logout { user_id } => {
|
||||
let logout: UserLogoutApiResp = Sdgb1_50::request(
|
||||
@@ -193,6 +201,76 @@ async fn main() -> Result<(), Box<dyn snafu::Error>> {
|
||||
.open("players.json")?;
|
||||
serde_json::to_writer_pretty(output, &players)?;
|
||||
}
|
||||
commands::Commands::Userdata { user_id } => {
|
||||
let login = UserLoginApi::new(user_id);
|
||||
let date_time = login.date_time;
|
||||
let Ok(login_resp): Result<UserLoginApiResp, _> =
|
||||
Sdgb1_50::request(&client, APIMethod::UserLoginApi, user_id, login).await
|
||||
else {
|
||||
let logout_resp: UserLogoutApiResp = Sdgb1_50::request(
|
||||
&client,
|
||||
APIMethod::UserLogoutApi,
|
||||
user_id,
|
||||
UserLogoutApi {
|
||||
user_id,
|
||||
date_time,
|
||||
..Default::default()
|
||||
},
|
||||
)
|
||||
.await?;
|
||||
|
||||
info!("logout: {logout_resp:?}");
|
||||
return Ok(());
|
||||
};
|
||||
|
||||
match login_resp.return_code {
|
||||
1 => info!("login succeed"),
|
||||
100 => {
|
||||
error!("user already logged");
|
||||
return Ok(());
|
||||
}
|
||||
102 => {
|
||||
error!("QRCode expired");
|
||||
return Ok(());
|
||||
}
|
||||
103 => {
|
||||
error!("Unregistered userId");
|
||||
return Ok(());
|
||||
}
|
||||
e @ _ => {
|
||||
error!("unknown login error: {e}");
|
||||
return Ok(());
|
||||
}
|
||||
}
|
||||
|
||||
match Sdgb1_50::request::<_, GetUserDataApiResp>(
|
||||
&client,
|
||||
APIMethod::GetUserDataApi,
|
||||
user_id,
|
||||
GetUserDataApi { user_id },
|
||||
)
|
||||
.await
|
||||
{
|
||||
Ok(_) => {}
|
||||
Err(e) => {
|
||||
error!("failed to get userdata: {e}");
|
||||
}
|
||||
}
|
||||
|
||||
let logout_resp: UserLogoutApiResp = Sdgb1_50::request(
|
||||
&client,
|
||||
APIMethod::UserLogoutApi,
|
||||
user_id,
|
||||
UserLogoutApi {
|
||||
user_id,
|
||||
date_time,
|
||||
..Default::default()
|
||||
},
|
||||
)
|
||||
.await?;
|
||||
|
||||
info!("logout: {logout_resp:?}");
|
||||
}
|
||||
}
|
||||
|
||||
Ok(())
|
||||
|
||||
Reference in New Issue
Block a user