Repository URL to install this package:
|
Version:
0.7.10 ▾
|
// (c) Copyright 2023 Supertenant Ltd. - all rights reserved.
// See LICENSE file in project root for license terms.
"use strict";let logger;logger=require("./logger").getLogger("secrets",newLogger=>{logger=newLogger});const defaultMatcherMode="contains-ignore-case",defaultSecrets=["key","pass","secret"];exports.matchers={"equals-ignore-case":function(secrets){return secrets=toLowerCase(secrets),function(key){if(null!=key&&"string"==typeof key)for(let i=0;i<secrets.length;i++)if(key.toLowerCase()===secrets[i])return!0;return!1}},equals:function(secrets){return secrets=checkSecrets(secrets),function(key){if(null!=key&&"string"==typeof key)for(let i=0;i<secrets.length;i++)if(key===secrets[i])return!0;return!1}},"contains-ignore-case":function(secrets){return secrets=toLowerCase(secrets),function(key){if(null!=key&&"string"==typeof key)for(let i=0;i<secrets.length;i++)if(0<=key.toLowerCase().indexOf(secrets[i]))return!0;return!1}},contains:function(secrets){return secrets=checkSecrets(secrets),function(key){if(null!=key&&"string"==typeof key)for(let i=0;i<secrets.length;i++)if(0<=key.indexOf(secrets[i]))return!0;return!1}},regex:function(secrets){secrets=checkSecrets(secrets);const regexes=[];return secrets.forEach(regexString=>{try{(regexString=0!==regexString.indexOf("^")?"^"+regexString:regexString).indexOf("$")!==regexString.length-1&&(regexString+="$"),regexes.push(new RegExp(regexString))}catch(e){logger.warn("Received invalid regex from agent: %s - this regex will not be used for removing secrets",regexString)}}),function(key){if(null!=key&&"string"==typeof key)for(let i=0;i<regexes.length;i++)if(regexes[i].test(key))return!0;return!1}},none:function(){return function(){return!1}}};let isSecretInternal=exports.matchers[defaultMatcherMode](defaultSecrets);function checkSecrets(configuredSecrets){if(!Array.isArray(configuredSecrets))return defaultSecrets;const secrets=[];return configuredSecrets.forEach(s=>{"string"==typeof s?secrets.push(s):logger.warn("Received invalid secret key from agent: %s - this key will not be used for removing secrets",s)}),secrets}function toLowerCase(configuredSecrets){if(!Array.isArray(configuredSecrets))return defaultSecrets;const secrets=[];return configuredSecrets.forEach(s=>{"string"==typeof s?secrets.push(s.toLowerCase()):logger.warn("Received invalid secret key from agent: %s - this key will not be used for removing secrets",s)}),secrets}exports.isSecret=function(key){return isSecretInternal(key)},exports.init=function(config){isSecretInternal=exports.matchers[config.secrets.matcherMode](config.secrets.keywords)},exports.setMatcher=function(matcherId,secretsList){"string"!=typeof matcherId?logger.warn("Received invalid secrets configuration, attribute matcher is not a string: $s",matcherId):Object.keys(exports.matchers).indexOf(matcherId)<0?logger.warn("Received invalid secrets configuration, matcher is not supported: $s",matcherId):Array.isArray(secretsList)?isSecretInternal=exports.matchers[matcherId](secretsList):logger.warn("Received invalid secrets configuration, attribute list is not an array: $s",secretsList)};