Fix TOTPCopier writing to error channel after client is likely done checking, which caused the TOTP routine to stall

This commit is contained in:
2026-02-09 21:03:30 -05:00
parent 50cf92df61
commit 9c0ed69d7f
2 changed files with 21 additions and 8 deletions
+20 -7
View File
@@ -10,19 +10,32 @@ import (
// TOTPCopier is meant to be run as a goroutine to keep
// the clipboard up-to-date with the latest TOTP token.
//
// Note that errorChan should be buffered with capacity 1.
// This is because TOTPCopier only returns errors on the first
// iteration, as subsequent errors are highly unlikely to occur
// and allowing the caller to move on from error-checking is beneficial.
func TOTPCopier(secret string, errorChan chan<- error, done <-chan bool) {
var firstRun = true
var currentTime time.Time
var token string
var err error
for {
currentTime := time.Now()
token, err := core.GenTOTP(secret, currentTime)
if err != nil {
currentTime = time.Now()
token, err = core.GenTOTP(secret, currentTime)
if firstRun && err != nil {
errorChan <- err
}
if err = CopyString(false, token); err != nil {
errorChan <- err
err = CopyString(false, token)
if firstRun {
if err != nil {
errorChan <- err
} else {
errorChan <- nil // indicate that first copy was successful
}
firstRun = false
}
errorChan <- nil // indicate that first copy was successful
// sleep till next 30-second interval
time.Sleep(time.Duration(30-(currentTime.Second()%30)) * time.Second)