Fix panic on error in clip.TOTPCopier() when not run as a goroutine

This commit is contained in:
2025-11-13 21:14:51 -05:00
parent ac4a86d3a4
commit 80cf65775a
+11 -4
View File
@@ -32,6 +32,13 @@ func GenTOTP(secret string, time time.Time, forSteam bool) (string, error) {
// Set oneTime to -1 for a one-time (non-continuous) TOTP copy.
// For oneTime mode, this function can be used normally (not as a goroutine).
func TOTPCopier(secret string, oneTime int, errorChan chan<- error, done <-chan bool) error {
var writeErrorChan func(err error)
if errorChan != nil {
writeErrorChan = func(err error) { errorChan <- err }
} else {
writeErrorChan = func(err error) {}
}
var forSteam bool
if strings.HasPrefix(secret, "steam@") {
secret = secret[6:]
@@ -42,16 +49,16 @@ func TOTPCopier(secret string, oneTime int, errorChan chan<- error, done <-chan
currentTime := time.Now()
token, err := GenTOTP(secret, currentTime, forSteam)
if err != nil {
errorChan <- err
writeErrorChan(err)
return err // return for when not used as goroutine; should exit on error regardless
}
err = CopyString(true, token)
if err != nil {
errorChan <- err
writeErrorChan(err)
return err // return for when not used as goroutine; should exit on error regardless
}
if oneTime != -1 {
errorChan <- nil
writeErrorChan(err)
time.Sleep(time.Duration(30-(currentTime.Second()%30)) * time.Second)
} else {
return nil
@@ -60,7 +67,7 @@ func TOTPCopier(secret string, oneTime int, errorChan chan<- error, done <-chan
// exit after sleep if indicated (will not update clipboard again)
select {
case <-done:
errorChan <- nil
writeErrorChan(nil)
return nil
default:
}