mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
acbe00792d
Currently, when configuring --without-ssl any tests that use process.binding('crypto') will not report a lint warning. This is because the eslint check only generates a warning when using require. This commit adds a check for using binding in addition to require. PR-URL: https://github.com/nodejs/node/pull/17867 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
89 lines
2.2 KiB
JavaScript
89 lines
2.2 KiB
JavaScript
/**
|
|
* @fileoverview Check that common.hasCrypto is used if crypto, tls,
|
|
* https, or http2 modules are required.
|
|
*
|
|
* This rule can be ignored using // eslint-disable-line crypto-check
|
|
*
|
|
* @author Daniel Bevenius <daniel.bevenius@gmail.com>
|
|
*/
|
|
'use strict';
|
|
|
|
const utils = require('./rules-utils.js');
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Rule Definition
|
|
//------------------------------------------------------------------------------
|
|
const msg = 'Please add a hasCrypto check to allow this test to be skipped ' +
|
|
'when Node is built "--without-ssl".';
|
|
|
|
const cryptoModules = ['crypto', 'http2'];
|
|
const requireModules = cryptoModules.concat(['tls', 'https']);
|
|
const bindingModules = cryptoModules.concat(['tls_wrap']);
|
|
|
|
module.exports = function(context) {
|
|
const missingCheckNodes = [];
|
|
const requireNodes = [];
|
|
var hasSkipCall = false;
|
|
|
|
function testCryptoUsage(node) {
|
|
if (utils.isRequired(node, requireModules) ||
|
|
utils.isBinding(node, bindingModules)) {
|
|
requireNodes.push(node);
|
|
}
|
|
}
|
|
|
|
function testIfStatement(node) {
|
|
if (node.test.argument === undefined) {
|
|
return;
|
|
}
|
|
if (isCryptoCheck(node.test.argument)) {
|
|
checkCryptoCall(node);
|
|
}
|
|
}
|
|
|
|
function isCryptoCheck(node) {
|
|
return utils.usesCommonProperty(node, ['hasCrypto', 'hasFipsCrypto']);
|
|
}
|
|
|
|
function checkCryptoCall(node) {
|
|
if (utils.inSkipBlock(node)) {
|
|
hasSkipCall = true;
|
|
} else {
|
|
missingCheckNodes.push(node);
|
|
}
|
|
}
|
|
|
|
function testMemberExpression(node) {
|
|
if (isCryptoCheck(node)) {
|
|
checkCryptoCall(node);
|
|
}
|
|
}
|
|
|
|
function reportIfMissingCheck() {
|
|
if (hasSkipCall) {
|
|
return;
|
|
}
|
|
|
|
if (requireNodes.length > 0) {
|
|
if (missingCheckNodes.length > 0) {
|
|
report(missingCheckNodes);
|
|
} else {
|
|
report(requireNodes);
|
|
}
|
|
}
|
|
}
|
|
|
|
function report(nodes) {
|
|
nodes.forEach((node) => {
|
|
context.report(node, msg);
|
|
});
|
|
}
|
|
|
|
return {
|
|
'CallExpression': (node) => testCryptoUsage(node),
|
|
'IfStatement:exit': (node) => testIfStatement(node),
|
|
'MemberExpression:exit': (node) => testMemberExpression(node),
|
|
'Program:exit': (node) => reportIfMissingCheck(node)
|
|
};
|
|
};
|