apg-go/config.go
Winni Neessen 499a82d884
#53 Add fixed length option for password generation
A FixedLength field was added to the Config struct and a corresponding command line flag was added in `apg.go`. The field allows for the generation of passwords of a fixed length, overriding the MinLength and MaxLength values if present. Revised the `random.go` script to accommodate this change. The option for fixed length enhances the flexibility and customization of the password generation tool.
2023-08-05 15:04:34 +02:00

76 lines
2.2 KiB
Go

package apg
// List of default values for Config instances
const (
// DefaultMinLength reflects the default minimum length of a generated password
DefaultMinLength int64 = 12
// DefaultMaxLength reflects the default maximum length of a generated password
DefaultMaxLength int64 = 20
// DefaultMode sets the default character set mode bitmask to a combination of
// lower- and upper-case characters as well as numbers
DefaultMode ModeMask = ModeLowerCase | ModeNumber | ModeUpperCase
// DefaultNumberPass reflects the default amount of passwords returned by the generator
DefaultNumberPass int64 = 6
)
// Config represents the apg.Generator config parameters
type Config struct {
// Algo
Algorithm Algorithm
// FixedLength sets a fixed length for generated passwords and ignores
// the MinLength and MaxLength values
FixedLength int64
// MaxLength sets the maximum length for a generated password
MaxLength int64
// MinLength sets the minimum length for a generated password
MinLength int64
// Mode holds the different character modes for the Random algorithm
Mode ModeMask
// NumberPass sets the number of passwords that are generated
// and returned by the generator
NumberPass int64
}
// Option is a function that can override default Config settings
type Option func(*Config)
// NewConfig creates a new Config instance and pre-fills it with sane
// default settings. The Config is returned as pointer value
func NewConfig(o ...Option) *Config {
c := &Config{
MaxLength: DefaultMaxLength,
MinLength: DefaultMinLength,
Mode: DefaultMode,
NumberPass: DefaultNumberPass,
}
// Override defaults with optionally provided config.Option functions
for _, co := range o {
if co == nil {
continue
}
co(c)
}
return c
}
// WithMinLength overrides the minimum password length
func WithMinLength(l int64) Option {
return func(c *Config) {
c.MinLength = l
}
}
// WithMaxLength overrides the maximum password length
func WithMaxLength(l int64) Option {
return func(c *Config) {
c.MaxLength = l
}
}
// WithNumberPass overrides the number of generated passwords setting
func WithNumberPass(n int64) Option {
return func(c *Config) {
c.NumberPass = n
}
}