github.com/projectdiscovery/nuclei/v2@v2.9.15/pkg/protocols/common/utils/vardump/dump.go (about)

     1  package vardump
     2  
     3  import (
     4  	"strconv"
     5  	"strings"
     6  
     7  	"github.com/projectdiscovery/nuclei/v2/pkg/types"
     8  )
     9  
    10  // EnableVarDump enables var dump for debugging optionally
    11  var EnableVarDump bool
    12  
    13  // DumpVariables writes the truncated dump of variables to a string
    14  // in a formatted key-value manner.
    15  //
    16  // The values are truncated to return 50 characters from start and end.
    17  func DumpVariables(data map[string]interface{}) string {
    18  	var counter int
    19  
    20  	buffer := &strings.Builder{}
    21  	buffer.Grow(len(data) * 78) // grow buffer to an approximate size
    22  
    23  	builder := &strings.Builder{}
    24  	for k, v := range data {
    25  		valueString := types.ToString(v)
    26  
    27  		counter++
    28  		if len(valueString) > 50 {
    29  			builder.Grow(56)
    30  			builder.WriteString(valueString[0:25])
    31  			builder.WriteString(" .... ")
    32  			builder.WriteString(valueString[len(valueString)-25:])
    33  			valueString = builder.String()
    34  			builder.Reset()
    35  		}
    36  		valueString = strings.ReplaceAll(strings.ReplaceAll(valueString, "\r", " "), "\n", " ")
    37  
    38  		buffer.WriteString("\t")
    39  		buffer.WriteString(strconv.Itoa(counter))
    40  		buffer.WriteString(". ")
    41  		buffer.WriteString(k)
    42  		buffer.WriteString(" => ")
    43  		buffer.WriteString(valueString)
    44  		buffer.WriteString("\n")
    45  	}
    46  	final := buffer.String()
    47  	return final
    48  }