oauth2: add func NewClient as per issue #66

Change-Id: Icfae8530e725f2f31774e395319e6e6db330262a
Reviewed-on: https://go-review.googlesource.com/1701
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
diff --git a/jwt.go b/jwt.go
index eedbfc1..892ce0c 100644
--- a/jwt.go
+++ b/jwt.go
@@ -74,12 +74,7 @@
 //
 // The returned client and its Transport should not be modified.
 func (c *JWTConfig) Client(ctx Context, initialToken *Token) *http.Client {
-	return &http.Client{
-		Transport: &Transport{
-			Base:   contextTransport(ctx),
-			Source: c.TokenSource(ctx, initialToken),
-		},
-	}
+	return NewClient(ctx, c.TokenSource(ctx, initialToken))
 }
 
 // jwtSource is a source that always does a signed JWT request for a token.
diff --git a/oauth2.go b/oauth2.go
index 6399de5..4509449 100644
--- a/oauth2.go
+++ b/oauth2.go
@@ -275,12 +275,7 @@
 // HTTP transport will be obtained using the provided context.
 // The returned client and its Transport should not be modified.
 func (c *Config) Client(ctx Context, t *Token) *http.Client {
-	return &http.Client{
-		Transport: &Transport{
-			Base:   contextTransport(ctx),
-			Source: c.TokenSource(ctx, t),
-		},
-	}
+	return NewClient(ctx, c.TokenSource(ctx, t))
 }
 
 // TokenSource returns a TokenSource that returns t until t expires,
@@ -474,3 +469,14 @@
 // an immutable public variable with a unique type. It's immutable
 // because nobody else can create a contextKey, being unexported.
 type contextKey struct{}
+
+// NewClient creates an *http.Client from a Context and TokenSource.
+// The client's lifetime does not extend beyond the lifetime of the context.
+func NewClient(ctx Context, src TokenSource) *http.Client {
+	return &http.Client{
+		Transport: &Transport{
+			Base:   contextTransport(ctx),
+			Source: src,
+		},
+	}
+}