diff options
| author | Petter Rasmussen | 2016-02-21 00:55:02 +0100 |
|---|---|---|
| committer | Petter Rasmussen | 2016-02-21 00:55:02 +0100 |
| commit | 78207dc0823431ba86fd9179df808b7ab90d97bb (patch) | |
| tree | aef17746bae5d8fe1598a888c5873c1ab5c13100 /auth/file_source.go | |
| parent | c1960cd2b0fc82054ebe64c6ec79555b991a4ff9 (diff) | |
| download | gdrive-78207dc0823431ba86fd9179df808b7ab90d97bb.tar.bz2 | |
Rename
Diffstat (limited to 'auth/file_source.go')
| -rw-r--r-- | auth/file_source.go | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/auth/file_source.go b/auth/file_source.go new file mode 100644 index 0000000..1c1150b --- /dev/null +++ b/auth/file_source.go @@ -0,0 +1,68 @@ +package auth + +import ( + "golang.org/x/oauth2" + "encoding/json" + "os" + "io/ioutil" +) + + +func FileSource(path string, token *oauth2.Token, conf *oauth2.Config) oauth2.TokenSource { + return &fileSource{ + tokenPath: path, + tokenSource: conf.TokenSource(oauth2.NoContext, token), + } +} + +type fileSource struct { + tokenPath string + tokenSource oauth2.TokenSource +} + +func (self *fileSource) Token() (*oauth2.Token, error) { + token, err := self.tokenSource.Token() + if err != nil { + return token, err + } + + // Save token to file + SaveToken(self.tokenPath, token) + + return token, nil +} + +func ReadToken(path string) (*oauth2.Token, bool, error) { + if !fileExists(path) { + return nil, false, nil + } + + content, err := ioutil.ReadFile(path) + if err != nil { + return nil, true, err + } + token := &oauth2.Token{} + return token, true, json.Unmarshal(content, token) +} + +func SaveToken(path string, token *oauth2.Token) error { + data, err := json.MarshalIndent(token, "", " ") + if err != nil { + return err + } + + if err = mkdir(path); err != nil { + return err + } + + // Write to temp file first + tmpFile := path + ".tmp" + err = ioutil.WriteFile(tmpFile, data, 0600) + if err != nil { + os.Remove(tmpFile) + return err + } + + // Move file to correct path + return os.Rename(tmpFile, path) +} |
