checking in
This commit is contained in:
121
cmd/kill/main.go
Normal file
121
cmd/kill/main.go
Normal file
@@ -0,0 +1,121 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
`bufio`
|
||||
`fmt`
|
||||
`log`
|
||||
`maps`
|
||||
`os`
|
||||
`slices`
|
||||
`strings`
|
||||
|
||||
`r00t2.io/vault_totp/internal`
|
||||
)
|
||||
|
||||
func main() {
|
||||
|
||||
var err error
|
||||
var p string
|
||||
var doExit bool
|
||||
var keyNm string
|
||||
var doGlobal bool
|
||||
var keyNms []string
|
||||
var rdr *bufio.Reader = bufio.NewReader(os.Stdin)
|
||||
var keys map[string]struct{} = make(map[string]struct{})
|
||||
|
||||
log.SetOutput(os.Stdout)
|
||||
|
||||
if doExit, err = internal.PrepParser("kill", 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 existingOtp, err = internal.ListTotpKeys(ctx, vc, args.KillArgs.VaultTotpMnt); err != nil {
|
||||
log.Panicln(err)
|
||||
}
|
||||
if len(existingOtp) == 0 {
|
||||
fmt.Printf("No existing TOTP keys found at '%s'.\n", args.KillArgs.VaultTotpMnt)
|
||||
os.Exit(0)
|
||||
}
|
||||
if args.KillArgs.KeyNms == nil || len(args.KillArgs.KeyNms) == 0 {
|
||||
for keyNm = range maps.Keys(existingOtp) {
|
||||
keys[keyNm] = struct{}{}
|
||||
keyNms = append(keyNms, keyNm)
|
||||
}
|
||||
doGlobal = !args.KillArgs.Force
|
||||
} else {
|
||||
if args.KillArgs.Force {
|
||||
doGlobal = !args.KillArgs.Force2
|
||||
}
|
||||
for _, keyNm = range args.KillArgs.KeyNms {
|
||||
if !args.KillArgs.Force {
|
||||
p = ""
|
||||
fmt.Printf("Delete TOTP '[%s]/%s'? (y/N)\n", args.KillArgs.VaultTotpMnt, keyNm)
|
||||
if p, err = rdr.ReadString('\n'); err != nil {
|
||||
log.Panicln(err)
|
||||
}
|
||||
if strings.HasPrefix(
|
||||
strings.ToLower(
|
||||
strings.TrimSpace(
|
||||
p,
|
||||
),
|
||||
),
|
||||
"y",
|
||||
) {
|
||||
keys[keyNm] = struct{}{}
|
||||
keyNms = append(keyNms, keyNm)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
fmt.Println()
|
||||
if keyNms == nil || len(keyNms) == 0 {
|
||||
fmt.Printf("No keys selected for deletion on '%s'.\n", args.KillArgs.VaultTotpMnt)
|
||||
os.Exit(0)
|
||||
}
|
||||
slices.Sort(keyNms)
|
||||
|
||||
if doGlobal {
|
||||
fmt.Printf(
|
||||
"Will delete the following TOTP keys on mount '%s':\n"+
|
||||
"\t* %s"+
|
||||
"\n",
|
||||
args.KillArgs.VaultTotpMnt,
|
||||
strings.Join(keyNms, "\n\t*"),
|
||||
)
|
||||
fmt.Println("Is this OK? (y/N)")
|
||||
p = ""
|
||||
if p, err = rdr.ReadString('\n'); err != nil {
|
||||
log.Panicln(err)
|
||||
}
|
||||
fmt.Println()
|
||||
if !strings.HasPrefix(
|
||||
strings.ToLower(
|
||||
strings.TrimSpace(
|
||||
p,
|
||||
),
|
||||
),
|
||||
"y",
|
||||
) {
|
||||
fmt.Println("Exiting.")
|
||||
os.Exit(0)
|
||||
}
|
||||
}
|
||||
|
||||
for _, keyNm = range keys {
|
||||
wg.Add(1)
|
||||
go killKeyAsync(keyNm)
|
||||
}
|
||||
|
||||
log.Println("Done.")
|
||||
}
|
||||
Reference in New Issue
Block a user