mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-11-04 10:03:42 +08:00 
			
		
		
		
	vendor: golang.org/x/oauth2 v0.10.0
full diff: https://github.com/golang/oauth2/compare/v0.5.0...v0.10.0 Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
		
							
								
								
									
										2
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								go.mod
									
									
									
									
									
								
							@@ -145,7 +145,7 @@ require (
 | 
			
		||||
	golang.org/x/crypto v0.14.0 // indirect
 | 
			
		||||
	golang.org/x/exp v0.0.0-20230713183714-613f0c0eb8a1 // indirect
 | 
			
		||||
	golang.org/x/net v0.17.0 // indirect
 | 
			
		||||
	golang.org/x/oauth2 v0.5.0 // indirect
 | 
			
		||||
	golang.org/x/oauth2 v0.10.0 // indirect
 | 
			
		||||
	golang.org/x/sys v0.13.0 // indirect
 | 
			
		||||
	golang.org/x/text v0.13.0 // indirect
 | 
			
		||||
	golang.org/x/time v0.3.0 // indirect
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								go.sum
									
									
									
									
									
								
							@@ -20,7 +20,7 @@ cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvf
 | 
			
		||||
cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
 | 
			
		||||
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
 | 
			
		||||
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
 | 
			
		||||
cloud.google.com/go/compute v1.18.0 h1:FEigFqoDbys2cvFkZ9Fjq4gnHBP55anJ0yQyau2f9oY=
 | 
			
		||||
cloud.google.com/go/compute v1.20.1 h1:6aKEtlUiwEpJzM001l0yFkpXmUVXaN8W+fbkb2AZNbg=
 | 
			
		||||
cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY=
 | 
			
		||||
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
 | 
			
		||||
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
 | 
			
		||||
@@ -652,8 +652,8 @@ golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4Iltr
 | 
			
		||||
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
			
		||||
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 | 
			
		||||
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
 | 
			
		||||
golang.org/x/oauth2 v0.5.0 h1:HuArIo48skDwlrvM3sEdHXElYslAMsf3KwRkkW4MC4s=
 | 
			
		||||
golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I=
 | 
			
		||||
golang.org/x/oauth2 v0.10.0 h1:zHCpF2Khkwy4mMB4bv0U37YtJdTGW8jI0glAApi0Kh8=
 | 
			
		||||
golang.org/x/oauth2 v0.10.0/go.mod h1:kTpgurOux7LqtuxjuyZa4Gj2gdezIt/jQtGnNFfypQI=
 | 
			
		||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
			
		||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
			
		||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								vendor/golang.org/x/oauth2/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								vendor/golang.org/x/oauth2/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -19,7 +19,7 @@ See pkg.go.dev for further documentation and examples.
 | 
			
		||||
* [pkg.go.dev/golang.org/x/oauth2](https://pkg.go.dev/golang.org/x/oauth2)
 | 
			
		||||
* [pkg.go.dev/golang.org/x/oauth2/google](https://pkg.go.dev/golang.org/x/oauth2/google)
 | 
			
		||||
 | 
			
		||||
## Policy for new packages
 | 
			
		||||
## Policy for new endpoints
 | 
			
		||||
 | 
			
		||||
We no longer accept new provider-specific packages in this repo if all
 | 
			
		||||
they do is add a single endpoint variable. If you just want to add a
 | 
			
		||||
@@ -29,8 +29,12 @@ package.
 | 
			
		||||
 | 
			
		||||
## Report Issues / Send Patches
 | 
			
		||||
 | 
			
		||||
This repository uses Gerrit for code changes. To learn how to submit changes to
 | 
			
		||||
this repository, see https://golang.org/doc/contribute.html.
 | 
			
		||||
 | 
			
		||||
The main issue tracker for the oauth2 repository is located at
 | 
			
		||||
https://github.com/golang/oauth2/issues.
 | 
			
		||||
 | 
			
		||||
This repository uses Gerrit for code changes. To learn how to submit changes to
 | 
			
		||||
this repository, see https://golang.org/doc/contribute.html. In particular:
 | 
			
		||||
 | 
			
		||||
* Excluding trivial changes, all contributions should be connected to an existing issue.
 | 
			
		||||
* API changes must go through the [change proposal process](https://go.dev/s/proposal-process) before they can be accepted.
 | 
			
		||||
* The code owners are listed at [dev.golang.org/owners](https://dev.golang.org/owners#:~:text=x/oauth2).
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								vendor/golang.org/x/oauth2/internal/oauth2.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/golang.org/x/oauth2/internal/oauth2.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -14,7 +14,7 @@ import (
 | 
			
		||||
 | 
			
		||||
// ParseKey converts the binary contents of a private key file
 | 
			
		||||
// to an *rsa.PrivateKey. It detects whether the private key is in a
 | 
			
		||||
// PEM container or not. If so, it extracts the the private key
 | 
			
		||||
// PEM container or not. If so, it extracts the private key
 | 
			
		||||
// from PEM container before conversion. It only supports PEM
 | 
			
		||||
// containers with no passphrase.
 | 
			
		||||
func ParseKey(key []byte) (*rsa.PrivateKey, error) {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										60
									
								
								vendor/golang.org/x/oauth2/internal/token.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										60
									
								
								vendor/golang.org/x/oauth2/internal/token.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -55,12 +55,18 @@ type Token struct {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// tokenJSON is the struct representing the HTTP response from OAuth2
 | 
			
		||||
// providers returning a token in JSON form.
 | 
			
		||||
// providers returning a token or error in JSON form.
 | 
			
		||||
// https://datatracker.ietf.org/doc/html/rfc6749#section-5.1
 | 
			
		||||
type tokenJSON struct {
 | 
			
		||||
	AccessToken  string         `json:"access_token"`
 | 
			
		||||
	TokenType    string         `json:"token_type"`
 | 
			
		||||
	RefreshToken string         `json:"refresh_token"`
 | 
			
		||||
	ExpiresIn    expirationTime `json:"expires_in"` // at least PayPal returns string, while most return number
 | 
			
		||||
	// error fields
 | 
			
		||||
	// https://datatracker.ietf.org/doc/html/rfc6749#section-5.2
 | 
			
		||||
	ErrorCode        string `json:"error"`
 | 
			
		||||
	ErrorDescription string `json:"error_description"`
 | 
			
		||||
	ErrorURI         string `json:"error_uri"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (e *tokenJSON) expiry() (t time.Time) {
 | 
			
		||||
@@ -236,21 +242,29 @@ func doTokenRoundTrip(ctx context.Context, req *http.Request) (*Token, error) {
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, fmt.Errorf("oauth2: cannot fetch token: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
	if code := r.StatusCode; code < 200 || code > 299 {
 | 
			
		||||
		return nil, &RetrieveError{
 | 
			
		||||
			Response: r,
 | 
			
		||||
			Body:     body,
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	failureStatus := r.StatusCode < 200 || r.StatusCode > 299
 | 
			
		||||
	retrieveError := &RetrieveError{
 | 
			
		||||
		Response: r,
 | 
			
		||||
		Body:     body,
 | 
			
		||||
		// attempt to populate error detail below
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var token *Token
 | 
			
		||||
	content, _, _ := mime.ParseMediaType(r.Header.Get("Content-Type"))
 | 
			
		||||
	switch content {
 | 
			
		||||
	case "application/x-www-form-urlencoded", "text/plain":
 | 
			
		||||
		// some endpoints return a query string
 | 
			
		||||
		vals, err := url.ParseQuery(string(body))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
			if failureStatus {
 | 
			
		||||
				return nil, retrieveError
 | 
			
		||||
			}
 | 
			
		||||
			return nil, fmt.Errorf("oauth2: cannot parse response: %v", err)
 | 
			
		||||
		}
 | 
			
		||||
		retrieveError.ErrorCode = vals.Get("error")
 | 
			
		||||
		retrieveError.ErrorDescription = vals.Get("error_description")
 | 
			
		||||
		retrieveError.ErrorURI = vals.Get("error_uri")
 | 
			
		||||
		token = &Token{
 | 
			
		||||
			AccessToken:  vals.Get("access_token"),
 | 
			
		||||
			TokenType:    vals.Get("token_type"),
 | 
			
		||||
@@ -265,8 +279,14 @@ func doTokenRoundTrip(ctx context.Context, req *http.Request) (*Token, error) {
 | 
			
		||||
	default:
 | 
			
		||||
		var tj tokenJSON
 | 
			
		||||
		if err = json.Unmarshal(body, &tj); err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
			if failureStatus {
 | 
			
		||||
				return nil, retrieveError
 | 
			
		||||
			}
 | 
			
		||||
			return nil, fmt.Errorf("oauth2: cannot parse json: %v", err)
 | 
			
		||||
		}
 | 
			
		||||
		retrieveError.ErrorCode = tj.ErrorCode
 | 
			
		||||
		retrieveError.ErrorDescription = tj.ErrorDescription
 | 
			
		||||
		retrieveError.ErrorURI = tj.ErrorURI
 | 
			
		||||
		token = &Token{
 | 
			
		||||
			AccessToken:  tj.AccessToken,
 | 
			
		||||
			TokenType:    tj.TokenType,
 | 
			
		||||
@@ -276,17 +296,37 @@ func doTokenRoundTrip(ctx context.Context, req *http.Request) (*Token, error) {
 | 
			
		||||
		}
 | 
			
		||||
		json.Unmarshal(body, &token.Raw) // no error checks for optional fields
 | 
			
		||||
	}
 | 
			
		||||
	// according to spec, servers should respond status 400 in error case
 | 
			
		||||
	// https://www.rfc-editor.org/rfc/rfc6749#section-5.2
 | 
			
		||||
	// but some unorthodox servers respond 200 in error case
 | 
			
		||||
	if failureStatus || retrieveError.ErrorCode != "" {
 | 
			
		||||
		return nil, retrieveError
 | 
			
		||||
	}
 | 
			
		||||
	if token.AccessToken == "" {
 | 
			
		||||
		return nil, errors.New("oauth2: server response missing access_token")
 | 
			
		||||
	}
 | 
			
		||||
	return token, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// mirrors oauth2.RetrieveError
 | 
			
		||||
type RetrieveError struct {
 | 
			
		||||
	Response *http.Response
 | 
			
		||||
	Body     []byte
 | 
			
		||||
	Response         *http.Response
 | 
			
		||||
	Body             []byte
 | 
			
		||||
	ErrorCode        string
 | 
			
		||||
	ErrorDescription string
 | 
			
		||||
	ErrorURI         string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (r *RetrieveError) Error() string {
 | 
			
		||||
	if r.ErrorCode != "" {
 | 
			
		||||
		s := fmt.Sprintf("oauth2: %q", r.ErrorCode)
 | 
			
		||||
		if r.ErrorDescription != "" {
 | 
			
		||||
			s += fmt.Sprintf(" %q", r.ErrorDescription)
 | 
			
		||||
		}
 | 
			
		||||
		if r.ErrorURI != "" {
 | 
			
		||||
			s += fmt.Sprintf(" %q", r.ErrorURI)
 | 
			
		||||
		}
 | 
			
		||||
		return s
 | 
			
		||||
	}
 | 
			
		||||
	return fmt.Sprintf("oauth2: cannot fetch token: %v\nResponse: %s", r.Response.Status, r.Body)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										33
									
								
								vendor/golang.org/x/oauth2/oauth2.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										33
									
								
								vendor/golang.org/x/oauth2/oauth2.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -16,6 +16,7 @@ import (
 | 
			
		||||
	"net/url"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"sync"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"golang.org/x/oauth2/internal"
 | 
			
		||||
)
 | 
			
		||||
@@ -140,7 +141,7 @@ func SetAuthURLParam(key, value string) AuthCodeOption {
 | 
			
		||||
//
 | 
			
		||||
// State is a token to protect the user from CSRF attacks. You must
 | 
			
		||||
// always provide a non-empty string and validate that it matches the
 | 
			
		||||
// the state query parameter on your redirect callback.
 | 
			
		||||
// state query parameter on your redirect callback.
 | 
			
		||||
// See http://tools.ietf.org/html/rfc6749#section-10.12 for more info.
 | 
			
		||||
//
 | 
			
		||||
// Opts may include AccessTypeOnline or AccessTypeOffline, as well
 | 
			
		||||
@@ -290,6 +291,8 @@ type reuseTokenSource struct {
 | 
			
		||||
 | 
			
		||||
	mu sync.Mutex // guards t
 | 
			
		||||
	t  *Token
 | 
			
		||||
 | 
			
		||||
	expiryDelta time.Duration
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Token returns the current token if it's still valid, else will
 | 
			
		||||
@@ -305,6 +308,7 @@ func (s *reuseTokenSource) Token() (*Token, error) {
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	t.expiryDelta = s.expiryDelta
 | 
			
		||||
	s.t = t
 | 
			
		||||
	return t, nil
 | 
			
		||||
}
 | 
			
		||||
@@ -379,3 +383,30 @@ func ReuseTokenSource(t *Token, src TokenSource) TokenSource {
 | 
			
		||||
		new: src,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ReuseTokenSource returns a TokenSource that acts in the same manner as the
 | 
			
		||||
// TokenSource returned by ReuseTokenSource, except the expiry buffer is
 | 
			
		||||
// configurable. The expiration time of a token is calculated as
 | 
			
		||||
// t.Expiry.Add(-earlyExpiry).
 | 
			
		||||
func ReuseTokenSourceWithExpiry(t *Token, src TokenSource, earlyExpiry time.Duration) TokenSource {
 | 
			
		||||
	// Don't wrap a reuseTokenSource in itself. That would work,
 | 
			
		||||
	// but cause an unnecessary number of mutex operations.
 | 
			
		||||
	// Just build the equivalent one.
 | 
			
		||||
	if rt, ok := src.(*reuseTokenSource); ok {
 | 
			
		||||
		if t == nil {
 | 
			
		||||
			// Just use it directly, but set the expiryDelta to earlyExpiry,
 | 
			
		||||
			// so the behavior matches what the user expects.
 | 
			
		||||
			rt.expiryDelta = earlyExpiry
 | 
			
		||||
			return rt
 | 
			
		||||
		}
 | 
			
		||||
		src = rt.new
 | 
			
		||||
	}
 | 
			
		||||
	if t != nil {
 | 
			
		||||
		t.expiryDelta = earlyExpiry
 | 
			
		||||
	}
 | 
			
		||||
	return &reuseTokenSource{
 | 
			
		||||
		t:           t,
 | 
			
		||||
		new:         src,
 | 
			
		||||
		expiryDelta: earlyExpiry,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										33
									
								
								vendor/golang.org/x/oauth2/token.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										33
									
								
								vendor/golang.org/x/oauth2/token.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -16,10 +16,10 @@ import (
 | 
			
		||||
	"golang.org/x/oauth2/internal"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// expiryDelta determines how earlier a token should be considered
 | 
			
		||||
// defaultExpiryDelta determines how earlier a token should be considered
 | 
			
		||||
// expired than its actual expiration time. It is used to avoid late
 | 
			
		||||
// expirations due to client-server time mismatches.
 | 
			
		||||
const expiryDelta = 10 * time.Second
 | 
			
		||||
const defaultExpiryDelta = 10 * time.Second
 | 
			
		||||
 | 
			
		||||
// Token represents the credentials used to authorize
 | 
			
		||||
// the requests to access protected resources on the OAuth 2.0
 | 
			
		||||
@@ -52,6 +52,11 @@ type Token struct {
 | 
			
		||||
	// raw optionally contains extra metadata from the server
 | 
			
		||||
	// when updating a token.
 | 
			
		||||
	raw interface{}
 | 
			
		||||
 | 
			
		||||
	// expiryDelta is used to calculate when a token is considered
 | 
			
		||||
	// expired, by subtracting from Expiry. If zero, defaultExpiryDelta
 | 
			
		||||
	// is used.
 | 
			
		||||
	expiryDelta time.Duration
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Type returns t.TokenType if non-empty, else "Bearer".
 | 
			
		||||
@@ -127,6 +132,11 @@ func (t *Token) expired() bool {
 | 
			
		||||
	if t.Expiry.IsZero() {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	expiryDelta := defaultExpiryDelta
 | 
			
		||||
	if t.expiryDelta != 0 {
 | 
			
		||||
		expiryDelta = t.expiryDelta
 | 
			
		||||
	}
 | 
			
		||||
	return t.Expiry.Round(0).Add(-expiryDelta).Before(timeNow())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -165,14 +175,31 @@ func retrieveToken(ctx context.Context, c *Config, v url.Values) (*Token, error)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// RetrieveError is the error returned when the token endpoint returns a
 | 
			
		||||
// non-2XX HTTP status code.
 | 
			
		||||
// non-2XX HTTP status code or populates RFC 6749's 'error' parameter.
 | 
			
		||||
// https://datatracker.ietf.org/doc/html/rfc6749#section-5.2
 | 
			
		||||
type RetrieveError struct {
 | 
			
		||||
	Response *http.Response
 | 
			
		||||
	// Body is the body that was consumed by reading Response.Body.
 | 
			
		||||
	// It may be truncated.
 | 
			
		||||
	Body []byte
 | 
			
		||||
	// ErrorCode is RFC 6749's 'error' parameter.
 | 
			
		||||
	ErrorCode string
 | 
			
		||||
	// ErrorDescription is RFC 6749's 'error_description' parameter.
 | 
			
		||||
	ErrorDescription string
 | 
			
		||||
	// ErrorURI is RFC 6749's 'error_uri' parameter.
 | 
			
		||||
	ErrorURI string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (r *RetrieveError) Error() string {
 | 
			
		||||
	if r.ErrorCode != "" {
 | 
			
		||||
		s := fmt.Sprintf("oauth2: %q", r.ErrorCode)
 | 
			
		||||
		if r.ErrorDescription != "" {
 | 
			
		||||
			s += fmt.Sprintf(" %q", r.ErrorDescription)
 | 
			
		||||
		}
 | 
			
		||||
		if r.ErrorURI != "" {
 | 
			
		||||
			s += fmt.Sprintf(" %q", r.ErrorURI)
 | 
			
		||||
		}
 | 
			
		||||
		return s
 | 
			
		||||
	}
 | 
			
		||||
	return fmt.Sprintf("oauth2: cannot fetch token: %v\nResponse: %s", r.Response.Status, r.Body)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							@@ -791,7 +791,7 @@ golang.org/x/net/internal/socks
 | 
			
		||||
golang.org/x/net/internal/timeseries
 | 
			
		||||
golang.org/x/net/proxy
 | 
			
		||||
golang.org/x/net/trace
 | 
			
		||||
# golang.org/x/oauth2 v0.5.0
 | 
			
		||||
# golang.org/x/oauth2 v0.10.0
 | 
			
		||||
## explicit; go 1.17
 | 
			
		||||
golang.org/x/oauth2
 | 
			
		||||
golang.org/x/oauth2/internal
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user