github.com/ActiveState/cli@v0.0.0-20240508170324-6801f60cd051/cmd/state-svc/internal/messages/condition.go (about) 1 package messages 2 3 import ( 4 "regexp" 5 "strings" 6 "text/template" 7 8 "github.com/ActiveState/cli/internal/multilog" 9 "github.com/ActiveState/cli/pkg/sysinfo" 10 "github.com/blang/semver" 11 "github.com/thoas/go-funk" 12 ) 13 14 type ConditionParams struct { 15 UserID string 16 UserName string 17 UserEmail string 18 OS string 19 OSVersion Version 20 StateChannel string 21 StateVersion Version 22 Command string 23 Flags []string 24 } 25 26 type Version struct { 27 Raw string 28 Major int 29 Minor int 30 Patch int 31 Build string 32 } 33 34 func NewVersionFromSemver(v semver.Version) Version { 35 return Version{ 36 Raw: v.String(), 37 Major: int(v.Major), 38 Minor: int(v.Minor), 39 Patch: int(v.Patch), 40 } 41 } 42 43 func NewVersionFromSysinfo(osVersion *sysinfo.OSVersionInfo) Version { 44 return Version{ 45 Raw: osVersion.Version, 46 Major: osVersion.Major, 47 Minor: osVersion.Minor, 48 Patch: osVersion.Micro, 49 } 50 } 51 52 func conditionFuncMap() template.FuncMap { 53 return map[string]interface{}{ 54 "contains": funk.Contains, 55 "hasSuffix": strings.HasSuffix, 56 "hasPrefix": strings.HasPrefix, 57 "regexMatch": func(str, pattern string) bool { 58 rx, err := regexp.Compile(pattern) 59 if err != nil { 60 multilog.Error("Messages: Could not compile regex pattern: %s", err) 61 return false 62 } 63 return rx.MatchString(str) 64 }, 65 } 66 }