From 0591eed275fd24e5c1b959e1a182bea6f6275c34 Mon Sep 17 00:00:00 2001 From: Bryan McNulty Date: Wed, 26 Feb 2025 19:42:55 -0600 Subject: Initial commit +scmrexec --- internal/util/util.go | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 internal/util/util.go (limited to 'internal') diff --git a/internal/util/util.go b/internal/util/util.go new file mode 100644 index 0000000..252815e --- /dev/null +++ b/internal/util/util.go @@ -0,0 +1,35 @@ +package util + +import ( + "math/rand" // not crypto secure + "regexp" +) + +const randHostnameCharset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-" +const randStringCharset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" + +var ( + // Up to 15 characters; only letters, digits, and hyphens (with hyphens not at the start or end). + randHostnameRegex = regexp.MustCompile(`^[a-zA-Z][a-zA-Z0-9-]{0,14}[a-zA-Z0-9]$`) +) + +func RandomHostname() (hostname string) { + for { + // between 2 and 10 characters + if hostname = RandomStringFromCharset(randHostnameCharset, rand.Intn(8)+2); randHostnameRegex.MatchString(hostname) { + return + } + } +} + +func RandomString() string { + return RandomStringFromCharset(randStringCharset, rand.Intn(10)+6) +} + +func RandomStringFromCharset(charset string, length int) string { + b := make([]byte, length) + for i := range length { + b[i] = charset[rand.Intn(len(charset))] + } + return string(b) +} -- cgit v1.2.3