github.com/projectdiscovery/nuclei/v2@v2.9.15/pkg/protocols/common/generators/load_test.go (about)

     1  package generators
     2  
     3  import (
     4  	"os"
     5  	"path/filepath"
     6  	"testing"
     7  
     8  	"github.com/projectdiscovery/nuclei/v2/pkg/catalog/disk"
     9  	osutils "github.com/projectdiscovery/utils/os"
    10  	"github.com/stretchr/testify/require"
    11  )
    12  
    13  func TestLoadPayloads(t *testing.T) {
    14  	tempdir, err := os.MkdirTemp("", "templates-*")
    15  	require.NoError(t, err, "could not create temp dir")
    16  	defer os.RemoveAll(tempdir)
    17  
    18  	generator := &PayloadGenerator{catalog: disk.NewCatalog(tempdir)}
    19  
    20  	fullpath := filepath.Join(tempdir, "payloads.txt")
    21  	err = os.WriteFile(fullpath, []byte("test\nanother"), 0777)
    22  	require.NoError(t, err, "could not write payload")
    23  
    24  	// Test sandbox
    25  	t.Run("templates-directory", func(t *testing.T) {
    26  		values, err := generator.loadPayloads(map[string]interface{}{
    27  			"new": fullpath,
    28  		}, "/test", tempdir, false)
    29  		require.NoError(t, err, "could not load payloads")
    30  		require.Equal(t, map[string][]string{"new": {"test", "another"}}, values, "could not get values")
    31  	})
    32  	t.Run("templates-path-relative", func(t *testing.T) {
    33  		_, err := generator.loadPayloads(map[string]interface{}{
    34  			"new": "../../../../../../../../../etc/passwd",
    35  		}, ".", tempdir, false)
    36  		require.Error(t, err, "could load payloads")
    37  	})
    38  	t.Run("template-directory", func(t *testing.T) {
    39  		values, err := generator.loadPayloads(map[string]interface{}{
    40  			"new": fullpath,
    41  		}, filepath.Join(tempdir, "test.yaml"), "/test", false)
    42  		require.NoError(t, err, "could not load payloads")
    43  		require.Equal(t, map[string][]string{"new": {"test", "another"}}, values, "could not get values")
    44  	})
    45  	t.Run("no-sandbox-unix", func(t *testing.T) {
    46  		if osutils.IsWindows() {
    47  			return
    48  		}
    49  		_, err := generator.loadPayloads(map[string]interface{}{
    50  			"new": "/etc/passwd",
    51  		}, "/random", "/test", true)
    52  		require.NoError(t, err, "could load payloads")
    53  	})
    54  	t.Run("invalid", func(t *testing.T) {
    55  		values, err := generator.loadPayloads(map[string]interface{}{
    56  			"new": "/etc/passwd",
    57  		}, "/random", "/test", false)
    58  		require.Error(t, err, "could load payloads")
    59  		require.Equal(t, 0, len(values), "could get values")
    60  
    61  		values, err = generator.loadPayloads(map[string]interface{}{
    62  			"new": fullpath,
    63  		}, "/random", "/test", false)
    64  		require.Error(t, err, "could load payloads")
    65  		require.Equal(t, 0, len(values), "could get values")
    66  	})
    67  }