mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
Properly handle JSON errors when restoring data in advanced settings (#15815)
This commit is contained in:
parent
d3c7b9fb32
commit
0b9424acc1
3
app/_locales/en/messages.json
generated
3
app/_locales/en/messages.json
generated
@ -903,6 +903,9 @@
|
|||||||
"dataBackupFoundInfo": {
|
"dataBackupFoundInfo": {
|
||||||
"message": "Some of your account data was backed up during a previous installation of MetaMask. This could include your settings, contacts, and tokens. Would you like to restore this data now?"
|
"message": "Some of your account data was backed up during a previous installation of MetaMask. This could include your settings, contacts, and tokens. Would you like to restore this data now?"
|
||||||
},
|
},
|
||||||
|
"dataBackupSeemsCorrupt": {
|
||||||
|
"message": "Can not restore your data. The file appears to be corrupt."
|
||||||
|
},
|
||||||
"dataHex": {
|
"dataHex": {
|
||||||
"message": "Hex"
|
"message": "Hex"
|
||||||
},
|
},
|
||||||
|
@ -25,6 +25,8 @@ import { exportAsFile } from '../../../../shared/modules/export-utils';
|
|||||||
import ActionableMessage from '../../../components/ui/actionable-message';
|
import ActionableMessage from '../../../components/ui/actionable-message';
|
||||||
import ZENDESK_URLS from '../../../helpers/constants/zendesk-url';
|
import ZENDESK_URLS from '../../../helpers/constants/zendesk-url';
|
||||||
|
|
||||||
|
const CORRUPT_JSON_FILE = 'CORRUPT_JSON_FILE';
|
||||||
|
|
||||||
export default class AdvancedTab extends PureComponent {
|
export default class AdvancedTab extends PureComponent {
|
||||||
static contextTypes = {
|
static contextTypes = {
|
||||||
t: PropTypes.func,
|
t: PropTypes.func,
|
||||||
@ -72,6 +74,7 @@ export default class AdvancedTab extends PureComponent {
|
|||||||
showLedgerTransportWarning: false,
|
showLedgerTransportWarning: false,
|
||||||
showResultMessage: false,
|
showResultMessage: false,
|
||||||
restoreSuccessful: true,
|
restoreSuccessful: true,
|
||||||
|
restoreMessage: null,
|
||||||
};
|
};
|
||||||
|
|
||||||
settingsRefs = Array(
|
settingsRefs = Array(
|
||||||
@ -155,16 +158,35 @@ export default class AdvancedTab extends PureComponent {
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
event.target.value = '';
|
event.target.value = '';
|
||||||
const result = await this.props.restoreUserData(jsonString);
|
try {
|
||||||
this.setState({
|
const result = await this.props.restoreUserData(jsonString);
|
||||||
showResultMessage: true,
|
this.setState({
|
||||||
restoreSuccessful: result,
|
showResultMessage: true,
|
||||||
});
|
restoreSuccessful: result,
|
||||||
|
restoreMessage: null,
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
if (e.message.match(/Unexpected.+JSON/u)) {
|
||||||
|
this.setState({
|
||||||
|
showResultMessage: true,
|
||||||
|
restoreSuccessful: false,
|
||||||
|
restoreMessage: CORRUPT_JSON_FILE,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
renderRestoreUserData() {
|
renderRestoreUserData() {
|
||||||
const { t } = this.context;
|
const { t } = this.context;
|
||||||
const { showResultMessage, restoreSuccessful } = this.state;
|
const { showResultMessage, restoreSuccessful, restoreMessage } = this.state;
|
||||||
|
|
||||||
|
const defaultRestoreMessage = restoreSuccessful
|
||||||
|
? t('restoreSuccessful')
|
||||||
|
: t('restoreFailed');
|
||||||
|
const restoreMessageToRender =
|
||||||
|
restoreMessage === CORRUPT_JSON_FILE
|
||||||
|
? t('dataBackupSeemsCorrupt')
|
||||||
|
: defaultRestoreMessage;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
@ -197,9 +219,17 @@ export default class AdvancedTab extends PureComponent {
|
|||||||
{showResultMessage && (
|
{showResultMessage && (
|
||||||
<ActionableMessage
|
<ActionableMessage
|
||||||
type={restoreSuccessful ? 'success' : 'danger'}
|
type={restoreSuccessful ? 'success' : 'danger'}
|
||||||
message={
|
message={restoreMessageToRender}
|
||||||
restoreSuccessful ? t('restoreSuccessful') : t('restoreFailed')
|
primaryActionV2={{
|
||||||
}
|
label: t('dismiss'),
|
||||||
|
onClick: () => {
|
||||||
|
this.setState({
|
||||||
|
showResultMessage: false,
|
||||||
|
restoreSuccessful: true,
|
||||||
|
restoreMessage: null,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
Reference in New Issue
Block a user