Skip to content

Instantly share code, notes, and snippets.

@northwestcoder
Created October 1, 2020 18:04
Show Gist options
  • Save northwestcoder/2ff8aaaabeb268bb7fc5ac513404d598 to your computer and use it in GitHub Desktop.
Save northwestcoder/2ff8aaaabeb268bb7fc5ac513404d598 to your computer and use it in GitHub Desktop.
G Suite Admin Functions
/*
Collection of apps script functions that trigger G Suite administrative calls
good backgrounder:
https://stackoverflow.com/questions/60960260/google-scripts-api-call-to-directory-members-failed-with-error-resource-not-fou
Appsheet companion app for this solution:
https://www.appsheet.com/samples/An-app-to-manage-G-Suite-users-and-group-Meant-to-be-used-in-conjunction-with-a-provided-Google-App-Script?appGuidString=7ab88075-a91c-4898-8a4f-1ca6ce2fca93
*/
function main(e) {
var theSource = e.source;
var theSheet = theSource.getActiveSheet();
var theActiveRange = theSheet.getActiveRange();
var theActiveRow = theActiveRange.getRow();
requestType = theSheet.getRange(theActiveRow,4).getValue();
userEmail = theSheet.getRange(theActiveRow,5).getValue();
groupName = theSheet.getRange(theActiveRow,6).getValue();
firstName = theSheet.getRange(theActiveRow,7).getValue();
lastName = theSheet.getRange(theActiveRow,8).getValue();
switch(requestType) {
case "Create New User":
// Logger.log("got to creating a new user case");
passwordCreated = createNewUser(userEmail, firstName, lastName);
setResponse = theSheet.getRange(theActiveRow,9).setValue(passwordCreated[1]);
setPassword = theSheet.getRange(theActiveRow,10).setValue(passwordCreated[0]);
break;
case "Create New Group":
groupCreated = createNewGroup(groupName);
setResponse = theSheet.getRange(theActiveRow,9).setValue(groupCreated);
break;
case "Add User to Group as MEMBER":
membershipCreated = addGroupMember(groupName, userEmail);
setResponse = theSheet.getRange(theActiveRow,9).setValue(membershipCreated);
break;
case "Add User to Group as MANAGER":
managershipCreated = addGroupManager(groupName, userEmail);
setResponse = theSheet.getRange(theActiveRow,9).setValue(managershipCreated);
break;
case "Remove User from Group":
membershipRemoved = removeGroupMember(groupName, userEmail);
setResponse = theSheet.getRange(theActiveRow,9).setValue(membershipRemoved);
break;
case "Suspend User Account":
userSuspended = suspendUserAccount(userEmail);
setResponse = theSheet.getRange(theActiveRow,9).setValue(userSuspended);
break;
}
}
function createNewUser(userEmail, firstName, lastName) {
var response = [];
// Generate a random password string.
var password = Math.random().toString(36);
var user = {
primaryEmail: userEmail,
name: {
givenName: firstName,
familyName: lastName
},
password: password
};
try {
AdminDirectory.Users.insert(user)
logged = 'User email ' + user.primaryEmail + ' created with temp password';
} catch (e) {
password = "";
logged = e;
}
response.push(password);
response.push(logged);
return response;
}
function createNewGroup(groupName) {
var logged = "";
var group = {
email: groupName
};
try {
AdminDirectory.Groups.insert(group)
logged = 'group email ' + group.email + ' created';
} catch (e) {
logged = e;
}
return logged;
}
function addGroupMember(groupemail, useremail) {
var member = {
email: useremail,
role: 'MEMBER'
};
try {
member = AdminDirectory.Members.insert(member, groupemail);
logged = 'user ' + member.email + ' added to group ' + groupemail;
}
catch (e) {
logged = e;
}
return logged;
}
function addGroupManager(groupemail, useremail) {
var member = {
email: useremail,
role: 'MANAGER'
};
try {
member = AdminDirectory.Members.insert(member, groupemail);
logged = 'user ' + member.email + ' added to group ' + groupemail + ' as a MANAGER';
}
catch (e) {
logged = e;
}
return logged;
}
function removeGroupMember(groupemail, useremail) {
var removal = {
groupKey: groupemail,
memberKey: useremail
};
try {
removal = AdminDirectory.Members.remove(groupemail, useremail);
logged = 'user ' + useremail + ' removed from group ' + groupemail;
} catch (e) {
logged = e;
}
return logged;
}
function suspendUserAccount(userEmail) {
var logged = "";
var suspension = {
suspended: true
};
try {
AdminDirectory.Users.update(suspension,userEmail)
logged = 'user ' + userEmail + ' suspended';
} catch (e) {
logged = e;
}
return logged;
}
/*
// we will NOT be implementing this at present time
function deleteUser(useremail) {
try {
userdeletion = AdminDirectory.Users.remove(useremail);
Logger.log('User %s removed from domain.', useremail);
} catch(e) {
Logger.log(e);
}
}
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment