github.com/codemac/docker@v1.2.1-0.20150518222241-6a18412d5b9c/pkg/stringutils/stringutils.go (about) 1 package stringutils 2 3 import ( 4 "bytes" 5 mathrand "math/rand" 6 "strings" 7 "time" 8 ) 9 10 // Generate alpha only random stirng with length n 11 func GenerateRandomAlphaOnlyString(n int) string { 12 // make a really long string 13 letters := []byte("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") 14 b := make([]byte, n) 15 r := mathrand.New(mathrand.NewSource(time.Now().UTC().UnixNano())) 16 for i := range b { 17 b[i] = letters[r.Intn(len(letters))] 18 } 19 return string(b) 20 } 21 22 // Generate Ascii random stirng with length n 23 func GenerateRandomAsciiString(n int) string { 24 chars := "abcdefghijklmnopqrstuvwxyz" + 25 "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + 26 "~!@#$%^&*()-_+={}[]\\|<,>.?/\"';:` " 27 res := make([]byte, n) 28 for i := 0; i < n; i++ { 29 res[i] = chars[mathrand.Intn(len(chars))] 30 } 31 return string(res) 32 } 33 34 // Truncate a string to maxlen 35 func Truncate(s string, maxlen int) string { 36 if len(s) <= maxlen { 37 return s 38 } 39 return s[:maxlen] 40 } 41 42 // Test wheather a string is contained in a slice of strings or not. 43 // Comparison is case insensitive 44 func InSlice(slice []string, s string) bool { 45 for _, ss := range slice { 46 if strings.ToLower(s) == strings.ToLower(ss) { 47 return true 48 } 49 } 50 return false 51 } 52 53 func quote(word string, buf *bytes.Buffer) { 54 // Bail out early for "simple" strings 55 if word != "" && !strings.ContainsAny(word, "\\'\"`${[|&;<>()~*?! \t\n") { 56 buf.WriteString(word) 57 return 58 } 59 60 buf.WriteString("'") 61 62 for i := 0; i < len(word); i++ { 63 b := word[i] 64 if b == '\'' { 65 // Replace literal ' with a close ', a \', and a open ' 66 buf.WriteString("'\\''") 67 } else { 68 buf.WriteByte(b) 69 } 70 } 71 72 buf.WriteString("'") 73 } 74 75 // Take a list of strings and escape them so they will be handled right 76 // when passed as arguments to an program via a shell 77 func ShellQuoteArguments(args []string) string { 78 var buf bytes.Buffer 79 for i, arg := range args { 80 if i != 0 { 81 buf.WriteByte(' ') 82 } 83 quote(arg, &buf) 84 } 85 return buf.String() 86 }