123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433 |
- package exprhelpers
- import (
- "time"
- "github.com/crowdsecurity/crowdsec/pkg/cticlient"
- )
- type exprCustomFunc struct {
- name string
- function func(params ...any) (any, error)
- signature []interface{}
- }
- var exprFuncs = []exprCustomFunc{
- {
- name: "CrowdsecCTI",
- function: CrowdsecCTI,
- signature: []interface{}{
- new(func(string) (*cticlient.SmokeItem, error)),
- },
- },
- {
- name: "Distance",
- function: Distance,
- signature: []interface{}{
- new(func(string, string, string, string) (float64, error)),
- },
- },
- {
- name: "GetFromStash",
- function: GetFromStash,
- signature: []interface{}{
- new(func(string, string) (string, error)),
- },
- },
- {
- name: "Atof",
- function: Atof,
- signature: []interface{}{
- new(func(string) float64),
- },
- },
- {
- name: "JsonExtract",
- function: JsonExtract,
- signature: []interface{}{
- new(func(string, string) string),
- },
- },
- {
- name: "JsonExtractUnescape",
- function: JsonExtractUnescape,
- signature: []interface{}{
- new(func(string, ...string) string),
- },
- },
- {
- name: "JsonExtractLib",
- function: JsonExtractLib,
- signature: []interface{}{
- new(func(string, ...string) string),
- },
- },
- {
- name: "JsonExtractSlice",
- function: JsonExtractSlice,
- signature: []interface{}{
- new(func(string, string) []interface{}),
- },
- },
- {
- name: "JsonExtractObject",
- function: JsonExtractObject,
- signature: []interface{}{
- new(func(string, string) map[string]interface{}),
- },
- },
- {
- name: "ToJsonString",
- function: ToJson,
- signature: []interface{}{
- new(func(interface{}) string),
- },
- },
- {
- name: "File",
- function: File,
- signature: []interface{}{
- new(func(string) []string),
- },
- },
- {
- name: "RegexpInFile",
- function: RegexpInFile,
- signature: []interface{}{
- new(func(string, string) bool),
- },
- },
- {
- name: "Upper",
- function: Upper,
- signature: []interface{}{
- new(func(string) string),
- },
- },
- {
- name: "Lower",
- function: Lower,
- signature: []interface{}{
- new(func(string) string),
- },
- },
- {
- name: "IpInRange",
- function: IpInRange,
- signature: []interface{}{
- new(func(string, string) bool),
- },
- },
- {
- name: "TimeNow",
- function: TimeNow,
- signature: []interface{}{
- new(func() string),
- },
- },
- {
- name: "ParseUri",
- function: ParseUri,
- signature: []interface{}{
- new(func(string) map[string][]string),
- },
- },
- {
- name: "PathUnescape",
- function: PathUnescape,
- signature: []interface{}{
- new(func(string) string),
- },
- },
- {
- name: "QueryUnescape",
- function: QueryUnescape,
- signature: []interface{}{
- new(func(string) string),
- },
- },
- {
- name: "PathEscape",
- function: PathEscape,
- signature: []interface{}{
- new(func(string) string),
- },
- },
- {
- name: "QueryEscape",
- function: QueryEscape,
- signature: []interface{}{
- new(func(string) string),
- },
- },
- {
- name: "XMLGetAttributeValue",
- function: XMLGetAttributeValue,
- signature: []interface{}{
- new(func(string, string, string) string),
- },
- },
- {
- name: "XMLGetNodeValue",
- function: XMLGetNodeValue,
- signature: []interface{}{
- new(func(string, string) string),
- },
- },
- {
- name: "IpToRange",
- function: IpToRange,
- signature: []interface{}{
- new(func(string, string) string),
- },
- },
- {
- name: "IsIPV6",
- function: IsIPV6,
- signature: []interface{}{
- new(func(string) bool),
- },
- },
- {
- name: "IsIPV4",
- function: IsIPV4,
- signature: []interface{}{
- new(func(string) bool),
- },
- },
- {
- name: "IsIP",
- function: IsIP,
- signature: []interface{}{
- new(func(string) bool),
- },
- },
- {
- name: "LookupHost",
- function: LookupHost,
- signature: []interface{}{
- new(func(string) []string),
- },
- },
- {
- name: "GetDecisionsCount",
- function: GetDecisionsCount,
- signature: []interface{}{
- new(func(string) int),
- },
- },
- {
- name: "GetDecisionsSinceCount",
- function: GetDecisionsSinceCount,
- signature: []interface{}{
- new(func(string, string) int),
- },
- },
- {
- name: "Sprintf",
- function: Sprintf,
- signature: []interface{}{
- new(func(string, ...interface{}) string),
- },
- },
- {
- name: "ParseUnix",
- function: ParseUnix,
- signature: []interface{}{
- new(func(string) string),
- },
- },
- {
- name: "SetInStash", //FIXME: signature will probably blow everything up
- function: SetInStash,
- signature: []interface{}{
- new(func(string, string, string, *time.Duration) error),
- },
- },
- {
- name: "Fields",
- function: Fields,
- signature: []interface{}{
- new(func(string) []string),
- },
- },
- {
- name: "Index",
- function: Index,
- signature: []interface{}{
- new(func(string, string) int),
- },
- },
- {
- name: "IndexAny",
- function: IndexAny,
- signature: []interface{}{
- new(func(string, string) int),
- },
- },
- {
- name: "Join",
- function: Join,
- signature: []interface{}{
- new(func([]string, string) string),
- },
- },
- {
- name: "Split",
- function: Split,
- signature: []interface{}{
- new(func(string, string) []string),
- },
- },
- {
- name: "SplitAfter",
- function: SplitAfter,
- signature: []interface{}{
- new(func(string, string) []string),
- },
- },
- {
- name: "SplitAfterN",
- function: SplitAfterN,
- signature: []interface{}{
- new(func(string, string, int) []string),
- },
- },
- {
- name: "SplitN",
- function: SplitN,
- signature: []interface{}{
- new(func(string, string, int) []string),
- },
- },
- {
- name: "Replace",
- function: Replace,
- signature: []interface{}{
- new(func(string, string, string, int) string),
- },
- },
- {
- name: "ReplaceAll",
- function: ReplaceAll,
- signature: []interface{}{
- new(func(string, string, string) string),
- },
- },
- {
- name: "Trim",
- function: Trim,
- signature: []interface{}{
- new(func(string, string) string),
- },
- },
- {
- name: "TrimLeft",
- function: TrimLeft,
- signature: []interface{}{
- new(func(string, string) string),
- },
- },
- {
- name: "TrimRight",
- function: TrimRight,
- signature: []interface{}{
- new(func(string, string) string),
- },
- },
- {
- name: "TrimSpace",
- function: TrimSpace,
- signature: []interface{}{
- new(func(string) string),
- },
- },
- {
- name: "TrimPrefix",
- function: TrimPrefix,
- signature: []interface{}{
- new(func(string, string) string),
- },
- },
- {
- name: "TrimSuffix",
- function: TrimSuffix,
- signature: []interface{}{
- new(func(string, string) string),
- },
- },
- {
- name: "Get",
- function: Get,
- signature: []interface{}{
- new(func([]string, int) string),
- },
- },
- {
- name: "ToString",
- function: ToString,
- signature: []interface{}{
- new(func(interface{}) string),
- },
- },
- {
- name: "Match",
- function: Match,
- signature: []interface{}{
- new(func(string, string) bool),
- },
- },
- {
- name: "KeyExists",
- function: KeyExists,
- signature: []interface{}{
- new(func(string, map[string]any) bool),
- },
- },
- {
- name: "LogInfo",
- function: LogInfo,
- signature: []interface{}{
- new(func(string, ...interface{}) bool),
- },
- },
- {
- name: "B64Decode",
- function: B64Decode,
- signature: []interface{}{
- new(func(string) string),
- },
- },
- {
- name: "UnmarshalJSON",
- function: UnmarshalJSON,
- signature: []interface{}{
- new(func(string, map[string]interface{}, string) error),
- },
- },
- {
- name: "ParseKV",
- function: ParseKV,
- signature: []interface{}{
- new(func(string, map[string]interface{}, string) error),
- },
- },
- {
- name: "Hostname",
- function: Hostname,
- signature: []interface{}{
- new(func() (string, error)),
- },
- },
- {
- name: "FloatApproxEqual",
- function: FloatApproxEqual,
- signature: []interface{}{
- new(func(float64, float64) bool),
- },
- },
- }
- //go 1.20 "CutPrefix": strings.CutPrefix,
- //go 1.20 "CutSuffix": strings.CutSuffix,
- //"Cut": strings.Cut, -> returns more than 2 values, not supported by expr
|