package idp import ( "encoding/json" "math/rand" "strings" ) var ( lowerCharSet = "abcdedfghijklmnopqrst" upperCharSet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" specialCharSet = "!@#$%&*" numberSet = "0123456789" allCharSet = lowerCharSet + upperCharSet + specialCharSet + numberSet ) type JsonParser struct{} func (JsonParser) Marshal(v interface{}) ([]byte, error) { return json.Marshal(v) } func (JsonParser) Unmarshal(data []byte, v interface{}) error { return json.Unmarshal(data, v) } // GeneratePassword generates user password func GeneratePassword(passwordLength, minSpecialChar, minNum, minUpperCase int) string { var password strings.Builder //Set special character for i := 0; i < minSpecialChar; i++ { random := rand.Intn(len(specialCharSet)) password.WriteString(string(specialCharSet[random])) } //Set numeric for i := 0; i < minNum; i++ { random := rand.Intn(len(numberSet)) password.WriteString(string(numberSet[random])) } //Set uppercase for i := 0; i < minUpperCase; i++ { random := rand.Intn(len(upperCharSet)) password.WriteString(string(upperCharSet[random])) } remainingLength := passwordLength - minSpecialChar - minNum - minUpperCase for i := 0; i < remainingLength; i++ { random := rand.Intn(len(allCharSet)) password.WriteString(string(allCharSet[random])) } inRune := []rune(password.String()) rand.Shuffle(len(inRune), func(i, j int) { inRune[i], inRune[j] = inRune[j], inRune[i] }) return string(inRune) }