From 93b70c1f0a1e79e42eaca2fd39d83b7b5223307c Mon Sep 17 00:00:00 2001 From: Szymon Lesisz Date: Thu, 20 Sep 2018 08:59:54 +0200 Subject: [PATCH] fixed address validation added checksum validation if address contains any uppercase letter --- src/actions/SendFormActions.js | 36 ++++++++++++---------------------- src/utils/ethUtils.js | 15 +++++++++++++- 2 files changed, 26 insertions(+), 25 deletions(-) diff --git a/src/actions/SendFormActions.js b/src/actions/SendFormActions.js index 6288c9d6..6b59279a 100644 --- a/src/actions/SendFormActions.js +++ b/src/actions/SendFormActions.js @@ -13,6 +13,7 @@ import { initialState } from 'reducers/SendFormReducer'; import { findToken } from 'reducers/TokensReducer'; import { findDevice, getPendingAmount, getPendingNonce } from 'reducers/utils'; import * as stateUtils from 'reducers/utils'; +import { validateAddress } from 'utils/ethUtils'; import type { Dispatch, @@ -345,32 +346,19 @@ export const validation = (props: Props): void => { if (state.untouched) return; // valid address if (state.touched.address) { - /* if (state.address.length < 1) { - errors.address = 'Address is not set'; - } else if (!EthereumjsUtil.isValidAddress(state.address)) { - errors.address = 'Address is not valid'; - } else { - // address warning or info are set in addressValidation ThunkAction - // do not override this - if (state.warnings.address) { - warnings.address = state.warnings.address; - } else if (state.infos.address) { - infos.address = state.infos.address; - } - } */ + const addressError = validateAddress(state.address); + if (addressError) { + errors.address = addressError; + } - /* eslint (no-lonely-if) */ - if (state.address.length < 1) { - errors.address = 'Address is not set'; - } else if (!EthereumjsUtil.isValidAddress(state.address)) { - errors.address = 'Address is not valid'; - } else if (state.warnings.address) { - // address warning or info are set in addressValidation ThunkAction - // do not override this + // address warning or info may be set in addressValidation ThunkAction + // do not override them + if (state.warnings.address) { warnings.address = state.warnings.address; - if (state.infos.address) { - infos.address = state.infos.address; - } + } + + if (state.infos.address) { + infos.address = state.infos.address; } } diff --git a/src/utils/ethUtils.js b/src/utils/ethUtils.js index 7b8ad313..82d5744a 100644 --- a/src/utils/ethUtils.js +++ b/src/utils/ethUtils.js @@ -1,6 +1,7 @@ /* @flow */ import BigNumber from 'bignumber.js'; +import EthereumjsUtil from 'ethereumjs-util'; export const decimalToHex = (dec: number): string => new BigNumber(dec).toString(16); @@ -28,4 +29,16 @@ export const strip = (str: string): string => { return padLeftEven(str); }; -export const calcGasPrice = (price: BigNumber, limit: string): string => price.times(limit).toString(); \ No newline at end of file +export const calcGasPrice = (price: BigNumber, limit: string): string => price.times(limit).toString(); + +export const validateAddress = (address: string): ?string => { + const hasUpperCase = new RegExp('^(.*[A-Z].*)$'); + if (address.length < 1) { + return 'Address is not set'; + } else if (!EthereumjsUtil.isValidAddress(address)) { + return 'Address is not valid'; + } else if (address.match(hasUpperCase) && !EthereumjsUtil.isValidChecksumAddress(address)) { + return 'Address is not a valid checksum'; + } + return null; +} \ No newline at end of file