2022-01-09 17:22:04 +05:30

34 lines
998 B
Go

package replacer
import (
"strings"
"github.com/projectdiscovery/nuclei/v2/pkg/protocols/common/marker"
"github.com/projectdiscovery/nuclei/v2/pkg/types"
)
// Replace replaces placeholders in template with values on the fly.
func Replace(template string, values map[string]interface{}) string {
var replacerItems []string
builder := &strings.Builder{}
for key, val := range values {
builder.WriteString(marker.ParenthesisOpen)
builder.WriteString(key)
builder.WriteString(marker.ParenthesisClose)
replacerItems = append(replacerItems, builder.String())
builder.Reset()
replacerItems = append(replacerItems, types.ToString(val))
builder.WriteString(marker.General)
builder.WriteString(key)
builder.WriteString(marker.General)
replacerItems = append(replacerItems, builder.String())
builder.Reset()
replacerItems = append(replacerItems, types.ToString(val))
}
replacer := strings.NewReplacer(replacerItems...)
final := replacer.Replace(template)
return final
}