aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetter Rasmussen2016-01-17 13:33:19 +0100
committerPetter Rasmussen2016-01-17 13:33:19 +0100
commit0f9535df1b2a64e8f895671025bf7823e9391135 (patch)
treed169944546e9bb47695c9fef4358f541fe462b7f
parent9e19c833c2495c52fe1af547a2eecb2693136a9c (diff)
downloadgdrive-0f9535df1b2a64e8f895671025bf7823e9391135.tar.bz2
Implement share file
-rw-r--r--drive/files.go5
-rw-r--r--drive/permissions.go47
-rw-r--r--drive/types.go9
-rw-r--r--gdrive.go31
-rw-r--r--handlers.go13
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
diff --git a/gdrive.go b/gdrive.go
index 2bef468..3f9ec90 100644
--- a/gdrive.go
+++ b/gdrive.go
@@ -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...")
}