mirror of
https://gitee.com/willfree/min-vpn-client_v2.git
synced 2026-10-04 19:42:00 +08:00
实现注册操作(先MIS,后VMS),其中身份字段进行base64加密
This commit is contained in:
1 parent
1e146e8eac
commit
ca8887af6d
6 files changed
+132
-10
No files matched your search
+2
@@ -36,6 +36,8 @@ public class LoginSMSActivityModel implements LoginSMSActivityContract.Model{
|
||||
if(encryptedIdentityData==null){
|
||||
mPresenter.loginFailed("获取身份失败");
|
||||
return;
|
||||
}else{
|
||||
mPresenter.getCodeSuccess("获取身份成功,接下来进行登录操作");
|
||||
}
|
||||
// 2. 解密身份数据
|
||||
byte[] identityData= IdentityEncryptedUtil.decryptedIdentity(username,rawPasswd,encryptedIdentityData);
|
||||
|
||||
@@ -20,14 +20,20 @@ import com.pkusz.min_vpn_client.activity.base.MINVpnBaseActivity;
|
||||
import com.pkusz.min_vpn_client.activity.login.LoginActivity;
|
||||
import com.pkusz.min_vpn_client.model.OriginalRequest.OriginalRegisterRequest;
|
||||
import com.pkusz.min_vpn_client.utils.AccountValidatorRegexUtil;
|
||||
import com.pkusz.min_vpn_client.utils.Base64Util;
|
||||
import com.pkusz.min_vpn_client.utils.DigestUtilKt;
|
||||
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.MISRegisterRequest;
|
||||
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,8 +113,29 @@ public class RegisterActivity extends MINVpnBaseActivity<RegisterActivityPresent
|
||||
|
||||
// 获取验证码操作的监听器
|
||||
getSMScode.setOnClickListener(v -> {
|
||||
// todo 执行获取验证码的逻辑
|
||||
System.out.println("执行获取验证码的逻辑");
|
||||
System.out.println("即将执行获取验证码的逻辑");
|
||||
// 1. 构造请求包
|
||||
String rawUsername = Objects.requireNonNull(etUsername.getText()).toString();
|
||||
String phoenNumber = Objects.requireNonNull(etPhoneNumber.getText()).toString();
|
||||
if (rawUsername.isEmpty() || phoenNumber.isEmpty() ) {
|
||||
showWarning("请将确认已经填写手机及名字");
|
||||
btnRegister.revertAnimation();
|
||||
return;
|
||||
}
|
||||
if (!AccountValidatorRegexUtil.INSTANCE.isUsername(rawUsername)) {
|
||||
showWarning("请输入有效的用户名,用户名为3-20位,包含字母、数字、下划线,且以字母开头");
|
||||
btnRegister.revertAnimation();
|
||||
return;
|
||||
}
|
||||
if (!AccountValidatorRegexUtil.INSTANCE.isMobile(phoenNumber)) {
|
||||
showWarning("请输入有效的手机号");
|
||||
btnRegister.revertAnimation();
|
||||
return;
|
||||
}
|
||||
MISAuthenticationRequest smsRequest=new MISAuthenticationRequest("/"+rawUsername,
|
||||
phoenNumber);
|
||||
// 2. 向MIS发送网络请求
|
||||
mPresenter.getSMSCode(smsRequest);
|
||||
});
|
||||
|
||||
btnRegister.setBackgroundResource(R.drawable.button_shape_default);
|
||||
@@ -184,10 +211,26 @@ public class RegisterActivity extends MINVpnBaseActivity<RegisterActivityPresent
|
||||
// 密码经md5哈希
|
||||
String md5Password = DigestUtilKt.encodeToMD5(password);
|
||||
|
||||
// 初始化Keychain,获得公钥及加密身份。
|
||||
// 为了避免二进制数据传输中出现乱码,这里的加密身份要经过base64编码。
|
||||
KeyManager.INSTANCE.initKeyChain("/"+username);
|
||||
String pubKey=new String(KeyManager.INSTANCE.getKeyChain().getCurrentIdentity().getPubkey()
|
||||
.getBytes(), StandardCharsets.UTF_8);
|
||||
System.out.println("mis register pubkey: "+pubKey);
|
||||
String PrikeyEncrypted;
|
||||
try {
|
||||
PrikeyEncrypted= Base64Helper.Base64BasicEncode(
|
||||
KeyManager.INSTANCE.getKeyChain().exportSafeBag("").getValue());
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return;
|
||||
}
|
||||
// 传递注册请求信息,执行注册网络请求
|
||||
MISRegisterRequest misRegisterRequest=new MISRegisterRequest("/"+username,
|
||||
pubKey,md5Password,PrikeyEncrypted,phone,verifyCode);
|
||||
OriginalRegisterRequest original=new OriginalRegisterRequest(
|
||||
username,md5Password,phone,email,inviteCode);
|
||||
mPresenter.register(original);
|
||||
mPresenter.register(misRegisterRequest,original);
|
||||
});
|
||||
|
||||
// 监听键盘是否弹起
|
||||
@@ -250,6 +293,21 @@ public class RegisterActivity extends MINVpnBaseActivity<RegisterActivityPresent
|
||||
return new RegisterActivityPresenter(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getCodeSuccess() {
|
||||
getCodeSuccess("获取验证码成功");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getCodeSuccess(String successMsg) {
|
||||
showSuccess(successMsg);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getCodeFailed(String errMsg) {
|
||||
showWarning("获取验证码失败: "+errMsg);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerSuccess() {
|
||||
Toast.makeText(getApplicationContext(),"注册成功",Toast.LENGTH_SHORT).show();
|
||||
|
||||
+13
-2
@@ -12,6 +12,8 @@ import android.content.Context;
|
||||
import com.pkusz.min_vpn_client.activity.base.MINVpnBaseView;
|
||||
import com.pkusz.min_vpn_client.model.OriginalRequest.OriginalRegisterRequest;
|
||||
|
||||
import MISConnection.Model.MISAuthenticationRequest;
|
||||
import MISConnection.Model.MISRegisterRequest;
|
||||
import cn.qjm253.quick_android_mvp.base.mvp.BaseModel;
|
||||
import cn.qjm253.quick_android_mvp.base.mvp.BasePresenter;
|
||||
|
||||
@@ -19,19 +21,28 @@ public interface RegisterActivityContract {
|
||||
interface View extends MINVpnBaseView {
|
||||
void registerSuccess();
|
||||
void registerFailed(String errMsg);
|
||||
void getCodeSuccess();
|
||||
void getCodeSuccess(String successMsg);
|
||||
void getCodeFailed(String errMsg);
|
||||
}
|
||||
|
||||
interface Model extends BaseModel {
|
||||
void register(OriginalRegisterRequest registerRequest);
|
||||
void register(MISRegisterRequest misRegisterRequest,OriginalRegisterRequest registerRequest);
|
||||
void registerWithSafetyInfo(OriginalRegisterRequest registerRequest, Context context);
|
||||
void uploadRegisterFacePicture(String username, OriginalRegisterRequest registerRequest, Context context);
|
||||
void getSMSCode(MISAuthenticationRequest request);
|
||||
}
|
||||
|
||||
abstract class Presenter extends BasePresenter<RegisterActivityContract.View, RegisterActivityContract.Model> {
|
||||
void registerSuccess(){}
|
||||
void registerFailed(String errMsg){}
|
||||
void register(OriginalRegisterRequest registerRequest){}
|
||||
void getCodeSuccess(){}
|
||||
void getCodeSuccess(String successMsg){}
|
||||
void getCodeFailed(String errMsg){}
|
||||
|
||||
void register(MISRegisterRequest misRegisterRequest,OriginalRegisterRequest registerRequest){}
|
||||
void registerWithSafetyInfo(OriginalRegisterRequest registerRequest, Context context){}
|
||||
void uploadRegisterFacePicture(String username, OriginalRegisterRequest registerRequest, Context context){}
|
||||
void getSMSCode(MISAuthenticationRequest request){}
|
||||
}
|
||||
}
|
||||
+30
-3
@@ -9,9 +9,12 @@ package com.pkusz.min_vpn_client.activity.register;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import com.pkusz.min_vpn_client.model.MISRequestAPI;
|
||||
import com.pkusz.min_vpn_client.model.OriginalRequest.OriginalRegisterRequest;
|
||||
import com.pkusz.min_vpn_client.model.VMSRequestAPI;
|
||||
|
||||
import MISConnection.Model.MISAuthenticationRequest;
|
||||
import MISConnection.Model.MISRegisterRequest;
|
||||
import common.LoggerHelper;
|
||||
|
||||
public class RegisterActivityModel implements RegisterActivityContract.Model{
|
||||
@@ -21,14 +24,26 @@ public class RegisterActivityModel implements RegisterActivityContract.Model{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void register(OriginalRegisterRequest registerRequest) {
|
||||
public void register(MISRegisterRequest misRegisterRequest, OriginalRegisterRequest registerRequest) {
|
||||
// 1. 先在MIS进行注册,MIS托管了私钥
|
||||
Integer code=MISRequestAPI.INSTANCE.registerMIS(misRegisterRequest);
|
||||
if(code==null) {
|
||||
mPresenter.registerFailed("MIS注册失败,未成功收到的合法应答");
|
||||
return;
|
||||
}else if(code==200) {
|
||||
mPresenter.getCodeSuccess("MIS注册成功,接下来进行VMS上的注册");
|
||||
}else{
|
||||
mPresenter.registerFailed("MIS注册失败,应答码为"+code);
|
||||
return;
|
||||
}
|
||||
// 2. 再通过VMS进行注册,VMS管理VPN用户权限
|
||||
Integer resCode=VMSRequestAPI.INSTANCE.register(registerRequest);
|
||||
if(resCode==null) {
|
||||
mPresenter.registerFailed("注册失败,未成功收到VMS的合法应答");
|
||||
mPresenter.registerFailed("VMS注册失败,未成功收到VMS的合法应答");
|
||||
}else if(resCode==200) {
|
||||
mPresenter.registerSuccess();
|
||||
}else{
|
||||
mPresenter.registerFailed("注册失败,VMS应答码为"+resCode);
|
||||
mPresenter.registerFailed("VMS注册失败,VMS应答码为"+resCode);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,4 +58,16 @@ public class RegisterActivityModel implements RegisterActivityContract.Model{
|
||||
// 废弃接口
|
||||
LoggerHelper.warning("model.uploadRegisterFacePicture: 暂停人脸识别注册功能");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getSMSCode(MISAuthenticationRequest request) {
|
||||
Integer resCode= MISRequestAPI.INSTANCE.getSMSCode(request);
|
||||
if(resCode==null) {
|
||||
mPresenter.getCodeFailed("获取验证码可能失败,未收到MIS合法应答");
|
||||
}else if(resCode==200) {
|
||||
mPresenter.getCodeSuccess();
|
||||
}else{
|
||||
mPresenter.getCodeFailed("获取验证码可能失败,MIS应答码为"+resCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
+25
-2
@@ -11,6 +11,9 @@ import android.content.Context;
|
||||
|
||||
import com.pkusz.min_vpn_client.model.OriginalRequest.OriginalRegisterRequest;
|
||||
|
||||
import MISConnection.Model.MISAuthenticationRequest;
|
||||
import MISConnection.Model.MISRegisterRequest;
|
||||
|
||||
public class RegisterActivityPresenter extends RegisterActivityContract.Presenter{
|
||||
public RegisterActivityPresenter(RegisterActivity registerActivity){
|
||||
mView=registerActivity;
|
||||
@@ -28,8 +31,23 @@ public class RegisterActivityPresenter extends RegisterActivityContract.Presente
|
||||
}
|
||||
|
||||
@Override
|
||||
void register(OriginalRegisterRequest registerRequest) {
|
||||
mModel.register(registerRequest);
|
||||
void getCodeSuccess() {
|
||||
mView.getCodeSuccess();
|
||||
}
|
||||
|
||||
@Override
|
||||
void getCodeSuccess(String successMsg) {
|
||||
mView.getCodeSuccess(successMsg);
|
||||
}
|
||||
|
||||
@Override
|
||||
void getCodeFailed(String errMsg) {
|
||||
mView.getCodeFailed(errMsg);
|
||||
}
|
||||
|
||||
@Override
|
||||
void register(MISRegisterRequest misRegisterRequest, OriginalRegisterRequest registerRequest) {
|
||||
mModel.register(misRegisterRequest,registerRequest);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -41,4 +59,9 @@ public class RegisterActivityPresenter extends RegisterActivityContract.Presente
|
||||
void uploadRegisterFacePicture(String username, OriginalRegisterRequest registerRequest, Context context) {
|
||||
mModel.uploadRegisterFacePicture(username, registerRequest, context);
|
||||
}
|
||||
|
||||
@Override
|
||||
void getSMSCode(MISAuthenticationRequest request) {
|
||||
mModel.getSMSCode(request);
|
||||
}
|
||||
}
|
||||
@@ -144,6 +144,7 @@ public enum MISRequestAPI {
|
||||
System.out.println("应答码: " + networkResponse.get().Code);
|
||||
|
||||
//todo: 这里应当继续解析data字段中的身份或私钥字段,然后将之返回
|
||||
// todo: 注意,需要进行base64解码
|
||||
|
||||
return networkResponse.get().Data;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user