-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCode.gs
57 lines (47 loc) · 2.1 KB
/
Code.gs
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
function addCalendarToGroupMembers() {
let config = getConfig()
let groups = config.groups
let database = openDatabaseConnection()
// Iterate over each group in the config file.
for (const [group, calendars] of Object.entries(groups)) {
// Get an array of all members in the group.
let members = getUserEmailsInGroup(group)
Logger.log("Members in group " + group + ": " + members)
// Iterate over each calendar ID assigned to the group in config.
for (const [calendarId, calendarDetails] of Object.entries(calendars)) {
Logger.log("Working on calendar: " + calendarDetails.calendarName)
// Get a list of all users that have been added to this calendar previously.
// Do this to avoid authenticating as the same users over and over again.
// Also allows users to unsub if they wish without as adding it back again.
let alreadyMembers = getUsersFromDatabase(calendarId, database)
// Auth using OAuth2 for each member in the group and subscribe to the specific calendar.
members.forEach(function(member) {
if (!alreadyMembers.includes(member)) {
let service = getService(member);
if (!service.hasAccess()) {
Logger.log("Can't delegate access for member: " + member)
return
}
Logger.log("Subscribing to " + calendarDetails.calendarName + " calendar for user: " + member)
try {
subscribeToCalendar(
service.getAccessToken(),
calendarId,
calendarDetails.eventColor,
calendarDetails.textColor,
calendarDetails.hidden,
calendarDetails.selected,
member
)
Logger.log("Adding " + member + " to database")
addUserToDatabase(calendarId ,member, database)
} catch (e) {
Logger.log(e)
}
} else {
Logger.log("Member already has been subscribed: " + member)
}
})
}
}
}