diff --git a/package-lock.json b/package-lock.json index d5c3e7f..0350fcd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,6 +5,7 @@ "requires": true, "packages": { "": { + "name": "devcert", "version": "1.2.0", "license": "MIT", "dependencies": { @@ -23,6 +24,7 @@ "eol": "^0.9.1", "get-port": "^3.2.0", "glob": "^7.1.2", + "is-valid-domain": "^0.1.6", "lodash": "^4.17.4", "mkdirp": "^0.5.1", "password-prompt": "^1.0.4", @@ -1825,6 +1827,14 @@ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", "dev": true }, + "node_modules/is-valid-domain": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-valid-domain/-/is-valid-domain-0.1.6.tgz", + "integrity": "sha512-ZKtq737eFkZr71At8NxOFcP9O1K89gW3DkdrGMpp1upr/ueWjj+Weh4l9AI4rN0Gt8W2M1w7jrG2b/Yv83Ljpg==", + "dependencies": { + "punycode": "^2.1.1" + } + }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -2404,6 +2414,14 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, "node_modules/q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", @@ -4637,6 +4655,14 @@ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", "dev": true }, + "is-valid-domain": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-valid-domain/-/is-valid-domain-0.1.6.tgz", + "integrity": "sha512-ZKtq737eFkZr71At8NxOFcP9O1K89gW3DkdrGMpp1upr/ueWjj+Weh4l9AI4rN0Gt8W2M1w7jrG2b/Yv83Ljpg==", + "requires": { + "punycode": "^2.1.1" + } + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -5097,6 +5123,11 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, "q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", diff --git a/package.json b/package.json index 2dfe610..33fec36 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "eol": "^0.9.1", "get-port": "^3.2.0", "glob": "^7.1.2", + "is-valid-domain": "^0.1.6", "lodash": "^4.17.4", "mkdirp": "^0.5.1", "password-prompt": "^1.0.4", @@ -52,6 +53,5 @@ "sudo-prompt": "^8.2.0", "tmp": "^0.0.33", "tslib": "^1.10.0" - }, - "optionalDependencies": {} + } } diff --git a/src/constants.ts b/src/constants.ts index 15711a0..acac07a 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -6,9 +6,6 @@ import applicationConfigPath = require('application-config-path'); import eol from 'eol'; import {mktmp, numericHash} from './utils'; -export const VALID_IP = /(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}/; -export const VALID_DOMAIN = /^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.?)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$/i; - // Platform shortcuts export const isMac = process.platform === 'darwin'; export const isLinux = process.platform === 'linux'; diff --git a/src/index.ts b/src/index.ts index cd99013..47b9713 100644 --- a/src/index.ts +++ b/src/index.ts @@ -11,13 +11,12 @@ import { domainsDir, rootCAKeyPath, rootCACertPath, - VALID_DOMAIN, - VALID_IP } from './constants'; import currentPlatform from './platforms'; import installCertificateAuthority, { ensureCACertReadable, uninstall } from './certificate-authority'; import generateDomainCertificate from './certificates'; import UI, { UserInterface } from './user-interface'; +import isValidDomain from 'is-valid-domain'; export { uninstall }; const debug = createDebug('devcert'); @@ -69,11 +68,8 @@ type IReturnData = (IDomainData) & (IReturnCa) & (IRe */ export async function certificateFor(requestedDomains: string | string[], options: O = {} as O): Promise> { const domains = Array.isArray(requestedDomains) ? requestedDomains : [requestedDomains]; - if (domains.some((d) => VALID_IP.test(d))) { - throw new Error('IP addresses are not supported currently'); - } domains.forEach((domain) => { - if (!VALID_DOMAIN.test(domain)) { + if (!isValidDomain(domain, { subdomain: false, wildcard: false, allowUnicode: true, topLevel: false })) { throw new Error(`"${domain}" is not a valid domain name.`); } });