mirror of
https://github.com/projectdiscovery/nuclei.git
synced 2025-12-18 01:55:28 +00:00
* use parsed options while signing * update project layout to v3 * fix .gitignore * remove example template * misc updates * bump tlsx version * hide template sig warning with env * js: retain value while using log * fix nil pointer derefernce * misc doc update --------- Co-authored-by: sandeep <8293321+ehsandeep@users.noreply.github.com>
65 lines
1.4 KiB
Go
65 lines
1.4 KiB
Go
package generators
|
|
|
|
import (
|
|
"reflect"
|
|
)
|
|
|
|
// MergeMapsMany merges many maps into a new map
|
|
func MergeMapsMany(maps ...interface{}) map[string][]string {
|
|
m := make(map[string][]string)
|
|
for _, gotMap := range maps {
|
|
val := reflect.ValueOf(gotMap)
|
|
if val.Kind() != reflect.Map {
|
|
continue
|
|
}
|
|
appendToSlice := func(key, value string) {
|
|
if values, ok := m[key]; !ok {
|
|
m[key] = []string{value}
|
|
} else {
|
|
m[key] = append(values, value)
|
|
}
|
|
}
|
|
for _, e := range val.MapKeys() {
|
|
v := val.MapIndex(e)
|
|
switch v.Kind() {
|
|
case reflect.Slice, reflect.Array:
|
|
for i := 0; i < v.Len(); i++ {
|
|
appendToSlice(e.String(), v.Index(i).String())
|
|
}
|
|
case reflect.String:
|
|
appendToSlice(e.String(), v.String())
|
|
case reflect.Interface:
|
|
switch data := v.Interface().(type) {
|
|
case string:
|
|
appendToSlice(e.String(), data)
|
|
case []string:
|
|
for _, value := range data {
|
|
appendToSlice(e.String(), value)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return m
|
|
}
|
|
|
|
// MergeMaps merges two maps into a new map
|
|
func MergeMaps(maps ...map[string]interface{}) map[string]interface{} {
|
|
merged := make(map[string]interface{})
|
|
for _, m := range maps {
|
|
for k, v := range m {
|
|
merged[k] = v
|
|
}
|
|
}
|
|
return merged
|
|
}
|
|
|
|
// ExpandMapValues converts values from flat string to string slice
|
|
func ExpandMapValues(m map[string]string) map[string][]string {
|
|
m1 := make(map[string][]string, len(m))
|
|
for k, v := range m {
|
|
m1[k] = []string{v}
|
|
}
|
|
return m1
|
|
}
|