aboutsummaryrefslogtreecommitdiffstats
path: root/drive/share.go
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/share.go
parentcd62c9d23d226b77111274144bdc81330013fdfc (diff)
downloadgdrive-713b0624b9f9ac2370a898f669a922f80a7fe8ea.tar.bz2
Add more share commands, upload + share
Diffstat (limited to 'drive/share.go')
-rw-r--r--drive/share.go95
1 files changed, 71 insertions, 24 deletions
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()
+}