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