snyk 1.876.0 → 1.879.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -347,9 +347,9 @@ const validateDescribeArgs = (options) => {
347
347
  throw new describe_required_argument_error_1.DescribeRequiredArgumentError();
348
348
  }
349
349
  };
350
- exports.generateArgs = (options) => {
350
+ exports.generateArgs = (options, driftIgnore) => {
351
351
  if (options.kind === 'describe') {
352
- return generateScanFlags(options);
352
+ return generateScanFlags(options, driftIgnore);
353
353
  }
354
354
  if (options.kind === 'gen-driftignore') {
355
355
  return exports.generateGenDriftIgnoreFlags(options);
@@ -400,7 +400,7 @@ const generateFmtFlags = (options) => {
400
400
  }
401
401
  return args;
402
402
  };
403
- const generateScanFlags = (options) => {
403
+ const generateScanFlags = (options, driftIgnore) => {
404
404
  const args = ['scan', ...driftctlDefaultOptions];
405
405
  if (options.quiet) {
406
406
  args.push('--quiet');
@@ -447,9 +447,9 @@ const generateScanFlags = (options) => {
447
447
  args.push('--tf-lockfile');
448
448
  args.push(options['tf-lockfile']);
449
449
  }
450
- if (options.ignore && options.ignore.length > 0) {
450
+ if (driftIgnore && driftIgnore.length > 0) {
451
451
  args.push('--ignore');
452
- args.push(options.ignore.join(','));
452
+ args.push(driftIgnore.join(','));
453
453
  }
454
454
  let configDir = cachePath;
455
455
  createIfNotExists(cachePath);
@@ -497,10 +497,10 @@ exports.translateExitCode = translateExitCode;
497
497
  exports.parseDriftAnalysisResults = (input) => {
498
498
  return JSON.parse(input);
499
499
  };
500
- exports.runDriftCTL = async ({ options, input, stdio, }) => {
500
+ exports.runDriftCTL = async ({ options, driftIgnore, input, stdio, }) => {
501
501
  const path = await findOrDownload();
502
502
  await exports.validateArgs(options);
503
- const args = await exports.generateArgs(options);
503
+ const args = await exports.generateArgs(options, driftIgnore);
504
504
  if (!stdio) {
505
505
  stdio = ['pipe', 'pipe', 'inherit'];
506
506
  }
@@ -1 +1 @@
1
- {"version":3,"file":"459.index.js","mappings":"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","sources":["webpack://snyk/./src/cli/commands/test/iac-local-execution/assert-iac-options-flag.ts","webpack://snyk/./src/cli/commands/test/iac-local-execution/error-utils.ts","webpack://snyk/./src/cli/commands/test/iac-local-execution/org-settings/get-iac-org-settings.ts","webpack://snyk/./src/lib/errors/describe-exclusive-argument-error.ts","webpack://snyk/./src/lib/errors/describe-required-argument-error.ts","webpack://snyk/./src/lib/iac/drift.ts","webpack://snyk/./src/lib/iac/service-mappings.ts"],"sourcesContent":["import { CustomError } from '../../../../lib/errors';\nimport { args } from '../../../args';\nimport { getErrorStringCode } from './error-utils';\nimport { IaCErrorCodes, IaCTestFlags, TerraformPlanScanMode } from './types';\n\nconst keys: (keyof IaCTestFlags)[] = [\n 'org',\n 'debug',\n 'insecure',\n 'detectionDepth',\n 'severityThreshold',\n 'rules',\n 'json',\n 'sarif',\n 'json-file-output',\n 'sarif-file-output',\n 'v',\n 'version',\n 'h',\n 'help',\n 'q',\n 'quiet',\n 'scan',\n 'report',\n\n // PolicyOptions\n 'ignore-policy',\n 'policy-path',\n];\nconst allowed = new Set<string>(keys);\n\nfunction camelcaseToDash(key: string) {\n return key.replace(/[A-Z]/g, (m) => '-' + m.toLowerCase());\n}\n\nfunction getFlagName(key: string) {\n const dashes = key.length === 1 ? '-' : '--';\n const flag = camelcaseToDash(key);\n return `${dashes}${flag}`;\n}\n\nexport class FlagError extends CustomError {\n constructor(key: string) {\n const flag = getFlagName(key);\n const msg = `Unsupported flag \"${flag}\" provided. Run snyk iac test --help for supported flags`;\n super(msg);\n this.code = IaCErrorCodes.FlagError;\n this.strCode = getErrorStringCode(this.code);\n this.userMessage = msg;\n }\n}\n\nexport class FeatureFlagError extends CustomError {\n constructor(key: string, featureFlag: string, hasSnykPreview?: boolean) {\n const flag = getFlagName(key);\n let msg;\n if (hasSnykPreview) {\n msg = `Flag \"${flag}\" is only supported if feature flag '${featureFlag}' is enabled. The feature flag can be enabled via Snyk Preview if you are on the Enterprise Plan`;\n } else {\n msg = `Flag \"${flag}\" is only supported if feature flag \"${featureFlag}\" is enabled. To enable it, please contact Snyk support.`;\n }\n super(msg);\n this.code = IaCErrorCodes.FeatureFlagError;\n this.strCode = getErrorStringCode(this.code);\n this.userMessage = msg;\n }\n}\n\nexport class FlagValueError extends CustomError {\n constructor(key: string, value: string) {\n const flag = getFlagName(key);\n const msg = `Unsupported value \"${value}\" provided to flag \"${flag}\".\\nSupported values are: ${SUPPORTED_TF_PLAN_SCAN_MODES.join(\n ', ',\n )}`;\n super(msg);\n this.code = IaCErrorCodes.FlagValueError;\n this.strCode = getErrorStringCode(this.code);\n this.userMessage = msg;\n }\n}\n\nexport class UnsupportedEntitlementFlagError extends CustomError {\n constructor(key: string, entitlementName: string) {\n const flag = getFlagName(key);\n super(\n `Unsupported flag: ${flag} - Missing the ${entitlementName} entitlement`,\n );\n this.code = IaCErrorCodes.UnsupportedEntitlementFlagError;\n this.strCode = getErrorStringCode(this.code);\n this.userMessage = `Flag \"${flag}\" is currently not supported for this org. To enable it, please contact snyk support.`;\n }\n}\n\nexport class UnsupportedEntitlementCommandError extends CustomError {\n constructor(key: string, entitlementName: string) {\n super(\n `Unsupported command: ${key} - Missing the ${entitlementName} entitlement`,\n );\n this.code = IaCErrorCodes.UnsupportedEntitlementFlagError;\n this.strCode = getErrorStringCode(this.code);\n this.userMessage = `Command \"${key}\" is currently not supported for this org. To enable it, please contact snyk support.`;\n }\n}\n\n/**\n * Validates the command line flags passed to the snyk iac test\n * command. The current argument parsing is very permissive and\n * allows unknown flags to be provided without valdiation.\n *\n * For snyk iac we need to explictly validate the flags to avoid\n * misconfigurations and typos. For example, if the --experimental\n * flag were to be mis-spelled we would end up sending the client\n * data to our backend rather than running it locally as intended.\n * @param argv command line args passed to the process\n */\nexport function assertIaCOptionsFlags(argv: string[]) {\n // We process the process.argv so we don't get default values.\n const parsed = args(argv);\n for (const key of Object.keys(parsed.options)) {\n // The _ property is a special case that contains non\n // flag strings passed to the command line (usually files)\n // and `iac` is the command provided.\n if (key !== '_' && key !== 'iac' && !allowed.has(key)) {\n throw new FlagError(key);\n }\n }\n\n if (parsed.options.scan) {\n assertTerraformPlanModes(parsed.options.scan as string);\n }\n}\n\nconst SUPPORTED_TF_PLAN_SCAN_MODES = [\n TerraformPlanScanMode.DeltaScan,\n TerraformPlanScanMode.FullScan,\n];\n\nfunction assertTerraformPlanModes(scanModeArgValue: string) {\n if (\n !SUPPORTED_TF_PLAN_SCAN_MODES.includes(\n scanModeArgValue as TerraformPlanScanMode,\n )\n ) {\n throw new FlagValueError('scan', scanModeArgValue);\n }\n}\n\nexport function isIacShareResultsOptions(options) {\n return options.iac && options.report;\n}\n","import { IaCErrorCodes } from './types';\n\nexport function getErrorStringCode(code: number): string {\n const errorName = IaCErrorCodes[code];\n if (!errorName) {\n return 'INVALID_IAC_ERROR';\n }\n let result = errorName.replace(/([A-Z])/g, '_$1');\n if (result.charAt(0) === '_') {\n result = result.substring(1);\n }\n return result.toUpperCase();\n}\n","import { IaCErrorCodes, IacOrgSettings } from '../types';\nimport { Payload } from '../../../../../lib/snyk-test/types';\nimport config from '../../../../../lib/config';\nimport { isCI } from '../../../../../lib/is-ci';\nimport { api } from '../../../../../lib/api-token';\nimport { makeRequest } from '../../../../../lib/request';\nimport { CustomError } from '../../../../../lib/errors';\nimport { getErrorStringCode } from '../error-utils';\n\nexport function getIacOrgSettings(\n publicOrgId?: string,\n): Promise<IacOrgSettings> {\n const payload: Payload = {\n method: 'get',\n url: config.API + '/iac-org-settings',\n json: true,\n qs: { org: publicOrgId },\n headers: {\n 'x-is-ci': isCI(),\n authorization: `token ${api()}`,\n },\n };\n\n return new Promise((resolve, reject) => {\n makeRequest(payload, (error, res) => {\n if (error) {\n return reject(error);\n }\n if (res.statusCode < 200 || res.statusCode > 299) {\n return reject(new FailedToGetIacOrgSettingsError());\n }\n resolve(res.body);\n });\n });\n}\n\nexport class FailedToGetIacOrgSettingsError extends CustomError {\n constructor(message?: string) {\n super(message || 'Failed to fetch IaC organization settings');\n this.code = IaCErrorCodes.FailedToGetIacOrgSettingsError;\n this.strCode = getErrorStringCode(this.code);\n this.userMessage =\n 'We failed to fetch your organization settings, including custom severity overrides for infrastructure-as-code policies. Please run the command again with the `-d` flag and contact support@snyk.io with the contents of the output.';\n }\n}\n","import { CustomError } from './custom-error';\nimport { DescribeExclusiveArgs } from '../iac/drift';\n\nexport class DescribeExclusiveArgumentError extends CustomError {\n constructor() {\n super(\n 'Please use only one of these arguments: ' +\n DescribeExclusiveArgs.join(', '),\n );\n }\n}\n","import { CustomError } from './custom-error';\nimport { DescribeRequiredArgs } from '../iac/drift';\n\nexport class DescribeRequiredArgumentError extends CustomError {\n constructor() {\n super(\n 'Describe command require one of these arguments: ' +\n DescribeRequiredArgs.join(', '),\n );\n }\n}\n","import * as debugLib from 'debug';\nimport * as child_process from 'child_process';\nimport { StdioOptions } from 'child_process';\nimport * as os from 'os';\nimport envPaths from 'env-paths';\nimport * as fs from 'fs';\nimport { spinner } from '../spinner';\nimport { makeRequest } from '../request';\nimport config from '../../lib/config';\nimport * as path from 'path';\nimport * as crypto from 'crypto';\nimport {\n createIgnorePattern,\n verifyServiceMappingExists,\n} from './service-mappings';\nimport { EXIT_CODES } from '../../cli/exit-codes';\nimport {\n DescribeOptions,\n DriftAnalysis,\n DriftctlExecutionResult,\n DriftCTLOptions,\n FmtOptions,\n GenDriftIgnoreOptions,\n} from './types';\nimport { TimerMetricInstance } from '../metrics';\nimport * as analytics from '../../lib/analytics';\nimport { Policy } from '../policy/find-and-load-policy';\nimport { DescribeExclusiveArgumentError } from '../errors/describe-exclusive-argument-error';\nimport { DescribeRequiredArgumentError } from '../errors/describe-required-argument-error';\n\nconst cachePath = config.CACHE_PATH ?? envPaths('snyk').cache;\nconst debug = debugLib('drift');\n\nexport const DCTL_EXIT_CODES = {\n EXIT_IN_SYNC: 0,\n EXIT_NOT_IN_SYNC: 1,\n EXIT_ERROR: 2,\n};\n\nexport const DescribeExclusiveArgs = [\n 'all',\n 'only-managed',\n 'drift',\n 'only-unmanaged',\n];\n\nexport const DescribeRequiredArgs = [\n 'all',\n 'only-managed',\n 'drift',\n 'only-unmanaged',\n];\n\n// ⚠ Keep in mind to also update driftctl version used to generate docker images\n// You can edit base image used for snyk final image here https://github.com/snyk/snyk-images/blob/master/alpine\nexport const driftctlVersion = 'v0.23.0';\n\nconst driftctlChecksums = {\n 'driftctl_windows_386.exe':\n 'e5befbafe2291674a4d6c8522411a44fea3549057fb46d331402d49b180202fe',\n driftctl_darwin_amd64:\n '9af4e88a8e08e53ac3c373407bdd0b18a91941dc620266349f10600fc7b283d2',\n driftctl_linux_386:\n '6cd2719f81210017e3f67677cb92f4b0060976a3588c220b4af6b2dda174df8f',\n driftctl_linux_amd64:\n 'd714a3d11056169f4c4cc047b48b4d732f5df8cdfbc00e40c3e5f6e6cc5ead3e',\n driftctl_linux_arm64:\n '24812c8b2ec2d8e3d619317e76fbba0d8e7e263fc2c26cba26265a9656e8fe91',\n 'driftctl_windows_arm64.exe':\n 'd84461f0ba63b59aec66393fa67147f4157b5bddc02a19315d737c5f5a46c07b',\n driftctl_darwin_arm64:\n 'b711143d9331a10fc34c202284f67ce5eeb0348baca546b47af139f418f812c1',\n 'driftctl_windows_arm.exe':\n 'b5d24e1407c24ddfff63ffbba85eb1dc13473e2fd36e3e99e5e1762cf615f011',\n driftctl_linux_arm:\n '089665efa8a7c5e95b3cee9ace85fc5b0f2d7f2a29c351f2d3dbef3dae553e2d',\n 'driftctl_windows_amd64.exe':\n 'bf7310277eeccc2679b529c1f1d2ced30e877949a6d7c5606eb2d4c2ec033b66',\n};\n\nconst dctlBaseUrl = 'https://github.com/snyk/driftctl/releases/download/';\nconst driftctlPath = path.join(cachePath, 'driftctl_' + driftctlVersion);\nconst driftctlDefaultOptions = ['--no-version-check'];\nlet isBinaryDownloaded = false;\n\nexport const validateArgs = (options: DriftCTLOptions): void => {\n if (options.kind === 'describe') {\n return validateDescribeArgs(options as DescribeOptions);\n }\n};\n\nconst validateDescribeArgs = (options: DescribeOptions): void => {\n // Check that there is no more than one of the exclusive arguments\n let count = 0;\n for (const describeExclusiveArg of DescribeExclusiveArgs) {\n if (options[describeExclusiveArg]) {\n count++;\n }\n }\n if (count > 1) {\n throw new DescribeExclusiveArgumentError();\n }\n\n // Check we have one of the required arguments\n count = 0;\n for (const describeRequiredArgs of DescribeRequiredArgs) {\n if (options[describeRequiredArgs]) {\n count++;\n }\n }\n if (count === 0) {\n throw new DescribeRequiredArgumentError();\n }\n};\n\nexport const generateArgs = (options: DriftCTLOptions): string[] => {\n if (options.kind === 'describe') {\n return generateScanFlags(options as DescribeOptions);\n }\n\n if (options.kind === 'gen-driftignore') {\n return generateGenDriftIgnoreFlags(options as GenDriftIgnoreOptions);\n }\n\n if (options.kind === 'fmt') {\n return generateFmtFlags(options as FmtOptions);\n }\n\n throw 'Unsupported command';\n};\n\nexport const generateGenDriftIgnoreFlags = (\n options: GenDriftIgnoreOptions,\n): string[] => {\n const args: string[] = ['gen-driftignore', ...driftctlDefaultOptions];\n\n if (options.input) {\n args.push('--input');\n args.push(options.input);\n }\n\n if (options.output) {\n args.push('--output');\n args.push(options.output);\n }\n\n if (options['exclude-changed']) {\n args.push('--exclude-changed');\n }\n\n if (options['exclude-missing']) {\n args.push('--exclude-missing');\n }\n\n if (options['exclude-unmanaged']) {\n args.push('--exclude-unmanaged');\n }\n\n return args;\n};\n\nconst generateFmtFlags = (options: FmtOptions): string[] => {\n const args: string[] = ['fmt', ...driftctlDefaultOptions];\n\n if (options.json) {\n args.push('--output');\n args.push('json://stdout');\n }\n\n if (options['json-file-output']) {\n args.push('--output');\n args.push('json://' + options['json-file-output']);\n }\n\n if (options.html) {\n args.push('--output');\n args.push('html://stdout');\n }\n\n if (options['html-file-output']) {\n args.push('--output');\n args.push('html://' + options['html-file-output']);\n }\n\n return args;\n};\n\nconst generateScanFlags = (options: DescribeOptions): string[] => {\n const args: string[] = ['scan', ...driftctlDefaultOptions];\n\n if (options.quiet) {\n args.push('--quiet');\n }\n\n if (options.filter) {\n args.push('--filter');\n args.push(options.filter);\n }\n\n args.push('--output');\n args.push('json://stdout');\n\n if (options['fetch-tfstate-headers']) {\n args.push('--headers');\n args.push(options['fetch-tfstate-headers']);\n }\n\n if (options['tfc-token']) {\n args.push('--tfc-token');\n args.push(options['tfc-token']);\n }\n\n if (options['tfc-endpoint']) {\n args.push('--tfc-endpoint');\n args.push(options['tfc-endpoint']);\n }\n\n if (options['tf-provider-version']) {\n args.push('--tf-provider-version');\n args.push(options['tf-provider-version']);\n }\n\n if (options.strict) {\n args.push('--strict');\n }\n\n if (options.deep) {\n args.push('--deep');\n }\n\n if (options['only-managed'] || options.drift) {\n args.push('--only-managed');\n }\n\n if (options['only-unmanaged']) {\n args.push('--only-unmanaged');\n }\n\n if (options.driftignore) {\n args.push('--driftignore');\n args.push(options.driftignore);\n }\n\n if (options['tf-lockfile']) {\n args.push('--tf-lockfile');\n args.push(options['tf-lockfile']);\n }\n\n if (options.ignore && options.ignore.length > 0) {\n args.push('--ignore');\n args.push(options.ignore.join(','));\n }\n\n let configDir = cachePath;\n createIfNotExists(cachePath);\n if (options['config-dir']) {\n configDir = options['config-dir'];\n }\n args.push('--config-dir');\n args.push(configDir);\n\n if (options.from) {\n const froms = options.from.split(',');\n for (const f of froms) {\n args.push('--from');\n args.push(f);\n }\n }\n\n let to = 'aws+tf';\n if (options.to) {\n to = options.to;\n }\n args.push('--to');\n args.push(to);\n\n if (options.service) {\n const services = options.service.split(',');\n verifyServiceMappingExists(services);\n args.push('--ignore');\n args.push(createIgnorePattern(services));\n }\n\n debug(args);\n\n return args;\n};\n\nexport function translateExitCode(exitCode: number | null): number {\n switch (exitCode) {\n case DCTL_EXIT_CODES.EXIT_IN_SYNC:\n return 0;\n case DCTL_EXIT_CODES.EXIT_NOT_IN_SYNC:\n return EXIT_CODES.VULNS_FOUND;\n case DCTL_EXIT_CODES.EXIT_ERROR:\n return EXIT_CODES.ERROR;\n default:\n debug('driftctl returned %d', exitCode);\n return EXIT_CODES.ERROR;\n }\n}\n\nexport const parseDriftAnalysisResults = (input: string): DriftAnalysis => {\n return JSON.parse(input) as DriftAnalysis;\n};\n\nexport const runDriftCTL = async ({\n options,\n input,\n stdio,\n}: {\n options: DriftCTLOptions;\n input?: string;\n stdio?: StdioOptions;\n}): Promise<DriftctlExecutionResult> => {\n const path = await findOrDownload();\n await validateArgs(options);\n const args = await generateArgs(options);\n\n if (!stdio) {\n stdio = ['pipe', 'pipe', 'inherit'];\n }\n\n debug('running driftctl %s ', args.join(' '));\n\n const p = child_process.spawn(path, args, {\n stdio,\n env: { ...process.env, DCTL_IS_SNYK: 'true' },\n });\n\n let stdout = '';\n return new Promise<DriftctlExecutionResult>((resolve, reject) => {\n if (input) {\n p.stdin?.write(input);\n p.stdin?.end();\n }\n p.on('error', (error) => {\n reject(error);\n });\n\n p.stdout?.on('data', (data) => {\n stdout += data;\n });\n\n p.on('exit', (code) => {\n resolve({ code: translateExitCode(code), stdout });\n });\n });\n};\n\nasync function findOrDownload(): Promise<string> {\n let dctl = await findDriftCtl();\n if (isBinaryDownloaded) {\n return dctl;\n }\n let downloadDuration = 0;\n let binaryExist = true;\n if (dctl === '') {\n binaryExist = false;\n try {\n createIfNotExists(cachePath);\n dctl = driftctlPath;\n\n const duration = new TimerMetricInstance('driftctl_download');\n duration.start();\n await download(driftctlUrl(), dctl);\n duration.stop();\n\n downloadDuration = Math.round((duration.getValue() as number) / 1000);\n } catch (err) {\n return Promise.reject(err);\n }\n }\n analytics.add('iac-drift-binary-already-exist', binaryExist);\n analytics.add('iac-drift-binary-download-duration-seconds', downloadDuration);\n isBinaryDownloaded = true;\n return dctl;\n}\n\nasync function findDriftCtl(): Promise<string> {\n // lookup in custom path contained in env var DRIFTCTL_PATH\n let dctlPath = config.DRIFTCTL_PATH;\n if (dctlPath != null) {\n const exists = await isExe(dctlPath);\n if (exists) {\n debug('Found driftctl in $DRIFTCTL_PATH: %s', dctlPath);\n return dctlPath;\n }\n }\n\n // lookup in app cache\n dctlPath = driftctlPath;\n const exists = await isExe(dctlPath);\n if (exists) {\n debug('Found driftctl in cache: %s', dctlPath);\n return dctlPath;\n }\n\n // lookup in /bin\n // when used in a docker context the default binary path should be used\n {\n dctlPath = '/bin/driftctl';\n const exists = await isExe(dctlPath);\n if (exists) {\n debug('Found driftctl in %s', dctlPath);\n return dctlPath;\n }\n }\n\n debug('driftctl not found');\n return '';\n}\n\nasync function download(url, destination: string): Promise<boolean> {\n debug('downloading driftctl into %s', destination);\n\n const payload = {\n method: 'GET',\n url: url,\n output: destination,\n follow: 3,\n };\n\n await spinner('Downloading...');\n return new Promise<boolean>((resolve, reject) => {\n makeRequest(payload, function(err, res, body) {\n try {\n if (err) {\n reject(\n new Error('Could not download driftctl from ' + url + ': ' + err),\n );\n return;\n }\n if (res.statusCode !== 200) {\n reject(\n new Error(\n 'Could not download driftctl from ' + url + ': ' + res.statusCode,\n ),\n );\n return;\n }\n\n validateChecksum(body);\n\n fs.writeFileSync(destination, body);\n debug('File saved: ' + destination);\n\n fs.chmodSync(destination, 0o744);\n resolve(true);\n } finally {\n spinner.clearAll();\n }\n });\n });\n}\n\nfunction validateChecksum(body: string) {\n // only validate if we downloaded the official driftctl binary\n if (config.DRIFTCTL_URL || config.DRIFTCTL_PATH) {\n return;\n }\n\n const computedHash = crypto\n .createHash('sha256')\n .update(body)\n .digest('hex');\n const givenHash = driftctlChecksums[driftctlFileName()];\n\n if (computedHash != givenHash) {\n throw new Error('Downloaded file has inconsistent checksum...');\n }\n}\n\nfunction driftctlFileName(): string {\n let platform = 'linux';\n switch (os.platform()) {\n case 'darwin':\n platform = 'darwin';\n break;\n case 'win32':\n platform = 'windows';\n break;\n }\n\n let arch = 'amd64';\n switch (os.arch()) {\n case 'ia32':\n case 'x32':\n arch = '386';\n break;\n case 'arm':\n arch = 'arm';\n break;\n case 'arm64':\n arch = 'arm64';\n break;\n }\n\n let ext = '';\n switch (os.platform()) {\n case 'win32':\n ext = '.exe';\n break;\n }\n\n return `driftctl_${platform}_${arch}${ext}`;\n}\n\nfunction driftctlUrl(): string {\n if (config.DRIFTCTL_URL) {\n return config.DRIFTCTL_URL;\n }\n\n return `${dctlBaseUrl}/${driftctlVersion}/${driftctlFileName()}`;\n}\n\nfunction isExe(dctlPath: string): Promise<boolean> {\n return new Promise<boolean>((resolve) => {\n fs.access(dctlPath, fs.constants.X_OK, (err) => {\n if (err) {\n resolve(false);\n return;\n }\n resolve(true);\n });\n });\n}\n\nfunction createIfNotExists(path: string) {\n if (!fs.existsSync(path)) {\n fs.mkdirSync(path, { recursive: true });\n }\n}\n\nexport function driftignoreFromPolicy(policy: Policy | undefined): string[] {\n const excludeSection = 'iac-drift';\n if (!policy || !policy.exclude || !(excludeSection in policy.exclude)) {\n return [];\n }\n return policy.exclude[excludeSection];\n}\n","import { CustomError } from '../errors';\nimport { IaCErrorCodes } from '../../cli/commands/test/iac-local-execution/types';\nimport { getErrorStringCode } from '../../cli/commands/test/iac-local-execution/error-utils';\n\nexport const services2resources = new Map<string, Array<string>>([\n // Amazon\n [\n 'aws_s3',\n [\n 'aws_s3_bucket',\n 'aws_s3_bucket_analytics_configuration',\n 'aws_s3_bucket_inventory',\n 'aws_s3_bucket_metric',\n 'aws_s3_bucket_notification',\n 'aws_s3_bucket_policy',\n ],\n ],\n [\n 'aws_ec2',\n [\n 'aws_instance',\n 'aws_key_pair',\n 'aws_ami',\n 'aws_ebs_snapshot',\n 'aws_ebs_volume',\n 'aws_eip',\n 'aws_eip_association',\n 'aws_volume_attachment',\n 'aws_launch_configuration',\n 'aws_launch_template',\n ],\n ],\n ['aws_lambda', ['aws_lambda_function', 'aws_lambda_event_source_mapping']],\n [\n 'aws_rds',\n [\n 'aws_db_instance',\n 'aws_db_subnet_group',\n 'aws_rds_cluster',\n 'aws_rds_cluster_endpoint',\n 'aws_rds_cluster_instance',\n ],\n ],\n ['aws_route53', ['aws_route53_record', 'aws_route53_zone']],\n [\n 'aws_iam',\n [\n 'aws_iam_access_key',\n 'aws_iam_policy',\n 'aws_iam_policy_attachment',\n 'aws_iam_role',\n 'aws_iam_role_policy',\n 'aws_iam_role_policy_attachment',\n 'aws_iam_user',\n 'aws_iam_user_policy',\n 'aws_iam_user_policy_attachment',\n ],\n ],\n [\n 'aws_vpc',\n [\n 'aws_security_group',\n 'aws_security_group_rule',\n 'aws_subnet',\n 'aws_default_vpc',\n 'aws_vpc',\n 'aws_default_security_group',\n 'aws_route_table',\n 'aws_default_route_table',\n 'aws_route',\n 'aws_route_table_association',\n 'aws_nat_gateway',\n 'aws_internet_gateway',\n ],\n ],\n [\n 'aws_api_gateway',\n [\n 'aws_api_gateway_resource',\n 'aws_api_gateway_rest_api',\n 'aws_api_gateway_account',\n 'aws_api_gateway_api_key',\n 'aws_api_gateway_authorizer',\n 'aws_api_gateway_base_path_mapping',\n 'aws_api_gateway_domain_name',\n 'aws_api_gateway_gateway_response',\n 'aws_api_gateway_integration',\n 'aws_api_gateway_integration_response',\n 'aws_api_gateway_method',\n 'aws_api_gateway_method_response',\n 'aws_api_gateway_method_settings',\n 'aws_api_gateway_model',\n 'aws_api_gateway_request_validator',\n 'aws_api_gateway_rest_api_policy',\n 'aws_api_gateway_stage',\n 'aws_api_gateway_vpc_link',\n ],\n ],\n [\n 'aws_apigatewayv2',\n [\n 'aws_apigatewayv2_api',\n 'aws_apigatewayv2_api_mapping',\n 'aws_apigatewayv2_authorizer',\n 'aws_apigatewayv2_deployment',\n 'aws_apigatewayv2_domain_name',\n 'aws_apigatewayv2_integration',\n 'aws_apigatewayv2_integration_response',\n 'aws_apigatewayv2_model',\n 'aws_apigatewayv2_route',\n 'aws_apigatewayv2_route_response',\n 'aws_apigatewayv2_stage',\n 'aws_apigatewayv2_vpc_link',\n ],\n ],\n ['aws_sqs', ['aws_sqs_queue', 'aws_sqs_queue_policy']],\n [\n 'aws_sns',\n ['aws_sns_topic', 'aws_sns_topic_policy', 'aws_sns_topic_subscription'],\n ],\n ['aws_ecr', ['aws_ecr_repository']],\n ['aws_cloudfront', ['aws_cloudfront_distribution']],\n ['aws_kms', ['aws_kms_key', 'aws_kms_alias']],\n ['aws_dynamodb', ['aws_dynamodb_table']],\n // Azure\n ['azure_base', ['azurerm_resource_group']],\n ['azure_compute', ['azurerm_image', 'azurerm_ssh_public_key']],\n ['azure_storage', ['azurerm_storage_account', 'azurerm_storage_container']],\n [\n 'azure_network',\n [\n 'azurerm_resource_group',\n 'azurerm_subnet',\n 'azurerm_public_ip',\n 'azurerm_firewall',\n 'azurerm_route',\n 'azurerm_route_table',\n 'azurerm_network_security_group',\n ],\n ],\n ['azure_container', ['azurerm_container_registry']],\n [\n 'azure_database',\n ['azurerm_postgresql_server', 'azurerm_postgresql_database'],\n ],\n ['azure_loadbalancer', ['azurerm_lb', 'azurerm_lb_rule']],\n [\n 'azure_private_dns',\n [\n 'azurerm_private_dns_a_record',\n 'azurerm_private_dns_aaaa_record',\n 'azurerm_private_dns_cname_record',\n 'azurerm_private_dns_mx_record',\n 'azurerm_private_dns_ptr_record',\n 'azurerm_private_dns_srv_record',\n 'azurerm_private_dns_txt_record',\n 'azurerm_private_dns_zone',\n ],\n ],\n\n // Google\n [\n 'google_cloud_platform',\n [\n 'google_project_iam_binding',\n 'google_project_iam_member',\n 'google_project_iam_policy',\n ],\n ],\n [\n 'google_cloud_storage',\n [\n 'google_storage_bucket',\n 'google_storage_bucket_iam_binding',\n 'google_storage_bucket_iam_member',\n 'google_storage_bucket_iam_policy',\n ],\n ],\n [\n 'google_compute_engine',\n [\n 'google_compute_address',\n 'google_compute_disk',\n 'google_compute_global_address',\n 'google_compute_firewall',\n 'google_compute_health_check',\n 'google_compute_image',\n 'google_compute_instance',\n 'google_compute_instance_group',\n 'google_compute_network',\n 'google_compute_node_group',\n 'google_compute_router',\n 'google_compute_subnetwork',\n ],\n ],\n ['google_cloud_dns', ['google_dns_managed_zone']],\n [\n 'google_cloud_bigtable',\n ['google_bigtable_instance', 'google_bigtable_table'],\n ],\n [\n 'google_cloud_bigquery',\n ['google_bigquery_table', 'google_bigquery_dataset'],\n ],\n ['google_cloud_functions', ['google_cloudfunctions_function']],\n ['google_cloud_sql', ['google_sql_database_instance']],\n ['google_cloud_run', ['google_cloud_run_service']],\n]);\n\nexport function verifyServiceMappingExists(services: string[]): void {\n if (services.length == 0) {\n throw new InvalidServiceError('');\n }\n for (const s of services) {\n if (!services2resources.has(s)) {\n throw new InvalidServiceError(\n `We were unable to match service \"${s}\". Please provide a valid service name: ${existingServiceNames()}`,\n );\n }\n }\n}\n\nfunction existingServiceNames(): string {\n let res = '';\n for (const s of services2resources.keys()) {\n res += `${s},`;\n }\n return res.substring(0, res.length - 1);\n}\n\nexport function createIgnorePattern(services: string[]): string {\n return createIgnorePatternWithMap(services, services2resources);\n}\n\nexport function createIgnorePatternWithMap(\n services: string[],\n serviceMap: Map<string, Array<string>>,\n): string {\n let res = '*';\n const seenResources = new Set<string>();\n for (const s of services) {\n const resourcePatterns = serviceMap.get(s);\n for (const rp of resourcePatterns || []) {\n // A resource might belong to multiple services, skip it if already processed\n if (seenResources.has(rp)) {\n continue;\n }\n res += `,!${rp}`;\n seenResources.add(rp);\n }\n }\n return res;\n}\n\nexport class InvalidServiceError extends CustomError {\n constructor(msg: string) {\n super(msg);\n this.code = IaCErrorCodes.InvalidServiceError;\n this.strCode = getErrorStringCode(this.code);\n this.userMessage = msg;\n }\n}\n"],"names":[],"sourceRoot":""}
1
+ {"version":3,"file":"459.index.js","mappings":"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","sources":["webpack://snyk/./src/cli/commands/test/iac-local-execution/assert-iac-options-flag.ts","webpack://snyk/./src/cli/commands/test/iac-local-execution/error-utils.ts","webpack://snyk/./src/cli/commands/test/iac-local-execution/org-settings/get-iac-org-settings.ts","webpack://snyk/./src/lib/errors/describe-exclusive-argument-error.ts","webpack://snyk/./src/lib/errors/describe-required-argument-error.ts","webpack://snyk/./src/lib/iac/drift.ts","webpack://snyk/./src/lib/iac/service-mappings.ts"],"sourcesContent":["import { CustomError } from '../../../../lib/errors';\nimport { args } from '../../../args';\nimport { getErrorStringCode } from './error-utils';\nimport { IaCErrorCodes, IaCTestFlags, TerraformPlanScanMode } from './types';\n\nconst keys: (keyof IaCTestFlags)[] = [\n 'org',\n 'debug',\n 'insecure',\n 'detectionDepth',\n 'severityThreshold',\n 'rules',\n 'json',\n 'sarif',\n 'json-file-output',\n 'sarif-file-output',\n 'v',\n 'version',\n 'h',\n 'help',\n 'q',\n 'quiet',\n 'scan',\n 'report',\n\n // PolicyOptions\n 'ignore-policy',\n 'policy-path',\n];\nconst allowed = new Set<string>(keys);\n\nfunction camelcaseToDash(key: string) {\n return key.replace(/[A-Z]/g, (m) => '-' + m.toLowerCase());\n}\n\nfunction getFlagName(key: string) {\n const dashes = key.length === 1 ? '-' : '--';\n const flag = camelcaseToDash(key);\n return `${dashes}${flag}`;\n}\n\nexport class FlagError extends CustomError {\n constructor(key: string) {\n const flag = getFlagName(key);\n const msg = `Unsupported flag \"${flag}\" provided. Run snyk iac test --help for supported flags`;\n super(msg);\n this.code = IaCErrorCodes.FlagError;\n this.strCode = getErrorStringCode(this.code);\n this.userMessage = msg;\n }\n}\n\nexport class FeatureFlagError extends CustomError {\n constructor(key: string, featureFlag: string, hasSnykPreview?: boolean) {\n const flag = getFlagName(key);\n let msg;\n if (hasSnykPreview) {\n msg = `Flag \"${flag}\" is only supported if feature flag '${featureFlag}' is enabled. The feature flag can be enabled via Snyk Preview if you are on the Enterprise Plan`;\n } else {\n msg = `Flag \"${flag}\" is only supported if feature flag \"${featureFlag}\" is enabled. To enable it, please contact Snyk support.`;\n }\n super(msg);\n this.code = IaCErrorCodes.FeatureFlagError;\n this.strCode = getErrorStringCode(this.code);\n this.userMessage = msg;\n }\n}\n\nexport class FlagValueError extends CustomError {\n constructor(key: string, value: string) {\n const flag = getFlagName(key);\n const msg = `Unsupported value \"${value}\" provided to flag \"${flag}\".\\nSupported values are: ${SUPPORTED_TF_PLAN_SCAN_MODES.join(\n ', ',\n )}`;\n super(msg);\n this.code = IaCErrorCodes.FlagValueError;\n this.strCode = getErrorStringCode(this.code);\n this.userMessage = msg;\n }\n}\n\nexport class UnsupportedEntitlementFlagError extends CustomError {\n constructor(key: string, entitlementName: string) {\n const flag = getFlagName(key);\n super(\n `Unsupported flag: ${flag} - Missing the ${entitlementName} entitlement`,\n );\n this.code = IaCErrorCodes.UnsupportedEntitlementFlagError;\n this.strCode = getErrorStringCode(this.code);\n this.userMessage = `Flag \"${flag}\" is currently not supported for this org. To enable it, please contact snyk support.`;\n }\n}\n\nexport class UnsupportedEntitlementCommandError extends CustomError {\n constructor(key: string, entitlementName: string) {\n super(\n `Unsupported command: ${key} - Missing the ${entitlementName} entitlement`,\n );\n this.code = IaCErrorCodes.UnsupportedEntitlementFlagError;\n this.strCode = getErrorStringCode(this.code);\n this.userMessage = `Command \"${key}\" is currently not supported for this org. To enable it, please contact snyk support.`;\n }\n}\n\n/**\n * Validates the command line flags passed to the snyk iac test\n * command. The current argument parsing is very permissive and\n * allows unknown flags to be provided without valdiation.\n *\n * For snyk iac we need to explictly validate the flags to avoid\n * misconfigurations and typos. For example, if the --experimental\n * flag were to be mis-spelled we would end up sending the client\n * data to our backend rather than running it locally as intended.\n * @param argv command line args passed to the process\n */\nexport function assertIaCOptionsFlags(argv: string[]) {\n // We process the process.argv so we don't get default values.\n const parsed = args(argv);\n for (const key of Object.keys(parsed.options)) {\n // The _ property is a special case that contains non\n // flag strings passed to the command line (usually files)\n // and `iac` is the command provided.\n if (key !== '_' && key !== 'iac' && !allowed.has(key)) {\n throw new FlagError(key);\n }\n }\n\n if (parsed.options.scan) {\n assertTerraformPlanModes(parsed.options.scan as string);\n }\n}\n\nconst SUPPORTED_TF_PLAN_SCAN_MODES = [\n TerraformPlanScanMode.DeltaScan,\n TerraformPlanScanMode.FullScan,\n];\n\nfunction assertTerraformPlanModes(scanModeArgValue: string) {\n if (\n !SUPPORTED_TF_PLAN_SCAN_MODES.includes(\n scanModeArgValue as TerraformPlanScanMode,\n )\n ) {\n throw new FlagValueError('scan', scanModeArgValue);\n }\n}\n\nexport function isIacShareResultsOptions(options) {\n return options.iac && options.report;\n}\n","import { IaCErrorCodes } from './types';\n\nexport function getErrorStringCode(code: number): string {\n const errorName = IaCErrorCodes[code];\n if (!errorName) {\n return 'INVALID_IAC_ERROR';\n }\n let result = errorName.replace(/([A-Z])/g, '_$1');\n if (result.charAt(0) === '_') {\n result = result.substring(1);\n }\n return result.toUpperCase();\n}\n","import { IaCErrorCodes, IacOrgSettings } from '../types';\nimport { Payload } from '../../../../../lib/snyk-test/types';\nimport config from '../../../../../lib/config';\nimport { isCI } from '../../../../../lib/is-ci';\nimport { api } from '../../../../../lib/api-token';\nimport { makeRequest } from '../../../../../lib/request';\nimport { CustomError } from '../../../../../lib/errors';\nimport { getErrorStringCode } from '../error-utils';\n\nexport function getIacOrgSettings(\n publicOrgId?: string,\n): Promise<IacOrgSettings> {\n const payload: Payload = {\n method: 'get',\n url: config.API + '/iac-org-settings',\n json: true,\n qs: { org: publicOrgId },\n headers: {\n 'x-is-ci': isCI(),\n authorization: `token ${api()}`,\n },\n };\n\n return new Promise((resolve, reject) => {\n makeRequest(payload, (error, res) => {\n if (error) {\n return reject(error);\n }\n if (res.statusCode < 200 || res.statusCode > 299) {\n return reject(new FailedToGetIacOrgSettingsError());\n }\n resolve(res.body);\n });\n });\n}\n\nexport class FailedToGetIacOrgSettingsError extends CustomError {\n constructor(message?: string) {\n super(message || 'Failed to fetch IaC organization settings');\n this.code = IaCErrorCodes.FailedToGetIacOrgSettingsError;\n this.strCode = getErrorStringCode(this.code);\n this.userMessage =\n 'We failed to fetch your organization settings, including custom severity overrides for infrastructure-as-code policies. Please run the command again with the `-d` flag and contact support@snyk.io with the contents of the output.';\n }\n}\n","import { CustomError } from './custom-error';\nimport { DescribeExclusiveArgs } from '../iac/drift';\n\nexport class DescribeExclusiveArgumentError extends CustomError {\n constructor() {\n super(\n 'Please use only one of these arguments: ' +\n DescribeExclusiveArgs.join(', '),\n );\n }\n}\n","import { CustomError } from './custom-error';\nimport { DescribeRequiredArgs } from '../iac/drift';\n\nexport class DescribeRequiredArgumentError extends CustomError {\n constructor() {\n super(\n 'Describe command require one of these arguments: ' +\n DescribeRequiredArgs.join(', '),\n );\n }\n}\n","import * as debugLib from 'debug';\nimport * as child_process from 'child_process';\nimport { StdioOptions } from 'child_process';\nimport * as os from 'os';\nimport envPaths from 'env-paths';\nimport * as fs from 'fs';\nimport { spinner } from '../spinner';\nimport { makeRequest } from '../request';\nimport config from '../../lib/config';\nimport * as path from 'path';\nimport * as crypto from 'crypto';\nimport {\n createIgnorePattern,\n verifyServiceMappingExists,\n} from './service-mappings';\nimport { EXIT_CODES } from '../../cli/exit-codes';\nimport {\n DescribeOptions,\n DriftAnalysis,\n DriftctlExecutionResult,\n DriftCTLOptions,\n FmtOptions,\n GenDriftIgnoreOptions,\n} from './types';\nimport { TimerMetricInstance } from '../metrics';\nimport * as analytics from '../../lib/analytics';\nimport { Policy } from '../policy/find-and-load-policy';\nimport { DescribeExclusiveArgumentError } from '../errors/describe-exclusive-argument-error';\nimport { DescribeRequiredArgumentError } from '../errors/describe-required-argument-error';\n\nconst cachePath = config.CACHE_PATH ?? envPaths('snyk').cache;\nconst debug = debugLib('drift');\n\nexport const DCTL_EXIT_CODES = {\n EXIT_IN_SYNC: 0,\n EXIT_NOT_IN_SYNC: 1,\n EXIT_ERROR: 2,\n};\n\nexport const DescribeExclusiveArgs = [\n 'all',\n 'only-managed',\n 'drift',\n 'only-unmanaged',\n];\n\nexport const DescribeRequiredArgs = [\n 'all',\n 'only-managed',\n 'drift',\n 'only-unmanaged',\n];\n\n// ⚠ Keep in mind to also update driftctl version used to generate docker images\n// You can edit base image used for snyk final image here https://github.com/snyk/snyk-images/blob/master/alpine\nexport const driftctlVersion = 'v0.23.0';\n\nconst driftctlChecksums = {\n 'driftctl_windows_386.exe':\n 'e5befbafe2291674a4d6c8522411a44fea3549057fb46d331402d49b180202fe',\n driftctl_darwin_amd64:\n '9af4e88a8e08e53ac3c373407bdd0b18a91941dc620266349f10600fc7b283d2',\n driftctl_linux_386:\n '6cd2719f81210017e3f67677cb92f4b0060976a3588c220b4af6b2dda174df8f',\n driftctl_linux_amd64:\n 'd714a3d11056169f4c4cc047b48b4d732f5df8cdfbc00e40c3e5f6e6cc5ead3e',\n driftctl_linux_arm64:\n '24812c8b2ec2d8e3d619317e76fbba0d8e7e263fc2c26cba26265a9656e8fe91',\n 'driftctl_windows_arm64.exe':\n 'd84461f0ba63b59aec66393fa67147f4157b5bddc02a19315d737c5f5a46c07b',\n driftctl_darwin_arm64:\n 'b711143d9331a10fc34c202284f67ce5eeb0348baca546b47af139f418f812c1',\n 'driftctl_windows_arm.exe':\n 'b5d24e1407c24ddfff63ffbba85eb1dc13473e2fd36e3e99e5e1762cf615f011',\n driftctl_linux_arm:\n '089665efa8a7c5e95b3cee9ace85fc5b0f2d7f2a29c351f2d3dbef3dae553e2d',\n 'driftctl_windows_amd64.exe':\n 'bf7310277eeccc2679b529c1f1d2ced30e877949a6d7c5606eb2d4c2ec033b66',\n};\n\nconst dctlBaseUrl = 'https://github.com/snyk/driftctl/releases/download/';\nconst driftctlPath = path.join(cachePath, 'driftctl_' + driftctlVersion);\nconst driftctlDefaultOptions = ['--no-version-check'];\nlet isBinaryDownloaded = false;\n\nexport const validateArgs = (options: DriftCTLOptions): void => {\n if (options.kind === 'describe') {\n return validateDescribeArgs(options as DescribeOptions);\n }\n};\n\nconst validateDescribeArgs = (options: DescribeOptions): void => {\n // Check that there is no more than one of the exclusive arguments\n let count = 0;\n for (const describeExclusiveArg of DescribeExclusiveArgs) {\n if (options[describeExclusiveArg]) {\n count++;\n }\n }\n if (count > 1) {\n throw new DescribeExclusiveArgumentError();\n }\n\n // Check we have one of the required arguments\n count = 0;\n for (const describeRequiredArgs of DescribeRequiredArgs) {\n if (options[describeRequiredArgs]) {\n count++;\n }\n }\n if (count === 0) {\n throw new DescribeRequiredArgumentError();\n }\n};\n\nexport const generateArgs = (\n options: DriftCTLOptions,\n driftIgnore?: string[],\n): string[] => {\n if (options.kind === 'describe') {\n return generateScanFlags(options as DescribeOptions, driftIgnore);\n }\n\n if (options.kind === 'gen-driftignore') {\n return generateGenDriftIgnoreFlags(options as GenDriftIgnoreOptions);\n }\n\n if (options.kind === 'fmt') {\n return generateFmtFlags(options as FmtOptions);\n }\n\n throw 'Unsupported command';\n};\n\nexport const generateGenDriftIgnoreFlags = (\n options: GenDriftIgnoreOptions,\n): string[] => {\n const args: string[] = ['gen-driftignore', ...driftctlDefaultOptions];\n\n if (options.input) {\n args.push('--input');\n args.push(options.input);\n }\n\n if (options.output) {\n args.push('--output');\n args.push(options.output);\n }\n\n if (options['exclude-changed']) {\n args.push('--exclude-changed');\n }\n\n if (options['exclude-missing']) {\n args.push('--exclude-missing');\n }\n\n if (options['exclude-unmanaged']) {\n args.push('--exclude-unmanaged');\n }\n\n return args;\n};\n\nconst generateFmtFlags = (options: FmtOptions): string[] => {\n const args: string[] = ['fmt', ...driftctlDefaultOptions];\n\n if (options.json) {\n args.push('--output');\n args.push('json://stdout');\n }\n\n if (options['json-file-output']) {\n args.push('--output');\n args.push('json://' + options['json-file-output']);\n }\n\n if (options.html) {\n args.push('--output');\n args.push('html://stdout');\n }\n\n if (options['html-file-output']) {\n args.push('--output');\n args.push('html://' + options['html-file-output']);\n }\n\n return args;\n};\n\nconst generateScanFlags = (\n options: DescribeOptions,\n driftIgnore?: string[],\n): string[] => {\n const args: string[] = ['scan', ...driftctlDefaultOptions];\n\n if (options.quiet) {\n args.push('--quiet');\n }\n\n if (options.filter) {\n args.push('--filter');\n args.push(options.filter);\n }\n\n args.push('--output');\n args.push('json://stdout');\n\n if (options['fetch-tfstate-headers']) {\n args.push('--headers');\n args.push(options['fetch-tfstate-headers']);\n }\n\n if (options['tfc-token']) {\n args.push('--tfc-token');\n args.push(options['tfc-token']);\n }\n\n if (options['tfc-endpoint']) {\n args.push('--tfc-endpoint');\n args.push(options['tfc-endpoint']);\n }\n\n if (options['tf-provider-version']) {\n args.push('--tf-provider-version');\n args.push(options['tf-provider-version']);\n }\n\n if (options.strict) {\n args.push('--strict');\n }\n\n if (options.deep) {\n args.push('--deep');\n }\n\n if (options['only-managed'] || options.drift) {\n args.push('--only-managed');\n }\n\n if (options['only-unmanaged']) {\n args.push('--only-unmanaged');\n }\n\n if (options.driftignore) {\n args.push('--driftignore');\n args.push(options.driftignore);\n }\n\n if (options['tf-lockfile']) {\n args.push('--tf-lockfile');\n args.push(options['tf-lockfile']);\n }\n\n if (driftIgnore && driftIgnore.length > 0) {\n args.push('--ignore');\n args.push(driftIgnore.join(','));\n }\n\n let configDir = cachePath;\n createIfNotExists(cachePath);\n if (options['config-dir']) {\n configDir = options['config-dir'];\n }\n args.push('--config-dir');\n args.push(configDir);\n\n if (options.from) {\n const froms = options.from.split(',');\n for (const f of froms) {\n args.push('--from');\n args.push(f);\n }\n }\n\n let to = 'aws+tf';\n if (options.to) {\n to = options.to;\n }\n args.push('--to');\n args.push(to);\n\n if (options.service) {\n const services = options.service.split(',');\n verifyServiceMappingExists(services);\n args.push('--ignore');\n args.push(createIgnorePattern(services));\n }\n\n debug(args);\n\n return args;\n};\n\nexport function translateExitCode(exitCode: number | null): number {\n switch (exitCode) {\n case DCTL_EXIT_CODES.EXIT_IN_SYNC:\n return 0;\n case DCTL_EXIT_CODES.EXIT_NOT_IN_SYNC:\n return EXIT_CODES.VULNS_FOUND;\n case DCTL_EXIT_CODES.EXIT_ERROR:\n return EXIT_CODES.ERROR;\n default:\n debug('driftctl returned %d', exitCode);\n return EXIT_CODES.ERROR;\n }\n}\n\nexport const parseDriftAnalysisResults = (input: string): DriftAnalysis => {\n return JSON.parse(input) as DriftAnalysis;\n};\n\nexport const runDriftCTL = async ({\n options,\n driftIgnore,\n input,\n stdio,\n}: {\n options: DriftCTLOptions;\n driftIgnore?: string[];\n input?: string;\n stdio?: StdioOptions;\n}): Promise<DriftctlExecutionResult> => {\n const path = await findOrDownload();\n await validateArgs(options);\n const args = await generateArgs(options, driftIgnore);\n\n if (!stdio) {\n stdio = ['pipe', 'pipe', 'inherit'];\n }\n\n debug('running driftctl %s ', args.join(' '));\n\n const p = child_process.spawn(path, args, {\n stdio,\n env: { ...process.env, DCTL_IS_SNYK: 'true' },\n });\n\n let stdout = '';\n return new Promise<DriftctlExecutionResult>((resolve, reject) => {\n if (input) {\n p.stdin?.write(input);\n p.stdin?.end();\n }\n p.on('error', (error) => {\n reject(error);\n });\n\n p.stdout?.on('data', (data) => {\n stdout += data;\n });\n\n p.on('exit', (code) => {\n resolve({ code: translateExitCode(code), stdout });\n });\n });\n};\n\nasync function findOrDownload(): Promise<string> {\n let dctl = await findDriftCtl();\n if (isBinaryDownloaded) {\n return dctl;\n }\n let downloadDuration = 0;\n let binaryExist = true;\n if (dctl === '') {\n binaryExist = false;\n try {\n createIfNotExists(cachePath);\n dctl = driftctlPath;\n\n const duration = new TimerMetricInstance('driftctl_download');\n duration.start();\n await download(driftctlUrl(), dctl);\n duration.stop();\n\n downloadDuration = Math.round((duration.getValue() as number) / 1000);\n } catch (err) {\n return Promise.reject(err);\n }\n }\n analytics.add('iac-drift-binary-already-exist', binaryExist);\n analytics.add('iac-drift-binary-download-duration-seconds', downloadDuration);\n isBinaryDownloaded = true;\n return dctl;\n}\n\nasync function findDriftCtl(): Promise<string> {\n // lookup in custom path contained in env var DRIFTCTL_PATH\n let dctlPath = config.DRIFTCTL_PATH;\n if (dctlPath != null) {\n const exists = await isExe(dctlPath);\n if (exists) {\n debug('Found driftctl in $DRIFTCTL_PATH: %s', dctlPath);\n return dctlPath;\n }\n }\n\n // lookup in app cache\n dctlPath = driftctlPath;\n const exists = await isExe(dctlPath);\n if (exists) {\n debug('Found driftctl in cache: %s', dctlPath);\n return dctlPath;\n }\n\n // lookup in /bin\n // when used in a docker context the default binary path should be used\n {\n dctlPath = '/bin/driftctl';\n const exists = await isExe(dctlPath);\n if (exists) {\n debug('Found driftctl in %s', dctlPath);\n return dctlPath;\n }\n }\n\n debug('driftctl not found');\n return '';\n}\n\nasync function download(url, destination: string): Promise<boolean> {\n debug('downloading driftctl into %s', destination);\n\n const payload = {\n method: 'GET',\n url: url,\n output: destination,\n follow: 3,\n };\n\n await spinner('Downloading...');\n return new Promise<boolean>((resolve, reject) => {\n makeRequest(payload, function(err, res, body) {\n try {\n if (err) {\n reject(\n new Error('Could not download driftctl from ' + url + ': ' + err),\n );\n return;\n }\n if (res.statusCode !== 200) {\n reject(\n new Error(\n 'Could not download driftctl from ' + url + ': ' + res.statusCode,\n ),\n );\n return;\n }\n\n validateChecksum(body);\n\n fs.writeFileSync(destination, body);\n debug('File saved: ' + destination);\n\n fs.chmodSync(destination, 0o744);\n resolve(true);\n } finally {\n spinner.clearAll();\n }\n });\n });\n}\n\nfunction validateChecksum(body: string) {\n // only validate if we downloaded the official driftctl binary\n if (config.DRIFTCTL_URL || config.DRIFTCTL_PATH) {\n return;\n }\n\n const computedHash = crypto\n .createHash('sha256')\n .update(body)\n .digest('hex');\n const givenHash = driftctlChecksums[driftctlFileName()];\n\n if (computedHash != givenHash) {\n throw new Error('Downloaded file has inconsistent checksum...');\n }\n}\n\nfunction driftctlFileName(): string {\n let platform = 'linux';\n switch (os.platform()) {\n case 'darwin':\n platform = 'darwin';\n break;\n case 'win32':\n platform = 'windows';\n break;\n }\n\n let arch = 'amd64';\n switch (os.arch()) {\n case 'ia32':\n case 'x32':\n arch = '386';\n break;\n case 'arm':\n arch = 'arm';\n break;\n case 'arm64':\n arch = 'arm64';\n break;\n }\n\n let ext = '';\n switch (os.platform()) {\n case 'win32':\n ext = '.exe';\n break;\n }\n\n return `driftctl_${platform}_${arch}${ext}`;\n}\n\nfunction driftctlUrl(): string {\n if (config.DRIFTCTL_URL) {\n return config.DRIFTCTL_URL;\n }\n\n return `${dctlBaseUrl}/${driftctlVersion}/${driftctlFileName()}`;\n}\n\nfunction isExe(dctlPath: string): Promise<boolean> {\n return new Promise<boolean>((resolve) => {\n fs.access(dctlPath, fs.constants.X_OK, (err) => {\n if (err) {\n resolve(false);\n return;\n }\n resolve(true);\n });\n });\n}\n\nfunction createIfNotExists(path: string) {\n if (!fs.existsSync(path)) {\n fs.mkdirSync(path, { recursive: true });\n }\n}\n\nexport function driftignoreFromPolicy(policy: Policy | undefined): string[] {\n const excludeSection = 'iac-drift';\n if (!policy || !policy.exclude || !(excludeSection in policy.exclude)) {\n return [];\n }\n return policy.exclude[excludeSection];\n}\n","import { CustomError } from '../errors';\nimport { IaCErrorCodes } from '../../cli/commands/test/iac-local-execution/types';\nimport { getErrorStringCode } from '../../cli/commands/test/iac-local-execution/error-utils';\n\nexport const services2resources = new Map<string, Array<string>>([\n // Amazon\n [\n 'aws_s3',\n [\n 'aws_s3_bucket',\n 'aws_s3_bucket_analytics_configuration',\n 'aws_s3_bucket_inventory',\n 'aws_s3_bucket_metric',\n 'aws_s3_bucket_notification',\n 'aws_s3_bucket_policy',\n ],\n ],\n [\n 'aws_ec2',\n [\n 'aws_instance',\n 'aws_key_pair',\n 'aws_ami',\n 'aws_ebs_snapshot',\n 'aws_ebs_volume',\n 'aws_eip',\n 'aws_eip_association',\n 'aws_volume_attachment',\n 'aws_launch_configuration',\n 'aws_launch_template',\n ],\n ],\n ['aws_lambda', ['aws_lambda_function', 'aws_lambda_event_source_mapping']],\n [\n 'aws_rds',\n [\n 'aws_db_instance',\n 'aws_db_subnet_group',\n 'aws_rds_cluster',\n 'aws_rds_cluster_endpoint',\n 'aws_rds_cluster_instance',\n ],\n ],\n ['aws_route53', ['aws_route53_record', 'aws_route53_zone']],\n [\n 'aws_iam',\n [\n 'aws_iam_access_key',\n 'aws_iam_policy',\n 'aws_iam_policy_attachment',\n 'aws_iam_role',\n 'aws_iam_role_policy',\n 'aws_iam_role_policy_attachment',\n 'aws_iam_user',\n 'aws_iam_user_policy',\n 'aws_iam_user_policy_attachment',\n ],\n ],\n [\n 'aws_vpc',\n [\n 'aws_security_group',\n 'aws_security_group_rule',\n 'aws_subnet',\n 'aws_default_vpc',\n 'aws_vpc',\n 'aws_default_security_group',\n 'aws_route_table',\n 'aws_default_route_table',\n 'aws_route',\n 'aws_route_table_association',\n 'aws_nat_gateway',\n 'aws_internet_gateway',\n ],\n ],\n [\n 'aws_api_gateway',\n [\n 'aws_api_gateway_resource',\n 'aws_api_gateway_rest_api',\n 'aws_api_gateway_account',\n 'aws_api_gateway_api_key',\n 'aws_api_gateway_authorizer',\n 'aws_api_gateway_base_path_mapping',\n 'aws_api_gateway_domain_name',\n 'aws_api_gateway_gateway_response',\n 'aws_api_gateway_integration',\n 'aws_api_gateway_integration_response',\n 'aws_api_gateway_method',\n 'aws_api_gateway_method_response',\n 'aws_api_gateway_method_settings',\n 'aws_api_gateway_model',\n 'aws_api_gateway_request_validator',\n 'aws_api_gateway_rest_api_policy',\n 'aws_api_gateway_stage',\n 'aws_api_gateway_vpc_link',\n ],\n ],\n [\n 'aws_apigatewayv2',\n [\n 'aws_apigatewayv2_api',\n 'aws_apigatewayv2_api_mapping',\n 'aws_apigatewayv2_authorizer',\n 'aws_apigatewayv2_deployment',\n 'aws_apigatewayv2_domain_name',\n 'aws_apigatewayv2_integration',\n 'aws_apigatewayv2_integration_response',\n 'aws_apigatewayv2_model',\n 'aws_apigatewayv2_route',\n 'aws_apigatewayv2_route_response',\n 'aws_apigatewayv2_stage',\n 'aws_apigatewayv2_vpc_link',\n ],\n ],\n ['aws_sqs', ['aws_sqs_queue', 'aws_sqs_queue_policy']],\n [\n 'aws_sns',\n ['aws_sns_topic', 'aws_sns_topic_policy', 'aws_sns_topic_subscription'],\n ],\n ['aws_ecr', ['aws_ecr_repository']],\n ['aws_cloudfront', ['aws_cloudfront_distribution']],\n ['aws_kms', ['aws_kms_key', 'aws_kms_alias']],\n ['aws_dynamodb', ['aws_dynamodb_table']],\n // Azure\n ['azure_base', ['azurerm_resource_group']],\n ['azure_compute', ['azurerm_image', 'azurerm_ssh_public_key']],\n ['azure_storage', ['azurerm_storage_account', 'azurerm_storage_container']],\n [\n 'azure_network',\n [\n 'azurerm_resource_group',\n 'azurerm_subnet',\n 'azurerm_public_ip',\n 'azurerm_firewall',\n 'azurerm_route',\n 'azurerm_route_table',\n 'azurerm_network_security_group',\n ],\n ],\n ['azure_container', ['azurerm_container_registry']],\n [\n 'azure_database',\n ['azurerm_postgresql_server', 'azurerm_postgresql_database'],\n ],\n ['azure_loadbalancer', ['azurerm_lb', 'azurerm_lb_rule']],\n [\n 'azure_private_dns',\n [\n 'azurerm_private_dns_a_record',\n 'azurerm_private_dns_aaaa_record',\n 'azurerm_private_dns_cname_record',\n 'azurerm_private_dns_mx_record',\n 'azurerm_private_dns_ptr_record',\n 'azurerm_private_dns_srv_record',\n 'azurerm_private_dns_txt_record',\n 'azurerm_private_dns_zone',\n ],\n ],\n\n // Google\n [\n 'google_cloud_platform',\n [\n 'google_project_iam_binding',\n 'google_project_iam_member',\n 'google_project_iam_policy',\n ],\n ],\n [\n 'google_cloud_storage',\n [\n 'google_storage_bucket',\n 'google_storage_bucket_iam_binding',\n 'google_storage_bucket_iam_member',\n 'google_storage_bucket_iam_policy',\n ],\n ],\n [\n 'google_compute_engine',\n [\n 'google_compute_address',\n 'google_compute_disk',\n 'google_compute_global_address',\n 'google_compute_firewall',\n 'google_compute_health_check',\n 'google_compute_image',\n 'google_compute_instance',\n 'google_compute_instance_group',\n 'google_compute_network',\n 'google_compute_node_group',\n 'google_compute_router',\n 'google_compute_subnetwork',\n ],\n ],\n ['google_cloud_dns', ['google_dns_managed_zone']],\n [\n 'google_cloud_bigtable',\n ['google_bigtable_instance', 'google_bigtable_table'],\n ],\n [\n 'google_cloud_bigquery',\n ['google_bigquery_table', 'google_bigquery_dataset'],\n ],\n ['google_cloud_functions', ['google_cloudfunctions_function']],\n ['google_cloud_sql', ['google_sql_database_instance']],\n ['google_cloud_run', ['google_cloud_run_service']],\n]);\n\nexport function verifyServiceMappingExists(services: string[]): void {\n if (services.length == 0) {\n throw new InvalidServiceError('');\n }\n for (const s of services) {\n if (!services2resources.has(s)) {\n throw new InvalidServiceError(\n `We were unable to match service \"${s}\". Please provide a valid service name: ${existingServiceNames()}`,\n );\n }\n }\n}\n\nfunction existingServiceNames(): string {\n let res = '';\n for (const s of services2resources.keys()) {\n res += `${s},`;\n }\n return res.substring(0, res.length - 1);\n}\n\nexport function createIgnorePattern(services: string[]): string {\n return createIgnorePatternWithMap(services, services2resources);\n}\n\nexport function createIgnorePatternWithMap(\n services: string[],\n serviceMap: Map<string, Array<string>>,\n): string {\n let res = '*';\n const seenResources = new Set<string>();\n for (const s of services) {\n const resourcePatterns = serviceMap.get(s);\n for (const rp of resourcePatterns || []) {\n // A resource might belong to multiple services, skip it if already processed\n if (seenResources.has(rp)) {\n continue;\n }\n res += `,!${rp}`;\n seenResources.add(rp);\n }\n }\n return res;\n}\n\nexport class InvalidServiceError extends CustomError {\n constructor(msg: string) {\n super(msg);\n this.code = IaCErrorCodes.InvalidServiceError;\n this.strCode = getErrorStringCode(this.code);\n this.userMessage = msg;\n }\n}\n"],"names":[],"sourceRoot":""}
@@ -116,10 +116,11 @@ exports.default = async (...args) => {
116
116
  throw new assert_iac_options_flag_1.UnsupportedEntitlementCommandError('drift', 'iacDrift');
117
117
  }
118
118
  const policy = await policy_1.findAndLoadPolicy(process.cwd(), 'iac', options);
119
- options.ignore = drift_1.driftignoreFromPolicy(policy);
119
+ const driftIgnore = drift_1.driftignoreFromPolicy(policy);
120
120
  try {
121
121
  const describe = await drift_1.runDriftCTL({
122
122
  options: { kind: 'describe', ...options },
123
+ driftIgnore: driftIgnore,
123
124
  });
124
125
  analytics.add('is-iac-drift', true);
125
126
  analytics.add('iac-drift-exit-code', describe.code);
@@ -1 +1 @@
1
- {"version":3,"file":"874.index.js","mappings":"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","sources":["webpack://snyk/./node_modules/env-paths/index.js","webpack://snyk/./src/cli/commands/describe.ts","webpack://snyk/./src/cli/commands/help/index.ts","webpack://snyk/./src/cli/commands/help/markdown-renderer.ts","webpack://snyk/./src/cli/commands/help/reflow-text.ts","webpack://snyk/./src/cli/commands/process-command-args.ts","webpack://snyk/./src/lib/policy/find-and-load-policy.ts","webpack://snyk/./src/lib/policy/index.ts","webpack://snyk/./src/lib/policy/pluck-policies.ts"],"sourcesContent":["'use strict';\nconst path = require('path');\nconst os = require('os');\n\nconst homedir = os.homedir();\nconst tmpdir = os.tmpdir();\nconst {env} = process;\n\nconst macos = name => {\n\tconst library = path.join(homedir, 'Library');\n\n\treturn {\n\t\tdata: path.join(library, 'Application Support', name),\n\t\tconfig: path.join(library, 'Preferences', name),\n\t\tcache: path.join(library, 'Caches', name),\n\t\tlog: path.join(library, 'Logs', name),\n\t\ttemp: path.join(tmpdir, name)\n\t};\n};\n\nconst windows = name => {\n\tconst appData = env.APPDATA || path.join(homedir, 'AppData', 'Roaming');\n\tconst localAppData = env.LOCALAPPDATA || path.join(homedir, 'AppData', 'Local');\n\n\treturn {\n\t\t// Data/config/cache/log are invented by me as Windows isn't opinionated about this\n\t\tdata: path.join(localAppData, name, 'Data'),\n\t\tconfig: path.join(appData, name, 'Config'),\n\t\tcache: path.join(localAppData, name, 'Cache'),\n\t\tlog: path.join(localAppData, name, 'Log'),\n\t\ttemp: path.join(tmpdir, name)\n\t};\n};\n\n// https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html\nconst linux = name => {\n\tconst username = path.basename(homedir);\n\n\treturn {\n\t\tdata: path.join(env.XDG_DATA_HOME || path.join(homedir, '.local', 'share'), name),\n\t\tconfig: path.join(env.XDG_CONFIG_HOME || path.join(homedir, '.config'), name),\n\t\tcache: path.join(env.XDG_CACHE_HOME || path.join(homedir, '.cache'), name),\n\t\t// https://wiki.debian.org/XDGBaseDirectorySpecification#state\n\t\tlog: path.join(env.XDG_STATE_HOME || path.join(homedir, '.local', 'state'), name),\n\t\ttemp: path.join(tmpdir, username, name)\n\t};\n};\n\nconst envPaths = (name, options) => {\n\tif (typeof name !== 'string') {\n\t\tthrow new TypeError(`Expected string, got ${typeof name}`);\n\t}\n\n\toptions = Object.assign({suffix: 'nodejs'}, options);\n\n\tif (options.suffix) {\n\t\t// Add suffix to prevent possible conflict with native apps\n\t\tname += `-${options.suffix}`;\n\t}\n\n\tif (process.platform === 'darwin') {\n\t\treturn macos(name);\n\t}\n\n\tif (process.platform === 'win32') {\n\t\treturn windows(name);\n\t}\n\n\treturn linux(name);\n};\n\nmodule.exports = envPaths;\n// TODO: Remove this for the next major release\nmodule.exports.default = envPaths;\n","import { MethodArgs } from '../args';\nimport { processCommandArgs } from './process-command-args';\nimport * as legacyError from '../../lib/errors/legacy-errors';\nimport {\n DCTL_EXIT_CODES,\n runDriftCTL,\n driftignoreFromPolicy,\n parseDriftAnalysisResults,\n} from '../../lib/iac/drift';\nimport { getIacOrgSettings } from './test/iac-local-execution/org-settings/get-iac-org-settings';\nimport { UnsupportedEntitlementCommandError } from './test/iac-local-execution/assert-iac-options-flag';\nimport config from '../../lib/config';\nimport { addIacDriftAnalytics } from './test/iac-local-execution/analytics';\nimport * as analytics from '../../lib/analytics';\nimport { findAndLoadPolicy } from '../../lib/policy';\nimport { DescribeRequiredArgumentError } from '../../lib/errors/describe-required-argument-error';\nimport help from './help';\n\nexport default async (...args: MethodArgs): Promise<any> => {\n const { options } = processCommandArgs(...args);\n\n // Ensure that this describe command can only be runned when using `snyk iac describe`\n // Avoid `snyk describe` direct usage\n if (options.iac != true) {\n return legacyError('describe');\n }\n\n // Ensure that we are allowed to run that command\n // by checking the entitlement\n const orgPublicId = options.org ?? config.org;\n const iacOrgSettings = await getIacOrgSettings(orgPublicId);\n if (!iacOrgSettings.entitlements?.iacDrift) {\n throw new UnsupportedEntitlementCommandError('drift', 'iacDrift');\n }\n\n const policy = await findAndLoadPolicy(process.cwd(), 'iac', options);\n options.ignore = driftignoreFromPolicy(policy);\n\n try {\n const describe = await runDriftCTL({\n options: { kind: 'describe', ...options },\n });\n analytics.add('is-iac-drift', true);\n analytics.add('iac-drift-exit-code', describe.code);\n if (describe.code === DCTL_EXIT_CODES.EXIT_ERROR) {\n process.exitCode = describe.code;\n throw new Error();\n }\n\n // Parse analysis JSON and add to analytics\n const analysis = parseDriftAnalysisResults(describe.stdout);\n addIacDriftAnalytics(analysis, options);\n\n const fmtResult = await runDriftCTL({\n options: { kind: 'fmt', ...options },\n input: describe.stdout,\n });\n process.stdout.write(fmtResult.stdout);\n process.exitCode = describe.code;\n } catch (e) {\n if (e instanceof DescribeRequiredArgumentError) {\n // when missing a required arg we will display help to explain\n const helpMsg = await help('iac', 'describe');\n console.log(helpMsg);\n }\n return Promise.reject(e);\n }\n};\n","import * as fs from 'fs';\nimport * as path from 'path';\nimport { MethodArgs } from '../../args';\nimport { renderMarkdown } from './markdown-renderer';\n\nexport function findHelpFile(\n helpArgs: string[],\n helpFolderPath = '../../help/cli-commands', // this is a relative path from the webpack dist directory,\n): string {\n while (helpArgs.length > 0) {\n // cleanse the filename to only contain letters\n // aka: /\\W/g but figured this was easier to read\n const file = `${helpArgs.join('-').replace(/[^a-z0-9-]/gi, '')}.md`;\n const testHelpAbsolutePath = path.resolve(__dirname, helpFolderPath, file);\n if (fs.existsSync(testHelpAbsolutePath)) {\n return testHelpAbsolutePath;\n }\n helpArgs = helpArgs.slice(0, -1);\n }\n return path.resolve(__dirname, helpFolderPath, `README.md`); // Default help file\n}\n\nexport default async function help(...args: MethodArgs): Promise<string> {\n const helpArgs = args.filter((arg): arg is string => typeof arg === 'string');\n const helpFileAbsolutePath = findHelpFile(helpArgs);\n return renderMarkdown(fs.readFileSync(helpFileAbsolutePath, 'utf8'));\n}\n","import { marked } from 'marked';\nimport chalk from 'chalk';\nimport { reflowText } from './reflow-text';\n\n// stateful variable to control left-padding by header level\nlet currentHeader = 1;\nconst listItemSeparator = 'LISTITEMSEPARATOR'; // Helper string for rendering ListItems\n\n/**\n * @description get padding spaces depending on the last header level used\n * @returns string\n */\nfunction getLeftTextPadding(): string {\n return ' '.repeat(\n currentHeader === 1 || currentHeader === 2 ? 1 : currentHeader - 1,\n );\n}\n\n/**\n * @description Reads current terminal width if available to limit column width for text-reflowing\n * @returns {number}\n */\nconst defaultMaximumLineWidth = 100;\nfunction getIdealTextWidth(maximumLineWidth = defaultMaximumLineWidth): number {\n if (typeof process.stdout.columns === 'number') {\n if (process.stdout.columns < maximumLineWidth) {\n return process.stdout.columns - getLeftTextPadding().length - 5;\n }\n }\n return maximumLineWidth - getLeftTextPadding().length;\n}\n\n// Marked custom renderer class\nconst renderer = {\n em(text) {\n return chalk.italic(text);\n },\n strong(text) {\n return chalk.bold(text);\n },\n link(href, title, text) {\n // Don't render links to relative paths (like local files)\n if (href.startsWith('./') || !href.includes('://')) {\n return text;\n }\n const renderedLink = chalk.bold.blueBright(href);\n if (text && text !== href) {\n return `${text} ${renderedLink}`;\n }\n return renderedLink;\n },\n blockquote(quote) {\n return quote;\n },\n list(body, ordered, start) {\n return (\n body\n .split(listItemSeparator)\n .map((listItem, listItemIndex) => {\n const bulletPoint = ordered ? `${listItemIndex + start}. ` : '- ';\n return reflowText(listItem, getIdealTextWidth())\n .split('\\n')\n .map((listItemLine, listItemLineIndex) => {\n if (!listItemLine) {\n return '';\n }\n return `${getLeftTextPadding()}${\n listItemLineIndex === 0 ? bulletPoint : ' '\n }${listItemLine}`;\n })\n .join('\\n');\n })\n .join('\\n') + '\\n'\n );\n },\n listitem(text) {\n return text + listItemSeparator;\n },\n paragraph(text) {\n return (\n reflowText(text, getIdealTextWidth())\n .split('\\n')\n .map((s) => getLeftTextPadding() + chalk.reset() + s)\n .join('\\n') + '\\n\\n'\n );\n },\n codespan(text) {\n return chalk.italic.blueBright(`${text}`);\n },\n code(code) {\n return code + '\\n';\n },\n heading(text, level) {\n currentHeader = level;\n let coloring;\n switch (level) {\n case 1:\n coloring = chalk.bold.underline;\n break;\n case 3:\n case 4:\n coloring = chalk;\n break;\n default:\n coloring = chalk.bold;\n break;\n }\n return `${' '.repeat(level === 1 ? 0 : currentHeader - 2)}${coloring(\n text,\n )}\\n`;\n },\n};\n\nmarked.use({ renderer });\nmarked.setOptions({\n mangle: false,\n});\n\nconst htmlUnescapes = {\n '&amp;': '&',\n '&lt;': '<',\n '&gt;': '>',\n '&quot;': '\"',\n '&#39;': \"'\",\n '&#96;': '`',\n '&#x20;': '',\n};\n\n/**\n * @description Replace HTML entities with their non-encoded variant\n * @param {string} text\n * @returns {string}\n */\nfunction unescape(text: string): string {\n Object.entries(htmlUnescapes).forEach(([escapedChar, unescapedChar]) => {\n const escapedCharRegExp = new RegExp(escapedChar, 'g');\n text = text.replace(escapedCharRegExp, unescapedChar);\n });\n return text;\n}\n\nexport function renderMarkdown(markdown: string): string {\n return unescape(marked.parse(markdown));\n}\n","/**\nCode in this file is adapted from mikaelbr/marked-terminal\nhttps://github.com/mikaelbr/marked-terminal/blob/7501b8bb24a5ed52ec7d9114d4aeefa14f1bf5e6/index.js#L234-L330\n\n\nMIT License\n\nCopyright (c) 2017 Mikael Brevik\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n */\n\n// Compute length of str not including ANSI escape codes.\n// See http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\nfunction textLength(str: string): number {\n // eslint-disable-next-line no-control-regex\n return str.replace(/\\u001b\\[(?:\\d{1,3})(?:;\\d{1,3})*m/g, '').length;\n}\n\n// Munge \\n's and spaces in \"text\" so that the number of\n// characters between \\n's is less than or equal to \"width\".\nexport function reflowText(text: string, width: number): string {\n const HARD_RETURN = '\\r|\\n';\n const HARD_RETURN_GFM_RE = new RegExp(HARD_RETURN + '|<br ?/?>');\n\n const splitRe = HARD_RETURN_GFM_RE;\n const sections = text.split(splitRe);\n const reflowed = [] as string[];\n\n sections.forEach((section) => {\n // Split the section by escape codes so that we can\n // deal with them separately.\n // eslint-disable-next-line no-control-regex\n const fragments = section.split(/(\\u001b\\[(?:\\d{1,3})(?:;\\d{1,3})*m)/g);\n let column = 0;\n let currentLine = '';\n let lastWasEscapeChar = false;\n\n while (fragments.length) {\n const fragment = fragments[0];\n\n if (fragment === '') {\n fragments.splice(0, 1);\n lastWasEscapeChar = false;\n continue;\n }\n\n // This is an escape code - leave it whole and\n // move to the next fragment.\n if (!textLength(fragment)) {\n currentLine += fragment;\n fragments.splice(0, 1);\n lastWasEscapeChar = true;\n continue;\n }\n\n const words = fragment.split(/[ \\t\\n]+/);\n\n for (let i = 0; i < words.length; i++) {\n let word = words[i];\n let addSpace = column != 0;\n if (lastWasEscapeChar) addSpace = false;\n\n // If adding the new word overflows the required width\n if (column + word.length > width) {\n if (word.length <= width) {\n // If the new word is smaller than the required width\n // just add it at the beginning of a new line\n reflowed.push(currentLine);\n currentLine = word;\n column = word.length;\n } else {\n // If the new word is longer than the required width\n // split this word into smaller parts.\n const w = word.substr(0, width - column);\n if (addSpace) currentLine += ' ';\n currentLine += w;\n reflowed.push(currentLine);\n currentLine = '';\n column = 0;\n\n word = word.substr(w.length);\n while (word.length) {\n const w = word.substr(0, width);\n\n if (!w.length) break;\n\n if (w.length < width) {\n currentLine = w;\n column = w.length;\n break;\n } else {\n reflowed.push(w);\n word = word.substr(width);\n }\n }\n }\n } else {\n if (addSpace) {\n currentLine += ' ';\n column++;\n }\n\n currentLine += word;\n column += word.length;\n }\n\n lastWasEscapeChar = false;\n }\n\n fragments.splice(0, 1);\n }\n\n if (textLength(currentLine)) reflowed.push(currentLine);\n });\n\n return reflowed.join('\\n');\n}\n","import { Options } from '../../lib/types';\n\nexport function processCommandArgs<CommandOptions>(\n ...args\n): { paths: string[]; options: Options & CommandOptions } {\n let options = ({} as any) as Options & CommandOptions;\n\n if (typeof args[args.length - 1] === 'object') {\n options = (args.pop() as any) as Options & CommandOptions;\n }\n args = args.filter(Boolean);\n\n // For repository scanning, populate with default path (cwd) if no path given\n if (args.length === 0 && !options.docker) {\n args.unshift(process.cwd());\n }\n\n return { options, paths: args };\n}\n","import * as snykPolicyLib from 'snyk-policy';\nimport * as debugModule from 'debug';\nimport { PackageExpanded } from 'snyk-resolve-deps';\n\nimport { pluckPolicies } from '.';\nimport { SupportedPackageManagers } from '../package-managers';\nimport { PackageJson, PolicyOptions } from '../types';\nimport * as analytics from '../analytics';\n\nconst debug = debugModule('snyk');\n\nexport async function findAndLoadPolicy(\n root: string,\n scanType: SupportedPackageManagers | 'docker' | 'iac',\n options: PolicyOptions,\n pkg?: PackageExpanded,\n scannedProjectFolder?: string,\n): Promise<Policy | undefined> {\n const isDocker = scanType === 'docker';\n const isNodeProject = ['npm', 'yarn'].includes(scanType);\n // monitor\n let policyLocations: string[] = [\n options['policy-path'] || scannedProjectFolder || root,\n ];\n if (isDocker) {\n policyLocations = policyLocations.filter((loc) => loc !== root);\n } else if (isNodeProject) {\n // TODO: pluckPolicies expects a package.json object to\n // find and apply policies in node_modules\n policyLocations = policyLocations.concat(pluckPolicies(pkg as PackageJson));\n }\n\n debug('Potential policy locations found:', policyLocations);\n analytics.add('policies', policyLocations.length);\n analytics.add('policyLocations', policyLocations);\n\n if (policyLocations.length === 0) {\n return;\n }\n let policy;\n try {\n policy = await snykPolicyLib.load(policyLocations, options);\n } catch (err) {\n // note: inline catch, to handle error from .load\n // if the .snyk file wasn't found, it is fine\n if (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') {\n throw err;\n }\n }\n return policy;\n}\n\nexport interface Policy {\n filter(vulns: any, root?: string, matchStrategy?: string): any;\n exclude?: { [key: string]: string[] };\n}\n","export { pluckPolicies } from './pluck-policies';\nexport { findAndLoadPolicy } from './find-and-load-policy';\n","const flatten = require('lodash.flatten');\nimport { PackageExpanded } from 'snyk-resolve-deps';\n\nexport function pluckPolicies(pkg: PackageExpanded): string[] | string {\n if (!pkg) {\n return [];\n }\n\n if (pkg.snyk) {\n return pkg.snyk;\n }\n\n if (!pkg.dependencies) {\n return [];\n }\n\n return flatten(\n Object.keys(pkg.dependencies)\n .map((name: string) => pluckPolicies(pkg.dependencies[name]))\n .filter(Boolean),\n );\n}\n"],"names":[],"sourceRoot":""}
1
+ {"version":3,"file":"874.index.js","mappings":"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","sources":["webpack://snyk/./node_modules/env-paths/index.js","webpack://snyk/./src/cli/commands/describe.ts","webpack://snyk/./src/cli/commands/help/index.ts","webpack://snyk/./src/cli/commands/help/markdown-renderer.ts","webpack://snyk/./src/cli/commands/help/reflow-text.ts","webpack://snyk/./src/cli/commands/process-command-args.ts","webpack://snyk/./src/lib/policy/find-and-load-policy.ts","webpack://snyk/./src/lib/policy/index.ts","webpack://snyk/./src/lib/policy/pluck-policies.ts"],"sourcesContent":["'use strict';\nconst path = require('path');\nconst os = require('os');\n\nconst homedir = os.homedir();\nconst tmpdir = os.tmpdir();\nconst {env} = process;\n\nconst macos = name => {\n\tconst library = path.join(homedir, 'Library');\n\n\treturn {\n\t\tdata: path.join(library, 'Application Support', name),\n\t\tconfig: path.join(library, 'Preferences', name),\n\t\tcache: path.join(library, 'Caches', name),\n\t\tlog: path.join(library, 'Logs', name),\n\t\ttemp: path.join(tmpdir, name)\n\t};\n};\n\nconst windows = name => {\n\tconst appData = env.APPDATA || path.join(homedir, 'AppData', 'Roaming');\n\tconst localAppData = env.LOCALAPPDATA || path.join(homedir, 'AppData', 'Local');\n\n\treturn {\n\t\t// Data/config/cache/log are invented by me as Windows isn't opinionated about this\n\t\tdata: path.join(localAppData, name, 'Data'),\n\t\tconfig: path.join(appData, name, 'Config'),\n\t\tcache: path.join(localAppData, name, 'Cache'),\n\t\tlog: path.join(localAppData, name, 'Log'),\n\t\ttemp: path.join(tmpdir, name)\n\t};\n};\n\n// https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html\nconst linux = name => {\n\tconst username = path.basename(homedir);\n\n\treturn {\n\t\tdata: path.join(env.XDG_DATA_HOME || path.join(homedir, '.local', 'share'), name),\n\t\tconfig: path.join(env.XDG_CONFIG_HOME || path.join(homedir, '.config'), name),\n\t\tcache: path.join(env.XDG_CACHE_HOME || path.join(homedir, '.cache'), name),\n\t\t// https://wiki.debian.org/XDGBaseDirectorySpecification#state\n\t\tlog: path.join(env.XDG_STATE_HOME || path.join(homedir, '.local', 'state'), name),\n\t\ttemp: path.join(tmpdir, username, name)\n\t};\n};\n\nconst envPaths = (name, options) => {\n\tif (typeof name !== 'string') {\n\t\tthrow new TypeError(`Expected string, got ${typeof name}`);\n\t}\n\n\toptions = Object.assign({suffix: 'nodejs'}, options);\n\n\tif (options.suffix) {\n\t\t// Add suffix to prevent possible conflict with native apps\n\t\tname += `-${options.suffix}`;\n\t}\n\n\tif (process.platform === 'darwin') {\n\t\treturn macos(name);\n\t}\n\n\tif (process.platform === 'win32') {\n\t\treturn windows(name);\n\t}\n\n\treturn linux(name);\n};\n\nmodule.exports = envPaths;\n// TODO: Remove this for the next major release\nmodule.exports.default = envPaths;\n","import { MethodArgs } from '../args';\nimport { processCommandArgs } from './process-command-args';\nimport * as legacyError from '../../lib/errors/legacy-errors';\nimport {\n DCTL_EXIT_CODES,\n runDriftCTL,\n driftignoreFromPolicy,\n parseDriftAnalysisResults,\n} from '../../lib/iac/drift';\nimport { getIacOrgSettings } from './test/iac-local-execution/org-settings/get-iac-org-settings';\nimport { UnsupportedEntitlementCommandError } from './test/iac-local-execution/assert-iac-options-flag';\nimport config from '../../lib/config';\nimport { addIacDriftAnalytics } from './test/iac-local-execution/analytics';\nimport * as analytics from '../../lib/analytics';\nimport { findAndLoadPolicy } from '../../lib/policy';\nimport { DescribeRequiredArgumentError } from '../../lib/errors/describe-required-argument-error';\nimport help from './help';\n\nexport default async (...args: MethodArgs): Promise<any> => {\n const { options } = processCommandArgs(...args);\n\n // Ensure that this describe command can only be runned when using `snyk iac describe`\n // Avoid `snyk describe` direct usage\n if (options.iac != true) {\n return legacyError('describe');\n }\n\n // Ensure that we are allowed to run that command\n // by checking the entitlement\n const orgPublicId = options.org ?? config.org;\n const iacOrgSettings = await getIacOrgSettings(orgPublicId);\n if (!iacOrgSettings.entitlements?.iacDrift) {\n throw new UnsupportedEntitlementCommandError('drift', 'iacDrift');\n }\n\n const policy = await findAndLoadPolicy(process.cwd(), 'iac', options);\n const driftIgnore = driftignoreFromPolicy(policy);\n\n try {\n const describe = await runDriftCTL({\n options: { kind: 'describe', ...options },\n driftIgnore: driftIgnore,\n });\n analytics.add('is-iac-drift', true);\n analytics.add('iac-drift-exit-code', describe.code);\n if (describe.code === DCTL_EXIT_CODES.EXIT_ERROR) {\n process.exitCode = describe.code;\n throw new Error();\n }\n\n // Parse analysis JSON and add to analytics\n const analysis = parseDriftAnalysisResults(describe.stdout);\n addIacDriftAnalytics(analysis, options);\n\n const fmtResult = await runDriftCTL({\n options: { kind: 'fmt', ...options },\n input: describe.stdout,\n });\n process.stdout.write(fmtResult.stdout);\n process.exitCode = describe.code;\n } catch (e) {\n if (e instanceof DescribeRequiredArgumentError) {\n // when missing a required arg we will display help to explain\n const helpMsg = await help('iac', 'describe');\n console.log(helpMsg);\n }\n return Promise.reject(e);\n }\n};\n","import * as fs from 'fs';\nimport * as path from 'path';\nimport { MethodArgs } from '../../args';\nimport { renderMarkdown } from './markdown-renderer';\n\nexport function findHelpFile(\n helpArgs: string[],\n helpFolderPath = '../../help/cli-commands', // this is a relative path from the webpack dist directory,\n): string {\n while (helpArgs.length > 0) {\n // cleanse the filename to only contain letters\n // aka: /\\W/g but figured this was easier to read\n const file = `${helpArgs.join('-').replace(/[^a-z0-9-]/gi, '')}.md`;\n const testHelpAbsolutePath = path.resolve(__dirname, helpFolderPath, file);\n if (fs.existsSync(testHelpAbsolutePath)) {\n return testHelpAbsolutePath;\n }\n helpArgs = helpArgs.slice(0, -1);\n }\n return path.resolve(__dirname, helpFolderPath, `README.md`); // Default help file\n}\n\nexport default async function help(...args: MethodArgs): Promise<string> {\n const helpArgs = args.filter((arg): arg is string => typeof arg === 'string');\n const helpFileAbsolutePath = findHelpFile(helpArgs);\n return renderMarkdown(fs.readFileSync(helpFileAbsolutePath, 'utf8'));\n}\n","import { marked } from 'marked';\nimport chalk from 'chalk';\nimport { reflowText } from './reflow-text';\n\n// stateful variable to control left-padding by header level\nlet currentHeader = 1;\nconst listItemSeparator = 'LISTITEMSEPARATOR'; // Helper string for rendering ListItems\n\n/**\n * @description get padding spaces depending on the last header level used\n * @returns string\n */\nfunction getLeftTextPadding(): string {\n return ' '.repeat(\n currentHeader === 1 || currentHeader === 2 ? 1 : currentHeader - 1,\n );\n}\n\n/**\n * @description Reads current terminal width if available to limit column width for text-reflowing\n * @returns {number}\n */\nconst defaultMaximumLineWidth = 100;\nfunction getIdealTextWidth(maximumLineWidth = defaultMaximumLineWidth): number {\n if (typeof process.stdout.columns === 'number') {\n if (process.stdout.columns < maximumLineWidth) {\n return process.stdout.columns - getLeftTextPadding().length - 5;\n }\n }\n return maximumLineWidth - getLeftTextPadding().length;\n}\n\n// Marked custom renderer class\nconst renderer = {\n em(text) {\n return chalk.italic(text);\n },\n strong(text) {\n return chalk.bold(text);\n },\n link(href, title, text) {\n // Don't render links to relative paths (like local files)\n if (href.startsWith('./') || !href.includes('://')) {\n return text;\n }\n const renderedLink = chalk.bold.blueBright(href);\n if (text && text !== href) {\n return `${text} ${renderedLink}`;\n }\n return renderedLink;\n },\n blockquote(quote) {\n return quote;\n },\n list(body, ordered, start) {\n return (\n body\n .split(listItemSeparator)\n .map((listItem, listItemIndex) => {\n const bulletPoint = ordered ? `${listItemIndex + start}. ` : '- ';\n return reflowText(listItem, getIdealTextWidth())\n .split('\\n')\n .map((listItemLine, listItemLineIndex) => {\n if (!listItemLine) {\n return '';\n }\n return `${getLeftTextPadding()}${\n listItemLineIndex === 0 ? bulletPoint : ' '\n }${listItemLine}`;\n })\n .join('\\n');\n })\n .join('\\n') + '\\n'\n );\n },\n listitem(text) {\n return text + listItemSeparator;\n },\n paragraph(text) {\n return (\n reflowText(text, getIdealTextWidth())\n .split('\\n')\n .map((s) => getLeftTextPadding() + chalk.reset() + s)\n .join('\\n') + '\\n\\n'\n );\n },\n codespan(text) {\n return chalk.italic.blueBright(`${text}`);\n },\n code(code) {\n return code + '\\n';\n },\n heading(text, level) {\n currentHeader = level;\n let coloring;\n switch (level) {\n case 1:\n coloring = chalk.bold.underline;\n break;\n case 3:\n case 4:\n coloring = chalk;\n break;\n default:\n coloring = chalk.bold;\n break;\n }\n return `${' '.repeat(level === 1 ? 0 : currentHeader - 2)}${coloring(\n text,\n )}\\n`;\n },\n};\n\nmarked.use({ renderer });\nmarked.setOptions({\n mangle: false,\n});\n\nconst htmlUnescapes = {\n '&amp;': '&',\n '&lt;': '<',\n '&gt;': '>',\n '&quot;': '\"',\n '&#39;': \"'\",\n '&#96;': '`',\n '&#x20;': '',\n};\n\n/**\n * @description Replace HTML entities with their non-encoded variant\n * @param {string} text\n * @returns {string}\n */\nfunction unescape(text: string): string {\n Object.entries(htmlUnescapes).forEach(([escapedChar, unescapedChar]) => {\n const escapedCharRegExp = new RegExp(escapedChar, 'g');\n text = text.replace(escapedCharRegExp, unescapedChar);\n });\n return text;\n}\n\nexport function renderMarkdown(markdown: string): string {\n return unescape(marked.parse(markdown));\n}\n","/**\nCode in this file is adapted from mikaelbr/marked-terminal\nhttps://github.com/mikaelbr/marked-terminal/blob/7501b8bb24a5ed52ec7d9114d4aeefa14f1bf5e6/index.js#L234-L330\n\n\nMIT License\n\nCopyright (c) 2017 Mikael Brevik\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n */\n\n// Compute length of str not including ANSI escape codes.\n// See http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\nfunction textLength(str: string): number {\n // eslint-disable-next-line no-control-regex\n return str.replace(/\\u001b\\[(?:\\d{1,3})(?:;\\d{1,3})*m/g, '').length;\n}\n\n// Munge \\n's and spaces in \"text\" so that the number of\n// characters between \\n's is less than or equal to \"width\".\nexport function reflowText(text: string, width: number): string {\n const HARD_RETURN = '\\r|\\n';\n const HARD_RETURN_GFM_RE = new RegExp(HARD_RETURN + '|<br ?/?>');\n\n const splitRe = HARD_RETURN_GFM_RE;\n const sections = text.split(splitRe);\n const reflowed = [] as string[];\n\n sections.forEach((section) => {\n // Split the section by escape codes so that we can\n // deal with them separately.\n // eslint-disable-next-line no-control-regex\n const fragments = section.split(/(\\u001b\\[(?:\\d{1,3})(?:;\\d{1,3})*m)/g);\n let column = 0;\n let currentLine = '';\n let lastWasEscapeChar = false;\n\n while (fragments.length) {\n const fragment = fragments[0];\n\n if (fragment === '') {\n fragments.splice(0, 1);\n lastWasEscapeChar = false;\n continue;\n }\n\n // This is an escape code - leave it whole and\n // move to the next fragment.\n if (!textLength(fragment)) {\n currentLine += fragment;\n fragments.splice(0, 1);\n lastWasEscapeChar = true;\n continue;\n }\n\n const words = fragment.split(/[ \\t\\n]+/);\n\n for (let i = 0; i < words.length; i++) {\n let word = words[i];\n let addSpace = column != 0;\n if (lastWasEscapeChar) addSpace = false;\n\n // If adding the new word overflows the required width\n if (column + word.length > width) {\n if (word.length <= width) {\n // If the new word is smaller than the required width\n // just add it at the beginning of a new line\n reflowed.push(currentLine);\n currentLine = word;\n column = word.length;\n } else {\n // If the new word is longer than the required width\n // split this word into smaller parts.\n const w = word.substr(0, width - column);\n if (addSpace) currentLine += ' ';\n currentLine += w;\n reflowed.push(currentLine);\n currentLine = '';\n column = 0;\n\n word = word.substr(w.length);\n while (word.length) {\n const w = word.substr(0, width);\n\n if (!w.length) break;\n\n if (w.length < width) {\n currentLine = w;\n column = w.length;\n break;\n } else {\n reflowed.push(w);\n word = word.substr(width);\n }\n }\n }\n } else {\n if (addSpace) {\n currentLine += ' ';\n column++;\n }\n\n currentLine += word;\n column += word.length;\n }\n\n lastWasEscapeChar = false;\n }\n\n fragments.splice(0, 1);\n }\n\n if (textLength(currentLine)) reflowed.push(currentLine);\n });\n\n return reflowed.join('\\n');\n}\n","import { Options } from '../../lib/types';\n\nexport function processCommandArgs<CommandOptions>(\n ...args\n): { paths: string[]; options: Options & CommandOptions } {\n let options = ({} as any) as Options & CommandOptions;\n\n if (typeof args[args.length - 1] === 'object') {\n options = (args.pop() as any) as Options & CommandOptions;\n }\n args = args.filter(Boolean);\n\n // For repository scanning, populate with default path (cwd) if no path given\n if (args.length === 0 && !options.docker) {\n args.unshift(process.cwd());\n }\n\n return { options, paths: args };\n}\n","import * as snykPolicyLib from 'snyk-policy';\nimport * as debugModule from 'debug';\nimport { PackageExpanded } from 'snyk-resolve-deps';\n\nimport { pluckPolicies } from '.';\nimport { SupportedPackageManagers } from '../package-managers';\nimport { PackageJson, PolicyOptions } from '../types';\nimport * as analytics from '../analytics';\n\nconst debug = debugModule('snyk');\n\nexport async function findAndLoadPolicy(\n root: string,\n scanType: SupportedPackageManagers | 'docker' | 'iac',\n options: PolicyOptions,\n pkg?: PackageExpanded,\n scannedProjectFolder?: string,\n): Promise<Policy | undefined> {\n const isDocker = scanType === 'docker';\n const isNodeProject = ['npm', 'yarn'].includes(scanType);\n // monitor\n let policyLocations: string[] = [\n options['policy-path'] || scannedProjectFolder || root,\n ];\n if (isDocker) {\n policyLocations = policyLocations.filter((loc) => loc !== root);\n } else if (isNodeProject) {\n // TODO: pluckPolicies expects a package.json object to\n // find and apply policies in node_modules\n policyLocations = policyLocations.concat(pluckPolicies(pkg as PackageJson));\n }\n\n debug('Potential policy locations found:', policyLocations);\n analytics.add('policies', policyLocations.length);\n analytics.add('policyLocations', policyLocations);\n\n if (policyLocations.length === 0) {\n return;\n }\n let policy;\n try {\n policy = await snykPolicyLib.load(policyLocations, options);\n } catch (err) {\n // note: inline catch, to handle error from .load\n // if the .snyk file wasn't found, it is fine\n if (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') {\n throw err;\n }\n }\n return policy;\n}\n\nexport interface Policy {\n filter(vulns: any, root?: string, matchStrategy?: string): any;\n exclude?: { [key: string]: string[] };\n}\n","export { pluckPolicies } from './pluck-policies';\nexport { findAndLoadPolicy } from './find-and-load-policy';\n","const flatten = require('lodash.flatten');\nimport { PackageExpanded } from 'snyk-resolve-deps';\n\nexport function pluckPolicies(pkg: PackageExpanded): string[] | string {\n if (!pkg) {\n return [];\n }\n\n if (pkg.snyk) {\n return pkg.snyk;\n }\n\n if (!pkg.dependencies) {\n return [];\n }\n\n return flatten(\n Object.keys(pkg.dependencies)\n .map((name: string) => pluckPolicies(pkg.dependencies[name]))\n .filter(Boolean),\n );\n}\n"],"names":[],"sourceRoot":""}