move flags parsing out of main function
This commit is contained in:
parent
c3c506e206
commit
a873717f17
@ -44,7 +44,60 @@ Each word or number is mapped following this list:
|
|||||||
- stupid - no limit
|
- stupid - no limit
|
||||||
`
|
`
|
||||||
|
|
||||||
|
type Flags struct {
|
||||||
|
RawOutput bool
|
||||||
|
OutputFile string
|
||||||
|
EntropyLevel int
|
||||||
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
flags, err := parseFlags()
|
||||||
|
if err != nil {
|
||||||
|
errorf("error while parsing arguments: %s\n", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
passbytes, err := getPasswordBytes()
|
||||||
|
if err != nil {
|
||||||
|
errorf("Failed to get password, error: %s\n", err)
|
||||||
|
}
|
||||||
|
valid := isEntropyValid(passbytes, flags.EntropyLevel)
|
||||||
|
if !valid {
|
||||||
|
errorf("You should choose stroger password!!! (or change entropy level, read more with --help)\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
sum := sha256.Sum256(passbytes)
|
||||||
|
|
||||||
|
k, err := newX25519IdentityFromScalar(sum[:])
|
||||||
|
if err != nil {
|
||||||
|
errorf("internal error: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// if user is not seeing private keyfile, which also contains public key,
|
||||||
|
// also duplicate public key it to stderr,
|
||||||
|
// but if user sees public key via stdout, no need for duplication
|
||||||
|
if flags.OutputFile != "" {
|
||||||
|
if !flags.RawOutput {
|
||||||
|
fmt.Printf("Public key: %s\n", k.Recipient())
|
||||||
|
} else {
|
||||||
|
fmt.Printf("%s", k.Recipient())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
output := os.Stdout
|
||||||
|
if flags.OutputFile != "" {
|
||||||
|
output, err = os.Create(flags.OutputFile)
|
||||||
|
if err != nil {
|
||||||
|
errorf("failed to create output file, error: %s", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
err = writeSecretKey(output, k, !flags.RawOutput)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("Failed to write secret key to file, error: %s\n", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseFlags() (*Flags, error) {
|
||||||
log.SetFlags(0)
|
log.SetFlags(0)
|
||||||
flag.Usage = func() { fmt.Fprintf(os.Stderr, "%s", usage) }
|
flag.Usage = func() { fmt.Fprintf(os.Stderr, "%s", usage) }
|
||||||
|
|
||||||
@ -62,48 +115,14 @@ func main() {
|
|||||||
|
|
||||||
eLevel, err := parseEntropyLevel(entropyLevel)
|
eLevel, err := parseEntropyLevel(entropyLevel)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
errorf("error while parsing --entropy-level argument: %s\n", err)
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
passbytes, err := getPasswordBytes()
|
return &Flags{
|
||||||
if err != nil {
|
RawOutput: rawOutput,
|
||||||
errorf("Failed to get password, error: %s\n", err)
|
OutputFile: outputFile,
|
||||||
}
|
EntropyLevel: eLevel,
|
||||||
valid := isEntropyValid(passbytes, eLevel)
|
}, nil
|
||||||
if !valid {
|
|
||||||
errorf("You should choose stroger password!!! (or change entropy level, read more with --help)\n")
|
|
||||||
}
|
|
||||||
|
|
||||||
sum := sha256.Sum256(passbytes)
|
|
||||||
|
|
||||||
k, err := newX25519IdentityFromScalar(sum[:])
|
|
||||||
if err != nil {
|
|
||||||
errorf("internal error: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// if user is not seeing private keyfile, which also contains public key,
|
|
||||||
// also duplicate public key it to stderr,
|
|
||||||
// but if user sees public key via stdout, no need for duplication
|
|
||||||
if outputFile != "" {
|
|
||||||
if !rawOutput {
|
|
||||||
fmt.Printf("Public key: %s\n", k.Recipient())
|
|
||||||
} else {
|
|
||||||
fmt.Printf("%s", k.Recipient())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
output := os.Stdout
|
|
||||||
if outputFile != "" {
|
|
||||||
output, err = os.Create(outputFile)
|
|
||||||
if err != nil {
|
|
||||||
errorf("failed to create output file, error: %s", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
err = writeSecretKey(output, k, !rawOutput)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Printf("Failed to write secret key to file, error: %s\n", err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseEntropyLevel(entropyLevel string) (int, error) {
|
func parseEntropyLevel(entropyLevel string) (int, error) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user