Spaces:
Paused
Paused
Upload main.rs
Browse files- src/main.rs +60 -30
src/main.rs
CHANGED
|
@@ -1155,6 +1155,7 @@ async fn login(Json(req): Json<LoginReq>) -> impl IntoResponse {
|
|
| 1155 |
struct PairSession {
|
| 1156 |
created_ms: u128,
|
| 1157 |
access_token: Option<String>,
|
|
|
|
| 1158 |
user_id: Option<String>,
|
| 1159 |
email: Option<String>,
|
| 1160 |
arl: Option<String>,
|
|
@@ -1188,6 +1189,7 @@ async fn pair_start(State(state): State<AppState>) -> impl IntoResponse {
|
|
| 1188 |
PairSession {
|
| 1189 |
created_ms,
|
| 1190 |
access_token: None,
|
|
|
|
| 1191 |
user_id: None,
|
| 1192 |
email: None,
|
| 1193 |
arl: None,
|
|
@@ -1221,14 +1223,14 @@ async fn pair_status(State(state): State<AppState>, Query(q): Query<PairStatusQu
|
|
| 1221 |
if let Some(tok) = &sess.access_token {
|
| 1222 |
return (
|
| 1223 |
StatusCode::OK,
|
| 1224 |
-
Json(json!({ "status": "ok", "access_token": tok, "user_id": sess.user_id, "email": sess.email, "arl": sess.arl })),
|
| 1225 |
)
|
| 1226 |
.into_response();
|
| 1227 |
}
|
| 1228 |
if sess.arl.as_deref().unwrap_or("").len() > 20 {
|
| 1229 |
return (
|
| 1230 |
StatusCode::OK,
|
| 1231 |
-
Json(json!({ "status": "ok", "access_token": null, "user_id": sess.user_id, "email": sess.email, "arl": sess.arl })),
|
| 1232 |
)
|
| 1233 |
.into_response();
|
| 1234 |
}
|
|
@@ -1421,6 +1423,8 @@ async fn pair_complete(State(state): State<AppState>, Form(f): Form<PairComplete
|
|
| 1421 |
let mut uid: Option<String> = None;
|
| 1422 |
let mut arl_out: Option<String> = None;
|
| 1423 |
let mut login_err: Option<String> = None;
|
|
|
|
|
|
|
| 1424 |
|
| 1425 |
match oauth_access_token(&client, &email, &pass_md5).await {
|
| 1426 |
Ok(t) => access_token = Some(t),
|
|
@@ -1475,44 +1479,67 @@ async fn pair_complete(State(state): State<AppState>, Form(f): Form<PairComplete
|
|
| 1475 |
}
|
| 1476 |
|
| 1477 |
if arl_out.is_none() {
|
| 1478 |
-
|
| 1479 |
-
|
| 1480 |
-
|
| 1481 |
-
|
| 1482 |
-
|
| 1483 |
-
|
| 1484 |
-
|
| 1485 |
-
|
| 1486 |
-
|
| 1487 |
-
|
| 1488 |
-
|
| 1489 |
-
|
| 1490 |
-
|
| 1491 |
-
|
| 1492 |
-
|
| 1493 |
-
|
| 1494 |
-
|
| 1495 |
-
|
| 1496 |
-
|
| 1497 |
-
|
| 1498 |
-
|
| 1499 |
-
|
| 1500 |
-
|
| 1501 |
-
|
| 1502 |
-
|
| 1503 |
-
|
| 1504 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1505 |
}
|
| 1506 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1507 |
}
|
| 1508 |
}
|
|
|
|
|
|
|
| 1509 |
}
|
| 1510 |
}
|
|
|
|
|
|
|
|
|
|
| 1511 |
}
|
| 1512 |
}
|
| 1513 |
|
| 1514 |
if access_token.is_none() && arl_out.as_deref().unwrap_or("").len() < 20 {
|
| 1515 |
-
let msg =
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1516 |
let mut map = state.pair.write().await;
|
| 1517 |
if let Some(s) = map.get_mut(&code) {
|
| 1518 |
s.error = Some(msg.clone());
|
|
@@ -1524,6 +1551,9 @@ async fn pair_complete(State(state): State<AppState>, Form(f): Form<PairComplete
|
|
| 1524 |
let mut map = state.pair.write().await;
|
| 1525 |
if let Some(s) = map.get_mut(&code) {
|
| 1526 |
s.access_token = access_token;
|
|
|
|
|
|
|
|
|
|
| 1527 |
s.user_id = uid;
|
| 1528 |
s.email = Some(email);
|
| 1529 |
s.arl = arl_out;
|
|
|
|
| 1155 |
struct PairSession {
|
| 1156 |
created_ms: u128,
|
| 1157 |
access_token: Option<String>,
|
| 1158 |
+
token: Option<String>,
|
| 1159 |
user_id: Option<String>,
|
| 1160 |
email: Option<String>,
|
| 1161 |
arl: Option<String>,
|
|
|
|
| 1189 |
PairSession {
|
| 1190 |
created_ms,
|
| 1191 |
access_token: None,
|
| 1192 |
+
token: None,
|
| 1193 |
user_id: None,
|
| 1194 |
email: None,
|
| 1195 |
arl: None,
|
|
|
|
| 1223 |
if let Some(tok) = &sess.access_token {
|
| 1224 |
return (
|
| 1225 |
StatusCode::OK,
|
| 1226 |
+
Json(json!({ "status": "ok", "access_token": tok, "token": sess.token, "user_id": sess.user_id, "email": sess.email, "arl": sess.arl })),
|
| 1227 |
)
|
| 1228 |
.into_response();
|
| 1229 |
}
|
| 1230 |
if sess.arl.as_deref().unwrap_or("").len() > 20 {
|
| 1231 |
return (
|
| 1232 |
StatusCode::OK,
|
| 1233 |
+
Json(json!({ "status": "ok", "access_token": null, "token": sess.token, "user_id": sess.user_id, "email": sess.email, "arl": sess.arl })),
|
| 1234 |
)
|
| 1235 |
.into_response();
|
| 1236 |
}
|
|
|
|
| 1423 |
let mut uid: Option<String> = None;
|
| 1424 |
let mut arl_out: Option<String> = None;
|
| 1425 |
let mut login_err: Option<String> = None;
|
| 1426 |
+
let mut gw_token: Option<String> = None;
|
| 1427 |
+
let mut gw_err: Option<String> = None;
|
| 1428 |
|
| 1429 |
match oauth_access_token(&client, &email, &pass_md5).await {
|
| 1430 |
Ok(t) => access_token = Some(t),
|
|
|
|
| 1479 |
}
|
| 1480 |
|
| 1481 |
if arl_out.is_none() {
|
| 1482 |
+
match gw_light_call(&client, "deezer.getUserData", "null", json!({})).await {
|
| 1483 |
+
Ok(ud) => {
|
| 1484 |
+
let token = ud["checkForm"].as_str().unwrap_or("").to_string();
|
| 1485 |
+
let gw_uid = ud["USER"]["USER_ID"]
|
| 1486 |
+
.as_i64()
|
| 1487 |
+
.map(|n| n.to_string())
|
| 1488 |
+
.unwrap_or_default();
|
| 1489 |
+
if !gw_uid.is_empty() && uid.is_none() {
|
| 1490 |
+
uid = Some(gw_uid);
|
| 1491 |
+
}
|
| 1492 |
+
if !token.is_empty() {
|
| 1493 |
+
gw_token = Some(token.clone());
|
| 1494 |
+
match gw_light_call(
|
| 1495 |
+
&client,
|
| 1496 |
+
"user.checkCredentials",
|
| 1497 |
+
&token,
|
| 1498 |
+
json!({
|
| 1499 |
+
"login": email,
|
| 1500 |
+
"password": pass_md5,
|
| 1501 |
+
"checkFormLogin": token
|
| 1502 |
+
}),
|
| 1503 |
+
)
|
| 1504 |
+
.await
|
| 1505 |
+
{
|
| 1506 |
+
Ok(_) => match gw_light_call(&client, "user.getArl", &token, json!({})).await {
|
| 1507 |
+
Ok(v) => {
|
| 1508 |
+
if let Some(s) = v.as_str() {
|
| 1509 |
+
if s.len() > 20 {
|
| 1510 |
+
arl_out = Some(s.to_string());
|
| 1511 |
+
} else {
|
| 1512 |
+
gw_err = Some("gw:no_arl".to_string());
|
| 1513 |
+
}
|
| 1514 |
+
} else {
|
| 1515 |
+
gw_err = Some("gw:no_arl".to_string());
|
| 1516 |
}
|
| 1517 |
}
|
| 1518 |
+
Err(e) => {
|
| 1519 |
+
gw_err = Some(format!("gw:getArl:{e}"));
|
| 1520 |
+
}
|
| 1521 |
+
},
|
| 1522 |
+
Err(e) => {
|
| 1523 |
+
gw_err = Some(format!("gw:checkCredentials:{e}"));
|
| 1524 |
}
|
| 1525 |
}
|
| 1526 |
+
} else {
|
| 1527 |
+
gw_err = Some("gw:no_checkForm".to_string());
|
| 1528 |
}
|
| 1529 |
}
|
| 1530 |
+
Err(e) => {
|
| 1531 |
+
gw_err = Some(format!("gw:getUserData:{e}"));
|
| 1532 |
+
}
|
| 1533 |
}
|
| 1534 |
}
|
| 1535 |
|
| 1536 |
if access_token.is_none() && arl_out.as_deref().unwrap_or("").len() < 20 {
|
| 1537 |
+
let msg = match (login_err, gw_err) {
|
| 1538 |
+
(Some(a), Some(b)) => format!("{a}; {b}"),
|
| 1539 |
+
(Some(a), None) => a,
|
| 1540 |
+
(None, Some(b)) => b,
|
| 1541 |
+
(None, None) => "login_failed".to_string(),
|
| 1542 |
+
};
|
| 1543 |
let mut map = state.pair.write().await;
|
| 1544 |
if let Some(s) = map.get_mut(&code) {
|
| 1545 |
s.error = Some(msg.clone());
|
|
|
|
| 1551 |
let mut map = state.pair.write().await;
|
| 1552 |
if let Some(s) = map.get_mut(&code) {
|
| 1553 |
s.access_token = access_token;
|
| 1554 |
+
if gw_token.is_some() {
|
| 1555 |
+
s.token = gw_token;
|
| 1556 |
+
}
|
| 1557 |
s.user_id = uid;
|
| 1558 |
s.email = Some(email);
|
| 1559 |
s.arl = arl_out;
|