1
0
Files
vault_totp/cmd/gen/main.go
2025-12-23 20:58:56 -05:00

105 lines
2.1 KiB
Go

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