X-Git-Url: http://git.giacomolli.uk/onechat/blobdiff_plain/74583992d2939791ef74155c99eb194269ac3721..fc51ee2f545233df3cc1fa2fd4f28a4484c6bc00:/auth.go?ds=sidebyside diff --git a/auth.go b/auth.go index 736624e..fda78d8 100644 --- a/auth.go +++ b/auth.go @@ -97,13 +97,23 @@ type deviceGrant struct { } // login runs "onechat login": the device code login into the token file of the -// data directory. -func login(ctx context.Context, out io.Writer) error { +// data directory. It holds the lock of the token file, so it does not run while +// the daemon runs. +func login(ctx context.Context, out io.Writer) (err error) { dir, err := dataDir() if err != nil { return err } + tokens, err := lockTokens(dir) + if err != nil { + return err + } + + defer func() { + err = errors.Join(err, tokens.Close()) + }() + return newChatGPTAuth(filepath.Join(dir, tokenFileName), authIssuer).Login(ctx, out) }