OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 /* | 5 /* |
6 Package auth defines an opinionated wrapper around OAuth2. | 6 Package auth defines an opinionated wrapper around OAuth2. |
7 | 7 |
8 It hides configurability of base oauth2 library and instead makes a predefined | 8 It hides configurability of base oauth2 library and instead makes a predefined |
9 set of choices regarding where the credentials should be stored and how OAuth2 | 9 set of choices regarding where the credentials should be stored and how OAuth2 |
10 should be used. It makes authentication flows look more uniform across tools | 10 should be used. It makes authentication flows look more uniform across tools |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 | 45 |
46 var ( | 46 var ( |
47 // ErrLoginRequired is returned by Transport() in case long term credent
ials | 47 // ErrLoginRequired is returned by Transport() in case long term credent
ials |
48 // are not cached and the user must go through interactive login. | 48 // are not cached and the user must go through interactive login. |
49 ErrLoginRequired = errors.New("Interactive login is required") | 49 ErrLoginRequired = errors.New("Interactive login is required") |
50 | 50 |
51 // ErrInsufficientAccess is returned by Login() or Transport() if access
_token | 51 // ErrInsufficientAccess is returned by Login() or Transport() if access
_token |
52 // can't be minted for given OAuth scopes. For example if GCE instance w
asn't | 52 // can't be minted for given OAuth scopes. For example if GCE instance w
asn't |
53 // granted access to requested scopes when it was created. | 53 // granted access to requested scopes when it was created. |
54 ErrInsufficientAccess = internal.ErrInsufficientAccess | 54 ErrInsufficientAccess = internal.ErrInsufficientAccess |
55 | |
56 // ErrNoTerminal is returned by Login() if interaction with a user is | |
57 // required, but the process is not attached to a terminal. | |
58 ErrNoTerminal = errors.New("Can't interact with a user: no terminal") | |
59 ) | 55 ) |
60 | 56 |
61 // Known Google API OAuth scopes. | 57 // Known Google API OAuth scopes. |
62 const ( | 58 const ( |
63 OAuthScopeEmail = "https://www.googleapis.com/auth/userinfo.email" | 59 OAuthScopeEmail = "https://www.googleapis.com/auth/userinfo.email" |
64 ) | 60 ) |
65 | 61 |
66 // Method defines a method to use to obtain OAuth access_token. | 62 // Method defines a method to use to obtain OAuth access_token. |
67 type Method string | 63 type Method string |
68 | 64 |
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
315 defer a.lock.Unlock() | 311 defer a.lock.Unlock() |
316 | 312 |
317 err := a.ensureInitialized() | 313 err := a.ensureInitialized() |
318 if err != nil { | 314 if err != nil { |
319 return err | 315 return err |
320 } | 316 } |
321 if !a.provider.RequiresInteraction() { | 317 if !a.provider.RequiresInteraction() { |
322 return nil | 318 return nil |
323 } | 319 } |
324 | 320 |
325 // Active terminal is required for interaction with a user. | |
326 if !logging.IsTerminal { | |
327 return ErrNoTerminal | |
328 } | |
329 | |
330 // Create initial token. This may require interaction with a user. | 321 // Create initial token. This may require interaction with a user. |
331 a.token, err = a.provider.MintToken() | 322 a.token, err = a.provider.MintToken() |
332 if err != nil { | 323 if err != nil { |
333 return err | 324 return err |
334 } | 325 } |
335 | 326 |
336 // Store the initial token in the cache. Don't abort if it fails, the to
ken | 327 // Store the initial token in the cache. Don't abort if it fails, the to
ken |
337 // is still usable from the memory. | 328 // is still usable from the memory. |
338 if err = a.cacheToken(a.token); err != nil { | 329 if err = a.cacheToken(a.token); err != nil { |
339 a.log.Warningf("auth: failed to write token to cache: %v", err) | 330 a.log.Warningf("auth: failed to write token to cache: %v", err) |
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
646 func DefaultClient() (clientID string, clientSecret string) { | 637 func DefaultClient() (clientID string, clientSecret string) { |
647 clientID = "446450136466-2hr92jrq8e6i4tnsa56b52vacp7t3936.apps.googleuse
rcontent.com" | 638 clientID = "446450136466-2hr92jrq8e6i4tnsa56b52vacp7t3936.apps.googleuse
rcontent.com" |
648 clientSecret = "uBfbay2KCy9t4QveJ-dOqHtp" | 639 clientSecret = "uBfbay2KCy9t4QveJ-dOqHtp" |
649 return | 640 return |
650 } | 641 } |
651 | 642 |
652 // SecretsDir returns an absolute path to a directory to keep secret files in. | 643 // SecretsDir returns an absolute path to a directory to keep secret files in. |
653 func SecretsDir() string { | 644 func SecretsDir() string { |
654 return secretsDir() | 645 return secretsDir() |
655 } | 646 } |
OLD | NEW |