aboutsummaryrefslogtreecommitdiffstats
path: root/auth/file_source.go
diff options
context:
space:
mode:
authorPetter Rasmussen2016-02-21 00:55:02 +0100
committerPetter Rasmussen2016-02-21 00:55:02 +0100
commit78207dc0823431ba86fd9179df808b7ab90d97bb (patch)
treeaef17746bae5d8fe1598a888c5873c1ab5c13100 /auth/file_source.go
parentc1960cd2b0fc82054ebe64c6ec79555b991a4ff9 (diff)
downloadgdrive-78207dc0823431ba86fd9179df808b7ab90d97bb.tar.bz2
Rename
Diffstat (limited to 'auth/file_source.go')
-rw-r--r--auth/file_source.go68
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)
+}