联调测试:通过了注册、登录、修改密码

This commit is contained in:
free will committed 2021-11-04 17:15:02 +08:00
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);
@@ -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);
}
}
@@ -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;
}
}
}
@@ -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;
}