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  }