2022-01-24 11:21:30 +01:00
|
|
|
package idp
|
|
|
|
|
2022-10-13 18:26:31 +02:00
|
|
|
import (
|
|
|
|
"encoding/json"
|
|
|
|
"math/rand"
|
|
|
|
"strings"
|
|
|
|
)
|
|
|
|
|
|
|
|
var (
|
|
|
|
lowerCharSet = "abcdedfghijklmnopqrst"
|
|
|
|
upperCharSet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
|
|
|
specialCharSet = "!@#$%&*"
|
|
|
|
numberSet = "0123456789"
|
|
|
|
allCharSet = lowerCharSet + upperCharSet + specialCharSet + numberSet
|
|
|
|
)
|
2022-01-24 11:21:30 +01:00
|
|
|
|
|
|
|
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)
|
|
|
|
}
|
2022-10-13 18:26:31 +02:00
|
|
|
|
|
|
|
// 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)
|
|
|
|
}
|