diff options
| -rw-r--r-- | auth/oauth.go | 14 | ||||
| -rw-r--r-- | gdrive.go | 5 | ||||
| -rw-r--r-- | handlers_drive.go | 8 | 
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, @@ -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) | 
