From 8f98f1b61c2493f7f1371d600c0a8325c5c8fce5 Mon Sep 17 00:00:00 2001 From: Randall Winkhart Date: Thu, 21 Mar 2024 14:44:58 -0400 Subject: [PATCH] Only fetch current time once per refresh for TOTP code generation --- src/offline/copy.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/offline/copy.go b/src/offline/copy.go index 3bb6fe7..0c804fd 100644 --- a/src/offline/copy.go +++ b/src/offline/copy.go @@ -28,9 +28,10 @@ func CopyArgument(targetLocation string, field int, executableName string) { copySubject = decryptedEntry[field] } else { // TOTP mode for { // keep field copied to clipboard, refresh on 30-second intervals - copyField(genTOTP(decryptedEntry[5]), "") + currentTime := time.Now() + copyField(genTOTP(decryptedEntry[5], currentTime), "") // sleep until next 30-second interval - time.Sleep(time.Duration(30-(time.Now().Second()%30)) * time.Second) + time.Sleep(time.Duration(30-(currentTime.Second()%30)) * time.Second) } } } else { @@ -56,8 +57,8 @@ func ClipClearArgument() { } // genTOTP generates a TOTP token from a secret -func genTOTP(secret string) string { - totpToken, err := totp.GenerateCode(secret, time.Now()) +func genTOTP(secret string, time time.Time) string { + totpToken, err := totp.GenerateCode(secret, time) if err != nil { fmt.Println(AnsiError + "Error generating TOTP code" + AnsiReset) os.Exit(1)