From b97565d2e7732ae636fdc6ccd035448dbc8b466a Mon Sep 17 00:00:00 2001 From: Cameron Diver Date: Wed, 24 Apr 2019 10:06:53 +0100 Subject: [PATCH] refactor: Create and use validation functions for input This includes IP address, application name and dotlocal url parsing. Change-type: patch Signed-off-by: Cameron Diver --- lib/actions/push.ts | 13 ++++++------- lib/utils/validation.ts | 17 ++++++++++++++++- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/lib/actions/push.ts b/lib/actions/push.ts index 81e09bb4..5c71e963 100644 --- a/lib/actions/push.ts +++ b/lib/actions/push.ts @@ -19,11 +19,10 @@ import { CommandDefinition } from 'capitano'; import { stripIndent } from 'common-tags'; import { registrySecretsHelp } from '../utils/messages'; - -// An regex to detect an IP address, from https://www.regular-expressions.info/ip.html -const IP_REGEX = new RegExp( - /\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/, -); +import { + validateApplicationName, + validateIPAddress, +} from '../utils/validation'; enum BuildTarget { Cloud, @@ -32,11 +31,11 @@ enum BuildTarget { function getBuildTarget(appOrDevice: string): BuildTarget | null { // First try the application regex from the api - if (/^[a-zA-Z0-9_-]+$/.test(appOrDevice)) { + if (validateApplicationName(appOrDevice)) { return BuildTarget.Cloud; } - if (IP_REGEX.test(appOrDevice)) { + if (validateIPAddress(appOrDevice)) { return BuildTarget.Device; } diff --git a/lib/utils/validation.ts b/lib/utils/validation.ts index 194571b8..7b4a42eb 100644 --- a/lib/utils/validation.ts +++ b/lib/utils/validation.ts @@ -16,6 +16,13 @@ limitations under the License. import validEmail = require('@resin.io/valid-email'); +const APPNAME_REGEX = new RegExp(/^[a-zA-Z0-9_-]+$/); +// An regex to detect an IP address, from https://www.regular-expressions.info/ip.html +const IP_REGEX = new RegExp( + /\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/, +); +const DOTLOCAL_REGEX = new RegExp(/^[a-zA-Z0-9-]+\.local$/); + export function validateEmail(input: string) { if (!validEmail(input)) { return 'Email is not valid'; @@ -37,5 +44,13 @@ export function validateApplicationName(input: string) { return 'The application name should be at least 4 characters'; } - return true; + return APPNAME_REGEX.test(input); +} + +export function validateIPAddress(input: string): boolean { + return IP_REGEX.test(input); +} + +export function validateDotLocalUrl(input: string): boolean { + return DOTLOCAL_REGEX.test(input); }