checking in
This commit is contained in:
104
cmd/gen/main.go
Normal file
104
cmd/gen/main.go
Normal file
@@ -0,0 +1,104 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
`fmt`
|
||||
`log`
|
||||
`os`
|
||||
`os/signal`
|
||||
`sort`
|
||||
`strings`
|
||||
`time`
|
||||
|
||||
`github.com/chelnak/ysmrr`
|
||||
`github.com/chelnak/ysmrr/pkg/animations`
|
||||
`r00t2.io/vault_totp/common`
|
||||
`r00t2.io/vault_totp/internal`
|
||||
)
|
||||
|
||||
func main() {
|
||||
|
||||
var err error
|
||||
var idx int
|
||||
var rpt int
|
||||
var doExit bool
|
||||
var keyNm string
|
||||
var keyNms []string
|
||||
var ticker *time.Ticker
|
||||
var keys map[string]struct{} = make(map[string]struct{})
|
||||
|
||||
log.SetOutput(os.Stdout)
|
||||
|
||||
ctx, cancelFunc = signal.NotifyContext(ctx, common.ProgEndSigs...)
|
||||
|
||||
if doExit, err = internal.PrepParser("gen", args.CommonArgs, parser); err != nil {
|
||||
log.Panicln(err)
|
||||
}
|
||||
if doExit {
|
||||
return
|
||||
}
|
||||
logger = internal.Logger
|
||||
|
||||
if err = internal.Validate(args); err != nil {
|
||||
log.Panicln(err)
|
||||
}
|
||||
|
||||
if vc, err = internal.GetVaultClient(&args.VaultArgs); err != nil {
|
||||
log.Panicln(err)
|
||||
}
|
||||
|
||||
if args.GenArgs.KeyNm == "" {
|
||||
if keys, err = internal.ListTotpKeys(ctx, vc, args.GenArgs.VaultTotpMnt); err != nil {
|
||||
log.Panicln(err)
|
||||
}
|
||||
keyNms = make([]string, 0, len(keys))
|
||||
for keyNm, _ = range args.GenArgs.KeyNm {
|
||||
keyNms[idx] = keyNm
|
||||
idx++
|
||||
}
|
||||
sort.Strings(keyNms)
|
||||
fmt.Printf(
|
||||
"No key name provided.\n"+
|
||||
"Existing key names at mount '%s' are:\n\n"+
|
||||
"\t%s\n",
|
||||
args.GenArgs.VaultTotpMnt,
|
||||
strings.Join(keyNms, "\n\t"),
|
||||
)
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
if kinfo, err = internal.GetTotpKeys(ctx, vc, args.GenArgs.VaultTotpMnt); err != nil {
|
||||
log.Panicln(err)
|
||||
}
|
||||
if kinfo == nil || len(kinfo) == 0 {
|
||||
log.Panicln("no TOTP configuration found")
|
||||
}
|
||||
|
||||
if !args.GenArgs.NoCtr {
|
||||
if len(args.GenArgs.Plain) > 3 {
|
||||
args.GenArgs.Plain = args.GenArgs.Plain[:3]
|
||||
}
|
||||
charSet = spinnerChars[len(args.GenArgs.Plain)]
|
||||
}
|
||||
|
||||
if args.GenArgs.Repeat < 0 {
|
||||
// ticker = time.NewTicker(cfg.period + (time.Millisecond * time.Duration(500)))
|
||||
ticker = time.NewTicker(cfg.period)
|
||||
breakLoop:
|
||||
for {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
break breakLoop
|
||||
case <-ticker.C:
|
||||
// GET CODE
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for rpt = args.GenArgs.Repeat; rpt >= 0; rpt-- {
|
||||
fmt.Fprintf(os.Stderr, "(Issuance round #%d/%d)\n", args.GenArgs.Repeat-rpt, rpt)
|
||||
// GET CODE
|
||||
}
|
||||
}
|
||||
|
||||
// Force close any remaining timing loops, etc.
|
||||
cancelFunc()
|
||||
}
|
||||
Reference in New Issue
Block a user