diff --git a/bun.lockb b/bun.lockb index a21cd4a5c..502212010 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/package.json b/package.json index 60ab02ae0..ccc8dbd41 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "author": "Akshay Nair ", "license": "GPL-3.0", "dependencies": { - "is-ip": "^5.0.1", + "ip-regex": "^5.0.0", "ramda": "^0.27.1" }, "devDependencies": { diff --git a/tests/validations.test.js b/tests/validations.test.js index e97ddbb08..b2912e3a1 100644 --- a/tests/validations.test.js +++ b/tests/validations.test.js @@ -1,5 +1,6 @@ const { validateDomainData, isValidDomain } = require('../utils/validations'); const INVALID_NAMES = require('../utils/invalid-domains.json'); +const ipRegex = require('ip-regex'); const defaultDomain = { name: 'aaa', @@ -60,6 +61,10 @@ describe('validateDomainData', () => { { ...defaultDomain, name: 'help.baa' }, { ...defaultDomain, name: '_github-pages-challenge-is-a-dev' }, { ...defaultDomain, name: '_github-challenge-is-a-dev' }, + { ...defaultDomain, record: { AAAA: [] } }, + { ...defaultDomain, record: { AAAA: ['182.22.222.22', '::1'] } }, + { ...defaultDomain, record: { AAAA: '182.22.222.22' } }, + { ...defaultDomain, record: { A: '::1' } }, ]; const validCases = [ @@ -86,6 +91,8 @@ describe('validateDomainData', () => { { ...defaultDomain, name: '_github-challenge-phenax.akshay' }, { ...defaultDomain, name: '_github-challenge-hello01-ga' }, { ...defaultDomain, name: '_github-challenge-hello01_ga' }, + { ...defaultDomain, record: { AAAA: ['::1', '2001:db8:3333:4444:5555:6666:7777:8888'] } }, + { ...defaultDomain, record: { A: ['122.222.222.222'] } }, ]; it('should return false for invalid data', () => { diff --git a/utils/constants.js b/utils/constants.js index 273a2761e..19430e5bf 100644 --- a/utils/constants.js +++ b/utils/constants.js @@ -18,7 +18,7 @@ const DOMAINS_PATH = path.resolve('domains'); module.exports = { ENV, IS_TEST, - VALID_RECORD_TYPES: ['CNAME', 'A', 'URL', 'MX', 'TXT'], + VALID_RECORD_TYPES: ['CNAME', 'A', 'URL', 'MX', 'TXT', 'AAAA'], DOMAIN_DOMAIN: DOMAIN_DOMAIN || 'booboo.xyz', DOMAIN_USER: IS_TEST ? 'testuser' : DOMAIN_USER, DOMAIN_API_KEY: IS_TEST ? 'testkey' : DOMAIN_API_KEY, diff --git a/utils/validations.js b/utils/validations.js index 402733437..e4e6206cf 100644 --- a/utils/validations.js +++ b/utils/validations.js @@ -2,7 +2,7 @@ const R = require('ramda'); const { VALID_RECORD_TYPES } = require('./constants'); const { or, and, validate, between, testRegex, withLengthEq, withLengthGte } = require('./helpers'); const INVALID_NAMES = require('./invalid-domains.json'); -const { isIPv4, isIPv6 } = require('is-ip'); +const { default: ipRegex } = require('ip-regex'); const isValidURL = and([R.is(String), testRegex(/^https?:\/\//ig)]); @@ -18,7 +18,7 @@ const validateCnameRecord = type => and([ const validateARecord = type => and([ R.propIs(Array, type), R.propSatisfies(withLengthGte(1), type), - R.all(isIPv4), + R.all(testRegex(ipRegex.v4({ exact: true }))), ]); const validateMXRecord = type => and([ @@ -30,7 +30,7 @@ const validateMXRecord = type => and([ const validateAAAARecord = R.propSatisfies(and([ R.is(Array), withLengthGte(1), - R.all(isIPv6), + R.all(testRegex(ipRegex.v6({ exact: true }))), ])) const checkRestrictedNames = R.complement(R.includes(R.__, INVALID_NAMES))