forked from fionera/TeamDriveManager
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathadmin.go
91 lines (70 loc) · 2.29 KB
/
admin.go
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package api
import (
"context"
"github.com/pkg/errors"
"golang.org/x/oauth2/jwt"
admin "google.golang.org/api/admin/directory/v1"
"google.golang.org/api/googleapi"
"google.golang.org/api/option"
)
func NewAdminService(jwtConfig *jwt.Config) (*admin.Service, error) {
jwtConfig.Scopes = append(jwtConfig.Scopes, admin.AdminDirectoryGroupScope)
return admin.NewService(context.TODO(), option.WithTokenSource(jwtConfig.TokenSource(context.TODO())))
}
func ListMembers(a *admin.Service, groupAddress string) ([]*admin.Member, error) {
var members []*admin.Member
err := a.Members.List(groupAddress).Pages(context.Background(), func(list *admin.Members) error {
members = append(members, list.Members...)
return nil
})
if err != nil {
return nil, errors.Errorf("Error listing group members: %s", err)
}
return members, nil
}
func AddMember(a *admin.Service, groupAddress, memberAddress string) (*admin.Member, error) {
return a.Members.Insert(groupAddress, &admin.Member{
Email: memberAddress,
DeliverySettings: "NONE",
}).Do()
}
func RemoveMember(a *admin.Service, groupAddress, memberAddress string) error {
err := a.Members.Delete(groupAddress, memberAddress).Do()
if err != nil {
return errors.Errorf("Error removing group member: %s", err)
}
return nil
}
func CreateGroup(a *admin.Service, name, address string) (*admin.Group, error) {
group, err := a.Groups.Insert(&admin.Group{
Name: name,
Email: address,
Description: "Created by TeamDriveManager",
}).Do()
if err != nil {
return nil, errors.Errorf("Error creating group: %s", err)
}
return group, nil
}
func ListGroups(a *admin.Service, domain string) ([]*admin.Group, error) {
var groups []*admin.Group
err := a.Groups.List().Domain(domain).Pages(context.Background(), func(list *admin.Groups) error {
groups = append(groups, list.Groups...)
return nil
})
if err != nil {
return nil, errors.Errorf("Error listing groups: %s", err)
}
return groups, nil
}
// GroupExists needs the full email address as parameter and returns true if it can find a group for it
func GroupExists(a *admin.Service, address string) (bool, error) {
_, err := a.Groups.Get(address).Do()
if err != nil {
if err.(*googleapi.Error).Code == 404 {
return false, nil
}
return false, err
}
return true, nil
}