mirror of
https://gitee.com/willfree/min-vpn-client_v2.git
synced 2026-10-04 19:42:00 +08:00
联调测试:通过了注册、登录、修改密码
This commit is contained in:
1 parent
70b161eb17
commit
dfebfdae2f
12 files changed
+263
-112
No files matched your search
Binary file not shown.
@@ -35,6 +35,7 @@ import com.pkusz.min_vpn_client.utils.UuidUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Objects;
|
||||
|
||||
import br.com.simplepass.loadingbutton.customViews.CircularProgressButton;
|
||||
@@ -165,7 +166,8 @@ public class LoginActivity extends MINVpnBaseActivity<LoginActivityPresenter>
|
||||
return;
|
||||
}
|
||||
|
||||
boolean testFlag=true;
|
||||
boolean testFlag=false;
|
||||
String password = "YouAreTesting!";
|
||||
if(!testFlag){
|
||||
if (rawUsername.isEmpty() || rawPassword.isEmpty()) {
|
||||
showWarning("请将信息填写完整");
|
||||
@@ -184,16 +186,16 @@ public class LoginActivity extends MINVpnBaseActivity<LoginActivityPresenter>
|
||||
}
|
||||
|
||||
// 密码经md5哈希
|
||||
String password =DigestUtilKt.encodeToMD5(rawPassword);
|
||||
password =DigestUtilKt.encodeToMD5(rawPassword);
|
||||
}
|
||||
|
||||
// 测试并发对签名的影响
|
||||
// new TestSigned().testSignedMethod();
|
||||
|
||||
// 传递登录请求信息,执行登录网络请求
|
||||
// OriginalLoginRequest loginRequest=new OriginalLoginRequest(rawUsername, password);
|
||||
OriginalLoginRequest loginRequest=new OriginalLoginRequest(rawUsername, password);
|
||||
// 假登陆. 先测试外访
|
||||
OriginalLoginRequest loginRequest=new OriginalLoginRequest(rawUsername, "");
|
||||
// OriginalLoginRequest loginRequest=new OriginalLoginRequest(rawUsername, "");
|
||||
mPresenter.login(loginRequest);
|
||||
});
|
||||
|
||||
@@ -276,4 +278,9 @@ public class LoginActivity extends MINVpnBaseActivity<LoginActivityPresenter>
|
||||
public void syncVpnInfoFailed() {
|
||||
showWarning("从VMS同步VPN服务器信息失败");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void machineFulled(String[] machines){
|
||||
showWarning("本账号已注册在服务器的设备已满:\n"+ Arrays.toString(machines));
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,7 @@ public interface LoginActivityContract {
|
||||
void loginFailed(String errMsg);
|
||||
void syncVpnInfoSuccess();
|
||||
void syncVpnInfoFailed();
|
||||
void machineFulled(String[] machines); // 设备已满
|
||||
}
|
||||
|
||||
interface Model extends BaseModel {
|
||||
@@ -38,6 +39,7 @@ public interface LoginActivityContract {
|
||||
void loginFailed(String errMsg){}
|
||||
void syncVpnInfoSuccess(){}
|
||||
void syncVpnInfoFailed(){}
|
||||
void machineFulled(String[] machines){} // 设备已满
|
||||
|
||||
void login(OriginalLoginRequest loginRequest){}
|
||||
void loginWithSafetyInfo(OriginalLoginRequest loginRequest, Context context){}
|
||||
|
||||
@@ -15,6 +15,7 @@ import com.pkusz.min_vpn_client.model.OriginalRequest.OriginalLoginRequest;
|
||||
import com.pkusz.min_vpn_client.model.Response.VpnServerInfoList;
|
||||
import com.pkusz.min_vpn_client.model.VMSRequestAPI;
|
||||
|
||||
import VMSConnection.TCPNet.Message.NetworkResponse;
|
||||
import common.LoggerHelper;
|
||||
|
||||
public class LoginActivityModel implements LoginActivityContract.Model{
|
||||
@@ -26,16 +27,19 @@ public class LoginActivityModel implements LoginActivityContract.Model{
|
||||
|
||||
@Override
|
||||
public void login(OriginalLoginRequest loginRequest) {
|
||||
// Integer resCode = VMSRequestAPI.INSTANCE.login(loginRequest);
|
||||
// if(resCode==null) {
|
||||
// mPresenter.loginFailed("登录失败,未成功收到VMS的合法应答");
|
||||
// }else if(resCode==200) {
|
||||
// mPresenter.loginSuccess();
|
||||
// }else{
|
||||
// mPresenter.loginFailed("登录失败,VMS应答码为"+resCode);
|
||||
// }
|
||||
System.out.println("假登陆...");
|
||||
mPresenter.loginSuccess();
|
||||
NetworkResponse resp = VMSRequestAPI.INSTANCE.login(loginRequest);
|
||||
if(resp==null) {
|
||||
mPresenter.loginFailed("登录失败,未成功收到VMS的合法应答");
|
||||
}else if(resp.Code==200) {
|
||||
mPresenter.loginSuccess();
|
||||
}else if(resp.Code==409) { // 可用设备已满三台,应当对返回数据进行解析
|
||||
String[] recordedHosts=new String(resp.Data).split(",");
|
||||
mPresenter.machineFulled(recordedHosts);
|
||||
}else {
|
||||
mPresenter.loginFailed("登录失败,VMS应答码为"+resp.Code);
|
||||
}
|
||||
// System.out.println("假登陆...");
|
||||
// mPresenter.loginSuccess();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -43,6 +43,11 @@ public class LoginActivityPresenter extends LoginActivityContract.Presenter{
|
||||
mView.syncVpnInfoFailed();
|
||||
}
|
||||
|
||||
@Override
|
||||
void machineFulled(String[] machines) { // 设备已满
|
||||
mView.machineFulled(machines);
|
||||
}
|
||||
|
||||
@Override
|
||||
void login(OriginalLoginRequest loginRequest) {
|
||||
mModel.login(loginRequest);
|
||||
|
||||
+5
-4
@@ -19,6 +19,7 @@ import com.pkusz.min_vpn_client.utils.KeyManager;
|
||||
|
||||
import MISConnection.Model.MISAuthenticationRequest;
|
||||
import MISConnection.Model.MISGetValidIdentityRequest;
|
||||
import VMSConnection.TCPNet.Message.NetworkResponse;
|
||||
import common.LoggerHelper;
|
||||
import security.SafeBag;
|
||||
|
||||
@@ -59,13 +60,13 @@ public class LoginSMSActivityModel implements LoginSMSActivityContract.Model{
|
||||
}
|
||||
// 5. 构造登录信息,发给VMS,并获得响应
|
||||
OriginalLoginRequest originalLoginRequest=new OriginalLoginRequest(username, identityRequest.Passwd);
|
||||
Integer resCode=VMSRequestAPI.INSTANCE.login(originalLoginRequest);
|
||||
if(resCode==null) {
|
||||
NetworkResponse resp = VMSRequestAPI.INSTANCE.login(originalLoginRequest);
|
||||
if(resp==null) {
|
||||
mPresenter.loginFailed("登录失败,未成功收到VMS的合法应答");
|
||||
}else if(resCode==200) {
|
||||
}else if(resp.Code==200) {
|
||||
mPresenter.loginSuccess();
|
||||
}else{
|
||||
mPresenter.loginFailed("登录失败,VMS应答码为"+resCode);
|
||||
mPresenter.loginFailed("登录失败,VMS应答码为"+resp.Code);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -135,6 +135,11 @@ public class RegisterActivity extends MINVpnBaseActivity<RegisterActivityPresent
|
||||
}
|
||||
MISAuthenticationRequest smsRequest=new MISAuthenticationRequest("/"+rawUsername,
|
||||
phoenNumber);
|
||||
try {
|
||||
System.out.println("!!!请求验证码: "+smsRequest.toJson());
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
// 2. 向MIS发送网络请求
|
||||
mPresenter.getSMSCode(smsRequest);
|
||||
});
|
||||
|
||||
@@ -20,14 +20,20 @@ import com.pkusz.min_vpn_client.activity.base.MINVpnBaseActivity;
|
||||
import com.pkusz.min_vpn_client.model.MINVpnSettingAPI;
|
||||
import com.pkusz.min_vpn_client.utils.AccountValidatorRegexUtil;
|
||||
import com.pkusz.min_vpn_client.utils.DigestUtilKt;
|
||||
import com.pkusz.min_vpn_client.utils.IdentityEncryptedUtil;
|
||||
import com.pkusz.min_vpn_client.utils.KeyManager;
|
||||
import com.white.countdownbutton.CountDownButton;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Objects;
|
||||
|
||||
import MISConnection.Model.MISAuthenticationRequest;
|
||||
import MISConnection.Model.MISResetPasswordRequest;
|
||||
import VMSConnection.Model.ResetPassword;
|
||||
import VMSConnection.Utils.Base64Helper;
|
||||
import br.com.simplepass.loadingbutton.customViews.CircularProgressButton;
|
||||
import cn.qjm253.min_vpn.extensions.ActivityExtensionsKt;
|
||||
import cn.qjm253.quick_android_base.GlideApp;
|
||||
@@ -107,7 +113,34 @@ public class ResetActivity extends MINVpnBaseActivity<ResetActivityPresenter>
|
||||
// 获取验证码操作的监听器
|
||||
Reset_getSMScode.setOnClickListener(v -> {
|
||||
// todo 执行获取验证码的逻辑
|
||||
System.out.println("执行获取验证码的逻辑");
|
||||
System.out.println("即将执行获取验证码的逻辑");
|
||||
// 1. 构造请求包
|
||||
String rawUsername = Objects.requireNonNull(etUsername.getText()).toString();
|
||||
String phoenNumber = Objects.requireNonNull(Reset_SMSPhoneNumber.getText()).toString();
|
||||
if (rawUsername.isEmpty() || phoenNumber.isEmpty() ) {
|
||||
showWarning("请将确认已经填写手机及名字");
|
||||
btnReset.revertAnimation();
|
||||
return;
|
||||
}
|
||||
if (!AccountValidatorRegexUtil.INSTANCE.isUsername(rawUsername)) {
|
||||
showWarning("请输入有效的用户名,用户名为3-20位,包含字母、数字、下划线,且以字母开头");
|
||||
btnReset.revertAnimation();
|
||||
return;
|
||||
}
|
||||
if (!AccountValidatorRegexUtil.INSTANCE.isMobile(phoenNumber)) {
|
||||
showWarning("请输入有效的手机号");
|
||||
btnReset.revertAnimation();
|
||||
return;
|
||||
}
|
||||
MISAuthenticationRequest smsRequest=new MISAuthenticationRequest("/"+rawUsername,
|
||||
phoenNumber);
|
||||
try {
|
||||
System.out.println("!!!请求验证码: "+smsRequest.toJson());
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
// 2. 向MIS发送网络请求
|
||||
mPresenter.getSMSCode(smsRequest);
|
||||
});
|
||||
|
||||
// 显示账号
|
||||
@@ -130,7 +163,7 @@ public class ResetActivity extends MINVpnBaseActivity<ResetActivityPresenter>
|
||||
this.phoneNumber = Objects.requireNonNull(Reset_SMSPhoneNumber.getText()).toString();
|
||||
this.verifyNumber = Objects.requireNonNull(Reset_etSMSNumber.getText()).toString();
|
||||
|
||||
// 登录前判断本地是否有身份信息,如果无,则提醒使用新设备登录界面
|
||||
// 重置密码前判断本地是否有身份信息,如果无,则提醒用户检查输入的用户名
|
||||
boolean isHaveIdentity= KeyManager.INSTANCE.isInKeyChain("/"+this.rawUsername);
|
||||
if(!isHaveIdentity){
|
||||
showWarning("本地无此用户身份("+this.rawUsername+"),请检查您输入的用户名。");
|
||||
@@ -167,11 +200,34 @@ public class ResetActivity extends MINVpnBaseActivity<ResetActivityPresenter>
|
||||
}
|
||||
|
||||
// 密码经md5哈希
|
||||
String oldpassword =DigestUtilKt.encodeToMD5(oldPassword);
|
||||
String newpassword =DigestUtilKt.encodeToMD5(newPassword);
|
||||
String md5oldpassword =DigestUtilKt.encodeToMD5(oldPassword);
|
||||
String md5newpassword =DigestUtilKt.encodeToMD5(newPassword);
|
||||
|
||||
// todo: 传递修改密码请求信息,执行登录网络请求
|
||||
// 初始化Keychain,获得公钥及加密身份。=> 前面已经检查过了本地身份
|
||||
// 为了避免二进制数据传输中出现乱码,这里的加密身份要经过base64编码。
|
||||
KeyManager.INSTANCE.initKeyChain("/"+rawUsername);
|
||||
String pubKey=new String(KeyManager.INSTANCE.getKeyChain().getCurrentIdentity().getPubkey()
|
||||
.getBytes(), StandardCharsets.UTF_8);
|
||||
System.out.println("mis reset pubkey: "+pubKey);
|
||||
String PrikeyEncrypted; // 先按方案对身份信息进行加密,后做Base64编码
|
||||
try {
|
||||
PrikeyEncrypted= Base64Helper.Base64BasicEncode(
|
||||
IdentityEncryptedUtil.encryptedIdentity(rawUsername,newPassword,
|
||||
KeyManager.INSTANCE.getKeyChain().exportSafeBag("").getValue())
|
||||
);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return;
|
||||
}
|
||||
|
||||
// 传递修改密码请求信息,执行网络请求
|
||||
MISResetPasswordRequest resetInfo=new MISResetPasswordRequest("/"+rawUsername,
|
||||
md5oldpassword,md5newpassword,
|
||||
PrikeyEncrypted,phoneNumber,verifyNumber);
|
||||
ResetPassword resetPassword=new ResetPassword(rawUsername,
|
||||
md5oldpassword,md5newpassword,"","".getBytes(),
|
||||
String.valueOf(System.currentTimeMillis()));
|
||||
mPresenter.reset(resetInfo,resetPassword);
|
||||
});
|
||||
|
||||
// 监听键盘是否弹起
|
||||
@@ -228,30 +284,35 @@ public class ResetActivity extends MINVpnBaseActivity<ResetActivityPresenter>
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loginSuccess() {
|
||||
loginSuccess("登录成功");
|
||||
public void resetSuccess() {
|
||||
resetSuccess("修改密码成功");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loginSuccess(String successMsg) {
|
||||
|
||||
// 关闭activity
|
||||
finish();
|
||||
public void resetSuccess(String successMsg) {
|
||||
showSuccess(successMsg);
|
||||
btnReset.revertAnimation();
|
||||
onBackPressed();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loginFailed(String errMsg) {
|
||||
showWarning("登录失败: "+errMsg);
|
||||
public void resetFailed(String errMsg) {
|
||||
showWarning("修改密码失败: "+errMsg);
|
||||
btnReset.revertAnimation();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void syncVpnInfoSuccess() {
|
||||
showSuccess("从VMS同步VPN服务器信息成功");
|
||||
public void getCodeSuccess() {
|
||||
getCodeSuccess("获取验证码成功");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void syncVpnInfoFailed() {
|
||||
showWarning("从VMS同步VPN服务器信息失败");
|
||||
public void getCodeSuccess(String successMsg) {
|
||||
showSuccess(successMsg);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getCodeFailed(String errMsg) {
|
||||
showWarning("获取验证码失败: "+errMsg);
|
||||
}
|
||||
}
|
||||
+20
-18
@@ -13,35 +13,37 @@ import com.pkusz.min_vpn_client.activity.base.MINVpnBaseView;
|
||||
import com.pkusz.min_vpn_client.model.OriginalRequest.OriginalGetVpnInfoRequest;
|
||||
import com.pkusz.min_vpn_client.model.OriginalRequest.OriginalLoginRequest;
|
||||
|
||||
import MISConnection.Model.MISAuthenticationRequest;
|
||||
import MISConnection.Model.MISResetPasswordRequest;
|
||||
import VMSConnection.Model.ResetPassword;
|
||||
import cn.qjm253.quick_android_mvp.base.mvp.BaseModel;
|
||||
import cn.qjm253.quick_android_mvp.base.mvp.BasePresenter;
|
||||
|
||||
public interface ResetActivityContract {
|
||||
interface View extends MINVpnBaseView {
|
||||
void loginSuccess();
|
||||
void loginSuccess(String successMsg);
|
||||
void loginFailed(String errMsg);
|
||||
void syncVpnInfoSuccess();
|
||||
void syncVpnInfoFailed();
|
||||
void resetSuccess();
|
||||
void resetSuccess(String successMsg);
|
||||
void resetFailed(String errMsg);
|
||||
|
||||
void getCodeSuccess();
|
||||
void getCodeSuccess(String successMsg);
|
||||
void getCodeFailed(String errMsg);
|
||||
}
|
||||
|
||||
interface Model extends BaseModel {
|
||||
void login(OriginalLoginRequest loginRequest);
|
||||
void loginWithSafetyInfo(OriginalLoginRequest loginRequest, Context context);
|
||||
void downloadRegisterFacePicture(String username, OriginalLoginRequest loginRequest, Context context);
|
||||
void syncVpnServersInfo(OriginalGetVpnInfoRequest serverRequest);
|
||||
void reset(MISResetPasswordRequest resetRequest, ResetPassword resetPassword);
|
||||
void getSMSCode(MISAuthenticationRequest request);
|
||||
}
|
||||
|
||||
abstract class Presenter extends BasePresenter<ResetActivityContract.View, ResetActivityContract.Model> {
|
||||
void loginSuccess(){}
|
||||
void loginSuccess(String successMsg){}
|
||||
void loginFailed(String errMsg){}
|
||||
void syncVpnInfoSuccess(){}
|
||||
void syncVpnInfoFailed(){}
|
||||
void resetSuccess(){}
|
||||
void resetSuccess(String successMsg){}
|
||||
void resetFailed(String errMsg){}
|
||||
void getCodeSuccess(){}
|
||||
void getCodeSuccess(String successMsg){}
|
||||
void getCodeFailed(String errMsg){}
|
||||
|
||||
void login(OriginalLoginRequest loginRequest){}
|
||||
void loginWithSafetyInfo(OriginalLoginRequest loginRequest, Context context){}
|
||||
void downloadRegisterFacePicture(String username, OriginalLoginRequest loginRequest, Context context){}
|
||||
void syncVpnServersInfo(OriginalGetVpnInfoRequest serverRequest){}
|
||||
void reset(MISResetPasswordRequest resetRequest, ResetPassword resetPassword) {}
|
||||
void getSMSCode(MISAuthenticationRequest request){}
|
||||
}
|
||||
}
|
||||
@@ -7,17 +7,15 @@ package com.pkusz.min_vpn_client.activity.reset;
|
||||
* @Copyright: MIN-Group;国家重大科技基础设施——未来网络北大实验室;深圳市信息论与未来网络重点实验室
|
||||
*/
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import com.pkusz.min_vpn_client.activity.login.LoginActivityContract;
|
||||
import com.pkusz.min_vpn_client.activity.login.LoginActivityPresenter;
|
||||
import com.pkusz.min_vpn_client.model.MINVpnSettingAPI;
|
||||
import com.pkusz.min_vpn_client.model.OriginalRequest.OriginalGetVpnInfoRequest;
|
||||
import com.pkusz.min_vpn_client.model.MISRequestAPI;
|
||||
import com.pkusz.min_vpn_client.model.OriginalRequest.OriginalLoginRequest;
|
||||
import com.pkusz.min_vpn_client.model.Response.VpnServerInfoList;
|
||||
import com.pkusz.min_vpn_client.model.VMSRequestAPI;
|
||||
|
||||
import common.LoggerHelper;
|
||||
import MISConnection.Model.MISAuthenticationRequest;
|
||||
import MISConnection.Model.MISResetPasswordRequest;
|
||||
import VMSConnection.Model.ResetPassword;
|
||||
import VMSConnection.TCPNet.Message.NetworkResponse;
|
||||
|
||||
|
||||
public class ResetActivityModel implements ResetActivityContract.Model{
|
||||
private ResetActivityPresenter mPresenter;
|
||||
@@ -27,43 +25,40 @@ public class ResetActivityModel implements ResetActivityContract.Model{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void login(OriginalLoginRequest loginRequest) {
|
||||
Integer resCode = VMSRequestAPI.INSTANCE.login(loginRequest);
|
||||
public void getSMSCode(MISAuthenticationRequest request){
|
||||
Integer resCode= MISRequestAPI.INSTANCE.getSMSCode(request);
|
||||
if(resCode==null) {
|
||||
mPresenter.loginFailed("登录失败,未成功收到VMS的合法应答");
|
||||
mPresenter.getCodeFailed("获取验证码可能失败,未收到MIS合法应答");
|
||||
}else if(resCode==200) {
|
||||
mPresenter.loginSuccess();
|
||||
mPresenter.getCodeSuccess();
|
||||
}else{
|
||||
mPresenter.loginFailed("登录失败,VMS应答码为"+resCode);
|
||||
mPresenter.getCodeFailed("获取验证码可能失败,MIS应答码为"+resCode);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loginWithSafetyInfo(OriginalLoginRequest loginRequest, Context context) {
|
||||
// 废弃接口
|
||||
LoggerHelper.warning("model.loginWithSafetyInfo: 暂停使用含有mac地址等安全信息的登录功能");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void downloadRegisterFacePicture(String username, OriginalLoginRequest loginRequest, Context context) {
|
||||
// 废弃接口
|
||||
LoggerHelper.warning("model.downloadRegisterFacePicture: 暂停人脸识别登录功能");
|
||||
}
|
||||
|
||||
/**
|
||||
* 从VMS中获取VPNServer的最新信息。同步到客户端
|
||||
* @param serverRequest
|
||||
*/
|
||||
@Override
|
||||
public void syncVpnServersInfo(OriginalGetVpnInfoRequest serverRequest) {
|
||||
VpnServerInfoList infoList = VMSRequestAPI.INSTANCE.getVPNServerInfoList(serverRequest);
|
||||
if(infoList==null){
|
||||
mPresenter.syncVpnInfoFailed();
|
||||
public void reset(MISResetPasswordRequest resetRequest, ResetPassword resetPasswordVMS) {
|
||||
// 先向MIS进行重置密码(包含密钥托管的操作)
|
||||
Integer resCode = MISRequestAPI.INSTANCE.resetPasswordMIS(resetRequest);
|
||||
if(resCode==null) {
|
||||
mPresenter.resetFailed("重置密码失败,未成功收到MIS的合法应答");
|
||||
return;
|
||||
}else if(resCode==200) {
|
||||
mPresenter.resetSuccess("MIS重置密码成功,接下来进行VMS上的密码重置");
|
||||
}else{
|
||||
// 将信息同步到MINVpnSettingAPI
|
||||
MINVpnSettingAPI.INSTANCE.updateVpnServerInfoList(infoList);
|
||||
// 通知界面
|
||||
mPresenter.syncVpnInfoSuccess();
|
||||
mPresenter.resetFailed("重置密码失败,MIS应答码为"+resCode);
|
||||
return;
|
||||
}
|
||||
// 再向VMS进行重置密码
|
||||
resCode = VMSRequestAPI.INSTANCE.reset(resetPasswordVMS);
|
||||
if(resCode==null) {
|
||||
mPresenter.resetFailed("重置密码失败,未成功收到MIS的合法应答");
|
||||
return;
|
||||
}else if(resCode==200) {
|
||||
mPresenter.resetSuccess();
|
||||
}else{
|
||||
mPresenter.resetFailed("重置密码失败,MIS应答码为"+resCode);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
+20
-21
@@ -15,6 +15,10 @@ import com.pkusz.min_vpn_client.activity.login.LoginActivityModel;
|
||||
import com.pkusz.min_vpn_client.model.OriginalRequest.OriginalGetVpnInfoRequest;
|
||||
import com.pkusz.min_vpn_client.model.OriginalRequest.OriginalLoginRequest;
|
||||
|
||||
import MISConnection.Model.MISAuthenticationRequest;
|
||||
import MISConnection.Model.MISResetPasswordRequest;
|
||||
import VMSConnection.Model.ResetPassword;
|
||||
|
||||
public class ResetActivityPresenter extends ResetActivityContract.Presenter{
|
||||
public ResetActivityPresenter(ResetActivity resetActivity){
|
||||
mView=resetActivity;
|
||||
@@ -22,47 +26,42 @@ public class ResetActivityPresenter extends ResetActivityContract.Presenter{
|
||||
}
|
||||
|
||||
@Override
|
||||
void loginSuccess() {
|
||||
mView.loginSuccess();
|
||||
void resetSuccess() {
|
||||
mView.resetSuccess();
|
||||
}
|
||||
|
||||
@Override
|
||||
void loginSuccess(String successMsg) {
|
||||
mView.loginSuccess(successMsg);
|
||||
void resetSuccess(String successMsg) {
|
||||
mView.resetSuccess(successMsg);
|
||||
}
|
||||
|
||||
@Override
|
||||
void loginFailed(String errMsg) {
|
||||
mView.loginFailed(errMsg);
|
||||
void resetFailed(String errMsg) {
|
||||
mView.resetFailed(errMsg);
|
||||
}
|
||||
|
||||
@Override
|
||||
void syncVpnInfoSuccess() {
|
||||
mView.syncVpnInfoSuccess();
|
||||
void getCodeSuccess() {
|
||||
mView.getCodeSuccess();
|
||||
}
|
||||
|
||||
@Override
|
||||
void syncVpnInfoFailed() {
|
||||
mView.syncVpnInfoFailed();
|
||||
void getCodeSuccess(String successMsg) {
|
||||
mView.getCodeSuccess(successMsg);
|
||||
}
|
||||
|
||||
@Override
|
||||
void login(OriginalLoginRequest loginRequest) {
|
||||
mModel.login(loginRequest);
|
||||
void getCodeFailed(String errMsg) {
|
||||
mView.getCodeFailed(errMsg);
|
||||
}
|
||||
|
||||
@Override
|
||||
void loginWithSafetyInfo(OriginalLoginRequest loginRequest, Context context) {
|
||||
mModel.loginWithSafetyInfo(loginRequest, context);
|
||||
void getSMSCode(MISAuthenticationRequest request){
|
||||
mModel.getSMSCode(request);
|
||||
}
|
||||
|
||||
@Override
|
||||
void downloadRegisterFacePicture(String username, OriginalLoginRequest loginRequest, Context context) {
|
||||
mModel.downloadRegisterFacePicture(username, loginRequest, context);
|
||||
}
|
||||
|
||||
@Override
|
||||
void syncVpnServersInfo(OriginalGetVpnInfoRequest serverRequest) {
|
||||
mModel.syncVpnServersInfo(serverRequest);
|
||||
void reset(MISResetPasswordRequest resetRequest, ResetPassword resetPassword) {
|
||||
mModel.reset(resetRequest,resetPassword);
|
||||
}
|
||||
}
|
||||
@@ -33,6 +33,7 @@ import javax.crypto.NoSuchPaddingException;
|
||||
import VMSConnection.BC_API;
|
||||
import VMSConnection.Model.LoginWithSignRequest;
|
||||
import VMSConnection.Model.RegisterWithSignRequest;
|
||||
import VMSConnection.Model.ResetPassword;
|
||||
import VMSConnection.Model.VpnServerInfoRequest;
|
||||
import VMSConnection.TCPNet.Message.NetworkResponse;
|
||||
import VMSConnection.Utils.Base64Helper;
|
||||
@@ -116,7 +117,7 @@ public enum VMSRequestAPI {
|
||||
* @param original
|
||||
* @return
|
||||
*/
|
||||
public Integer login(OriginalLoginRequest original){
|
||||
public NetworkResponse login(OriginalLoginRequest original){
|
||||
// 1. 生成用户的公钥私钥(有则直接取出)
|
||||
this.generateForeverIdentity(original.username);
|
||||
|
||||
@@ -183,6 +184,75 @@ public enum VMSRequestAPI {
|
||||
}
|
||||
System.out.println("登录应答码: "+networkResponse.get().Code);
|
||||
|
||||
return networkResponse.get();
|
||||
}
|
||||
|
||||
/**
|
||||
* 构造并发送VMS登录请求,返回服务器传回的应答码【0或null或其它非200,均属注册失败】
|
||||
* @param original
|
||||
* @return
|
||||
*/
|
||||
public Integer reset(ResetPassword original){
|
||||
// 1. 生成用户的公钥私钥(有则直接取出)
|
||||
this.generateForeverIdentity(original.Name);
|
||||
|
||||
// 2. 签名(签名用户名) & 证书(用户本地保存的证书,注册时接收到的VMS数据)
|
||||
byte[] resetSign= this.signBytes(original.Name);
|
||||
String cert=this.exportVMSCert(MINVpnSettingAPI.INSTANCE.getVMSCertPasswd());
|
||||
|
||||
// 增加一个判断证书字段是否为空的操作。若为空,则强行赋值一个假的证书(issueTo: andr1)。
|
||||
if(cert.equals("")){
|
||||
System.out.println("重置密码时,证书字段为空!!! current user: "+original.Name);
|
||||
cert="G0nf0sw/pBCIMqJMGFua7r/WjueylXovUHlcM0VE87Hr9uRuRgUBLkqjXa2eUkuJiTwZ" +
|
||||
"PVTJGhlfMA05QP23q6CqrNwTPhC8PSwyRBxcJDcfNEXhVoXNx9JnYwEGFn7z/r6C25" +
|
||||
"QdBa6nGQT0//6zHQZFR+HCGj0F5tpgVPGZjOpf+kfrFYMAbvVWZh0JRlRZ/0LhlkyKLH" +
|
||||
"kps0bOEc5lwkXHtPN+cqUICRkvMtDYld7crxFhm5xAUcly+hXWtgYBdWCGAAdX1t+EW" +
|
||||
"bHDUPeQWKao4EjAVcIi7BasM0mM9kb8kovsVu8jnmTNp8Fiu1FZXZeYCTHAF9c8iR5/t" +
|
||||
"ltFgFUBKqs1DF4etp6i2TRJmOfa/G2hit18SekKUcYT8m9UBZt6RxsmF1x1PJQcBNWZFZ" +
|
||||
"X5+ZA4bOCWEetf61+b0UFCNxHzCJidUsUJfD2QKQoUEjx24O/4zEiY7CL2szTXfB5+aGc8" +
|
||||
"fFh297or2mkEWFKNzhzbeXc5m2sDk1wewI56HsSV7DFIudMxaEsSlgKGunhctPRmm6CTSW" +
|
||||
"8CYUT8F4v3EbZgtExrcw9Ncfc2LJ+DxkwaW2onIIRNePnJ7blbJ+vC0k2/AnbFqsGxh53A0" +
|
||||
"j53WOaDPuHjoUvTBih6OYOz5HumIofass6rE7DxJLLMBmmu9x7MOrBEPBcga3EiYXUPO/y" +
|
||||
"eUEX5VVXbVNuBBhv3F" +
|
||||
"D9DSGUvT+PCaCA7mWN328jPvXuiSEOXnWPLmQl5AT/sMvcG0C2xGJq+vOui8UjD";
|
||||
}
|
||||
|
||||
// 3. 构造重置密码请求包
|
||||
original.Certificate=cert;
|
||||
original.Signature=resetSign;
|
||||
|
||||
// 4. 调用bc-api,发送请求到VMS:ip tcpPort sslPort VMSPubkey(可选,有默认key)
|
||||
AtomicReference<NetworkResponse> networkResponse = new AtomicReference<>();
|
||||
Thread netRequestThread = new Thread(() -> {
|
||||
BC_API bc_api = new BC_API(MINVpnSettingAPI.INSTANCE.getBlockChainIpAddress(),
|
||||
MINVpnSettingAPI.INSTANCE.getBcTcpPort(), MINVpnSettingAPI.INSTANCE.getBcSslPort());
|
||||
networkResponse.set(bc_api.resetPasswd(original));
|
||||
});
|
||||
netRequestThread.start();
|
||||
// 等待五秒,五秒内收不到包就放弃,收到包就停止等待
|
||||
long startTime=System.currentTimeMillis();
|
||||
while ((System.currentTimeMillis()-startTime)/1000<5){
|
||||
if(networkResponse.get()!=null){
|
||||
break;
|
||||
}
|
||||
try {
|
||||
Thread.sleep(500);
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
if(networkResponse.get()==null){
|
||||
System.out.println("VMS重置密码未收到合法应答信息");
|
||||
return null;
|
||||
}
|
||||
// 输出应答信息
|
||||
try {
|
||||
System.out.println("VMS重置密码应答: "+networkResponse.get().toJson());
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
System.out.println("VMS重置密码应答码: "+networkResponse.get().Code);
|
||||
|
||||
return networkResponse.get().Code;
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user