PWGen/cmd/pwgen/main.go

96 lines
2.0 KiB
Go

package main
import (
"encoding/json"
"encoding/xml"
"fmt"
"log"
"os"
"strings"
"github.com/jessevdk/go-flags"
"gopkg.in/yaml.v3"
"r00t2.io/pwgen/pwgenerator"
)
var a Arguments
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) {
case *flags.Error:
if flagsErr.Type == flags.ErrHelp {
os.Exit(0)
}
log.Panicln(err)
default:
log.Panicln(err)
}
}
if a.ExplicitLen != 0 {
a.MinLen = a.ExplicitLen
a.MaxLen = a.ExplicitLen
}
genOpts = &pwgenerator.GenOpts{
Alpha: !a.NoAlpha,
Numeric: !a.NoNum,
Symbols: !a.NoSymbols,
ExtendedSymbols: a.ExtendSymbols,
CountUpper: a.NumUpper,
CountLower: a.NumLower,
CountNumbers: a.NumNumbers,
CountSymbols: a.NumSymbols,
CountExtended: a.NumExtended,
DisabledChars: nil,
LengthMin: a.MinLen,
LengthMax: a.MaxLen,
Count: a.Count,
}
if a.DisableChars != nil && len(a.DisableChars) != 0 {
if genOpts.DisabledChars, err = pwgenerator.GetCharset(a.DisableChars); err != nil {
log.Panicln(err)
}
}
if a.ExplicitChars != nil && len(a.ExplicitChars) != 0 {
if err = genOpts.SetExplicitCharset(a.ExplicitChars, false); 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"))
}
}