Skip to main content

ncm_api_rs/api/
eapi_decrypt.rs

1use super::Query;
2/// EAPI 解密
3/// 对应 Node.js module/eapi_decrypt.js
4use crate::crypto::{eapi_req_decrypt, eapi_res_decrypt};
5use crate::error::Result;
6use crate::request::{ApiClient, ApiResponse};
7use serde_json::json;
8
9impl ApiClient {
10    /// EAPI 解密
11    /// 对应 /eapi/decrypt
12    ///
13    /// 参数:
14    /// - hexString: 要解密的十六进制字符串
15    /// - isReq: 是否为请求解密(默认 true),设为 "false" 则为响应解密
16    pub fn eapi_decrypt(&self, query: &Query) -> Result<ApiResponse> {
17        let hex_string = match query.get("hexString") {
18            Some(s) => s,
19            None => {
20                return Ok(ApiResponse {
21                    status: 400,
22                    body: json!({
23                        "code": 400,
24                        "message": "hex string is required"
25                    }),
26                    cookie: vec![],
27                });
28            }
29        };
30
31        let is_req = query.get_or("isReq", "true") != "false";
32        let pure_hex = hex_string.replace(' ', "");
33
34        let data = if is_req {
35            match eapi_req_decrypt(&pure_hex) {
36                Some((url, body)) => json!({ "url": url, "body": body }),
37                None => json!(null),
38            }
39        } else {
40            match eapi_res_decrypt(&pure_hex) {
41                Some(val) => val,
42                None => json!(null),
43            }
44        };
45
46        Ok(ApiResponse {
47            status: 200,
48            body: json!({
49                "code": 200,
50                "data": data
51            }),
52            cookie: vec![],
53        })
54    }
55}