From 44162811bd57afb89e5d052a2d9db25007cc1463 Mon Sep 17 00:00:00 2001 From: Brandon Millman Date: Fri, 26 Jan 2018 09:40:42 -0800 Subject: Add order signing and dispensing ability to faucet --- .../testnet-faucets/src/ts/parameter_extractor.ts | 34 ++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 packages/testnet-faucets/src/ts/parameter_extractor.ts (limited to 'packages/testnet-faucets/src/ts/parameter_extractor.ts') diff --git a/packages/testnet-faucets/src/ts/parameter_extractor.ts b/packages/testnet-faucets/src/ts/parameter_extractor.ts new file mode 100644 index 000000000..f3a26ae01 --- /dev/null +++ b/packages/testnet-faucets/src/ts/parameter_extractor.ts @@ -0,0 +1,34 @@ +import { addressUtils } from '@0xproject/utils'; +import { NextFunction, Request, Response } from 'express'; +import * as _ from 'lodash'; + +import { configs } from './configs'; +import { rpcUrls } from './rpc_urls'; +import { utils } from './utils'; + +const DEFAULT_NETWORK_ID = 42; // kovan + +export const parameterExtractor = { + extract(req: Request, res: Response, next: NextFunction) { + const recipientAddress = req.params.recipient; + if (_.isUndefined(recipientAddress) || !_isValidEthereumAddress(recipientAddress)) { + res.status(400).send('INVALID_RECIPIENT_ADDRESS'); + return; + } + const lowerCaseRecipientAddress = recipientAddress.toLowerCase(); + req.recipientAddress = lowerCaseRecipientAddress; + const networkId = _.get(req.query, 'networkId', DEFAULT_NETWORK_ID); + const rpcUrl = _.get(rpcUrls, networkId); + if (_.isUndefined(rpcUrl)) { + res.status(400).send('UNSUPPORTED_NETWORK_ID'); + return; + } + req.networkId = networkId; + next(); + }, +}; + +function _isValidEthereumAddress(address: string): boolean { + const lowercaseAddress = address.toLowerCase(); + return addressUtils.isAddress(lowercaseAddress); +} -- cgit v1.2.3