aboutsummaryrefslogtreecommitdiffstats
path: root/drive
diff options
context:
space:
mode:
authorPetter Rasmussen2016-02-15 21:50:45 +0100
committerPetter Rasmussen2016-02-15 21:50:45 +0100
commit713b0624b9f9ac2370a898f669a922f80a7fe8ea (patch)
treed8b3579a97b52d474f6eaab3625ec78b6fedf126 /drive
parentcd62c9d23d226b77111274144bdc81330013fdfc (diff)
downloadgdrive-713b0624b9f9ac2370a898f669a922f80a7fe8ea.tar.bz2
Add more share commands, upload + share
Diffstat (limited to 'drive')
-rw-r--r--drive/import.go2
-rw-r--r--drive/mkdir.go5
-rw-r--r--drive/share.go95
-rw-r--r--drive/update.go1
-rw-r--r--drive/upload.go31
5 files changed, 93 insertions, 41 deletions
diff --git a/drive/import.go b/drive/import.go
index 258f828..a3d8b3b 100644
--- a/drive/import.go
+++ b/drive/import.go
@@ -13,7 +13,6 @@ type ImportArgs struct {
Out io.Writer
Progress io.Writer
Path string
- Share bool
Parents []string
}
@@ -39,7 +38,6 @@ func (self *Drive) Import(args ImportArgs) error {
Path: args.Path,
Parents: args.Parents,
Mime: toMimes[0],
- Share: args.Share,
})
if err != nil {
return err
diff --git a/drive/mkdir.go b/drive/mkdir.go
index ad358a4..f6f0641 100644
--- a/drive/mkdir.go
+++ b/drive/mkdir.go
@@ -12,7 +12,6 @@ type MkdirArgs struct {
Out io.Writer
Name string
Parents []string
- Share bool
}
func (self *Drive) Mkdir(args MkdirArgs) error {
@@ -36,9 +35,5 @@ func (self *Drive) mkdir(args MkdirArgs) (*drive.File, error) {
return nil, fmt.Errorf("Failed to create directory: %s", err)
}
- //if args.Share {
- // self.share(TODO)
- //}
-
return f, nil
}
diff --git a/drive/share.go b/drive/share.go
index 43655df..291512a 100644
--- a/drive/share.go
+++ b/drive/share.go
@@ -3,6 +3,7 @@ package drive
import (
"io"
"fmt"
+ "text/tabwriter"
"google.golang.org/api/drive/v3"
)
@@ -13,17 +14,9 @@ type ShareArgs struct {
Type string
Email string
Discoverable bool
- Revoke bool
}
-func (self *Drive) Share(args ShareArgs) (err error) {
- if args.Revoke {
- err = self.deletePermissions(args)
- if err != nil {
- return fmt.Errorf("Failed delete permissions: %s", err)
- }
- }
-
+func (self *Drive) Share(args ShareArgs) error {
permission := &drive.Permission{
AllowFileDiscovery: args.Discoverable,
Role: args.Role,
@@ -31,32 +24,86 @@ func (self *Drive) Share(args ShareArgs) (err error) {
EmailAddress: args.Email,
}
- p, err := self.service.Permissions.Create(args.FileId, permission).Do()
+ _, err := self.service.Permissions.Create(args.FileId, permission).Do()
+ if err != nil {
+ return fmt.Errorf("Failed to share file: %s", err)
+ }
+
+ fmt.Fprintf(args.Out, "Granted %s permission to %s\n", args.Role, args.Type)
+ return nil
+}
+
+type RevokePermissionArgs struct {
+ Out io.Writer
+ FileId string
+ PermissionId string
+}
+
+func (self *Drive) RevokePermission(args RevokePermissionArgs) error {
+ err := self.service.Permissions.Delete(args.FileId, args.PermissionId).Do()
if err != nil {
- return fmt.Errorf("Failed share file: %s", err)
+ fmt.Errorf("Failed to revoke permission: %s", err)
+ return err
}
- fmt.Fprintln(args.Out, p)
- return
+ fmt.Fprintf(args.Out, "Permission revoked\n")
+ return nil
+}
+
+type ListPermissionsArgs struct {
+ Out io.Writer
+ FileId string
}
-func (self *Drive) deletePermissions(args ShareArgs) error {
- permList, err := self.service.Permissions.List(args.FileId).Do()
+func (self *Drive) ListPermissions(args ListPermissionsArgs) error {
+ permList, err := self.service.Permissions.List(args.FileId).Fields("permissions(id,role,type,domain,emailAddress,allowFileDiscovery)").Do()
if err != nil {
+ fmt.Errorf("Failed to list permissions: %s", err)
return err
}
- for _, p := range permList.Permissions {
- // Skip owner permissions
- if p.Role == "owner" {
- continue
- }
+ printPermissions(printPermissionsArgs{
+ out: args.Out,
+ permissions: permList.Permissions,
+ })
+ return nil
+}
+
+func (self *Drive) shareAnyoneReader(fileId string) error {
+ permission := &drive.Permission{
+ Role: "reader",
+ Type: "anyone",
+ }
- err := self.service.Permissions.Delete(args.FileId, p.Id).Do()
- if err != nil {
- return err
- }
+ _, err := self.service.Permissions.Create(fileId, permission).Do()
+ if err != nil {
+ return fmt.Errorf("Failed to share file: %s", err)
}
return nil
}
+
+type printPermissionsArgs struct {
+ out io.Writer
+ permissions []*drive.Permission
+}
+
+func printPermissions(args printPermissionsArgs) {
+ w := new(tabwriter.Writer)
+ w.Init(args.out, 0, 0, 3, ' ', 0)
+
+ fmt.Fprintln(w, "Id\tType\tRole\tEmail\tDomain\tDiscoverable")
+
+ for _, p := range args.permissions {
+ fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%s\t%s\n",
+ p.Id,
+ p.Type,
+ p.Role,
+ p.EmailAddress,
+ p.Domain,
+ formatBool(p.AllowFileDiscovery),
+ )
+ }
+
+ w.Flush()
+}
diff --git a/drive/update.go b/drive/update.go
index bd9fb4c..c4ee341 100644
--- a/drive/update.go
+++ b/drive/update.go
@@ -19,7 +19,6 @@ type UpdateArgs struct {
Parents []string
Mime string
Recursive bool
- Share bool
ChunkSize int64
}
diff --git a/drive/upload.go b/drive/upload.go
index 4f237ca..898e3cd 100644
--- a/drive/upload.go
+++ b/drive/upload.go
@@ -43,7 +43,16 @@ func (self *Drive) Upload(args UploadArgs) error {
f, rate, err := self.uploadFile(args)
fmt.Fprintf(args.Out, "Uploaded %s at %s/s, total %s\n", f.Id, formatSize(rate, false), formatSize(f.Size, false))
- return err
+
+ if args.Share {
+ err = self.shareAnyoneReader(f.Id)
+ if err != nil {
+ return err
+ }
+
+ fmt.Fprintf(args.Out, "File is readable by anyone at %s\n", f.WebContentLink)
+ }
+ return nil
}
func (self *Drive) uploadRecursive(args UploadArgs) error {
@@ -76,7 +85,6 @@ func (self *Drive) uploadDirectory(args UploadArgs) error {
Out: args.Out,
Name: srcFileInfo.Name(),
Parents: args.Parents,
- Share: args.Share,
})
if err != nil {
return err
@@ -142,7 +150,7 @@ func (self *Drive) uploadFile(args UploadArgs) (*drive.File, int64, error) {
fmt.Fprintf(args.Out, "Uploading %s\n", args.Path)
started := time.Now()
- f, err := self.service.Files.Create(dstFile).Fields("id", "name", "size", "md5Checksum").Media(srcReader, chunkSize).Do()
+ f, err := self.service.Files.Create(dstFile).Fields("id", "name", "size", "md5Checksum", "webContentLink").Media(srcReader, chunkSize).Do()
if err != nil {
return nil, 0, fmt.Errorf("Failed to upload file: %s", err)
}
@@ -164,7 +172,7 @@ type UploadStreamArgs struct {
Progress io.Writer
}
-func (self *Drive) UploadStream(args UploadStreamArgs) (err error) {
+func (self *Drive) UploadStream(args UploadStreamArgs) error {
if args.ChunkSize > intMax() - 1 {
return fmt.Errorf("Chunk size is to big, max chunk size for this computer is %d", intMax() - 1)
}
@@ -189,7 +197,7 @@ func (self *Drive) UploadStream(args UploadStreamArgs) (err error) {
fmt.Fprintf(args.Out, "Uploading %s\n", dstFile.Name)
started := time.Now()
- f, err := self.service.Files.Create(dstFile).Fields("id", "name", "size").Media(srcReader, chunkSize).Do()
+ f, err := self.service.Files.Create(dstFile).Fields("id", "name", "size", "webContentLink").Media(srcReader, chunkSize).Do()
if err != nil {
return fmt.Errorf("Failed to upload file: %s", err)
}
@@ -198,8 +206,13 @@ func (self *Drive) UploadStream(args UploadStreamArgs) (err error) {
rate := calcRate(f.Size, started, time.Now())
fmt.Fprintf(args.Out, "Uploaded %s at %s/s, total %s\n", f.Id, formatSize(rate, false), formatSize(f.Size, false))
- //if args.Share {
- // self.Share(TODO)
- //}
- return
+ if args.Share {
+ err = self.shareAnyoneReader(f.Id)
+ if err != nil {
+ return err
+ }
+
+ fmt.Fprintf(args.Out, "File is readable by anyone at %s\n", f.WebContentLink)
+ }
+ return nil
}