-x, -f, env vars, prepping for hashing
This commit is contained in:
@@ -2,18 +2,24 @@ package main
|
||||
|
||||
// Arguments contains the invocation arguments.
|
||||
type Arguments struct {
|
||||
NoAlpha bool `short:"a" long:"disable-alpha" description:"If specified, do NOT include the Alphabetical (letter) charset."`
|
||||
NoNum bool `short:"n" long:"disable-num" description:"If specified, do NOT include the Numerical (number) charset."`
|
||||
NoSymbols bool `short:"s" long:"disable-symbols" description:"If specified, do NOT include the Simple Symbols charset."`
|
||||
ExtendSymbols bool `short:"S" long:"enable-extended-symbols" description:"If specified, include the Extended Symbols charset (these characters may cause issues in some applications)."`
|
||||
NumUpper uint `short:"u" long:"count-upper" description:"The number of minimum uppercase characters. If not specified, this is random (if in the charset)."`
|
||||
NumLower uint `short:"U" long:"count-lower" description:"The number of minimum lowercase characters. If not specified, this is random (if in the charset)."`
|
||||
NumNumbers uint `short:"N" long:"count-numbers" description:"The number of minimum number characters. If not specified, this is random (if in the charset)."`
|
||||
NumSymbols uint `short:"y" long:"count-symbols" description:"The number of minimum simple symbol characters. If not specified, this is random (if in the charset)."`
|
||||
NumExtended uint `short:"Y" long:"count-extended" description:"The number of minimum extended symbol characters. If not specified, this is random (if in the charset)."`
|
||||
DisableChars []string `short:"d" long:"disable-chars" description:"If specified, these chars should be explicitly excluded from the charset(s). Can be specified multiple times with multiple chars per switch."`
|
||||
ExplicitChars []string `short:"e" long:"explicit-chars" description:"If specified, ignore all charset selection and only use these characters to select from. Can be specified multiple times."`
|
||||
MinLen uint `short:"l" long:"min-length" default:"16" description:"The minimum length for passwords; use 0 for no minimum limit. Set this to the same as -L/--max-length to use a fixed length. Must be <= -L/--max-length."`
|
||||
MaxLen uint `short:"L" long:"max-length" default:"64" description:"The maximum length for passwords; use 0 for no maximum limit (this is hard-capped to 256 for performance reasons). Set this to the same as -l/--min-length for a fixed length. Must be >= -l/--min-length."`
|
||||
Count uint `short:"c" long:"count" default:"1" description:"The number of passwords to generate."`
|
||||
/*
|
||||
ListHashes bool `short:"z" long:"list-hashes" description:"If specified, list supported hashes and exit."`
|
||||
Hashes []string `env:"PWGEN_HASHES" env-delim:"," short:"Z" long:"hash-algo" optional:"1" optional-value:"all" description:"Specify explicit hash algorithm(s). Can be specified multiple times. If this option is specified but no algorithms are provided, all hashes will be generated."`
|
||||
*/
|
||||
NoAlpha bool `env:"PWGEN_NOALPHA" short:"a" long:"disable-alpha" description:"If specified, do NOT include the Alphabetical (letter) charset."`
|
||||
NoNum bool `env:"PWGEN_NONUM" short:"n" long:"disable-num" description:"If specified, do NOT include the Numerical (number) charset."`
|
||||
NoSymbols bool `env:"PWGEN_NOSYM" short:"s" long:"disable-symbols" description:"If specified, do NOT include the Simple Symbols charset."`
|
||||
ExtendSymbols bool `env:"PWGEN_XSYMS" short:"S" long:"enable-extended-symbols" description:"If specified, include the Extended Symbols charset (these characters may cause issues in some applications)."`
|
||||
NumUpper uint `env:"PWGEN_UPPER" short:"u" long:"count-upper" description:"The number of minimum uppercase characters. If not specified, this is random (if in the charset)."`
|
||||
NumLower uint `env:"PWGEN_LOWER" short:"U" long:"count-lower" description:"The number of minimum lowercase characters. If not specified, this is random (if in the charset)."`
|
||||
NumNumbers uint `env:"PWGEN_NUMNUMS" short:"N" long:"count-numbers" description:"The number of minimum number characters. If not specified, this is random (if in the charset)."`
|
||||
NumSymbols uint `env:"PWGEN_NUMSYMS" short:"y" long:"count-symbols" description:"The number of minimum simple symbol characters. If not specified, this is random (if in the charset)."`
|
||||
NumExtended uint `env:"PWGEN_NUMXSYMS" short:"Y" long:"count-extended" description:"The number of minimum extended symbol characters. If not specified, this is random (if in the charset)."`
|
||||
DisableChars []string `env:"PWGEN_NOCHARS" short:"d" long:"disable-chars" description:"If specified, these chars should be explicitly excluded from the charset(s). Can be specified multiple times with multiple chars per switch."`
|
||||
ExplicitChars []string `env:"PWGEN_XCHARS" short:"e" long:"explicit-chars" description:"If specified, ignore all charset selection and only use these characters to select from. Can be specified multiple times."`
|
||||
MinLen uint `env:"PWGEN_MIN" short:"l" long:"min-length" default:"16" description:"The minimum length for passwords; use 0 for no minimum limit. Set this to the same as -L/--max-length to use a fixed length. Must be <= -L/--max-length."`
|
||||
MaxLen uint `env:"PWGEN_MAX" short:"L" long:"max-length" default:"64" description:"The maximum length for passwords; use 0 for no maximum limit (this is hard-capped to 256 for performance reasons). Set this to the same as -l/--min-length for a fixed length. Must be >= -l/--min-length."`
|
||||
ExplicitLen uint `env:"PWGEN_XLEN" short:"x" long:"explicit-length" description:"If specified, ignore -l/--min-length and -L/--max-length and set both to this length."`
|
||||
Count uint `env:"PWGEN_CNT" short:"c" long:"count" default:"1" description:"The number of passwords to generate."`
|
||||
Format string `env:"PWGEN_FMT" short:"f" long:"format" optional:"1" optional-value:"json" choice:"json" choice:"yaml" choice:"xml" description:"If specified, format the generated passwords in JSON (default), YAML, or XML."`
|
||||
}
|
||||
|
||||
@@ -1,12 +1,15 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"encoding/xml"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/jessevdk/go-flags"
|
||||
"gopkg.in/yaml.v3"
|
||||
"r00t2.io/pwgen/pwgenerator"
|
||||
)
|
||||
|
||||
@@ -17,6 +20,8 @@ func main() {
|
||||
var err error
|
||||
var genOpts *pwgenerator.GenOpts
|
||||
var passwds []string
|
||||
var pwc *pwgenerator.PwCollection
|
||||
var b []byte
|
||||
|
||||
if _, err = flags.Parse(&a); err != nil {
|
||||
switch flagsErr := err.(type) {
|
||||
@@ -30,6 +35,10 @@ func main() {
|
||||
}
|
||||
}
|
||||
|
||||
if a.ExplicitLen != 0 {
|
||||
a.MinLen = a.ExplicitLen
|
||||
a.MaxLen = a.ExplicitLen
|
||||
}
|
||||
genOpts = &pwgenerator.GenOpts{
|
||||
Alpha: !a.NoAlpha,
|
||||
Numeric: !a.NoNum,
|
||||
@@ -56,12 +65,31 @@ func main() {
|
||||
}
|
||||
}
|
||||
|
||||
if passwds, err = genOpts.Generate(); err != nil {
|
||||
log.Panicln(err)
|
||||
if strings.TrimSpace(a.Format) != "" {
|
||||
if pwc, err = genOpts.GenerateCollection(nil); err != nil {
|
||||
log.Panicln(err)
|
||||
}
|
||||
switch a.Format {
|
||||
case "json":
|
||||
if b, err = json.MarshalIndent(pwc, "", " "); err != nil {
|
||||
log.Panicln(err)
|
||||
}
|
||||
fmt.Println(string(b))
|
||||
case "yaml":
|
||||
if b, err = yaml.Marshal(pwc); err != nil {
|
||||
log.Panicln(err)
|
||||
}
|
||||
fmt.Println(string(b))
|
||||
case "xml":
|
||||
if b, err = xml.MarshalIndent(pwc, "", " "); err != nil {
|
||||
log.Panicln(err)
|
||||
}
|
||||
fmt.Println(string(b))
|
||||
}
|
||||
} else {
|
||||
if passwds, err = genOpts.Generate(); err != nil {
|
||||
log.Panicln(err)
|
||||
}
|
||||
fmt.Println(strings.Join(passwds, "\n"))
|
||||
}
|
||||
|
||||
fmt.Println(strings.Join(passwds, "\n"))
|
||||
|
||||
// fmt.Printf("%#v\n", a)
|
||||
// fmt.Printf("%#v\n", genOpts)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user