package common import ( "bufio" "crypto/rand" "io" "math/big" "strings" ) func AddStringSliceItem(item string, slice *[]string) { for _, i := range *slice { if i == item { return } } *slice = append(*slice, item) } func RemoveStringSliceItem(item string, slice *[]string) { for i, listItem := range *slice { if item == listItem { (*slice)[i] = (*slice)[len(*slice)-1] *slice = (*slice)[:len(*slice)-1] } } } func ResponseContainsSubstring(reader io.ReadCloser, target string) (bool, error) { scanner := bufio.NewScanner(reader) for scanner.Scan() { if strings.Contains(scanner.Text(), target) { return true, nil } } if err := scanner.Err(); err != nil { return false, err } return false, nil } var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789") // RandomID returns a random string of the given length. func RandomID(length int) string { b := make([]rune, length) for i := range b { randInt, _ := rand.Int(rand.Reader, big.NewInt(int64(len(letters)))) b[i] = letters[randInt.Int64()] } return string(b) } // SliceContainsString searches a slice to determine if it contains a specified string. // Returns the index of the first match in the slice. func SliceContainsString(origTargetString string, stringSlice []string, ignoreCase bool) (bool, string, int) { targetString := origTargetString if ignoreCase { targetString = strings.ToLower(origTargetString) } for i, origStringFromSlice := range stringSlice { stringFromSlice := origStringFromSlice if ignoreCase { stringFromSlice = strings.ToLower(origStringFromSlice) } if targetString == stringFromSlice { return true, targetString, i } } return false, "", 0 }