aboutsummaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
Diffstat (limited to 'internal')
-rw-r--r--internal/util/util.go35
1 files changed, 35 insertions, 0 deletions
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)
+}