chore: get token after qr login
This commit is contained in:
@@ -1,10 +1,16 @@
|
|||||||
use std::backtrace::Backtrace;
|
use std::backtrace::Backtrace;
|
||||||
|
|
||||||
use nyquest::{AsyncClient, Body, Request, header::USER_AGENT};
|
use nyquest::{
|
||||||
|
AsyncClient, Body, Request,
|
||||||
|
header::{SET_COOKIE, USER_AGENT},
|
||||||
|
};
|
||||||
|
|
||||||
mod model;
|
mod model;
|
||||||
use model::{GetResponse, GetUserId};
|
use model::GetUserId;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
use spdlog::debug;
|
||||||
|
|
||||||
|
pub use model::GetResponse;
|
||||||
|
|
||||||
pub struct QRCode<'a> {
|
pub struct QRCode<'a> {
|
||||||
pub qrcode_content: &'a str,
|
pub qrcode_content: &'a str,
|
||||||
@@ -40,7 +46,7 @@ pub enum QRLoginError {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl QRCode<'_> {
|
impl QRCode<'_> {
|
||||||
pub async fn login(self, client: &AsyncClient) -> Result<i64, QRLoginError> {
|
pub async fn login(self, client: &AsyncClient) -> Result<GetResponse, QRLoginError> {
|
||||||
let qr_code = &self.qrcode_content.as_bytes()[self.qrcode_content.len() - 64..];
|
let qr_code = &self.qrcode_content.as_bytes()[self.qrcode_content.len() - 64..];
|
||||||
let qr_code = String::from_utf8_lossy(qr_code);
|
let qr_code = String::from_utf8_lossy(qr_code);
|
||||||
|
|
||||||
@@ -49,12 +55,14 @@ impl QRCode<'_> {
|
|||||||
.with_header(USER_AGENT, "WC_AIME_LIB");
|
.with_header(USER_AGENT, "WC_AIME_LIB");
|
||||||
|
|
||||||
let resp = client.request(req).await?;
|
let resp = client.request(req).await?;
|
||||||
|
|
||||||
|
let cookie = resp.get_header(SET_COOKIE)?;
|
||||||
let resp: GetResponse = resp.json().await?;
|
let resp: GetResponse = resp.json().await?;
|
||||||
|
|
||||||
let user_id = resp.user_id;
|
debug!("Set-Cookie: {cookie:?}");
|
||||||
|
|
||||||
match resp.error_id {
|
match resp.error_id {
|
||||||
0 => return Ok(user_id),
|
0 => return Ok(resp),
|
||||||
2 => Err(QRLoginError::QRCodeExpired10),
|
2 => Err(QRLoginError::QRCodeExpired10),
|
||||||
1 => Err(QRLoginError::QRCodeExpired30),
|
1 => Err(QRLoginError::QRCodeExpired30),
|
||||||
50 => Err(QRLoginError::BadSingature),
|
50 => Err(QRLoginError::BadSingature),
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ pub struct GetUserId {
|
|||||||
pub timestamp: String,
|
pub timestamp: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default, Debug, Clone, PartialEq, Deserialize)]
|
#[derive(Default, Debug, Clone, PartialEq, Deserialize, Serialize)]
|
||||||
#[serde(rename_all = "camelCase")]
|
#[serde(rename_all = "camelCase")]
|
||||||
pub struct GetResponse {
|
pub struct GetResponse {
|
||||||
pub key: String,
|
pub key: String,
|
||||||
@@ -24,6 +24,7 @@ pub struct GetResponse {
|
|||||||
pub error_id: i64,
|
pub error_id: i64,
|
||||||
#[serde(rename = "userID")]
|
#[serde(rename = "userID")]
|
||||||
pub user_id: i64,
|
pub user_id: i64,
|
||||||
|
pub token: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl GetUserId {
|
impl GetUserId {
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ use palc::Parser;
|
|||||||
use spdlog::{Level, LevelFilter::MoreSevereEqual, sink::StdStreamSink, terminal_style::StyleMode};
|
use spdlog::{Level, LevelFilter::MoreSevereEqual, sink::StdStreamSink, terminal_style::StyleMode};
|
||||||
|
|
||||||
use sdgb_api::{
|
use sdgb_api::{
|
||||||
all_net::QRCode,
|
all_net::{GetResponse, QRCode},
|
||||||
auth_lite::{SDGB, SDHJ, delivery_raw},
|
auth_lite::{SDGB, SDHJ, delivery_raw},
|
||||||
title::{
|
title::{
|
||||||
MaiVersionExt, Sdgb1_50, Sdgb1_53,
|
MaiVersionExt, Sdgb1_50, Sdgb1_53,
|
||||||
@@ -197,7 +197,9 @@ async fn main() -> Result<(), Box<dyn snafu::Error>> {
|
|||||||
let resp = qrcode.login(&client).await;
|
let resp = qrcode.login(&client).await;
|
||||||
|
|
||||||
match &resp {
|
match &resp {
|
||||||
Ok(user_id) => info!("login succeed: {user_id}"),
|
Ok(GetResponse { user_id, token, .. }) => {
|
||||||
|
info!("login succeed: {user_id}, {token:?}")
|
||||||
|
}
|
||||||
Err(e) => error!("login failed: {e}"),
|
Err(e) => error!("login failed: {e}"),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user