80 lines
1.3 KiB
Go
80 lines
1.3 KiB
Go
package passgen
|
|
|
|
type Passgen struct {
|
|
Version int
|
|
Passphrase string
|
|
Salt string
|
|
Length int
|
|
NoUppers bool
|
|
NoNumbers bool
|
|
NoSpecials bool
|
|
CustomSpecials string
|
|
}
|
|
|
|
type PassgenOption func(*Passgen)
|
|
|
|
func WithVersion(version int) PassgenOption {
|
|
return func(p *Passgen) {
|
|
p.Version = version
|
|
}
|
|
}
|
|
|
|
func WithPassphrase(passphrase string) PassgenOption {
|
|
return func(p *Passgen) {
|
|
p.Passphrase = passphrase
|
|
}
|
|
}
|
|
|
|
func WithSalt(salt string) PassgenOption {
|
|
return func(p *Passgen) {
|
|
p.Salt = salt
|
|
}
|
|
}
|
|
|
|
func WithLength(length int) PassgenOption {
|
|
return func(p *Passgen) {
|
|
p.Length = length
|
|
}
|
|
}
|
|
|
|
func WithoutSpecials() PassgenOption {
|
|
return func(p *Passgen) {
|
|
p.NoSpecials = true
|
|
}
|
|
}
|
|
|
|
func WithoutNumbers() PassgenOption {
|
|
return func(p *Passgen) {
|
|
p.NoNumbers = true
|
|
}
|
|
}
|
|
|
|
func WithoutUppers() PassgenOption {
|
|
return func(p *Passgen) {
|
|
p.NoUppers = true
|
|
}
|
|
}
|
|
|
|
func WithCustomSpecials(specials string) PassgenOption {
|
|
return func(p *Passgen) {
|
|
p.CustomSpecials = specials
|
|
}
|
|
}
|
|
|
|
func NewPasswordGenerator(opts ...PassgenOption) *Passgen {
|
|
p := &Passgen{
|
|
Version: 2,
|
|
Length: 40,
|
|
NoUppers: false,
|
|
NoNumbers: false,
|
|
NoSpecials: false,
|
|
CustomSpecials: "!@#$%^&*",
|
|
}
|
|
|
|
for _, opt := range opts {
|
|
opt(p)
|
|
}
|
|
|
|
return p
|
|
}
|