diff options
| author | Petter Rasmussen | 2016-02-15 21:50:45 +0100 |
|---|---|---|
| committer | Petter Rasmussen | 2016-02-15 21:50:45 +0100 |
| commit | 713b0624b9f9ac2370a898f669a922f80a7fe8ea (patch) | |
| tree | d8b3579a97b52d474f6eaab3625ec78b6fedf126 /drive/share.go | |
| parent | cd62c9d23d226b77111274144bdc81330013fdfc (diff) | |
| download | gdrive-713b0624b9f9ac2370a898f669a922f80a7fe8ea.tar.bz2 | |
Add more share commands, upload + share
Diffstat (limited to 'drive/share.go')
| -rw-r--r-- | drive/share.go | 95 |
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() +} |
