tokenStore.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package login
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "io/ioutil"
  6. "os"
  7. "path/filepath"
  8. "golang.org/x/oauth2"
  9. )
  10. type tokenStore struct {
  11. filePath string
  12. }
  13. // TokenInfo data stored in tokenStore
  14. type TokenInfo struct {
  15. Token oauth2.Token `json:"oauthToken"`
  16. TenantID string `json:"tenantId"`
  17. }
  18. func newTokenStore(path string) (tokenStore, error) {
  19. parentFolder := filepath.Dir(path)
  20. dir, err := os.Stat(parentFolder)
  21. if os.IsNotExist(err) {
  22. err = os.MkdirAll(parentFolder, 0700)
  23. if err != nil {
  24. return tokenStore{}, err
  25. }
  26. dir, err = os.Stat(parentFolder)
  27. }
  28. if err != nil {
  29. return tokenStore{}, err
  30. }
  31. if !dir.Mode().IsDir() {
  32. return tokenStore{}, errors.New("cannot use path " + path + " ; " + parentFolder + " already exists and is not a directory")
  33. }
  34. return tokenStore{
  35. filePath: path,
  36. }, nil
  37. }
  38. func (store tokenStore) writeLoginInfo(info TokenInfo) error {
  39. bytes, err := json.MarshalIndent(info, "", " ")
  40. if err != nil {
  41. return err
  42. }
  43. return ioutil.WriteFile(store.filePath, bytes, 0644)
  44. }
  45. func (store tokenStore) readToken() (TokenInfo, error) {
  46. bytes, err := ioutil.ReadFile(store.filePath)
  47. if err != nil {
  48. return TokenInfo{}, err
  49. }
  50. loginInfo := TokenInfo{}
  51. if err := json.Unmarshal(bytes, &loginInfo); err != nil {
  52. return TokenInfo{}, err
  53. }
  54. return loginInfo, nil
  55. }