From c1960cd2b0fc82054ebe64c6ec79555b991a4ff9 Mon Sep 17 00:00:00 2001 From: Petter Rasmussen Date: Sun, 21 Feb 2016 00:53:32 +0100 Subject: Add support for user-provided access token --- auth/oauth.go | 14 ++++++++++++++ gdrive.go | 5 +++++ handlers_drive.go | 8 ++++++++ 3 files changed, 27 insertions(+) diff --git a/auth/oauth.go b/auth/oauth.go index 1f2884b..965c7cc 100644 --- a/auth/oauth.go +++ b/auth/oauth.go @@ -50,6 +50,20 @@ func NewRefreshTokenClient(clientId, clientSecret, refreshToken string) *http.Cl ) } +func NewAccessTokenClient(clientId, clientSecret, accessToken string) *http.Client { + conf := getConfig(clientId, clientSecret) + + token := &oauth2.Token{ + TokenType: "Bearer", + AccessToken: accessToken, + } + + return oauth2.NewClient( + oauth2.NoContext, + conf.TokenSource(oauth2.NoContext, token), + ) +} + func getConfig(clientId, clientSecret string) *oauth2.Config { return &oauth2.Config{ ClientID: clientId, diff --git a/gdrive.go b/gdrive.go index 3218a0c..f89688b 100644 --- a/gdrive.go +++ b/gdrive.go @@ -33,6 +33,11 @@ func main() { Patterns: []string{"--refresh-token"}, Description: "Oauth refresh token used to get access token (for advanced users)", }, + cli.StringFlag{ + Name: "accessToken", + Patterns: []string{"--access-token"}, + Description: "Oauth access token, only recommended for short-lived requests because of short lifetime (for advanced users)", + }, } handlers := []*cli.Handler{ diff --git a/handlers_drive.go b/handlers_drive.go index 4fa00cf..3ca2c6a 100644 --- a/handlers_drive.go +++ b/handlers_drive.go @@ -311,10 +311,18 @@ func aboutExportHandler(ctx cli.Context) { } func getOauthClient(args cli.Arguments) (*http.Client, error) { + if args.String("refreshToken") != "" && args.String("accessToken") != "" { + ExitF("Access token not needed when refresh token is provided") + } + if args.String("refreshToken") != "" { return auth.NewRefreshTokenClient(ClientId, ClientSecret, args.String("refreshToken")), nil } + if args.String("accessToken") != "" { + return auth.NewAccessTokenClient(ClientId, ClientSecret, args.String("accessToken")), nil + } + configDir := args.String("configDir") tokenPath := ConfigFilePath(configDir, TokenFilename) return auth.NewFileSourceClient(ClientId, ClientSecret, tokenPath, authCodePrompt) -- cgit v1.2.3