Skip to content

Commit c8751db

Browse files
authored
Fix ctrl-c (#41)
1 parent 97b18ba commit c8751db

File tree

1 file changed

+13
-7
lines changed

1 file changed

+13
-7
lines changed

internal/oauth2/oauth2.go

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,11 @@ import (
99
"log"
1010
"net/http"
1111
"net/url"
12+
"os"
13+
"os/signal"
1214
"strconv"
1315
"strings"
14-
"sync"
16+
"syscall"
1517
"time"
1618

1719
"github.com/go-jose/go-jose/v3"
@@ -182,11 +184,9 @@ func WaitForCallback(clientConfig ClientConfig, serverConfig ServerConfig, addr
182184
srv = http.Server{Addr: addr}
183185
signingKey jose.JSONWebKey
184186
encryptionKey jose.JSONWebKey
185-
wg sync.WaitGroup
187+
done = make(chan struct{})
186188
)
187189

188-
wg.Add(1)
189-
190190
if signingKey, err = ReadKey(SigningKey, serverConfig.JWKsURI, hc); err != nil {
191191
return request, errors.Wrapf(err, "failed to read signing key from %s", serverConfig.JWKsURI)
192192
}
@@ -244,16 +244,22 @@ func WaitForCallback(clientConfig ClientConfig, serverConfig ServerConfig, addr
244244
})
245245

246246
go func() {
247-
defer wg.Done()
247+
defer close(done)
248248

249249
if serr := srv.ListenAndServe(); serr != http.ErrServerClosed {
250250
err = serr
251251
}
252252
}()
253253

254-
wg.Wait()
254+
signalChan := make(chan os.Signal, 1)
255+
signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM)
255256

256-
return request, err
257+
select {
258+
case <-signalChan:
259+
return request, errors.New("interrupted")
260+
case <-done:
261+
return request, err
262+
}
257263
}
258264

259265
type TokenResponse struct {

0 commit comments

Comments
 (0)