diff --git a/v2/internal/runner/options.go b/v2/internal/runner/options.go index 0cd005463..e9339cb3b 100644 --- a/v2/internal/runner/options.go +++ b/v2/internal/runner/options.go @@ -77,12 +77,10 @@ func hasStdin() bool { // validateOptions validates the configuration options passed func validateOptions(options *types.Options) error { - // Both verbose and silent flags were used if options.Verbose && options.Silent { return errors.New("both verbose and silent mode specified") } - // Validate proxy options if provided if err := validateProxyURL(options.ProxyURL, "invalid http proxy format (It should be http://username:password@host:port)"); err != nil { return err } @@ -111,9 +109,8 @@ func isValidURL(urlString string) bool { return err == nil } -// configureOutput configures the output on the screen +// configureOutput configures the output logging levels to be displayed on the screen func configureOutput(options *types.Options) { - // If the user desires verbose output, show verbose output if options.Verbose { gologger.DefaultLogger.SetMaxLevel(levels.LevelVerbose) } diff --git a/v2/internal/runner/processor.go b/v2/internal/runner/processor.go index 6006823ec..f24055ccf 100644 --- a/v2/internal/runner/processor.go +++ b/v2/internal/runner/processor.go @@ -7,7 +7,7 @@ import ( "go.uber.org/atomic" ) -// processTemplateWithList process a template on the URL list +// processTemplateWithList execute a template against the list of user provided targets func (r *Runner) processTemplateWithList(template *templates.Template) bool { results := &atomic.Bool{} wg := sizedwaitgroup.New(r.options.BulkSize) diff --git a/v2/internal/runner/runner.go b/v2/internal/runner/runner.go index bdd21faf4..7f286da45 100644 --- a/v2/internal/runner/runner.go +++ b/v2/internal/runner/runner.go @@ -229,7 +229,7 @@ func New(options *types.Options) (*Runner, error) { return nil, progressErr } - // create project file if requested or load existing one + // create project file if requested or load the existing one if options.Project { var projectFileErr error runner.projectFile, projectFileErr = projectfile.New(&projectfile.Options{Path: options.ProjectPath, Cleanup: utils.IsBlank(options.ProjectPath)}) @@ -284,7 +284,7 @@ func (r *Runner) Close() { func (r *Runner) RunEnumeration() error { defer r.Close() - // If user asked for new templates to be executed, collect the list from template directory. + // If user asked for new templates to be executed, collect the list from the templates' directory. if r.options.NewTemplates { templatesLoaded, err := r.readNewTemplatesFile() if err != nil { @@ -536,7 +536,7 @@ func (r *Runner) readNewTemplatesFile() ([]string, error) { return templatesList, nil } -// readNewTemplatesFile reads newly added templates from directory if it exists +// countNewTemplates returns the number of newly added templates func (r *Runner) countNewTemplates() int { if r.templatesConfig == nil { return 0 diff --git a/v2/internal/runner/templates.go b/v2/internal/runner/templates.go index f703adc28..a63694c76 100644 --- a/v2/internal/runner/templates.go +++ b/v2/internal/runner/templates.go @@ -57,7 +57,7 @@ func (r *Runner) logAvailableTemplate(tplPath string) { } } -// ListAvailableTemplates prints available templates to stdout +// listAvailableTemplates prints available templates to stdout func (r *Runner) listAvailableTemplates() { if r.templatesConfig == nil { return diff --git a/v2/internal/runner/update.go b/v2/internal/runner/update.go index 2243398f9..270776713 100644 --- a/v2/internal/runner/update.go +++ b/v2/internal/runner/update.go @@ -44,11 +44,11 @@ const ( var reVersion = regexp.MustCompile(`\d+\.\d+\.\d+`) // updateTemplates checks if the default list of nuclei-templates -// exist in the users home directory, if not the latest revision -// is downloaded from github. +// exist in the user's home directory, if not the latest revision +// is downloaded from GitHub. // -// If the path exists but is not latest, the new version is downloaded -// from github and replaced with the templates directory. +// If the path exists but does not contain the latest version of public templates, +// the new version is downloaded from GitHub to the templates' directory, overwriting the old content. func (r *Runner) updateTemplates() error { home, err := os.UserHomeDir() if err != nil { @@ -61,7 +61,7 @@ func (r *Runner) updateTemplates() error { return errors.Wrap(err, "could not read configuration file") } - // If the config doesn't exist, write it now. + // If the config doesn't exist, create it now. if r.templatesConfig == nil { currentConfig := &config.Config{ TemplatesDirectory: filepath.Join(home, "nuclei-templates"), @@ -78,11 +78,8 @@ func (r *Runner) updateTemplates() error { return nil } - // Check if last checked for nuclei-ignore is more than 1 hours. - // and if true, run the check. - // - // Also at the same time fetch latest version from github to do outdated nuclei - // and templates check. + // Tests if last checked time for nuclei-ignore file was more than 1 hour ago, if yes, updates the local content. + // Retrieves the latest version number of nuclei and nuclei-templates from GitHub, to check if the current build is using outdated versions or not. checkedIgnore := false if r.templatesConfig == nil || time.Since(r.templatesConfig.LastCheckedIgnore) > 1*time.Hour { checkedIgnore = r.checkNucleiIgnoreFileUpdates(configDir) @@ -92,7 +89,7 @@ func (r *Runner) updateTemplates() error { if r.templatesConfig.CurrentVersion == "" || (r.options.TemplatesDirectory != "" && r.templatesConfig.TemplatesDirectory != r.options.TemplatesDirectory) { gologger.Info().Msgf("nuclei-templates are not installed, installing...\n") - // Use custom location if user has given a template directory + // Use the custom location if the user has given a template directory r.templatesConfig = &config.Config{ TemplatesDirectory: filepath.Join(home, "nuclei-templates"), } @@ -107,7 +104,7 @@ func (r *Runner) updateTemplates() error { } gologger.Verbose().Msgf("Downloading nuclei-templates (v%s) to %s\n", version.String(), r.templatesConfig.TemplatesDirectory) - r.fetchLatestVersionsFromGithub() // also fetch latest versions + r.fetchLatestVersionsFromGithub() // also fetch the latest versions if _, err := r.downloadReleaseAndUnzip(ctx, version.String(), asset.GetZipballURL()); err != nil { return err } @@ -120,13 +117,14 @@ func (r *Runner) updateTemplates() error { return nil } - // Check if last checked is more than 24 hours and we don't have updateTemplates flag. - // If not, return since we don't want to do anything now. + // If the template update was not requested explicitly by the user, + // and the last version check was less than 24 hours ago, + // then no further action is required. if time.Since(r.templatesConfig.LastChecked) < 24*time.Hour && !r.options.UpdateTemplates { return nil } - // Get the configuration currently on disk. + // Get the current configuration from disk. verText := r.templatesConfig.CurrentVersion indices := reVersion.FindStringIndex(verText) if indices == nil { @@ -190,7 +188,7 @@ func (r *Runner) readInternalConfigurationFile(home, configDir string) error { return nil } -// checkNucleiIgnoreFileUpdates checks .nuclei-ignore file for updates from github +// checkNucleiIgnoreFileUpdates checks .nuclei-ignore file for updates from GitHub func (r *Runner) checkNucleiIgnoreFileUpdates(configDir string) bool { ignoreURL := defaultIgnoreURL if r.templatesConfig != nil && r.templatesConfig.IgnoreURL != "" { @@ -290,7 +288,7 @@ func (r *Runner) downloadReleaseAndUnzip(ctx context.Context, version, downloadU return nil, fmt.Errorf("failed to uncompress zip file: %s", err) } - // Create the template folder if it doesn't exists + // Create the template folder if it doesn't exist if err := os.MkdirAll(r.templatesConfig.TemplatesDirectory, os.ModePerm); err != nil { return nil, fmt.Errorf("failed to create template base folder: %s", err) } diff --git a/v2/internal/severity/misc.go b/v2/internal/severity/misc.go index 8601fb368..ff9eeb06b 100644 --- a/v2/internal/severity/misc.go +++ b/v2/internal/severity/misc.go @@ -29,7 +29,7 @@ func setSeverity(severities *Severities, value string) error { return fmt.Errorf("'%s' is not a valid severity", value) } - // TODO change the Severities type to map[Severity]interface{}, where the values are struct{}{}, to "simulates" a "set" data structure + // TODO change the Severities type to map[Severity]interface{}, where the values are struct{}{}, to "simulate" a "set" data structure *severities = append(*severities, computedSeverity) return nil } diff --git a/v2/pkg/catalog/loader/filter/tag_filter.go b/v2/pkg/catalog/loader/filter/tag_filter.go index 90f9a8de2..7e0b8f9da 100644 --- a/v2/pkg/catalog/loader/filter/tag_filter.go +++ b/v2/pkg/catalog/loader/filter/tag_filter.go @@ -20,7 +20,7 @@ type TagFilter struct { var ErrExcluded = errors.New("the template was excluded") // Match filters templates based on user provided tags, authors, extraTags and severity. -// If the template contains tags specified in the deny list, it will not be matched +// If the template contains tags specified in the deny-list, it will not be matched // unless it is explicitly specified by user using the includeTags (matchAllows field). // Matching rule: (tag1 OR tag2...) AND (author1 OR author2...) AND (severity1 OR severity2...) AND (extraTags1 OR extraTags2...) // Returns true if the template matches the filter criteria, false otherwise.