aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--auth/oauth.go14
-rw-r--r--gdrive.go5
-rw-r--r--handlers_drive.go8
3 files changed, 27 insertions, 0 deletions
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)