aboutsummaryrefslogtreecommitdiffstats
path: root/auth/oauth.go
diff options
context:
space:
mode:
authorPetter Rasmussen2016-01-18 21:54:26 +0100
committerPetter Rasmussen2016-01-18 21:54:26 +0100
commit4f4152ccf32acbd392c7d80e45834ca1f3ea2d62 (patch)
treea61c9e6fcb6ede8c659ac8d76b491dbef5edafcc /auth/oauth.go
parente60833f88408139c8a92c3de9e8bfb87f295433e (diff)
downloadgdrive-4f4152ccf32acbd392c7d80e45834ca1f3ea2d62.tar.bz2
Simplify drive wrapper, s/client/auth/
Diffstat (limited to 'auth/oauth.go')
-rw-r--r--auth/oauth.go40
1 files changed, 40 insertions, 0 deletions
diff --git a/auth/oauth.go b/auth/oauth.go
new file mode 100644
index 0000000..b8f1d47
--- /dev/null
+++ b/auth/oauth.go
@@ -0,0 +1,40 @@
+package auth
+
+import (
+ "net/http"
+ "golang.org/x/oauth2"
+)
+
+type authCodeFn func(string) func() string
+
+func NewOauthClient(clientId, clientSecret, tokenFile string, authFn authCodeFn) (*http.Client, error) {
+ conf := &oauth2.Config{
+ ClientID: clientId,
+ ClientSecret: clientSecret,
+ Scopes: []string{"https://www.googleapis.com/auth/drive"},
+ RedirectURL: "urn:ietf:wg:oauth:2.0:oob",
+ Endpoint: oauth2.Endpoint{
+ AuthURL: "https://accounts.google.com/o/oauth2/auth",
+ TokenURL: "https://accounts.google.com/o/oauth2/token",
+ },
+ }
+
+ // Read cached token
+ token, exists, err := ReadToken(tokenFile)
+ if err != nil {
+ return nil, err
+ }
+
+ // Require auth code if token file does not exist
+ // or refresh token is missing
+ if !exists || token.RefreshToken == "" {
+ authUrl := conf.AuthCodeURL("state", oauth2.AccessTypeOffline)
+ authCode := authFn(authUrl)()
+ token, err = conf.Exchange(oauth2.NoContext, authCode)
+ }
+
+ return oauth2.NewClient(
+ oauth2.NoContext,
+ FileSource(tokenFile, token, conf),
+ ), nil
+}