@@ -3,6 +3,9 @@ package random
3
3
import (
4
4
"crypto/rand"
5
5
"math/big"
6
+ "strings"
7
+
8
+ "github.com/vulncheck-oss/go-exploit/output"
6
9
)
7
10
8
11
var (
@@ -16,7 +19,10 @@ func RandIntRange(rangeMin int, rangeMax int) int {
16
19
rangeMaxBig := big .NewInt (int64 (rangeMax ) - int64 (rangeMin ))
17
20
n , err := rand .Int (rand .Reader , rangeMaxBig )
18
21
if err != nil {
19
- panic (err )
22
+ // if random fails the process will die anyway: https://github.com/golang/go/issues/66821
23
+ output .PrintfFrameworkError ("Random generation error: %s" , err .Error ())
24
+
25
+ return 0
20
26
}
21
27
22
28
return int (n .Int64 () + int64 (rangeMin ))
@@ -26,7 +32,10 @@ func RandIntRange(rangeMin int, rangeMax int) int {
26
32
func RandPositiveInt (rangeMax int ) int {
27
33
n , err := rand .Int (rand .Reader , big .NewInt (int64 (rangeMax )))
28
34
if err != nil {
29
- panic (err )
35
+ // if random fails the process will die anyway: https://github.com/golang/go/issues/66821
36
+ output .PrintfFrameworkError ("Random generation error: %s" , err .Error ())
37
+
38
+ return 0
30
39
}
31
40
32
41
return int (n .Int64 ())
@@ -42,7 +51,7 @@ func RandLetters(n int) string {
42
51
return string (runeSlice )
43
52
}
44
53
45
- // RandLetters generates a random alpha string with no bad chars of length n.
54
+ // RandLettersNoBadChars generates a random alpha string with no bad chars of length n.
46
55
// This will return an empty string if the caller badchars all "letters".
47
56
func RandLettersNoBadChars (n int , badchars []rune ) string {
48
57
// rebuild the letters slice without the bad chars. O(n^2) implementation
@@ -111,3 +120,23 @@ func RandDigits(n int) string {
111
120
func RandDigitsRange (rangeMin int , rangeMax int ) string {
112
121
return RandDigits (RandIntRange (rangeMin , rangeMax ))
113
122
}
123
+
124
+ // RandDomain generates a random domain name with a common TLDs. The domain will be between 8 and 14 characters.
125
+ func RandDomain () string {
126
+ return strings .ToLower (RandLettersRange (4 , 10 ) + "." + CommonTLDs [RandPositiveInt (len (CommonTLDs ))])
127
+ }
128
+
129
+ // RandEmail generates a random email address using common domain TLDs. The largest size of the
130
+ // generated domain will be 23 characters and smallest will be 13 characters. The goal is not to
131
+ // generate a set of RFC valid domains, but simple lower case emails that are valid for most
132
+ // automated account registration or usage, so these might be "too simple" or for some uses.
133
+ func RandEmail () string {
134
+ return strings .ToLower (RandLettersRange (4 , 8 ) + "@" + RandDomain ())
135
+ }
136
+
137
+ // CommonTLDs contains the 3 most common DNS TLDs.
138
+ var CommonTLDs = []string {
139
+ "com" ,
140
+ "org" ,
141
+ "net" ,
142
+ }
0 commit comments