# frozen_string_literal: false require 'socket' module PWN module SAST # SAST Module used to identify task tags # such as TODO, SECURITY, FIXME, etc to ensure developers # aren't introducing security-related bugs into source code. module TaskTag @@logger = PWN::Plugins::PWNLogger.create # Supported Method Parameters:: # PWN::SAST::TaskTag.scan( # dir_path: 'optional path to dir defaults to .' # git_repo_root_uri: 'optional http uri of git repo scanned' # ) public_class_method def self.scan(opts = {}) dir_path = opts[:dir_path] git_repo_root_uri = opts[:git_repo_root_uri].to_s.scrub result_arr = [] logger_results = '' PWN::Plugins::FileFu.recurse_dir(dir_path: dir_path) do |entry| if File.file?(entry) && File.basename(entry) !~ /^pwn.+(html|json|db)$/ && File.basename(entry) !~ /\.JS-BEAUTIFIED$/ line_no_and_contents_arr = [] entry_beautified = false if File.extname(entry) == '.js' && (`wc -l #{entry}`.split.first.to_i < 20 || entry.include?('.min.js') || entry.include?('-all.js')) js_beautify = `js-beautify #{entry} > #{entry}.JS-BEAUTIFIED`.to_s.scrub entry = "#{entry}.JS-BEAUTIFIED" entry_beautified = true end test_case_filter = " grep -Fin \ -e '//' \ -e '