40 lines
1.0 KiB
Go
Raw Normal View History

2020-12-24 12:56:28 +05:30
package replacer
import (
2021-03-05 19:25:09 +05:30
"strings"
"github.com/projectdiscovery/nuclei/v2/pkg/types"
2020-12-24 12:56:28 +05:30
)
2020-12-28 01:33:50 +05:30
// Payload marker constants
2020-12-24 12:56:28 +05:30
const (
2020-12-28 01:33:50 +05:30
MarkerGeneral = "§"
MarkerParenthesisOpen = "{{"
MarkerParenthesisClose = "}}"
2020-12-24 12:56:28 +05:30
)
// Replace replaces placeholders in template with values on the fly.
func Replace(template string, values map[string]interface{}) string {
2021-03-05 19:25:09 +05:30
var replacerItems []string
builder := &strings.Builder{}
for key, val := range values {
builder.WriteString(MarkerParenthesisOpen)
builder.WriteString(key)
builder.WriteString(MarkerParenthesisClose)
replacerItems = append(replacerItems, builder.String())
builder.Reset()
replacerItems = append(replacerItems, types.ToString(val))
builder.WriteString(MarkerGeneral)
builder.WriteString(key)
builder.WriteString(MarkerGeneral)
replacerItems = append(replacerItems, builder.String())
builder.Reset()
replacerItems = append(replacerItems, types.ToString(val))
}
replacer := strings.NewReplacer(replacerItems...)
final := replacer.Replace(template)
return final
2020-12-24 12:56:28 +05:30
}