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  }