Update ali qrcode token

This commit is contained in:
FongMi 2023-02-08 01:33:02 +08:00
parent 1e64219123
commit bf2c9e501a
5 changed files with 124 additions and 27 deletions

View File

@ -0,0 +1,66 @@
package com.github.catvod.bean.ali;
import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
import java.util.List;
public class Biz {
@SerializedName("pds_login_result")
private Biz pdsLoginResult;
@SerializedName("role")
private String role;
@SerializedName("isFirstLogin")
private Boolean isFirstLogin;
@SerializedName("needLink")
private Boolean needLink;
@SerializedName("loginType")
private String loginType;
@SerializedName("nickName")
private String nickName;
@SerializedName("needRpVerify")
private Boolean needRpVerify;
@SerializedName("avatar")
private String avatar;
@SerializedName("accessToken")
private String accessToken;
@SerializedName("userName")
private String userName;
@SerializedName("userId")
private String userId;
@SerializedName("defaultDriveId")
private String defaultDriveId;
@SerializedName("existLink")
private List<?> existLink;
@SerializedName("expiresIn")
private Integer expiresIn;
@SerializedName("expireTime")
private String expireTime;
@SerializedName("requestId")
private String requestId;
@SerializedName("dataPinSetup")
private Boolean dataPinSetup;
@SerializedName("state")
private String state;
@SerializedName("tokenType")
private String tokenType;
@SerializedName("dataPinSaved")
private Boolean dataPinSaved;
@SerializedName("refreshToken")
private String refreshToken;
@SerializedName("status")
private String status;
public static Biz objectFrom(String str) {
return new Gson().fromJson(str, Biz.class);
}
public Biz getPdsLoginResult() {
return pdsLoginResult;
}
public String getRefreshToken() {
return refreshToken;
}
}

View File

@ -1,24 +1,31 @@
package com.github.catvod.bean.ali;
import android.util.Base64;
import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
public class Data {
@SerializedName(value = "data", alternate = "pds_login_result")
@SerializedName("data")
private Data data;
@SerializedName("content")
private Data content;
@SerializedName("t")
private String t;
@SerializedName("ck")
private String ck;
@SerializedName("codeContent")
private String codeContent;
@SerializedName("refreshToken")
private String refreshToken;
@SerializedName("qrCodeStatus")
private String qrCodeStatus;
@SerializedName("bizExt")
private String bizExt;
public static Data objectFrom(String str) {
try {
return new Gson().fromJson(str, Data.class);
Data data = new Gson().fromJson(str, Data.class);
return data == null ? new Data() : data;
} catch (Exception e) {
return new Data();
}
@ -28,8 +35,8 @@ public class Data {
return data == null ? new Data() : data;
}
public boolean hasToken() {
return getData().getRefreshToken().length() > 0;
public Data getContent() {
return content == null ? new Data() : content;
}
public String getT() {
@ -44,7 +51,23 @@ public class Data {
return codeContent == null ? "" : codeContent;
}
public String getRefreshToken() {
return refreshToken == null ? "" : refreshToken;
public String getQrCodeStatus() {
return qrCodeStatus == null ? "" : qrCodeStatus;
}
public String getBizExt() {
return bizExt == null ? "" : bizExt;
}
public String getToken() {
return Biz.objectFrom(new String(Base64.decode(getBizExt(), Base64.DEFAULT))).getPdsLoginResult().getRefreshToken();
}
public boolean hasToken() {
return getQrCodeStatus().equals("CONFIRMED") && getBizExt().length() > 0;
}
public boolean isExpired() {
return getQrCodeStatus().equals("EXPIRED");
}
}

View File

@ -13,11 +13,10 @@ import com.github.catvod.bean.ali.Auth;
import com.github.catvod.bean.ali.Data;
import com.github.catvod.bean.ali.Item;
import com.github.catvod.net.OkHttp;
import com.github.catvod.utils.Utils;
import com.github.catvod.utils.Prefers;
import com.github.catvod.utils.QRCode;
import com.github.catvod.utils.Trans;
import com.google.gson.JsonObject;
import com.github.catvod.utils.Utils;
import org.json.JSONArray;
import org.json.JSONObject;
@ -32,6 +31,7 @@ import java.util.Map;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@ -41,7 +41,6 @@ import java.util.regex.Pattern;
public class Ali {
public static final Pattern pattern = Pattern.compile("www.aliyundrive.com/s/([^/]+)(/folder/([^/]+))?");
private static final String QRCODE = "https://token.cooluc.com/";
private ScheduledExecutorService service;
private final Auth auth;
@ -195,7 +194,7 @@ public class Ali {
auth.setRefreshToken(object.getString("refresh_token"));
return true;
} catch (Exception e) {
checkService();
stopService();
auth.clean();
getQRCode();
return true;
@ -304,23 +303,32 @@ public class Ali {
return result;
}
private void checkService() {
private void stopService() {
if (service != null) service.shutdownNow();
if (auth.getView() != null) Init.run(() -> Utils.removeView(auth.getView()));
}
private void getQRCode() {
HashMap<String, String> headers = new HashMap<>();
headers.put("User-Agent", Utils.CHROME);
Data data = Data.objectFrom(OkHttp.string(QRCODE + "qr", headers));
if (data != null) Init.run(() -> showCode(data));
AtomicInteger time = new AtomicInteger();
Data data = Data.objectFrom(OkHttp.string("https://passport.aliyundrive.com/newlogin/qrcode/generate.do?appName=aliyun_drive&fromSite=52&appName=aliyun_drive&appEntrance=web&isMobile=false&lang=zh_CN&returnUrl=&bizParams=&_bx-v=2.0.3")).getContent().getData();
Init.run(() -> showCode(data));
service = Executors.newScheduledThreadPool(1);
if (data != null) service.scheduleAtFixedRate(() -> {
JsonObject params = new JsonObject();
params.addProperty("t", data.getData().getT());
params.addProperty("ck", data.getData().getCk());
Data result = Data.objectFrom(OkHttp.postJson(QRCODE + "ck", params.toString(), headers));
if (result.hasToken()) setToken(result.getData().getRefreshToken());
service.scheduleAtFixedRate(() -> {
Map<String, String> params = new HashMap<>();
params.put("t", data.getT());
params.put("ck", data.getCk());
params.put("appName", "aliyun_drive");
params.put("appEntrance", "web");
params.put("isMobile", "false");
params.put("lang", "zh_CN");
params.put("returnUrl", "");
params.put("fromSite", "52");
params.put("bizParams", "");
params.put("navlanguage", "zh-CN");
params.put("navPlatform", "MacIntel");
Data result = Data.objectFrom(OkHttp.post("https://passport.aliyundrive.com/newlogin/qrcode/query.do?appName=aliyun_drive&fromSite=52&_bx-v=2.0.31", params)).getContent().getData();
if (result.hasToken()) setToken(result.getToken());
if (time.incrementAndGet() > 29) stopService();
}, 1, 1, TimeUnit.SECONDS);
}
@ -328,14 +336,14 @@ public class Ali {
Prefers.put("token", value);
Init.show("請重新進入播放頁");
auth.setRefreshToken(value);
checkService();
stopService();
}
private void showCode(Data data) {
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.CENTER;
Utils.addView(create(data.getData().getCodeContent()), params);
//Init.show("請使用阿里雲盤 App 掃描二維碼");
Utils.addView(create(data.getCodeContent()), params);
Init.show("請使用阿里雲盤 App 掃描二維碼");
}
private ImageView create(String value) {

Binary file not shown.

View File

@ -1 +1 @@
82faef05c014eb6446663824eb77535e
ff85cd0428496acedc5c8a4599583862