mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-09-22 13:39:35 +00:00
77 lines
1.3 KiB
Go
77 lines
1.3 KiB
Go
package generator
|
|
|
|
import (
|
|
"github.com/Infisical/infisical/k8-operator/api/v1alpha1"
|
|
"github.com/sethvargo/go-password/password"
|
|
)
|
|
|
|
const (
|
|
defaultLength = 24
|
|
defaultSymbolChars = "~!@#$%^&*()_+`-={}|[]\\:\"<>?,./"
|
|
digitFactor = 0.25
|
|
symbolFactor = 0.25
|
|
)
|
|
|
|
func generateSafePassword(
|
|
passLen int,
|
|
symbols int,
|
|
symbolCharacters string,
|
|
digits int,
|
|
noUpper bool,
|
|
allowRepeat bool,
|
|
) (string, error) {
|
|
gen, err := password.NewGenerator(&password.GeneratorInput{
|
|
Symbols: symbolCharacters,
|
|
})
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return gen.Generate(
|
|
passLen,
|
|
digits,
|
|
symbols,
|
|
noUpper,
|
|
allowRepeat,
|
|
)
|
|
}
|
|
|
|
func GeneratorPassword(spec v1alpha1.PasswordSpec) (string, error) {
|
|
|
|
symbolCharacters := defaultSymbolChars
|
|
|
|
if spec.SymbolCharacters != nil && *spec.SymbolCharacters != "" {
|
|
symbolCharacters = *spec.SymbolCharacters
|
|
}
|
|
|
|
passwordLength := defaultLength
|
|
|
|
if spec.Length != 0 {
|
|
passwordLength = spec.Length
|
|
}
|
|
|
|
digits := int(float32(passwordLength) * digitFactor)
|
|
if spec.Digits != nil {
|
|
digits = *spec.Digits
|
|
}
|
|
|
|
symbols := int(float32(passwordLength) * symbolFactor)
|
|
if spec.Symbols != nil {
|
|
symbols = *spec.Symbols
|
|
}
|
|
|
|
pass, err := generateSafePassword(
|
|
passwordLength,
|
|
symbols,
|
|
symbolCharacters,
|
|
digits,
|
|
spec.NoUpper,
|
|
spec.AllowRepeat,
|
|
)
|
|
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return pass, nil
|
|
}
|