mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
I#5956 fix 1 (#6026)
* prevent invalid chainId's when adding cusstom rpcs * migration 30 removes invalid chaids from preferences and networkController for custom rpcs
This commit is contained in:
parent
de0ac53008
commit
0ad7797076
@ -408,7 +408,11 @@ class PreferencesController {
|
||||
rpcList.splice(index, 1)
|
||||
}
|
||||
if (url !== 'http://localhost:8545') {
|
||||
rpcList.push({ rpcUrl: url, chainId, ticker, nickname })
|
||||
let checkedChainId
|
||||
if (!!chainId && !Number.isNaN(parseInt(chainId))) {
|
||||
checkedChainId = chainId
|
||||
}
|
||||
rpcList.push({ rpcUrl: url, chainId: checkedChainId, ticker, nickname })
|
||||
}
|
||||
this.store.updateState({ frequentRpcListDetail: rpcList })
|
||||
return Promise.resolve(rpcList)
|
||||
|
47
app/scripts/migrations/030.js
Normal file
47
app/scripts/migrations/030.js
Normal file
@ -0,0 +1,47 @@
|
||||
// next version number
|
||||
const version = 30
|
||||
|
||||
/*
|
||||
|
||||
removes invalid chaids from preferences and networkController for custom rpcs
|
||||
|
||||
*/
|
||||
|
||||
const clone = require('clone')
|
||||
|
||||
module.exports = {
|
||||
version,
|
||||
|
||||
migrate: async function (originalVersionedData) {
|
||||
const versionedData = clone(originalVersionedData)
|
||||
versionedData.meta.version = version
|
||||
const state = versionedData.data
|
||||
const newState = transformState(state)
|
||||
versionedData.data = newState
|
||||
return versionedData
|
||||
},
|
||||
}
|
||||
|
||||
function transformState (state) {
|
||||
const newState = state
|
||||
|
||||
const frequentRpcListDetail = newState.PreferencesController.frequentRpcListDetail
|
||||
if (frequentRpcListDetail) {
|
||||
frequentRpcListDetail.forEach((rpc, index) => {
|
||||
if (!!rpc.chainId && Number.isNaN(parseInt(rpc.chainId))) {
|
||||
delete frequentRpcListDetail[index].chainId
|
||||
}
|
||||
})
|
||||
newState.PreferencesController.frequentRpcListDetail = frequentRpcListDetail
|
||||
}
|
||||
|
||||
if (newState.NetworkController.network && Number.isNaN(parseInt(newState.NetworkController.network))) {
|
||||
delete newState.NetworkController.network
|
||||
}
|
||||
|
||||
if (newState.NetworkController.provider && newState.NetworkController.provider.chainId && Number.isNaN(parseInt(newState.NetworkController.provider.chainId))) {
|
||||
delete newState.NetworkController.provider.chainId
|
||||
}
|
||||
|
||||
return newState
|
||||
}
|
@ -40,4 +40,5 @@ module.exports = [
|
||||
require('./027'),
|
||||
require('./028'),
|
||||
require('./029'),
|
||||
require('./030'),
|
||||
]
|
||||
|
37
test/unit/migrations/030-test.js
Normal file
37
test/unit/migrations/030-test.js
Normal file
@ -0,0 +1,37 @@
|
||||
const assert = require('assert')
|
||||
const migrationTemplate = require('../../../app/scripts/migrations/030.js')
|
||||
const storage = {
|
||||
meta: {},
|
||||
data: {
|
||||
NetworkController: {
|
||||
network: 'fail',
|
||||
provider: {
|
||||
chainId: 'fail',
|
||||
nickname: '',
|
||||
rpcTarget: 'https://api.myetherwallet.com/eth',
|
||||
ticker: 'ETH',
|
||||
type: 'rinkeby',
|
||||
},
|
||||
},
|
||||
PreferencesController: {
|
||||
frequentRpcListDetail: [
|
||||
{chainId: 'fail', nickname: '', rpcUrl: 'http://127.0.0.1:8545', ticker: ''},
|
||||
{chainId: '1', nickname: '', rpcUrl: 'https://api.myetherwallet.com/eth', ticker: 'ETH'},
|
||||
],
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
describe('storage is migrated successfully', () => {
|
||||
it('should work', (done) => {
|
||||
migrationTemplate.migrate(storage)
|
||||
.then((migratedData) => {
|
||||
assert.equal(migratedData.meta.version, 30)
|
||||
assert.equal(migratedData.data.PreferencesController.frequentRpcListDetail[0].chainId, undefined)
|
||||
assert.equal(migratedData.data.PreferencesController.frequentRpcListDetail[1].chainId, '1')
|
||||
assert.equal(migratedData.data.NetworkController.provider.chainId, undefined)
|
||||
assert.equal(migratedData.data.NetworkController.network, undefined)
|
||||
done()
|
||||
}).catch(done)
|
||||
})
|
||||
})
|
@ -232,6 +232,9 @@ export default class SettingsTab extends PureComponent {
|
||||
const { setRpcTarget, displayWarning } = this.props
|
||||
|
||||
if (validUrl.isWebUri(newRpc)) {
|
||||
if (!!chainId && Number.isNaN(parseInt(chainId))) {
|
||||
return displayWarning(`${this.context.t('invalidInput')} chainId`)
|
||||
}
|
||||
setRpcTarget(newRpc, chainId, ticker, nickname)
|
||||
} else {
|
||||
const appendedRpc = `http://${newRpc}`
|
||||
|
Loading…
Reference in New Issue
Block a user