MyCrypto/common/libs/validators.js

86 lines
2.2 KiB
JavaScript
Raw Normal View History

2017-06-26 22:27:55 +00:00
// @flow
2017-06-26 23:27:26 +00:00
import WalletAddressValidator from 'wallet-address-validator';
2017-06-26 22:27:55 +00:00
import { normalise } from './ens';
import { toChecksumAddress } from 'ethereumjs-util';
2017-06-26 23:27:26 +00:00
export function isValidETHAddress(address: string): boolean {
2017-07-02 05:49:06 +00:00
if (!address) {
return false;
}
if (address == '0x0000000000000000000000000000000000000000') return false;
return validateEtherAddress(address);
2017-06-26 23:27:26 +00:00
}
export function isValidBTCAddress(address: string): boolean {
2017-07-02 05:49:06 +00:00
return WalletAddressValidator.validate(address, 'BTC');
2017-06-26 23:27:26 +00:00
}
2017-06-26 22:27:55 +00:00
export function isValidHex(str: string): boolean {
2017-07-02 05:49:06 +00:00
if (typeof str !== 'string') {
return false;
}
if (str === '') return true;
str = str.substring(0, 2) == '0x'
? str.substring(2).toUpperCase()
: str.toUpperCase();
2017-07-02 05:49:06 +00:00
var re = /^[0-9A-F]+$/g;
return re.test(str);
2017-06-26 22:27:55 +00:00
}
export function isValidENSorEtherAddress(address: string): boolean {
2017-07-02 05:49:06 +00:00
return isValidETHAddress(address) || isValidENSAddress(address);
2017-06-26 22:27:55 +00:00
}
export function isValidENSName(str: string) {
2017-07-02 05:49:06 +00:00
try {
return (
str.length > 6 && normalise(str) != '' && str.substring(0, 2) != '0x'
);
2017-07-02 05:49:06 +00:00
} catch (e) {
return false;
}
2017-06-26 22:27:55 +00:00
}
export function isValidENSAddress(address: string): boolean {
2017-07-02 05:49:06 +00:00
try {
const normalized = normalise(address);
var tld = normalized.substr(normalized.lastIndexOf('.') + 1);
var validTLDs = {
eth: true,
test: true,
reverse: true
};
if (validTLDs[tld]) return true;
} catch (e) {
2017-06-26 22:27:55 +00:00
return false;
2017-07-02 05:49:06 +00:00
}
return false;
2017-06-26 22:27:55 +00:00
}
function isChecksumAddress(address: string): boolean {
2017-07-02 05:49:06 +00:00
return address == toChecksumAddress(address);
2017-06-26 22:27:55 +00:00
}
2017-06-26 23:27:26 +00:00
// FIXME we probably want to do checksum checks sideways
2017-06-26 22:27:55 +00:00
function validateEtherAddress(address: string): boolean {
2017-07-02 05:49:06 +00:00
if (address.substring(0, 2) != '0x') return false;
else if (!/^(0x)?[0-9a-f]{40}$/i.test(address)) return false;
else if (
/^(0x)?[0-9a-f]{40}$/.test(address) ||
/^(0x)?[0-9A-F]{40}$/.test(address)
)
return true;
2017-07-02 05:49:06 +00:00
else return isChecksumAddress(address);
2017-06-26 22:27:55 +00:00
}
2017-06-29 23:03:11 +00:00
export function isValidPrivKey(length: number): boolean {
2017-07-04 03:21:19 +00:00
return length === 64 || length === 128 || length === 132;
2017-06-29 23:03:11 +00:00
}
export function isPositiveIntegerOrZero(number: number): boolean {
if (isNaN(number) || !isFinite(number)) {
return false;
}
return number >= 0 && parseInt(number) === number;
}