Merge pull request #944 from MetaMask/i938-uri-validation

I938 uri validation
feature/default_network_editable
Dan Finlay 8 years ago committed by GitHub
commit 73cdf0bfd4
  1. 1
      CHANGELOG.md
  2. 22
      app/scripts/notice-controller.js
  3. 1
      package.json
  4. 28
      ui/app/config.js

@ -5,6 +5,7 @@
## 2.14.1 2016-12-20 ## 2.14.1 2016-12-20
- Temporarily disable extension reload detection causing infinite reload bug. - Temporarily disable extension reload detection causing infinite reload bug.
- Implemented basic checking for valid RPC URIs.
## 2.14.0 2016-12-16 ## 2.14.0 2016-12-16

@ -9,7 +9,7 @@ module.exports = class NoticeController extends EventEmitter {
this.noticePoller = null this.noticePoller = null
} }
getState() { getState () {
var lastUnreadNotice = this.getLatestUnreadNotice() var lastUnreadNotice = this.getLatestUnreadNotice()
return { return {
@ -18,7 +18,7 @@ module.exports = class NoticeController extends EventEmitter {
} }
} }
getNoticesList() { getNoticesList () {
var data = this.configManager.getData() var data = this.configManager.getData()
if ('noticesList' in data) { if ('noticesList' in data) {
return data.noticesList return data.noticesList
@ -27,28 +27,28 @@ module.exports = class NoticeController extends EventEmitter {
} }
} }
setNoticesList(list) { setNoticesList (list) {
var data = this.configManager.getData() var data = this.configManager.getData()
data.noticesList = list data.noticesList = list
this.configManager.setData(data) this.configManager.setData(data)
return Promise.resolve(true) return Promise.resolve(true)
} }
markNoticeRead(notice, cb) { markNoticeRead (notice, cb) {
cb = cb || function(err){ if (err) throw err } cb = cb || function (err) { if (err) throw err }
try { try {
var notices = this.getNoticesList() var notices = this.getNoticesList()
var id = notice.id var id = notice.id
notices[id].read = true notices[id].read = true
this.setNoticesList(notices) this.setNoticesList(notices)
let latestNotice = this.getLatestUnreadNotice() const latestNotice = this.getLatestUnreadNotice()
cb(null, latestNotice) cb(null, latestNotice)
} catch (err) { } catch (err) {
cb(err) cb(err)
} }
} }
updateNoticesList() { updateNoticesList () {
return this._retrieveNoticeData().then((newNotices) => { return this._retrieveNoticeData().then((newNotices) => {
var oldNotices = this.getNoticesList() var oldNotices = this.getNoticesList()
var combinedNotices = this._mergeNotices(oldNotices, newNotices) var combinedNotices = this._mergeNotices(oldNotices, newNotices)
@ -56,7 +56,7 @@ module.exports = class NoticeController extends EventEmitter {
}) })
} }
getLatestUnreadNotice() { getLatestUnreadNotice () {
var notices = this.getNoticesList() var notices = this.getNoticesList()
var filteredNotices = notices.filter((notice) => { var filteredNotices = notices.filter((notice) => {
return notice.read === false return notice.read === false
@ -73,7 +73,7 @@ module.exports = class NoticeController extends EventEmitter {
}, 300000) }, 300000)
} }
_mergeNotices(oldNotices, newNotices) { _mergeNotices (oldNotices, newNotices) {
var noticeMap = this._mapNoticeIds(oldNotices) var noticeMap = this._mapNoticeIds(oldNotices)
newNotices.forEach((notice) => { newNotices.forEach((notice) => {
if (noticeMap.indexOf(notice.id) === -1) { if (noticeMap.indexOf(notice.id) === -1) {
@ -83,11 +83,11 @@ module.exports = class NoticeController extends EventEmitter {
return oldNotices return oldNotices
} }
_mapNoticeIds(notices) { _mapNoticeIds (notices) {
return notices.map((notice) => notice.id) return notices.map((notice) => notice.id)
} }
_retrieveNoticeData() { _retrieveNoticeData () {
// Placeholder for the API. // Placeholder for the API.
return Promise.resolve(hardCodedNotices) return Promise.resolve(hardCodedNotices)
} }

@ -91,6 +91,7 @@
"textarea-caret": "^3.0.1", "textarea-caret": "^3.0.1",
"three.js": "^0.73.2", "three.js": "^0.73.2",
"through2": "^2.0.1", "through2": "^2.0.1",
"valid-url": "^1.0.9",
"vreme": "^3.0.2", "vreme": "^3.0.2",
"web3": "0.17.0-beta", "web3": "0.17.0-beta",
"web3-provider-engine": "^8.1.14", "web3-provider-engine": "^8.1.14",

@ -4,11 +4,13 @@ const h = require('react-hyperscript')
const connect = require('react-redux').connect const connect = require('react-redux').connect
const actions = require('./actions') const actions = require('./actions')
const currencies = require('./conversion.json').rows const currencies = require('./conversion.json').rows
const validUrl = require('valid-url')
module.exports = connect(mapStateToProps)(ConfigScreen) module.exports = connect(mapStateToProps)(ConfigScreen)
function mapStateToProps (state) { function mapStateToProps (state) {
return { return {
metamask: state.metamask, metamask: state.metamask,
warning: state.appState.warning,
} }
} }
@ -20,6 +22,7 @@ function ConfigScreen () {
ConfigScreen.prototype.render = function () { ConfigScreen.prototype.render = function () {
var state = this.props var state = this.props
var metamaskState = state.metamask var metamaskState = state.metamask
var warning = state.warning
return ( return (
h('.flex-column.flex-grow', [ h('.flex-column.flex-grow', [
@ -34,6 +37,14 @@ ConfigScreen.prototype.render = function () {
h('h2.page-subtitle', 'Settings'), h('h2.page-subtitle', 'Settings'),
]), ]),
h('.error', {
style: {
display: warning ? 'block' : 'none',
padding: '0 20px',
textAlign: 'center',
},
}, warning),
// conf view // conf view
h('.flex-column.flex-justify-center.flex-grow.select-none', [ h('.flex-column.flex-justify-center.flex-grow.select-none', [
h('.flex-space-around', { h('.flex-space-around', {
@ -57,7 +68,7 @@ ConfigScreen.prototype.render = function () {
if (event.key === 'Enter') { if (event.key === 'Enter') {
var element = event.target var element = event.target
var newRpc = element.value var newRpc = element.value
state.dispatch(actions.setRpcTarget(newRpc)) rpcValidation(newRpc, state)
} }
}, },
}), }),
@ -69,7 +80,7 @@ ConfigScreen.prototype.render = function () {
event.preventDefault() event.preventDefault()
var element = document.querySelector('input#new_rpc') var element = document.querySelector('input#new_rpc')
var newRpc = element.value var newRpc = element.value
state.dispatch(actions.setRpcTarget(newRpc)) rpcValidation(newRpc, state)
}, },
}, 'Save'), }, 'Save'),
]), ]),
@ -99,6 +110,19 @@ ConfigScreen.prototype.render = function () {
) )
} }
function rpcValidation (newRpc, state) {
if (validUrl.isWebUri(newRpc)) {
state.dispatch(actions.setRpcTarget(newRpc))
} else {
var appendedRpc = `http://${newRpc}`
if (validUrl.isWebUri(appendedRpc)) {
state.dispatch(actions.displayWarning('URIs require the appropriate HTTP/HTTPS prefix.'))
} else {
state.dispatch(actions.displayWarning('Invalid RPC URI'))
}
}
}
function currentConversionInformation (metamaskState, state) { function currentConversionInformation (metamaskState, state) {
var currentFiat = metamaskState.currentFiat var currentFiat = metamaskState.currentFiat
var conversionDate = metamaskState.conversionDate var conversionDate = metamaskState.conversionDate

Loading…
Cancel
Save