mirror of
https://github.com/wneessen/apg-go.git
synced 2024-11-13 01:12:56 +01:00
Winni Neessen
1e1ae45e74
Updated the password generator to include default modes for characters along with options to enable complex password mode and toggle specific character types in passwords from the command line. This allows for greater customization and more user control in password generation, especially useful for applications with unique password requirements."
108 lines
3.8 KiB
Go
108 lines
3.8 KiB
Go
// Package main is the APG command line client that makes use of the apg-go library
|
|
|
|
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/wneessen/apg-go"
|
|
)
|
|
|
|
func main() {
|
|
c := apg.NewConfig()
|
|
|
|
// Configure and parse the CLI flags
|
|
// See usage() for flag details
|
|
var ms string
|
|
var co, hr, lc, nu, sp, uc bool
|
|
flag.BoolVar(&lc, "L", false, "")
|
|
flag.BoolVar(&uc, "U", false, "")
|
|
flag.BoolVar(&nu, "N", false, "")
|
|
flag.BoolVar(&sp, "S", false, "")
|
|
flag.BoolVar(&co, "C", false, "")
|
|
flag.BoolVar(&hr, "H", false, "")
|
|
flag.Int64Var(&c.MinLength, "m", c.MinLength, "")
|
|
flag.Int64Var(&c.MaxLength, "x", c.MaxLength, "")
|
|
flag.StringVar(&ms, "M", "", "")
|
|
flag.Int64Var(&c.NumberPass, "n", c.NumberPass, "")
|
|
flag.Usage = usage
|
|
flag.Parse()
|
|
|
|
// Old style character modes
|
|
if hr {
|
|
c.Mode = apg.MaskToggleMode(c.Mode, apg.ModeHumanReadable)
|
|
}
|
|
if lc {
|
|
c.Mode = apg.MaskToggleMode(c.Mode, apg.ModeLowerCase)
|
|
}
|
|
if uc {
|
|
c.Mode = apg.MaskToggleMode(c.Mode, apg.ModeUpperCase)
|
|
}
|
|
if nu {
|
|
c.Mode = apg.MaskToggleMode(c.Mode, apg.ModeNumber)
|
|
}
|
|
if sp {
|
|
c.Mode = apg.MaskToggleMode(c.Mode, apg.ModeSpecial)
|
|
}
|
|
if co {
|
|
c.Mode = apg.MaskSetMode(c.Mode, apg.ModeLowerCase|apg.ModeNumber|
|
|
apg.ModeSpecial|apg.ModeUpperCase)
|
|
c.Mode = apg.MaskClearMode(c.Mode, apg.ModeHumanReadable)
|
|
}
|
|
|
|
// New style character modes (has higher priority than the old style modes)
|
|
if ms != "" {
|
|
c.Mode = apg.ModesFromFlags(ms)
|
|
}
|
|
for _, m := range []apg.Mode{apg.ModeHumanReadable, apg.ModeLowerCase, apg.ModeNumber, apg.ModeSpecial, apg.ModeUpperCase} {
|
|
fmt.Printf("%s: %t\n", m, apg.MaskHasMode(c.Mode, m))
|
|
}
|
|
/*
|
|
g := apg.New(c)
|
|
rb, err := g.RandomBytes(c.MinLength)
|
|
if err != nil {
|
|
fmt.Println("ERROR", err)
|
|
os.Exit(1)
|
|
}
|
|
fmt.Printf("Random: %#v\n", rb)
|
|
|
|
*/
|
|
}
|
|
|
|
// usage is used by the flag package to display the CLI usage message
|
|
func usage() {
|
|
// Usage text
|
|
const ut = `apg-go // A "Automated Password Generator"-clone
|
|
Copyleft (c) 2021-2023 Winni Neessen
|
|
|
|
apg [-a <algo>] [-m <length>] [-x <length>] [-L] [-U] [-N] [-S] [-H] [-C]
|
|
[-l] [-M mode] [-E char_string] [-n num_of_pass] [-v] [-h] [-t]
|
|
|
|
Options:
|
|
-a ALGORITH Choose the password generation algorithm (Default: 1)
|
|
- 0: pronounceable password generation (koremutake syllables)
|
|
- 1: random password generation according to password modes/flags
|
|
-m LENGTH Minimum length of the password to be generated (Default: 12)
|
|
-x LENGTH Maximum length of the password to be generated (Default: 20)
|
|
-n NUMBER Amount of password to be generated (Default: 6)
|
|
-E CHARS List of characters to be excluded in the generated password
|
|
-M [LUNSHClunshc] New style password parameters
|
|
- Note: new-style flags have higher priority than any of the old-style flags
|
|
-L Toggle lower case characters in passwords (Default: on)
|
|
-U Toggle upper case characters in passwords (Default: on)
|
|
-N Toggle numeric characters in passwords (Default: on)
|
|
-S Toggle special characters in passwords (Default: off)
|
|
-H Avoid ambiguous characters in passwords (i. e.: 1, l, I, O, 0) (Default: off)
|
|
-C Enable complex password mode (implies -L -U -N -S and disables -H)
|
|
- Note: this flag has higher priority than the other old-style flags
|
|
-l Spell generated passwords in phonetic alphabet (Default: off)
|
|
-p Check the HIBP database if the generated passwords was found in a leak before (Default: off)
|
|
- Note: this feature requires internet connectivity
|
|
-h Show this help text
|
|
-v Show version string
|
|
|
|
`
|
|
_, _ = os.Stderr.WriteString(ut)
|
|
}
|