From 04e1b0dd37d372fb93c168273761a7285f819dc8 Mon Sep 17 00:00:00 2001 From: Randall Winkhart Date: Thu, 13 Nov 2025 22:47:46 -0500 Subject: [PATCH] Handle Steam TOTP directly in GenTOTP --- clip/totp.go | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/clip/totp.go b/clip/totp.go index 22eead9..8ef5c77 100644 --- a/clip/totp.go +++ b/clip/totp.go @@ -11,13 +11,14 @@ import ( "github.com/pquerna/otp/totp" ) -// GenTOTP generates a TOTP token from a secret (supports standard and Steam TOTP). -func GenTOTP(secret string, time time.Time, forSteam bool) (string, error) { +// GenTOTP generates a TOTP token from a secret. +// Prefix `secret` with "steam@" for Steam TOTP format. +func GenTOTP(secret string, time time.Time) (string, error) { var totpToken string var err error - if forSteam { - totpToken, err = totp.GenerateCodeCustom(secret, time, totp.ValidateOpts{Period: 30, Digits: 5, Encoder: otp.EncoderSteam}) + if strings.HasPrefix(secret, "steam@") { + totpToken, err = totp.GenerateCodeCustom(secret[6:], time, totp.ValidateOpts{Period: 30, Digits: 5, Encoder: otp.EncoderSteam}) } else { totpToken, err = totp.GenerateCode(secret, time) } @@ -32,15 +33,9 @@ func GenTOTP(secret string, time time.Time, forSteam bool) (string, error) { // TOTPCopier is meant to be run as a goroutine to keep // the clipboard up-to-date with the latest TOTP token. func TOTPCopier(secret string, errorChan chan<- error, done <-chan bool) { - var forSteam bool - if strings.HasPrefix(secret, "steam@") { - secret = secret[6:] - forSteam = true - } - for { currentTime := time.Now() - token, err := GenTOTP(secret, currentTime, forSteam) + token, err := GenTOTP(secret, currentTime) if err != nil { errorChan <- err }