aboutsummaryrefslogtreecommitdiffstats
path: root/drive/share.go
blob: 43655df7829d1cf6293a51340e944114eb76404e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package drive

import (
    "io"
    "fmt"
    "google.golang.org/api/drive/v3"
)

type ShareArgs struct {
    Out io.Writer
    FileId string
    Role string
    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)
        }
    }

    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()
    if err != nil {
        return fmt.Errorf("Failed share file: %s", err)
    }

    fmt.Fprintln(args.Out, p)
    return
}

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
}