100 lines
1.9 KiB
Go
100 lines
1.9 KiB
Go
|
package pwgenerator
|
||
|
|
||
|
import (
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
// Generate generates a list of passwords for a GenOpts.
|
||
|
func (o *GenOpts) Generate() (passwords []string, err error) {
|
||
|
|
||
|
// TODO
|
||
|
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// Chars returns the list of evaluated characters that would be used in a GenOpts.
|
||
|
func (o *GenOpts) Chars() (chars CharSet) {
|
||
|
|
||
|
chars = make(CharSet, 0)
|
||
|
|
||
|
if o.explicitCharset != nil && len(o.explicitCharset) != 0 {
|
||
|
chars = o.explicitCharset
|
||
|
return
|
||
|
}
|
||
|
|
||
|
if o.Alpha {
|
||
|
chars = append(chars, alpha...)
|
||
|
}
|
||
|
if o.Numeric {
|
||
|
chars = append(chars, numeric...)
|
||
|
}
|
||
|
if o.Symbols {
|
||
|
chars = append(chars, symbols...)
|
||
|
}
|
||
|
if o.ExtendedSymbols {
|
||
|
chars = append(chars, extendedSymbols...)
|
||
|
}
|
||
|
|
||
|
return
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
SetExplicitCharset sets a GenOpts' charset to an explicit selection. It is deduplicated before being used unless inclDupes is true.
|
||
|
(Duplicate runes can be used to increase the likelihood of specific characters.)
|
||
|
|
||
|
Note that if an explicit charset is defined, the following opts will have NO effect:
|
||
|
|
||
|
Alpha
|
||
|
Numeric
|
||
|
Symbols
|
||
|
ExtendedSymbols
|
||
|
CountUpper
|
||
|
CountLower
|
||
|
CountSymbols
|
||
|
CountExtended
|
||
|
DisabledChars
|
||
|
|
||
|
To have these fields be used again, call GenOpts.UnsetExplicitCharset.
|
||
|
|
||
|
chars can be a CharSet, []rune, []byte, []string, or string
|
||
|
*/
|
||
|
func (o *GenOpts) SetExplicitCharset(chars interface{}, inclDupes bool) (err error) {
|
||
|
|
||
|
var charset CharSet
|
||
|
|
||
|
switch t := chars.(type) {
|
||
|
case []rune:
|
||
|
charset = CharSet(string(t))
|
||
|
case []byte:
|
||
|
charset = CharSet(string(t))
|
||
|
case []string:
|
||
|
s := strings.Join(t, "")
|
||
|
charset = CharSet(s)
|
||
|
case string:
|
||
|
charset = CharSet(t)
|
||
|
default:
|
||
|
err = ErrBadType
|
||
|
return
|
||
|
}
|
||
|
|
||
|
if !inclDupes {
|
||
|
sortDedupe(&charset)
|
||
|
}
|
||
|
|
||
|
o.explicitCharset = charset
|
||
|
|
||
|
return
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
UnsetExplicitCharset removes the explicit charset used for generation and instead uses the fields specified in the actual GenOpts.
|
||
|
|
||
|
See GenOpts.SetExplicitCharset for more details.
|
||
|
*/
|
||
|
func (o *GenOpts) UnsetExplicitCharset() {
|
||
|
|
||
|
o.explicitCharset = nil
|
||
|
|
||
|
return
|
||
|
}
|