Path: blob/dev/pkg/protocols/common/generators/load.go
2072 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:19elements := strings.Split(pt, "\n")20//golint:gomnd // this is not a magic number21if len(elements) >= 2 {22loadedPayloads[name] = elements23} else {24file, err := generator.options.LoadHelperFile(pt, templatePath, generator.catalog)25if err != nil {26return nil, errors.Wrap(err, "could not load payload file")27}28payloads, err := generator.loadPayloadsFromFile(file)29if err != nil {30return nil, errors.Wrap(err, "could not load payloads")31}32loadedPayloads[name] = payloads33}34case interface{}:35loadedPayloads[name] = cast.ToStringSlice(pt)36}37}38return loadedPayloads, nil39}4041// loadPayloadsFromFile loads a file to a string slice42func (generator *PayloadGenerator) loadPayloadsFromFile(file io.ReadCloser) ([]string, error) {43var lines []string44defer func() {45_ = file.Close()46}()4748scanner := bufio.NewScanner(file)49for scanner.Scan() {50text := scanner.Text()51if text == "" {52continue53}54lines = append(lines, text)55}56if err := scanner.Err(); err != nil && !errors.Is(err, pkgTypes.ErrNoMoreRequests) {57return lines, scanner.Err()58}59return lines, nil60}616263