diff --git a/app/src/main/java/top/yvyan/guettable/activity/AboutActivity.java b/app/src/main/java/top/yvyan/guettable/activity/AboutActivity.java
index 8ea3912a42f0096650c9dfb3972edbf7ab88064c..e10161770bc96e66bbb5915f99e4fec9f26849a8 100644
--- a/app/src/main/java/top/yvyan/guettable/activity/AboutActivity.java
+++ b/app/src/main/java/top/yvyan/guettable/activity/AboutActivity.java
@@ -8,6 +8,7 @@ import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
+import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
@@ -32,12 +33,17 @@ public class AboutActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SingleSettingData singleSettingData = SingleSettingData.newInstance(this);
+ SettingData Settings=SettingData.newInstance(getContext());
BackgroundUtil.setPageTheme(this, singleSettingData.getThemeId());
setContentView(R.layout.activity_about);
BackgroundUtil.setFullAlphaStatus(this);
TextView title = findViewById(R.id.title);
title.setText(getString(R.string.person_about));
TextView profileVersion = findViewById(R.id.about_version);
+ LinearLayout debug_ClearMFACookie= findViewById(R.id.clear_mfa_cookie);
+ debug_ClearMFACookie.setVisibility(Settings.isDevelopMode() ? LinearLayout.VISIBLE : LinearLayout.GONE);
+ View debug_ClearMFACookie_spliter= findViewById(R.id.clear_mfa_cookie_spliter);
+ debug_ClearMFACookie_spliter.setVisibility(Settings.isDevelopMode() ? View.VISIBLE : View.GONE);
profileVersion.setText(AppUtil.getAppVersionName(getContext()));
}
@@ -78,6 +84,13 @@ public class AboutActivity extends AppCompatActivity {
helpTest();
}
+ public void clearMFACookie(View view) {
+ TokenData tokenData = TokenData.newInstance(getContext());
+ tokenData.setMFACookie(null);
+ tokenData.setBkjwCookie(null);
+ ToastUtil.showToast(getContext(),"清除成功");
+ }
+
/**
* 协助测试
*/
diff --git a/app/src/main/java/top/yvyan/guettable/activity/LoginActivity.java b/app/src/main/java/top/yvyan/guettable/activity/LoginActivity.java
index b6abd18a8bacf6af1c17054d8fd11b6c550f761b..90ca1894f71d7a85a0c657c8530c92f918fb74de 100644
--- a/app/src/main/java/top/yvyan/guettable/activity/LoginActivity.java
+++ b/app/src/main/java/top/yvyan/guettable/activity/LoginActivity.java
@@ -127,14 +127,14 @@ public class LoginActivity extends Activity implements View.OnClickListener {
}
/**
- * 验证智慧校园密码 OTP Version
+ * 验证智慧校园密码 SMSCode Version
*/
- private void testCASWithOTP(String OTP, String CASCookie, TokenData tokenData) {
+ private void testCASWithSMSCode(String SMSCode, String CASCookie, TokenData tokenData) {
String account = etAccount.getText().toString();
String pwd = etPwd.getText().toString();
new Thread(() -> {
runOnUiThread(() -> button.setText("正在认证-手机验证码"));
- String MultiFactorAuth = StaticService.VerifyPhoneOTP(this, OTP, CASCookie);
+ String MultiFactorAuth = StaticService.reAuth_SMSCode(this, SMSCode, CASCookie);
if (MultiFactorAuth.contains("ERROR")) {
if (MultiFactorAuth.equals("ERROR1")) {
showErrorToast(-3);
@@ -167,7 +167,26 @@ public class LoginActivity extends Activity implements View.OnClickListener {
if (CasCookie.contains("ERROR5")) {
tokenData.setTGTToken(CasCookie.substring(CasCookie.indexOf(";") + 1));
tokenData.setBkjwCookie(null);
- bypass2FA(account, password, CasCookie.substring(CasCookie.indexOf(";") + 1), tokenData);
+ String phoneNumber = StaticService.reAuth_sendSMSCode(this, account,CasCookie.substring(CasCookie.indexOf(";")+1));
+ if (!phoneNumber.contains("ERROR")) {
+ runOnUiThread(() -> {
+ button.setText("正在二步验证");
+ showSMSCodeDialog(phoneNumber,CasCookie.substring(CasCookie.indexOf(";")+1),tokenData);
+ });
+ } else {
+ if (phoneNumber.equals("ERROR1")) {
+ showErrorToast(-4);
+ } else if (phoneNumber.equals("ERROR2")) {
+ showErrorToast(-2);
+ } else if(phoneNumber.contains("ERROR3")) {
+ runOnUiThread(() -> {
+ setEnClick();
+ ToastUtil.showToast(this, getResources().getString(R.string.login_fail_SMSCodeSend)+phoneNumber.substring(7));
+ });
+ } else {
+ showErrorToast(-8);
+ }
+ }
} else {
tokenData.setTGTToken(CasCookie);
tokenData.setBkjwCookie(null);
@@ -187,17 +206,17 @@ public class LoginActivity extends Activity implements View.OnClickListener {
}
/**
- * 跳过二步认证
+ * 二步认证 - 密码
*
* @param account 学号
* @param password 密码
* @param CASCookie CAS Cookie
* @param tokenData tokenData
*/
- private void bypass2FA(String account, String password, String CASCookie, TokenData tokenData) {
+ private void reAuth_Password(String account, String password, String CASCookie, TokenData tokenData) {
try {
- runOnUiThread(() -> button.setText("正在尝试绕过二步验证"));
- String MultiFactorAuth = StaticService.bypass2FA(this, password, CASCookie);
+ runOnUiThread(() -> button.setText("正在二步验证"));
+ String MultiFactorAuth = StaticService.reAuth_Password(this, password, CASCookie);
if (MultiFactorAuth.contains("ERROR")) {
if (MultiFactorAuth.equals("ERROR1")) {
showErrorToast(-4);
@@ -220,7 +239,7 @@ public class LoginActivity extends Activity implements View.OnClickListener {
/**
* 显示手机验证码2FA
*/
- private void showPhoneOtpDialog(String phoneNumber, String CasCookie, TokenData tokenData) {
+ private void showSMSCodeDialog(String phoneNumber, String CasCookie, TokenData tokenData) {
try {
AlertDialog dialog;
AlertDialog.Builder builder = new AlertDialog.Builder(this);
@@ -231,17 +250,17 @@ public class LoginActivity extends Activity implements View.OnClickListener {
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
Window window = dialog.getWindow();
- window.setContentView(R.layout.login_phoneotp);
+ window.setContentView(R.layout.login_smscode);
TextView phoneNumberView = window
.findViewById(R.id.et_phone);
phoneNumberView.setText(phoneNumber);
Button buttonYes = window.findViewById(R.id.btn_text_yes);
buttonYes.setOnClickListener(view -> {
- TextView phoneOTP = window
- .findViewById(R.id.et_phoneotp);
- String OTP = phoneOTP.getText().toString();
+ TextView SMSCode = window
+ .findViewById(R.id.et_smscode);
+ String SMSCodeOTP = SMSCode.getText().toString();
+ testCASWithSMSCode(SMSCodeOTP, CasCookie, tokenData);
dialog.dismiss();
- testCASWithOTP(OTP, CasCookie, tokenData);
});
} catch (Exception ignore) {
}
diff --git a/app/src/main/java/top/yvyan/guettable/data/TokenData.java b/app/src/main/java/top/yvyan/guettable/data/TokenData.java
index 272896aeeb9723ff84e0459175d6ec314a70a75f..100619f35bb69c14cd6f337fcccc9f77b53d2fc3 100644
--- a/app/src/main/java/top/yvyan/guettable/data/TokenData.java
+++ b/app/src/main/java/top/yvyan/guettable/data/TokenData.java
@@ -1,18 +1,33 @@
package top.yvyan.guettable.data;
import android.annotation.SuppressLint;
+import android.app.Activity;
import android.content.Context;
+import android.content.ContextWrapper;
import android.content.SharedPreferences;
+import android.graphics.Color;
+import android.graphics.drawable.ColorDrawable;
+import android.view.Window;
+import android.view.WindowManager;
+import android.widget.Button;
+import android.widget.TextView;
+
+import java.lang.reflect.*;
+
+import androidx.appcompat.app.AlertDialog;
import top.yvyan.guettable.R;
import top.yvyan.guettable.service.fetch.Net;
import top.yvyan.guettable.service.fetch.StaticService;
+import top.yvyan.guettable.util.ToastUtil;
public class TokenData {
@SuppressLint("StaticFieldLeak")
private static TokenData tokenData;
private final SharedPreferences.Editor editor;
- private final Context context;
+ private Context context;
+
+ private Object Caller;
private static final String SHP_NAME = "tokenData";
@@ -60,7 +75,6 @@ public class TokenData {
*/
public String getVpnToken() {
forceVPN = true;
- refresh();
//isVPN = Net.testNet(context) != 0;
return VPNToken;
}
@@ -83,6 +97,17 @@ public class TokenData {
if (tokenData == null) {
tokenData = new TokenData(context);
}
+ tokenData.context = context; // Update Context
+ tokenData.Caller = null;
+ return tokenData;
+ }
+
+ public static TokenData newInstance(Context context, Object Caller) {
+ if (tokenData == null) {
+ tokenData = new TokenData(context);
+ }
+ tokenData.context = context; // Update Context
+ tokenData.Caller = Caller;
return tokenData;
}
@@ -176,14 +201,31 @@ public class TokenData {
* @return 操作结果
*/
public int refreshTGT() {
- String TGTTokenStr = StaticService.SSOLogin(context, accountData.getUsername(), accountData.getPwd(),TGTToken, MFACookie);
+ String TGTTokenStr = StaticService.SSOLogin(context, accountData.getUsername(), accountData.getPwd(), TGTToken, MFACookie);
if (TGTTokenStr.equals("ERROR2") || TGTTokenStr.equals("ERROR0")) {
return -2;
}
if (TGTTokenStr.contains("TGT-")) {
if (TGTTokenStr.contains("ERROR5")) {
- setTGTToken(TGTTokenStr.substring(TGTTokenStr.indexOf(";") + 1));
- return bypass2FA(accountData.getPwd(), TGTTokenStr.substring(TGTTokenStr.indexOf(";") + 1));
+ String CASCookie = TGTTokenStr.substring(TGTTokenStr.indexOf(";") + 1);
+ setTGTToken(CASCookie);
+ Activity activity = this.getActivity(context);
+ if (activity == null) return -3;
+ String phoneNumber = StaticService.reAuth_sendSMSCode(context, accountData.getUsername(), CASCookie);
+ if (!phoneNumber.contains("ERROR")) {
+ reAuth_showSMSCodeDialog(activity, phoneNumber, CASCookie);
+ } else {
+ if (phoneNumber.contains("ERROR3")) {
+ activity.runOnUiThread(() -> {
+ ToastUtil.showToast(context, context.getResources().getString(R.string.login_fail_SMSCodeSend) + phoneNumber.substring(7));
+ });
+ } else {
+ activity.runOnUiThread(() -> {
+ ToastUtil.showToast(context, context.getResources().getString(R.string.login_fail_SMSCodeSend) + "未知错误");
+ });
+ }
+ }
+ return -3;
} else {
setTGTToken(TGTTokenStr);
}
@@ -193,12 +235,96 @@ public class TokenData {
}
}
+ public Activity getActivity(Context context) {
+ if (context == null) {
+ return null;
+ } else if (context instanceof ContextWrapper) {
+ if (context instanceof Activity) {
+ return (Activity) context;
+ } else {
+ return getActivity(((ContextWrapper) context).getBaseContext());
+ }
+ }
+
+ return null;
+ }
+
+ private void reAuth_showSMSCodeDialog(Activity activity, String phoneNumber, String CasCookie) {
+ activity.runOnUiThread(() -> {
+ try {
+ AlertDialog dialog;
+ AlertDialog.Builder builder = new AlertDialog.Builder(activity);
+ dialog = builder.create();
+ dialog.show();
+ dialog.setCanceledOnTouchOutside(false);
+ dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
+ dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
+ dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
+ Window window = dialog.getWindow();
+ window.setContentView(R.layout.login_smscode);
+ TextView phoneNumberView = window
+ .findViewById(R.id.et_phone);
+ phoneNumberView.setText(phoneNumber);
+ Button buttonYes = window.findViewById(R.id.btn_text_yes);
+ Button buttonCancel = window.findViewById(R.id.btn_text_cancel);
+ buttonCancel.setOnClickListener(view -> {
+ dialog.cancel();
+ });
+ buttonYes.setOnClickListener(view -> {
+ TextView SMSCode = window
+ .findViewById(R.id.et_smscode);
+ String SMSCodeOTP = SMSCode.getText().toString();
+ buttonYes.setText("正在登录");
+ buttonYes.setEnabled(false);
+ new Thread(() -> {
+ int State = reAuth_SMSCode(SMSCodeOTP, CasCookie);
+ activity.runOnUiThread(() -> {
+ if (State == 0) {
+ dialog.dismiss();
+ } else {
+ buttonYes.setText("登录");
+ buttonYes.setEnabled(true);
+ }
+ ToastUtil.showToast(activity, State == 0 ? "验证成功" : "验证码有误");
+ });
+ }).start();
+ });
+ } catch (Exception ignore) {
+
+ }
+ });
+ }
+
+ private int reAuth_SMSCode(String SMSCode, String CASCookie) {
+ try {
+ String MultiFactorAuth = StaticService.reAuth_SMSCode(context, SMSCode, CASCookie);
+ if (MultiFactorAuth.contains("ERROR")) {
+ return -1;
+ } else {
+ setMFACookie(MultiFactorAuth);
+ if (Caller != null) {
+ try {
+ // 反射尝试调用Update方法 (如果有)
+ Class ContextClass = Caller.getClass();
+ Method Update = ContextClass.getMethod("update");
+ Update.invoke(Caller);
+ } catch (Exception ignore) {
+
+ }
+ }
+ return 0;
+ }
+ } catch (Exception ignore) {
+ return -1;
+ }
+ }
+
/**
* bypass 2FA
*/
- private int bypass2FA(String password, String CASCookie) {
+ private int reAuth_Password(String password, String CASCookie) {
try {
- String MultiFactorAuth = StaticService.bypass2FA(context, password, CASCookie);
+ String MultiFactorAuth = StaticService.reAuth_Password(context, password, CASCookie);
if (MultiFactorAuth.contains("ERROR")) {
return -1;
} else {
@@ -215,7 +341,7 @@ public class TokenData {
}
public String getCASCookie() {
- return (MFACookie != null ? MFACookie : "") + (TGTToken != null ? ((MFACookie!=null ? "; " : "")+TGTToken) : "");
+ return (MFACookie != null ? MFACookie : "") + (TGTToken != null ? ((MFACookie != null ? "; " : "") + TGTToken) : "");
}
public String getTGTToken() {
diff --git a/app/src/main/java/top/yvyan/guettable/moreFun/BaseFuncActivity.java b/app/src/main/java/top/yvyan/guettable/moreFun/BaseFuncActivity.java
index bc34d570464441052c51e202af9860803f0f2bcd..9ec51ad5dccf7f4e861fd91322550d09d04b1b80 100644
--- a/app/src/main/java/top/yvyan/guettable/moreFun/BaseFuncActivity.java
+++ b/app/src/main/java/top/yvyan/guettable/moreFun/BaseFuncActivity.java
@@ -23,6 +23,10 @@ import top.yvyan.guettable.util.BackgroundUtil;
public abstract class BaseFuncActivity extends AppCompatActivity implements IMoreFun {
@SuppressLint("NonConstantResourceId")
+
+ protected boolean update = true;
+ protected int stateNum = -1;
+ @SuppressLint("NonConstantResourceId")
@BindView(R.id.state)
TextView state;
@SuppressLint("NonConstantResourceId")
@@ -34,9 +38,6 @@ public abstract class BaseFuncActivity extends AppCompatActivity implements IMor
@SuppressLint("NonConstantResourceId")
@BindView(R.id.func_base_constraintLayout)
ConstraintLayout header;
- @SuppressLint("NonConstantResourceId")
-
- protected boolean update = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -47,6 +48,7 @@ public abstract class BaseFuncActivity extends AppCompatActivity implements IMor
ButterKnife.bind(this);
more.setVisibility(View.GONE);
more.setOnClickListener(this::showPopMenu);
+ state.setOnClickListener(this::stateOnClick);
init();
header.getBackground().setAlpha(255);
BackgroundUtil.setFullAlphaStatus(this);
@@ -111,12 +113,21 @@ public abstract class BaseFuncActivity extends AppCompatActivity implements IMor
@Override
public void updateView(String hint, int stateNum) {
+ this.stateNum = stateNum;
state.setText(hint);
if (stateNum == 5 && update) {
showContent();
}
}
+ protected void stateOnClick(View view) {
+ if (this.stateNum != 5) {
+ if (this.stateNum == -3) {
+ this.init(); // 调用init方法重新获取验证码
+ }
+ }
+ }
+
/**
* 子类init (不包含设置内容视图)
*/
diff --git a/app/src/main/java/top/yvyan/guettable/service/AutoUpdate.java b/app/src/main/java/top/yvyan/guettable/service/AutoUpdate.java
index e91f570bbb04e09e7118b95e33b1739fe2a0701d..91316266a5de12f3002eb4d9bd8d6893e5a82432 100644
--- a/app/src/main/java/top/yvyan/guettable/service/AutoUpdate.java
+++ b/app/src/main/java/top/yvyan/guettable/service/AutoUpdate.java
@@ -40,7 +40,7 @@ public class AutoUpdate {
this.activity = fragment.getActivity();
accountData = AccountData.newInstance(activity);
generalData = GeneralData.newInstance(activity);
- tokenData = TokenData.newInstance(activity);
+ tokenData = TokenData.newInstance(activity,this);
settingData = SettingData.newInstance(activity);
init();
}
@@ -72,8 +72,8 @@ public class AutoUpdate {
* 启动同步
*/
public void update() {
- // 判断状态是否符合;合适的状态:就绪 网络错误 同步成功(点击同步)
- if (state == 0 || state == -2 || state == 5) {
+ // 判断状态是否符合;合适的状态:就绪 登录失效 网络错误 同步成功(点击同步)
+ if (state == 0 || state == -2 || state == -3 || state == 5) {
update_thread();
}
}
@@ -102,6 +102,9 @@ public class AutoUpdate {
case -2:
text = "网络错误";
break;
+ case -3:
+ text = "登录失效(点击重试)";
+ break;
case 91:
text = "尝试同步理论课";
break;
diff --git a/app/src/main/java/top/yvyan/guettable/service/CommFunc.java b/app/src/main/java/top/yvyan/guettable/service/CommFunc.java
index f6fa2cfb20ad01ef399357a57bdb1396f16d5f16..7db6624cd080a0b17020216b7c1de85dd87c1611 100644
--- a/app/src/main/java/top/yvyan/guettable/service/CommFunc.java
+++ b/app/src/main/java/top/yvyan/guettable/service/CommFunc.java
@@ -106,7 +106,16 @@ public class CommFunc {
final AlertDialog[] dialog = new AlertDialog[1];
activity.runOnUiThread(() -> dialog[0] = DialogUtil.setTextDialog(activity, "自动登录中...(最长需要15s)", "跳过", iDialogService, true));
- tokenData.refresh();
+ int LoginState = tokenData.refresh();
+ if (LoginState == -3) {
+ activity.runOnUiThread(() -> {
+ if (dialog[0] != null && dialog[0].isShowing()) {
+ dialog[0].dismiss();
+ }
+ ToastUtil.showToast(activity, "登录状态丢失,请输入验证码后稍后重试");
+ });
+ return;
+ }
if (!noLogin[0]) {
activity.runOnUiThread(() -> {
if (dialog[0] != null && dialog[0].isShowing()) {
@@ -151,7 +160,17 @@ public class CommFunc {
final AlertDialog[] dialog = new AlertDialog[1];
activity.runOnUiThread(() -> dialog[0] = DialogUtil.setTextDialog(activity, "自动登录中...(最长需要15s)", "跳过", iDialogService, true));
- tokenData.refresh();
+ int LoginState = tokenData.refresh();
+ if (LoginState == -3) {
+ activity.runOnUiThread(() -> {
+ if (dialog[0] != null && dialog[0].isShowing()) {
+ dialog[0].dismiss();
+ }
+ ToastUtil.showToast(activity, "登录状态丢失,请输入验证码后稍后重试");
+ });
+ return;
+ }
+
if (TokenData.isVPN()) {
tokenData.setVPNCASCookie();
}
@@ -204,7 +223,16 @@ public class CommFunc {
};
final AlertDialog[] dialog = new AlertDialog[1];
activity.runOnUiThread(() -> dialog[0] = DialogUtil.setTextDialog(activity, "自动建立连接中...(最长需要15s)", "跳过", iDialogService, true));
-
+ int LoginState = tokenData.refresh();
+ if (LoginState == -3) {
+ activity.runOnUiThread(() -> {
+ if (dialog[0] != null && dialog[0].isShowing()) {
+ dialog[0].dismiss();
+ }
+ ToastUtil.showToast(activity, "登录状态丢失,请输入验证码后稍后重试");
+ });
+ return;
+ }
String token = tokenData.getVpnToken();
tokenData.setVPNCASCookie();
if (!noLogin[0]) {
@@ -272,7 +300,16 @@ public class CommFunc {
};
final AlertDialog[] dialog = new AlertDialog[1];
activity.runOnUiThread(() -> dialog[0] = DialogUtil.setTextDialog(activity, "自动建立连接中...(最长需要15s)", "跳过", iDialogService, true));
-
+ int LoginState = tokenData.refresh();
+ if (LoginState == -3) {
+ activity.runOnUiThread(() -> {
+ if (dialog[0] != null && dialog[0].isShowing()) {
+ dialog[0].dismiss();
+ }
+ ToastUtil.showToast(activity, "登录状态丢失,请输入验证码后稍后重试");
+ });
+ return;
+ }
String token = tokenData.getVpnToken();
tokenData.setVPNCASCookie();
if (!noLogin[0]) {
diff --git a/app/src/main/java/top/yvyan/guettable/service/MoreFunService.java b/app/src/main/java/top/yvyan/guettable/service/MoreFunService.java
index 62a69f88e992565092a88be4a06929069e3e4e6a..4d615af24040b7ef3b65e2b953fcc2164d071fd0 100644
--- a/app/src/main/java/top/yvyan/guettable/service/MoreFunService.java
+++ b/app/src/main/java/top/yvyan/guettable/service/MoreFunService.java
@@ -18,34 +18,34 @@ public class MoreFunService {
this.activity = activity;
this.iMoreFun = iMoreFun;
accountData = AccountData.newInstance(activity);
- tokenData = TokenData.newInstance(activity);
+ tokenData = TokenData.newInstance(activity,this);
}
public void update() {
new Thread(() -> {
try {
if (accountData.getIsLogin()) {
- setView(91); //显示:尝试同步
+ updateView(91); //显示:尝试同步
int state;
state = iMoreFun.updateData(tokenData.getCookie());
if (state == 5 || state == -2) { //同步成功或网络错误
- setView(state);
+ updateView(state);
return;
}
- setView(92); //显示:正在登录
+ updateView(92); //显示:正在登录
state = tokenData.refresh();
if (state == -2) {
state = tokenData.refresh();
}
if (state != 0) {
- setView(state);
+ updateView(state);
return;
}
- setView(93); //显示:正在同步
+ updateView(93); //显示:正在同步
state = iMoreFun.updateData(tokenData.getCookie());
- setView(state);
+ updateView(state);
} else {
- setView(2);
+ updateView(2);
}
} catch (Exception e) {
UMCrash.generateCustomLog(e, "MoreFunService");
@@ -69,7 +69,7 @@ public class MoreFunService {
* 92 : 正在登录
* 93 : 正在同步
*/
- private void setView(int state) {
+ private void updateView(int state) {
String hint;
switch (state) {
case 2:
@@ -81,6 +81,9 @@ public class MoreFunService {
case -2:
hint = "网络错误";
break;
+ case -3:
+ hint = "登录失效(点击重试)";
+ break;
case 91:
hint = "尝试同步";
break;
diff --git a/app/src/main/java/top/yvyan/guettable/service/fetch/Net.java b/app/src/main/java/top/yvyan/guettable/service/fetch/Net.java
index b83d26398a41c9556d2678ca1709017fb74ff7ab..1d9518f8bd8d8cd1113f3cfddcb8fb6981825da9 100644
--- a/app/src/main/java/top/yvyan/guettable/service/fetch/Net.java
+++ b/app/src/main/java/top/yvyan/guettable/service/fetch/Net.java
@@ -159,10 +159,10 @@ public class Net {
* @param account account
* @return Response
*/
- public static HttpConnectionAndCode sendPhoneOTP(Context context, String account, String CASCookie) {
+ public static HttpConnectionAndCode reAuth_sendSMSCode(Context context, String account, String CASCookie) {
Resources resources = context.getResources();
return Post.post(
- resources.getString(R.string.url_SendPhoneOTP),
+ resources.getString(R.string.url_SendSMSCode),
null,
resources.getString(R.string.user_agent),
resources.getString(R.string.SSO_referer),
@@ -184,7 +184,7 @@ public class Net {
* @param OTP OTP
* @return Response
*/
- public static HttpConnectionAndCode verifyPhoneOTP(Context context, String OTP, String CASCookie) {
+ public static HttpConnectionAndCode reAuth_SMSCode(Context context, String OTP, String CASCookie) {
Resources resources = context.getResources();
return Post.post(
resources.getString(R.string.url_ReAuth),
@@ -208,7 +208,7 @@ public class Net {
* @param CASCookie CAS Cookie
* @return Response
*/
- public static HttpConnectionAndCode bypass2FA(Context context, String password, String CASCookie) {
+ public static HttpConnectionAndCode reAuth_Password(Context context, String password, String CASCookie) {
Resources resources = context.getResources();
try {
HttpConnectionAndCode MFAParams = Get.get(
diff --git a/app/src/main/java/top/yvyan/guettable/service/fetch/StaticService.java b/app/src/main/java/top/yvyan/guettable/service/fetch/StaticService.java
index 72126655822b6d14fb8641ba8f6ffc56071838fb..9684425bb3d112a004dcefbf1463d379d2305d6b 100644
--- a/app/src/main/java/top/yvyan/guettable/service/fetch/StaticService.java
+++ b/app/src/main/java/top/yvyan/guettable/service/fetch/StaticService.java
@@ -48,8 +48,8 @@ public class StaticService {
* ERROR2 : 需要使用外网网址进行访问
* ERROR3 : 验证码发送CD
*/
- public static String SendPhoneOTP(Context context, String account, String CASCookie) {
- HttpConnectionAndCode response = Net.sendPhoneOTP(context, account, CASCookie);
+ public static String reAuth_sendSMSCode(Context context, String account, String CASCookie) {
+ HttpConnectionAndCode response = Net.reAuth_sendSMSCode(context, account, CASCookie);
if (response.code != 0) {
if (response.code == -5) {
return "ERROR2";
@@ -68,8 +68,8 @@ public class StaticService {
return "ERROR0";
}
- public static String bypass2FA(Context context, String Password, String CASCookie) {
- HttpConnectionAndCode response = Net.bypass2FA(context, Password, CASCookie);
+ public static String reAuth_Password(Context context, String Password, String CASCookie) {
+ HttpConnectionAndCode response = Net.reAuth_Password(context, Password, CASCookie);
if (response.code != 0) {
if (response.code == -5) {
return "ERROR2";
@@ -88,14 +88,14 @@ public class StaticService {
*
* @param context context
* @param CASCookie CAS Cookie
- * @param OTP OTP手机验证码
+ * @param SMSCode OTP手机验证码
* @return 多因素身份验证令牌Cookie
* ERROR0 : 网络错误
* ERROR1 : 验证码错误
* ERROR2 : 需要使用外网网址进行访问
*/
- public static String VerifyPhoneOTP(Context context, String OTP, String CASCookie) {
- HttpConnectionAndCode response = Net.verifyPhoneOTP(context, OTP, CASCookie);
+ public static String reAuth_SMSCode(Context context, String SMSCode, String CASCookie) {
+ HttpConnectionAndCode response = Net.reAuth_SMSCode(context, SMSCode, CASCookie);
if (response.code != 0) {
if (response.code == -5) {
return "ERROR2";
diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml
index ad01191d6e003393f16374dcd22b825fb624fd65..e20cfd2eff7b33ecf46ce1c076aaf293d758d573 100644
--- a/app/src/main/res/layout/activity_about.xml
+++ b/app/src/main/res/layout/activity_about.xml
@@ -443,6 +443,44 @@
android:layout_height="0.1dp"
android:background="@color/xui_config_color_gray_9" />
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/login_phoneotp.xml b/app/src/main/res/layout/login_smscode.xml
similarity index 88%
rename from app/src/main/res/layout/login_phoneotp.xml
rename to app/src/main/res/layout/login_smscode.xml
index ddf08e09df91c16ff2add6c2980efe3ad1a6e0a7..4fd9ef284f79a19409644f5671e58ab2152e6ec2 100644
--- a/app/src/main/res/layout/login_phoneotp.xml
+++ b/app/src/main/res/layout/login_smscode.xml
@@ -19,7 +19,7 @@
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="8dp"
- android:text="@string/login_2fa_phoneotp"
+ android:text="@string/login_2fa_smscode"
android:textSize="20sp" />
+
+