Path: blob/dev/pkg/protocols/common/generators/load.go
2843 views
package generators12import (3"bufio"4"io"5"strings"67"github.com/pkg/errors"8pkgTypes "github.com/projectdiscovery/nuclei/v3/pkg/types"9"github.com/spf13/cast"10)1112// loadPayloads loads the input payloads from a map to a data map13func (generator *PayloadGenerator) loadPayloads(payloads map[string]interface{}, templatePath string) (map[string][]string, error) {14loadedPayloads := make(map[string][]string)1516for name, payload := range payloads {17switch pt := payload.(type) {18case string:19// Fast path: if no newline, treat as file path20if !strings.ContainsRune(pt, '\n') {21file, err := generator.options.LoadHelperFile(pt, templatePath, generator.catalog)22if err != nil {23return nil, errors.Wrap(err, "could not load payload file")24}25payloads, err := generator.loadPayloadsFromFile(file)26if err != nil {27return nil, errors.Wrap(err, "could not load payloads")28}29loadedPayloads[name] = payloads30break31}32// Multiline inline payloads33elements := strings.Split(pt, "\n")34//golint:gomnd // this is not a magic number35if len(elements) >= 2 {36loadedPayloads[name] = elements37} else {38file, err := generator.options.LoadHelperFile(pt, templatePath, generator.catalog)39if err != nil {40return nil, errors.Wrap(err, "could not load payload file")41}42payloads, err := generator.loadPayloadsFromFile(file)43if err != nil {44return nil, errors.Wrap(err, "could not load payloads")45}46loadedPayloads[name] = payloads47}48case interface{}:49loadedPayloads[name] = cast.ToStringSlice(pt)50}51}52return loadedPayloads, nil53}5455// loadPayloadsFromFile loads a file to a string slice56func (generator *PayloadGenerator) loadPayloadsFromFile(file io.ReadCloser) ([]string, error) {57var lines []string58defer func() {59_ = file.Close()60}()6162scanner := bufio.NewScanner(file)63for scanner.Scan() {64text := scanner.Text()65if text == "" {66continue67}68lines = append(lines, text)69}70if err := scanner.Err(); err != nil && !errors.Is(err, pkgTypes.ErrNoMoreRequests) {71return lines, scanner.Err()72}73return lines, nil74}757677