client.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package dropboxfs
  2. import (
  3. "fmt"
  4. "dev.hexasoftware.com/hxs/cloudmount/internal/core"
  5. "github.com/dropbox/dropbox-sdk-go-unofficial/dropbox"
  6. "golang.org/x/oauth2"
  7. )
  8. func getTokenFromWeb(config *oauth2.Config) *oauth2.Token {
  9. authURL := config.AuthCodeURL("state-token")
  10. fmt.Printf(
  11. `Go to the following link in your browser:
  12. ----------------------------------------------------------------------------------------------
  13. %v
  14. ----------------------------------------------------------------------------------------------
  15. type the authorization code: `, authURL)
  16. var code string
  17. if _, err := fmt.Scan(&code); err != nil {
  18. log.Fatalf("Unable to read authorization code %v", err)
  19. }
  20. tok, err := config.Exchange(oauth2.NoContext, code)
  21. if err != nil {
  22. log.Fatalf("Unable to retrieve token from web: %v", err)
  23. }
  24. return tok
  25. }
  26. func (fs *DropboxFS) initClient() dropbox.Config {
  27. err := core.ParseConfig(fs.Config.Source, fs.serviceConfig)
  28. if err != nil {
  29. log.Fatalf("Unable to read <source>: %v", err)
  30. }
  31. config := &oauth2.Config{
  32. ClientID: fs.serviceConfig.ClientSecret.ClientID,
  33. ClientSecret: fs.serviceConfig.ClientSecret.ClientSecret,
  34. RedirectURL: "",
  35. Scopes: []string{},
  36. Endpoint: oauth2.Endpoint{
  37. AuthURL: "https://www.dropbox.com/1/oauth2/authorize",
  38. TokenURL: "https://api.dropbox.com/1/oauth2/token",
  39. },
  40. }
  41. if fs.serviceConfig.Auth == nil {
  42. tok := getTokenFromWeb(config)
  43. fs.serviceConfig.Auth = tok
  44. core.SaveConfig(fs.Config.Source, fs.serviceConfig)
  45. }
  46. dbconfig := dropbox.Config{Token: fs.serviceConfig.Auth.AccessToken}
  47. return dbconfig
  48. }