/* eslint-disable no-proto */ 'use strict'; const common = require('../common'); if (!common.hasCrypto) common.skip('missing crypto'); const { hijackStderr, restoreStderr } = require('../common/hijackstdio'); const assert = require('assert'); // Flags: --expose_internals const internalTLS = require('internal/tls'); const tls = require('tls'); const noOutput = common.mustNotCall(); hijackStderr(noOutput); { const singles = 'C=US\nST=CA\nL=SF\nO=Node.js Foundation\nOU=Node.js\n' + 'CN=ca1\nemailAddress=ry@clouds.org'; const singlesOut = internalTLS.parseCertString(singles); assert.deepStrictEqual(singlesOut, { __proto__: null, C: 'US', ST: 'CA', L: 'SF', O: 'Node.js Foundation', OU: 'Node.js', CN: 'ca1', emailAddress: 'ry@clouds.org' }); } { const doubles = 'OU=Domain Control Validated\nOU=PositiveSSL Wildcard\n' + 'CN=*.nodejs.org'; const doublesOut = internalTLS.parseCertString(doubles); assert.deepStrictEqual(doublesOut, { __proto__: null, OU: [ 'Domain Control Validated', 'PositiveSSL Wildcard' ], CN: '*.nodejs.org' }); } { const invalid = 'fhqwhgads'; const invalidOut = internalTLS.parseCertString(invalid); assert.deepStrictEqual(invalidOut, { __proto__: null }); } { const input = '__proto__=mostly harmless\nhasOwnProperty=not a function'; const expected = Object.create(null); expected.__proto__ = 'mostly harmless'; expected.hasOwnProperty = 'not a function'; assert.deepStrictEqual(internalTLS.parseCertString(input), expected); } restoreStderr(); { common.expectWarning('DeprecationWarning', 'tls.parseCertString() is deprecated. ' + 'Please use querystring.parse() instead.', 'DEP0076'); const ret = tls.parseCertString('foo=bar'); assert.deepStrictEqual(ret, { __proto__: null, foo: 'bar' }); }