mirror of
https://github.com/ecency/ecency-mobile.git
synced 2024-12-20 11:51:52 +03:00
simplified verifyPinCode routine
This commit is contained in:
parent
d08bb0c5fe
commit
d05f06f8c7
@ -282,10 +282,11 @@ class PinCodeContainer extends Component {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
//verifies is the pin entered is right or wrong
|
//verifies is the pin entered is right or wrong, also migrates to newer locking method
|
||||||
_verifyPinCodeNew = async (pin, { shouldUpdateRealm } = {}) => {
|
_verifyPinCode = async (pin) => {
|
||||||
try {
|
try {
|
||||||
const {
|
const {
|
||||||
|
intl,
|
||||||
currentAccount,
|
currentAccount,
|
||||||
dispatch,
|
dispatch,
|
||||||
encUnlockPin,
|
encUnlockPin,
|
||||||
@ -300,7 +301,9 @@ class PinCodeContainer extends Component {
|
|||||||
|
|
||||||
//check if pins match
|
//check if pins match
|
||||||
if (unlockPin !== pin) {
|
if (unlockPin !== pin) {
|
||||||
throw new Error("Invalid pin added");
|
throw new Error(intl.formatMessage({
|
||||||
|
id: 'alert.invalid_pincode',
|
||||||
|
}),);
|
||||||
}
|
}
|
||||||
|
|
||||||
//migrate data to default pin if encUnlockPin is not set.
|
//migrate data to default pin if encUnlockPin is not set.
|
||||||
@ -329,94 +332,6 @@ class PinCodeContainer extends Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
_verifyPinCode = (pin, { shouldUpdateRealm } = {}) =>
|
|
||||||
new Promise((resolve, reject) => {
|
|
||||||
const {
|
|
||||||
currentAccount,
|
|
||||||
dispatch,
|
|
||||||
pinCodeParams: { navigateTo, navigateParams, accessToken, callback },
|
|
||||||
} = this.props;
|
|
||||||
const { oldPinCode } = this.state;
|
|
||||||
|
|
||||||
// If the user is exist, we are just checking to pin and navigating to feed screen
|
|
||||||
const pinData = {
|
|
||||||
pinCode: pin,
|
|
||||||
password: currentAccount ? currentAccount.password : '',
|
|
||||||
username: currentAccount ? currentAccount.name : '',
|
|
||||||
accessToken,
|
|
||||||
};
|
|
||||||
verifyPinCode(pinData)
|
|
||||||
.then(() => {
|
|
||||||
this._savePinCode(pin);
|
|
||||||
getUserDataWithUsername(currentAccount.name).then(async (realmData) => {
|
|
||||||
if (shouldUpdateRealm) {
|
|
||||||
this._updatePinCodeRealm(pinData).then(() => {
|
|
||||||
dispatch(closePinCodeModal());
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
let _currentAccount = currentAccount;
|
|
||||||
_currentAccount.username = _currentAccount.name;
|
|
||||||
[_currentAccount.local] = realmData;
|
|
||||||
|
|
||||||
try {
|
|
||||||
const pinHash = encryptKey(pin, Config.PIN_KEY);
|
|
||||||
//migration script for previously mast key based logged in user not having access token
|
|
||||||
if (
|
|
||||||
realmData[0].authType !== AUTH_TYPE.STEEM_CONNECT &&
|
|
||||||
realmData[0].accessToken === ''
|
|
||||||
) {
|
|
||||||
_currentAccount = await migrateToMasterKeyWithAccessToken(
|
|
||||||
_currentAccount,
|
|
||||||
realmData[0],
|
|
||||||
pinHash,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
//refresh access token
|
|
||||||
const encryptedAccessToken = await refreshSCToken(_currentAccount.local, pin);
|
|
||||||
_currentAccount.local.accessToken = encryptedAccessToken;
|
|
||||||
} catch (error) {
|
|
||||||
this._onRefreshTokenFailed(error);
|
|
||||||
}
|
|
||||||
|
|
||||||
//get unread notifications
|
|
||||||
try {
|
|
||||||
_currentAccount.unread_activity_count = await getUnreadNotificationCount();
|
|
||||||
_currentAccount.pointsSummary = await getPointsSummary(_currentAccount.username);
|
|
||||||
_currentAccount.mutes = await getMutes(_currentAccount.username);
|
|
||||||
} catch (err) {
|
|
||||||
console.warn(
|
|
||||||
'Optional user data fetch failed, account can still function without them',
|
|
||||||
err,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
dispatch(updateCurrentAccount({ ..._currentAccount }));
|
|
||||||
dispatch(fetchSubscribedCommunities(_currentAccount.username));
|
|
||||||
dispatch(closePinCodeModal());
|
|
||||||
}
|
|
||||||
|
|
||||||
//on successful code verification run requested operation passed as props
|
|
||||||
if (callback) {
|
|
||||||
callback(pin, oldPinCode);
|
|
||||||
}
|
|
||||||
if (navigateTo) {
|
|
||||||
navigate({
|
|
||||||
routeName: navigateTo,
|
|
||||||
params: navigateParams,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
resolve();
|
|
||||||
});
|
|
||||||
})
|
|
||||||
.catch((err) => {
|
|
||||||
console.warn('code verification for login failed: ', err);
|
|
||||||
reject(err);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
_savePinCode = (pin) => {
|
_savePinCode = (pin) => {
|
||||||
const { dispatch } = this.props;
|
const { dispatch } = this.props;
|
||||||
const encryptedPin = encryptKey(pin, Config.PIN_KEY);
|
const encryptedPin = encryptKey(pin, Config.PIN_KEY);
|
||||||
@ -439,7 +354,6 @@ class PinCodeContainer extends Component {
|
|||||||
dispatch(logoutDone());
|
dispatch(logoutDone());
|
||||||
dispatch(closePinCodeModal());
|
dispatch(closePinCodeModal());
|
||||||
dispatch(isPinCodeOpen(false));
|
dispatch(isPinCodeOpen(false));
|
||||||
setPinCodeOpen(false);
|
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
console.warn('Failed to remove user data', err);
|
console.warn('Failed to remove user data', err);
|
||||||
@ -505,47 +419,16 @@ class PinCodeContainer extends Component {
|
|||||||
const { isExistUser } = this.state;
|
const { isExistUser } = this.state;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const realmData = await getUserDataWithUsername(currentAccount.name);
|
|
||||||
const userData = realmData[0];
|
|
||||||
|
|
||||||
// check if reset routine is triggered by user, reroute code to reset hanlder
|
// check if reset routine is triggered by user, reroute code to reset hanlder
|
||||||
if (isReset) {
|
if (isReset) {
|
||||||
await this._resetPinCode(pin);
|
await this._resetPinCode(pin);
|
||||||
return true;
|
} else {
|
||||||
|
await this._verifyPinCode(pin);
|
||||||
}
|
}
|
||||||
|
|
||||||
//user is logged in and is not reset routine...
|
return true
|
||||||
if (isExistUser) {
|
|
||||||
if (!userData.accessToken && !userData.masterKey && applicationPinCode) {
|
|
||||||
const verifiedPin = decryptKey(applicationPinCode, Config.PIN_KEY, this._onDecryptFail);
|
|
||||||
if (verifiedPin === undefined) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (verifiedPin === pin) {
|
|
||||||
await this._setFirstPinCode(pin);
|
|
||||||
} else {
|
|
||||||
Alert.alert(
|
|
||||||
intl.formatMessage({
|
|
||||||
id: 'alert.warning',
|
|
||||||
}),
|
|
||||||
intl.formatMessage({
|
|
||||||
id: 'alert.invalid_pincode',
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
await this._verifyPinCodeNew(pin);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
//means this is not reset routine and user do not exist
|
|
||||||
//only possible option left is user logging in,
|
|
||||||
//verifyPinCode then and update realm as well.
|
|
||||||
else {
|
|
||||||
await this._verifyPinCode(pin, { shouldUpdateRealm: true });
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
return this._handleFailedAttempt(error);
|
return this._handleFailedAttempt(error);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user