2022-08-25 15:37:03 +05:30
|
|
|
package vardump
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"strconv"
|
|
|
|
|
"strings"
|
|
|
|
|
|
2023-10-17 17:44:13 +05:30
|
|
|
"github.com/projectdiscovery/nuclei/v3/pkg/types"
|
2023-06-09 19:52:56 +05:30
|
|
|
mapsutil "github.com/projectdiscovery/utils/maps"
|
2022-08-25 15:37:03 +05:30
|
|
|
)
|
|
|
|
|
|
2022-11-01 20:28:50 +05:30
|
|
|
// EnableVarDump enables var dump for debugging optionally
|
|
|
|
|
var EnableVarDump bool
|
|
|
|
|
|
2022-08-25 15:37:03 +05:30
|
|
|
// DumpVariables writes the truncated dump of variables to a string
|
|
|
|
|
// in a formatted key-value manner.
|
|
|
|
|
//
|
|
|
|
|
// The values are truncated to return 50 characters from start and end.
|
|
|
|
|
func DumpVariables(data map[string]interface{}) string {
|
|
|
|
|
var counter int
|
|
|
|
|
|
|
|
|
|
buffer := &strings.Builder{}
|
|
|
|
|
buffer.Grow(len(data) * 78) // grow buffer to an approximate size
|
|
|
|
|
|
|
|
|
|
builder := &strings.Builder{}
|
2023-06-09 19:52:56 +05:30
|
|
|
// sort keys for deterministic output
|
|
|
|
|
keys := mapsutil.GetSortedKeys(data)
|
|
|
|
|
|
|
|
|
|
for _, k := range keys {
|
|
|
|
|
v := data[k]
|
2022-08-25 15:37:03 +05:30
|
|
|
valueString := types.ToString(v)
|
|
|
|
|
|
|
|
|
|
counter++
|
|
|
|
|
if len(valueString) > 50 {
|
|
|
|
|
builder.Grow(56)
|
|
|
|
|
builder.WriteString(valueString[0:25])
|
|
|
|
|
builder.WriteString(" .... ")
|
|
|
|
|
builder.WriteString(valueString[len(valueString)-25:])
|
|
|
|
|
valueString = builder.String()
|
|
|
|
|
builder.Reset()
|
|
|
|
|
}
|
|
|
|
|
valueString = strings.ReplaceAll(strings.ReplaceAll(valueString, "\r", " "), "\n", " ")
|
|
|
|
|
|
|
|
|
|
buffer.WriteString("\t")
|
|
|
|
|
buffer.WriteString(strconv.Itoa(counter))
|
|
|
|
|
buffer.WriteString(". ")
|
|
|
|
|
buffer.WriteString(k)
|
|
|
|
|
buffer.WriteString(" => ")
|
|
|
|
|
buffer.WriteString(valueString)
|
|
|
|
|
buffer.WriteString("\n")
|
|
|
|
|
}
|
|
|
|
|
final := buffer.String()
|
|
|
|
|
return final
|
|
|
|
|
}
|