|
|
@ -10,13 +10,14 @@ import com.gmeremit.online.gmeremittance_native.loginV2.model.LoginModelV2; |
|
|
|
import com.gmeremit.online.gmeremittance_native.security.GMEAuthManager; |
|
|
|
import com.gmeremit.online.gmeremittance_native.security.model.GMEAuthFailedResult; |
|
|
|
import com.gmeremit.online.gmeremittance_native.security.model.GMEAuthSuccessResult; |
|
|
|
import com.gmeremit.online.gmeremittance_native.security.utils.SecurityUtils; |
|
|
|
import com.gmeremit.online.gmeremittance_native.utils.Constants; |
|
|
|
import com.gmeremit.online.gmeremittance_native.utils.https.GenericApiObserverResponse; |
|
|
|
|
|
|
|
import io.reactivex.CompletableObserver; |
|
|
|
import io.reactivex.Observable; |
|
|
|
import io.reactivex.android.schedulers.AndroidSchedulers; |
|
|
|
import io.reactivex.observers.DisposableObserver; |
|
|
|
import io.reactivex.disposables.CompositeDisposable; |
|
|
|
import io.reactivex.disposables.Disposable; |
|
|
|
import io.reactivex.schedulers.Schedulers; |
|
|
|
|
|
|
|
public class LoginV2Presenter extends BasePresenter implements LoginV2PresenterInterface, LoginV2InteractorInterface { |
|
|
@ -24,13 +25,17 @@ public class LoginV2Presenter extends BasePresenter implements LoginV2PresenterI |
|
|
|
|
|
|
|
private final LoginV2ContractInterface view; |
|
|
|
private final LoginV2Gateway gateway; |
|
|
|
private final CompositeDisposable compositeDisposable; |
|
|
|
private String encUserPassword; |
|
|
|
private GMEAuthManager gmeAuthManager; |
|
|
|
|
|
|
|
|
|
|
|
public LoginV2Presenter(LoginV2ContractInterface view, LoginV2Gateway gateway) { |
|
|
|
this.view = view; |
|
|
|
this.gateway = gateway; |
|
|
|
encUserPassword = ""; |
|
|
|
gmeAuthManager = GMEAuthManager.getGmeAuthManager((AppCompatActivity) view.getContext()); |
|
|
|
compositeDisposable = new CompositeDisposable(); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -45,21 +50,6 @@ public class LoginV2Presenter extends BasePresenter implements LoginV2PresenterI |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private void persistUserCredentialForFingerprintAuth(String userId, String pwd, LoginModelV2 loginModelV2) { |
|
|
|
SecurityUtils.generateKey() |
|
|
|
.flatMap(key -> Observable.zip(Observable.just(userId), |
|
|
|
SecurityUtils.encryptUsingAES(pwd, key).subscribeOn(Schedulers.io()), |
|
|
|
encryptByKeyStore(key).subscribeOn(Schedulers.io()), |
|
|
|
LoginV2Gateway.UserCredentialEncryptionResultDTO::new) |
|
|
|
).observeOn(AndroidSchedulers.mainThread()) |
|
|
|
.subscribe(new UserCredentialEncryptionResultObserver(loginModelV2)); |
|
|
|
} |
|
|
|
|
|
|
|
private Observable<String> encryptByKeyStore(String data) { |
|
|
|
return SecurityUtils.encryptUsingKeyStore(view.getContext(), data) |
|
|
|
.flatMap(encKey -> Observable.just(encKey.getEncrypted())); |
|
|
|
} |
|
|
|
|
|
|
|
private boolean validatePassword() { |
|
|
|
if (encUserPassword == null || encUserPassword.length() < 1) { |
|
|
|
view.showInvalidPassword(getStringfromStringId(R.string.password_empty_error)); |
|
|
@ -77,16 +67,23 @@ public class LoginV2Presenter extends BasePresenter implements LoginV2PresenterI |
|
|
|
|
|
|
|
@Override |
|
|
|
public boolean checkIfBiometricIsAvailable() { |
|
|
|
return SecurityUtils.checkFingerPrintUsablity(view.getContext()) && gateway.isFingerPrintAuthEnabled() && gateway.getPersistedUserId() != null && gateway.getPersistedUserPwd() != null; |
|
|
|
return gmeAuthManager.isBiometricSupportedByDevice() && gmeAuthManager.isBiometricDataAvailable() && gmeAuthManager.isBiometricEnabledOnTheApp(); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void onViewDestroyed() { |
|
|
|
super.onViewDestroyed(); |
|
|
|
if(compositeDisposable!=null&&!compositeDisposable.isDisposed()) |
|
|
|
compositeDisposable.dispose(); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void promptForBiometricAuth() { |
|
|
|
GMEAuthManager.getGmeAuthManager((AppCompatActivity) view.getContext()).requestBiometricAuth() |
|
|
|
gmeAuthManager.requestBiometricAuth() |
|
|
|
.setListener(new GMEAuthManager.GMEAuthListener() { |
|
|
|
@Override |
|
|
|
public void onGMEAuthSuccess(GMEAuthSuccessResult result) { |
|
|
|
encUserPassword =result.getResult(); |
|
|
|
encUserPassword = result.getResult(); |
|
|
|
view.onLoginPerformTask(() -> loginUser(gateway.getPersistedUserId())); |
|
|
|
} |
|
|
|
|
|
|
@ -116,25 +113,26 @@ public class LoginV2Presenter extends BasePresenter implements LoginV2PresenterI |
|
|
|
|
|
|
|
@Override |
|
|
|
public void loginUser(String userId) { |
|
|
|
this.gateway.loginUser(gateway.getBasicAuth(view.getContext()), userId, encUserPassword) |
|
|
|
.subscribeOn(Schedulers.io()) |
|
|
|
.flatMap(loginResponse -> { |
|
|
|
if (loginResponse.getErrorCode().equalsIgnoreCase(Constants.SUCCESS_CODE_V2)) { |
|
|
|
LoginModelV2 data = loginResponse.getData(); |
|
|
|
turnOffFingerprintAuthIfRequired(userId); |
|
|
|
return gateway.saveUserInfo(data); |
|
|
|
} else { |
|
|
|
return Observable.error(new Exception(loginResponse.getMsg())); |
|
|
|
} |
|
|
|
}) |
|
|
|
.observeOn(AndroidSchedulers.mainThread()) |
|
|
|
.subscribe(new LoginObserver(userId, encUserPassword)); |
|
|
|
compositeDisposable.add( |
|
|
|
this.gateway.loginUser(gateway.getBasicAuth(view.getContext()), userId, encUserPassword) |
|
|
|
.subscribeOn(Schedulers.io()) |
|
|
|
.flatMap(loginResponse -> { |
|
|
|
if (loginResponse.getErrorCode().equalsIgnoreCase(Constants.SUCCESS_CODE_V2)) { |
|
|
|
LoginModelV2 data = loginResponse.getData(); |
|
|
|
turnOffFingerprintAuthIfRequired(userId); |
|
|
|
return gateway.saveUserInfo(data); |
|
|
|
} else { |
|
|
|
return Observable.error(new Exception(loginResponse.getMsg())); |
|
|
|
} |
|
|
|
}) |
|
|
|
.observeOn(AndroidSchedulers.mainThread()) |
|
|
|
.subscribeWith(new LoginObserver(userId, encUserPassword))); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
private void turnOffFingerprintAuthIfRequired(String userId) { |
|
|
|
if (!userId.equalsIgnoreCase(gateway.getPersistedUserId())) { |
|
|
|
gateway.turnOffFingerprintAuth(true); |
|
|
|
gmeAuthManager.turnOfBiometric(true); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -156,10 +154,28 @@ public class LoginV2Presenter extends BasePresenter implements LoginV2PresenterI |
|
|
|
|
|
|
|
@Override |
|
|
|
protected void onSuccess(LoginModelV2 loginResponse) { |
|
|
|
if (SecurityUtils.checkFingerPrintUsablity(view.getContext())) |
|
|
|
persistUserCredentialForFingerprintAuth(userId, encUserPassword, loginResponse); |
|
|
|
if (gmeAuthManager.isBiometricSupportedByDevice()) |
|
|
|
gmeAuthManager.persistUserCredentialForFingerprintAuth(userId, encUserPassword) |
|
|
|
.subscribeOn(Schedulers.io()) |
|
|
|
.observeOn(AndroidSchedulers.mainThread()) |
|
|
|
.subscribe(new CompletableObserver() { |
|
|
|
@Override |
|
|
|
public void onSubscribe(Disposable d) { |
|
|
|
compositeDisposable.add(d); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void onComplete() { |
|
|
|
onLoginSuccess(); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void onError(Throwable e) { |
|
|
|
onLoginSuccess(); |
|
|
|
} |
|
|
|
}); |
|
|
|
else { |
|
|
|
onLoginSuccess(loginResponse); |
|
|
|
onLoginSuccess(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -188,7 +204,7 @@ public class LoginV2Presenter extends BasePresenter implements LoginV2PresenterI |
|
|
|
encUserPassword = null; |
|
|
|
} |
|
|
|
|
|
|
|
private void onLoginSuccess(LoginModelV2 loginResponse) { |
|
|
|
private void onLoginSuccess() { |
|
|
|
Runnable task = null; |
|
|
|
clearExistingFormData(); |
|
|
|
setSessionEnabled(); |
|
|
@ -198,34 +214,4 @@ public class LoginV2Presenter extends BasePresenter implements LoginV2PresenterI |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public class UserCredentialEncryptionResultObserver extends DisposableObserver<LoginV2Gateway.UserCredentialEncryptionResultDTO> { |
|
|
|
|
|
|
|
LoginModelV2 loginModelV2; |
|
|
|
|
|
|
|
public UserCredentialEncryptionResultObserver(LoginModelV2 loginModelV2) { |
|
|
|
this.loginModelV2 = loginModelV2; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void onNext(LoginV2Gateway.UserCredentialEncryptionResultDTO userCredentialEncryptionResultDTO) { |
|
|
|
gateway.persistSecretKeyForBiometric(userCredentialEncryptionResultDTO.getEncKey()); |
|
|
|
gateway.persistUserPwdForBiometric(userCredentialEncryptionResultDTO.getEncPwd()); |
|
|
|
gateway.persistUserIdForBiometric(userCredentialEncryptionResultDTO.getUserId()); |
|
|
|
onLoginSuccess(loginModelV2); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void onError(Throwable e) { |
|
|
|
gateway.flushBiometricData(); |
|
|
|
onLoginSuccess(loginModelV2); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void onComplete() { |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |