@@ -2,6 +2,7 @@ package main
22
33import (
44 "context"
5+ "encoding/json"
56 "flag"
67 "fmt"
78 "io"
@@ -11,7 +12,10 @@ import (
1112
1213 "github.com/sourcegraph/src-cli/internal/api"
1314 "github.com/sourcegraph/src-cli/internal/cmderrors"
15+ "github.com/sourcegraph/src-cli/internal/keyring"
1416 "github.com/sourcegraph/src-cli/internal/oauthdevice"
17+
18+ "github.com/sourcegraph/sourcegraph/lib/errors"
1519)
1620
1721func init () {
@@ -125,16 +129,26 @@ func loginCmd(ctx context.Context, p loginParams) error {
125129 noToken := cfg .AccessToken == ""
126130 endpointConflict := endpointArg != cfg .Endpoint
127131
132+ secretStore , err := keyring .Open ()
133+ if err != nil {
134+ printProblem (fmt .Sprintf ("could not open keyring for secret storage: %s" , err ))
135+ }
136+
137+ cfg .Endpoint = endpointArg
138+
128139 if p .useDeviceFlow {
129- token , err := runDeviceFlow (ctx , endpointArg , out , p .deviceFlowClient )
140+ resp , err := runDeviceFlow (ctx , endpointArg , out , p .deviceFlowClient )
130141 if err != nil {
131142 printProblem (fmt .Sprintf ("Device flow authentication failed: %s" , err ))
132143 fmt .Fprintln (out , createAccessTokenMessage )
133144 return cmderrors .ExitCode1
134145 }
135146
136- cfg .AccessToken = token
137- cfg .Endpoint = endpointArg
147+ if err := oauthdevice .StoreToken (secretStore , & resp .Token ); err != nil {
148+ printProblem (fmt .Sprintf ("Failed to store token in keyring store: %s" , err ))
149+ return cmderrors .ExitCode1
150+ }
151+
138152 client = cfg .apiClient (p .apiFlags , out )
139153 } else if noToken || endpointConflict {
140154 fmt .Fprintln (out )
@@ -184,10 +198,13 @@ func loginCmd(ctx context.Context, p loginParams) error {
184198 return nil
185199}
186200
187- func runDeviceFlow (ctx context.Context , endpoint string , out io.Writer , client oauthdevice.Client ) (string , error ) {
201+ func storeToken (store * keyring.Store , token * oauthdevice.Token ) error {
202+ }
203+
204+ func runDeviceFlow (ctx context.Context , endpoint string , out io.Writer , client oauthdevice.Client ) (* oauthdevice.TokenResponse , error ) {
188205 authResp , err := client .Start (ctx , endpoint , nil )
189206 if err != nil {
190- return "" , err
207+ return nil , err
191208 }
192209
193210 fmt .Fprintln (out )
@@ -207,8 +224,8 @@ func runDeviceFlow(ctx context.Context, endpoint string, out io.Writer, client o
207224
208225 tokenResp , err := client .Poll (ctx , endpoint , authResp .DeviceCode , interval , authResp .ExpiresIn )
209226 if err != nil {
210- return "" , err
227+ return nil , err
211228 }
212229
213- return tokenResp . AccessToken , nil
230+ return tokenResp , nil
214231}
0 commit comments