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")) } }