diff options
| author | Petter Rasmussen | 2016-01-17 13:33:19 +0100 | 
|---|---|---|
| committer | Petter Rasmussen | 2016-01-17 13:33:19 +0100 | 
| commit | 0f9535df1b2a64e8f895671025bf7823e9391135 (patch) | |
| tree | d169944546e9bb47695c9fef4358f541fe462b7f | |
| parent | 9e19c833c2495c52fe1af547a2eecb2693136a9c (diff) | |
| download | gdrive-0f9535df1b2a64e8f895671025bf7823e9391135.tar.bz2 | |
Implement share file
| -rw-r--r-- | drive/files.go | 5 | ||||
| -rw-r--r-- | drive/permissions.go | 47 | ||||
| -rw-r--r-- | drive/types.go | 9 | ||||
| -rw-r--r-- | gdrive.go | 31 | ||||
| -rw-r--r-- | handlers.go | 13 | 
5 files changed, 98 insertions, 7 deletions
| diff --git a/drive/files.go b/drive/files.go index 8a5c7f4..b6eed04 100644 --- a/drive/files.go +++ b/drive/files.go @@ -12,6 +12,7 @@ import (  const DirectoryMimeType = "application/vnd.google-apps.folder" +  func (self *Drive) List(args ListFilesArgs) {      fileList, err := self.service.Files.List().PageSize(args.MaxFiles).Q(args.Query).Fields("nextPageToken", "files(id,name,size,createdTime)").Do()      errorF(err, "Failed listing files: %s\n", err) @@ -136,7 +137,3 @@ func (self *Drive) Mkdir(args MkdirArgs) {      //    self.Share(TODO)      //}  } - -//func newFile(args UploadFileArgs) *drive.File { -// -//} diff --git a/drive/permissions.go b/drive/permissions.go new file mode 100644 index 0000000..1e2c004 --- /dev/null +++ b/drive/permissions.go @@ -0,0 +1,47 @@ +package drive + +import ( +    "fmt" +    "google.golang.org/api/drive/v3" +) + + +func (self *Drive) Share(args ShareArgs) { +    if args.Revoke { +        err := self.deletePermissions(args) +        errorF(err, "Failed delete permissions: %s", err) +    } + +    permission := &drive.Permission{ +        AllowFileDiscovery: args.Discoverable, +        Role: args.Role, +        Type: args.Type, +        EmailAddress: args.Email, +    } + +    p, err := self.service.Permissions.Create(args.FileId, permission).Do() +    errorF(err, "Failed share file: %s", err) + +    fmt.Println(p) +} + +func (self *Drive) deletePermissions(args ShareArgs) error { +    permList, err := self.service.Permissions.List(args.FileId).Do() +    if err != nil { +        return err +    } + +    for _, p := range permList.Permissions { +        // Skip owner permissions +        if p.Role == "owner" { +            continue +        } + +        err := self.service.Permissions.Delete(args.FileId, p.Id).Do() +        if err != nil { +            return err +        } +    } + +    return nil +} diff --git a/drive/types.go b/drive/types.go index 6fa2f3a..f252dde 100644 --- a/drive/types.go +++ b/drive/types.go @@ -58,6 +58,15 @@ type MkdirArgs struct {      Share bool  } +type ShareArgs struct { +    FileId string +    Role string +    Type string +    Email string +    Discoverable bool +    Revoke bool +} +  type PrintFileListArgs struct {      Files []*drive.File      NameWidth int @@ -12,6 +12,8 @@ const Version = "2.0.0"  const DefaultMaxFiles = 30  const DefaultNameWidth = 40  const DefaultQuery = "trashed = false and 'me' in owners" +const DefaultShareRole = "reader" +const DefaultShareType = "anyone"  var DefaultConfigDir = GetDefaultConfigDir() @@ -181,16 +183,39 @@ func main() {              },          },          &cli.Handler{ -            Pattern: "[global options] share <id>", +            Pattern: "[global options] share [options] <id>",              Description: "Share file or directory", -            Callback: handler, +            Callback: shareHandler,              Flags: cli.Flags{                  "global options": globalFlags,                  "options": []cli.Flag{                      cli.BoolFlag{ +                        Name: "discoverable", +                        Patterns: []string{"--discoverable"}, +                        Description: "Make file discoverable by search engines", +                        OmitValue: true, +                    }, +                    cli.StringFlag{ +                        Name: "role", +                        Patterns: []string{"--role"}, +                        Description: fmt.Sprintf("Share role. Default: %s", DefaultShareRole), +                        DefaultValue: DefaultShareRole, +                    }, +                    cli.StringFlag{ +                        Name: "type", +                        Patterns: []string{"--type"}, +                        Description: fmt.Sprintf("Share type. Default: %s", DefaultShareType), +                        DefaultValue: DefaultShareType, +                    }, +                    cli.StringFlag{ +                        Name: "email", +                        Patterns: []string{"--email"}, +                        Description: "The email address of the user or group to share the file with. Requires 'user' or 'group' as type", +                    }, +                    cli.BoolFlag{                          Name: "revoke",                          Patterns: []string{"--revoke"}, -                        Description: "Unshare file or directory", +                        Description: "Delete all sharing permissions",                          OmitValue: true,                      },                  }, diff --git a/handlers.go b/handlers.go index 64e4fcd..3d90dc7 100644 --- a/handlers.go +++ b/handlers.go @@ -69,6 +69,19 @@ func mkdirHandler(ctx cli.Context) {      })  } +func shareHandler(ctx cli.Context) { +    args := ctx.Args() + +    newDrive(args).Share(drive.ShareArgs{ +        FileId: args.String("id"), +        Role: args.String("role"), +        Type: args.String("type"), +        Email: args.String("email"), +        Discoverable: args.Bool("discoverable"), +        Revoke: args.Bool("revoke"), +    }) +} +  func deleteHandler(ctx cli.Context) {      fmt.Println("Deleting...")  } | 
