From f0ef0bddd23437b41fdb85bb163f1bf5b91bf6c0 Mon Sep 17 00:00:00 2001 From: khanhduytran0 Date: Wed, 8 Jun 2022 07:55:57 +0700 Subject: [PATCH] [MSA] Remove unnecessary step + Only refresh when token expires --- .../kdt/pojavlaunch/PojavLoginActivity.java | 2 +- .../microsoft/MicrosoftAuthTask.java | 3 ++- .../authenticator/microsoft/Msa.java | 27 +++---------------- .../pojavlaunch/value/MinecraftAccount.java | 1 + 4 files changed, 7 insertions(+), 26 deletions(-) diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/PojavLoginActivity.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/PojavLoginActivity.java index b72d91682..0a5dd999d 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/PojavLoginActivity.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/PojavLoginActivity.java @@ -595,7 +595,7 @@ public class PojavLoginActivity extends BaseActivity { Log.e("Account","Stop torturing me sempai"); return; } - if (acc.isMicrosoft){ + if (acc.isMicrosoft && System.currentTimeMillis() > acc.expiresAt){ new MicrosoftAuthTask(PojavLoginActivity.this, authListener) .execute("true", acc.msaRefreshToken); } else { diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/authenticator/microsoft/MicrosoftAuthTask.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/authenticator/microsoft/MicrosoftAuthTask.java index fa98a0820..f7df1c8fd 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/authenticator/microsoft/MicrosoftAuthTask.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/authenticator/microsoft/MicrosoftAuthTask.java @@ -46,7 +46,7 @@ public class MicrosoftAuthTask extends AsyncTask { build.setMessage(ctx.get().getString(R.string.global_waiting)); build.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); build.setCancelable(false); - build.setMax(6); + build.setMax(5); build.show(); } @@ -80,6 +80,7 @@ public class MicrosoftAuthTask extends AsyncTask { acc.profileId = msa.mcUuid; acc.isMicrosoft = true; acc.msaRefreshToken = msa.msRefreshToken; + acc.expiresAt = msa.expiresAt; acc.updateSkinFace(); } acc.save(); diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/authenticator/microsoft/Msa.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/authenticator/microsoft/Msa.java index c12d38926..4a1a7da1b 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/authenticator/microsoft/Msa.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/authenticator/microsoft/Msa.java @@ -18,7 +18,6 @@ public class Msa { private static final String xblAuthUrl = "https://user.auth.xboxlive.com/user/authenticate"; private static final String xstsAuthUrl = "https://xsts.auth.xboxlive.com/xsts/authorize"; private static final String mcLoginUrl = "https://api.minecraftservices.com/authentication/login_with_xbox"; - private static final String mcStoreUrl = "https://api.minecraftservices.com/entitlements/mcstore"; private static final String mcProfileUrl = "https://api.minecraftservices.com/minecraft/profile"; private MicrosoftAuthTask task; @@ -29,6 +28,7 @@ public class Msa { public String mcToken; public String mcUuid; public boolean doesOwnGame; + public long expiresAt; public Msa(MicrosoftAuthTask task, boolean isRefresh, String authCode) throws IOException, JSONException { this.task = task; @@ -194,37 +194,16 @@ public class Msa { } if(conn.getResponseCode() >= 200 && conn.getResponseCode() < 300) { + expiresAt = System.currentTimeMillis() + 86400000; JSONObject jo = new JSONObject(Tools.read(conn.getInputStream())); Log.i("MicroAuth","MC token: "+jo.getString("access_token")); mcToken = jo.getString("access_token"); checkMcProfile(jo.getString("access_token")); - checkMcStore(jo.getString("access_token")); }else{ throwResponseError(conn); } } - private void checkMcStore(String mcAccessToken) throws IOException, JSONException { - task.publishProgressPublic(); - - URL url = new URL(mcStoreUrl); - HttpURLConnection conn = (HttpURLConnection)url.openConnection(); - conn.setRequestProperty("Authorization", "Bearer " + mcAccessToken); - conn.setRequestMethod("GET"); - conn.setUseCaches(false); - conn.connect(); - if(conn.getResponseCode() >= 200 && conn.getResponseCode() < 300) { - JSONObject jo = new JSONObject(Tools.read(conn.getInputStream())); - JSONArray ja = jo.getJSONArray("items"); - Log.i("MicroAuth","Store Len = " + ja.length()); - for(int i = 0; i < ja.length(); i++) { - String prod = ja.getJSONObject(i).getString("name"); - Log.i("MicroAuth","Product " + i +": " +prod); - } - }else{ - throwResponseError(conn); - } - } private void checkMcProfile(String mcAccessToken) throws IOException, JSONException { task.publishProgressPublic(); @@ -242,7 +221,7 @@ public class Msa { JSONObject jsonObject = new JSONObject(s); String name = (String) jsonObject.get("name"); String uuid = (String) jsonObject.get("id"); - String uuidDashes = uuid .replaceFirst( + String uuidDashes = uuid.replaceFirst( "(\\p{XDigit}{8})(\\p{XDigit}{4})(\\p{XDigit}{4})(\\p{XDigit}{4})(\\p{XDigit}+)", "$1-$2-$3-$4-$5" ); doesOwnGame = true; diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/value/MinecraftAccount.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/value/MinecraftAccount.java index 14573daae..d0966f760 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/value/MinecraftAccount.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/value/MinecraftAccount.java @@ -21,6 +21,7 @@ public class MinecraftAccount public boolean isMicrosoft = false; public String msaRefreshToken = "0"; public String skinFaceBase64; + public long expiresAt; void updateSkinFace(String uuid) { try {