1use super::Query;
2use crate::error::Result;
3use crate::request::{ApiClient, ApiResponse, CryptoType};
6use md5::{Digest, Md5};
7use serde_json::json;
8
9impl ApiClient {
10 pub async fn login(&self, query: &Query) -> Result<ApiResponse> {
15 let password = if let Some(md5_pw) = query.get("md5_password") {
16 md5_pw.to_string()
17 } else {
18 let pw = query.get("password").unwrap_or("");
19 format!("{:x}", Md5::digest(pw.as_bytes()))
20 };
21 let data = json!({
22 "type": "0",
23 "https": "true",
24 "username": query.get("email").unwrap_or(""),
25 "password": password,
26 "rememberLogin": "true"
27 });
28 let mut result = self
29 .request("/api/w/login", data, query.to_option(CryptoType::default()))
30 .await?;
31 if result.body.get("code").and_then(|v| v.as_i64()) == Some(502) {
32 result.status = 200;
33 result.body = json!({
34 "msg": "账号或密码错误",
35 "code": 502,
36 "message": "账号或密码错误"
37 });
38 }
39 Ok(result)
40 }
41}