diff --git a/scl-core/src/auth/microsoft/leagcy.rs b/scl-core/src/auth/microsoft/leagcy.rs
index 5ca578e..6010a23 100644
--- a/scl-core/src/auth/microsoft/leagcy.rs
+++ b/scl-core/src/auth/microsoft/leagcy.rs
@@ -173,16 +173,18 @@ pub async fn get_mojang_access_token(uhs: &str, xsts_token: &str) -> DynResult
, url: &str) -> DynResult, url: &str) -> DynResult MicrosoftOAuth {
}
async fn auth_xbox_live(&self, access_token: &str) -> DynResult<(String, String)> {
- tracing::trace!("正在验证 Xbox Live 账户");
+ tracing::debug!("正在验证 Xbox Live 账户");
let xbox_auth_body = format!(
"{\
{\
@@ -116,7 +117,7 @@ impl MicrosoftOAuth {
}\
}"
);
- tracing::trace!("正在获取 XSTS");
+ tracing::debug!("正在获取 XSTS");
let xsts_resp: XBoxAuthResponse =
crate::http::post("https://xsts.auth.xboxlive.com/xsts/authorize")
.header("Content-Type", "application/json")
@@ -140,33 +141,40 @@ impl MicrosoftOAuth {
) -> DynResult {
let (uhs, xsts_token) = self.auth_xbox_live(access_token).await?;
- tracing::trace!("正在获取 XUID");
+ tracing::debug!("正在获取 XUID");
let xuid = leagcy::get_xuid(&uhs, &xsts_token).await?;
- tracing::trace!("正在获取 Mojang 访问令牌");
+ tracing::debug!("正在获取 Mojang 访问令牌");
let access_token = leagcy::get_mojang_access_token(&uhs, &xsts_token).await?;
if access_token.is_empty() {
anyhow::bail!("获取令牌失败")
} else {
- tracing::trace!("正在检查是否拥有 Minecraft");
- let mcstore_resp: MinecraftStoreResponse =
+ tracing::debug!("正在检查是否拥有 Minecraft");
+ let mcstore_resp =
crate::http::get("https://api.minecraftservices.com/entitlements/mcstore")
- .header("Authorization", &format!("Bearer {}", &access_token))
+ .header(
+ "Authorization",
+ &format!("Bearer {}", &access_token.as_string()),
+ )
.await
.map_err(|e| anyhow::anyhow!(e))?
- .body_json()
+ .body_string()
.await
.map_err(|e| anyhow::anyhow!(e))?;
+ let mcstore_resp: MinecraftStoreResponse = serde_json::from_str(&mcstore_resp)?;
if mcstore_resp.items.is_empty() {
anyhow::bail!(
"没有在已购项目中找到 Minecraft!请检查你的账户是否已购买 Minecraft!"
);
}
- tracing::trace!("正在获取 Minecraft 账户信息");
+ tracing::debug!("正在获取 Minecraft 账户信息");
let profile_resp: MinecraftXBoxProfileResponse =
crate::http::get("https://api.minecraftservices.com/minecraft/profile")
- .header("Authorization", &format!("Bearer {}", &access_token))
+ .header(
+ "Authorization",
+ &format!("Bearer {}", &access_token.as_string()),
+ )
.await
.map_err(|e| anyhow::anyhow!(e))?
.body_json()
@@ -174,15 +182,16 @@ impl MicrosoftOAuth {
.map_err(|e| anyhow::anyhow!(e))?;
if profile_resp.error.is_empty() {
if let Some(skin) = profile_resp.skins.iter().find(|a| a.state == "ACTIVE") {
- tracing::trace!("正在解析皮肤");
+ tracing::debug!("正在解析皮肤: {}", skin.url);
let skin_data = crate::http::get(&skin.url)
.await
.map_err(|e| anyhow::anyhow!(e))?
.body_bytes()
.await
.map_err(|e| anyhow::anyhow!(e))?;
- let (head_skin, hat_skin) = crate::auth::parse_head_skin(skin_data)?;
- tracing::trace!("微软账户验证成功!");
+ let (head_skin, hat_skin) =
+ crate::auth::parse_head_skin(skin_data).context("解析皮肤数据失败")?;
+ tracing::debug!("微软账户验证成功!");
Ok(AuthMethod::Microsoft {
access_token,
refresh_token: refresh_token.to_string().into(),
@@ -211,14 +220,14 @@ impl MicrosoftOAuth {
..
} = method
{
- tracing::trace!("正在刷新令牌");
+ tracing::debug!("正在刷新令牌");
let new_token = self.refresh_token(refresh_token.as_str()).await?;
*refresh_token = new_token.refresh_token.into();
let (uhs, xsts_token) = self.auth_xbox_live(&new_token.access_token).await?;
- tracing::trace!("正在获取 Mojang 访问令牌");
+ tracing::debug!("正在获取 Mojang 访问令牌");
let new_access_token = leagcy::get_mojang_access_token(&uhs, &xsts_token).await?;
anyhow::ensure!(
diff --git a/scl-core/src/password.rs b/scl-core/src/password.rs
index a206231..3298a3c 100644
--- a/scl-core/src/password.rs
+++ b/scl-core/src/password.rs
@@ -8,6 +8,8 @@ use std::{
use serde::{de::Visitor, Deserialize, Deserializer, Serialize};
/// 一个密码类,String 的壳子,用来在调试输出时挡住真实密码,防止泄露
+///
+/// 任何格式化输出都会返回 `***Password***`,所以如果需要取用密码,请使用 [`Password::take_string`] [`Password::to_owned_string`] [`Password::as_string`]
#[derive(Clone, PartialEq, Eq, Default)]
pub struct Password(String);