devin-bc

Process G-Suite Aliases to Google Group on Offboarding

Oct 21st, 2019
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2. Created by:
  3. Chris Fadell (chris.fadell@bettercloud.com)
  4. BetterCloud, 2019
  5. BetterIT Slack Community
  6.  
  7.  
  8. DISCLAIMER: Sample scripts in this guide are not supported under any BetterCloud, Inc. (“BetterCloud”) support program or service and shall be deemed “Beta Services” under any Master Subscription Agreement or any other services agreement entered into with BetterCloud. The sample scripts are provided AS IS without representation or warranty of any kind, whether express or implied. BetterCloud disclaims all implied warranties including, without limitation, any implied warranties of merchantability or of fitness for a particular purpose. By using a sample script, you acknowledge and agree: (a) that the entire risk arising out of the use or performance of the sample scripts and documentation remains with you: and (b) that in no event shall BetterCloud, its employees, officers, directors, contractors or agents, or anyone else involved in the creation, production, or delivery of the scripts, be liable for any loss, costs, or damages whatsoever (including, without limitation, damages for loss of business profits, business interruption, loss of business information, or other pecuniary loss) arising out of or relating to the performance, use of, or inability to use the sample scripts or documentation, even if BetterCloud has been advised of the possibility of such damages.
  9. */
  10.  
  11. //Initation Notes
  12. //You must enable Resources>Advanced Google Services>Admin Directory API and Group Settings API
  13. //Must name the Speadsheet associated with this script "Log Sheet"
  14. //Must replace sheetId in Global variables with the document ID of the Google sheet in the URL in line 9
  15. //Must create a processing group that users will be added to check membership against to iniate this script (this can be done as part of your offboarding workflow in BetterCloud) in line 11
  16.  
  17. //Global Variables
  18.  
  19. var sheetId = "SHEET ID GOES HERE";
  20. var sheet = SpreadsheetApp.openById(sheetId);
  21. var groupEmail = "PROCESSING GROUP GOES HERE"; //replace with the group email you'd like to add users to to process this user change
  22.  
  23. function createGroup(){
  24.  
  25.   var groupMembers = retrieveUsersInGroup(); //retrieves users in the group
  26.  
  27.   if (groupMembers){ //if there are members in the group run the function
  28.    
  29.     for (var i = 0; i < groupMembers.length; i++){
  30.      
  31.       var name = AdminDirectory.Users.get(groupMembers[i]).name.fullName; //retrieves user's full name for group creation
  32.       var userEmail = AdminDirectory.Users.get(groupMembers[i]).primaryEmail; //retrieves user's email address
  33.       var aliases = AdminDirectory.Users.Aliases.list(groupMembers[i]).aliases; //retrieves user's alias
  34.       var managerEmail = retrieveManager(groupMembers[i]); //retrieves user's manager    
  35.      
  36.       if (aliases){ //if the user has aliases
  37.         removeAliases(groupMembers[i], aliases[0].alias); //removes first alias
  38.         var group = createGroupFromAlias(aliases[0].alias, name); //creates group from first alias
  39.         updateGroupSettings(group.email); //updates group's settings
  40.         addManagerToGroup(managerEmail, group.email);  //adds manager to group
  41.       }
  42.       else{
  43.         log("User: " + groupMembers[i] + " does not have any aliases. Unable to run create group function.") //if the user doesn't have any aliases, log it
  44.       }
  45.      
  46.       var aliases = AdminDirectory.Users.Aliases.list(groupMembers[i]).aliases; //retrieves user's remaining aliases
  47.       if (aliases){  //if the user has aliases
  48.         for (var k = 0; k < aliases.length; k++){ //loops through all aliases
  49.           var alias = aliases[k].alias; //sets the alias
  50.           try{
  51.             AdminDirectory.Users.Aliases.remove(groupMembers[i], alias); //removes the alias from the user
  52.             log("REMOVE USER ALIAS", "SUCCESS", "Removed alias: " + alias + " from user: " + groupMembers[i]);
  53.           }
  54.           catch(e){
  55.             log("REMOVE USER ALIAS", "FAILURE", "Failed to removed alias: " + alias + " from user: " + groupMembers[i] + ". Failure:" + e);
  56.           }
  57.           try{
  58.             AdminDirectory.Groups.Aliases.insert({"alias": alias}, group.email); //adds the user alias as a group alias
  59.             log("ADD GROUP ALIAS", "SUCCESS", "Added group alias: " + alias + " to group: " + group.email);
  60.           }
  61.           catch(e){
  62.             log("ADD GROUP ALIAS", "FAILURE", "Failed to added group alias: " + alias + " to group: " + group.email + ". Failure:" + e);
  63.           }
  64.         }
  65.         removeUserFromGroup(groupEmail, userEmail);  //removes user from workflow group
  66.       }
  67.     }
  68.   }
  69.   else{
  70.     Logger.log("No members in group");
  71.   }
  72. }
  73.  
  74. function retrieveUsersInGroup(){
  75.  
  76.   var members = AdminDirectory.Members.list(groupEmail);
  77.  
  78.   if (members.members){
  79.     var emailArray = [];
  80.    
  81.     for (var i = 0; i < members.members.length; i++){
  82.       var email = members.members[i].email
  83.       emailArray.push(members.members[i].email);
  84.     }
  85.   }
  86.   return emailArray
  87. }
  88.  
  89. function removeAliases(user, alias){
  90.  
  91.   try{
  92.     AdminDirectory.Users.Aliases.remove(user, alias);
  93.     log("REMOVE USER ALIAS", "SUCCESS", "Removed alias: " + alias + " from user: " + user)
  94.   }
  95.   catch(e){
  96.     log("REMOVE USER ALIAS", "FAILURE", "Failed to remove alias: " + alias + " from user " + user+". Failure: " + e)
  97.   }
  98.  
  99. }
  100.  
  101. function createGroupFromAlias(alias, groupName){
  102.  
  103.   try{
  104.     var group = AdminDirectory.Groups.insert({"email": alias, "name": "Forwarding - " + groupName, "description": "This group handles all email forwarding for the terminated user " + groupName}); //Forwarding - First Name Last Name
  105.     log("CREATE GROUP", "SUCCESS", "Created group: " +  alias);
  106.   }
  107.   catch(e){
  108.     log("CREATE GROUP", "FAILURE", "Failed to created group: " +  alias + ". Failure:" + e);
  109.   }
  110.  
  111.   return group
  112. }
  113.  
  114. function addManagerToGroup(managerEmail, groupEmail){
  115.  
  116.   try{
  117.     AdminDirectory.Members.insert({"email": managerEmail, "role": "OWNER"}, groupEmail);
  118.     log("ADD MANAGER TO GROUP", "SUCCESS", "Added manager: " + managerEmail + " to group: " +  groupEmail);
  119.   }
  120.   catch(e){
  121.     log("ADD MANAGER TO GROUP", "FAILURE", "Failed to add manager: " + managerEmail + " to group: " +  groupEmail + ". Failure:" + e);
  122.   }
  123. }
  124.  
  125. function removeUserFromGroup(groupEmail, userEmail){
  126.  
  127.   try{
  128.     AdminDirectory.Members.remove(groupEmail, userEmail);
  129.     log("REMOVE USER FROM GROUP", "SUCCESS", "Removed user: " + userEmail + " from group: " + groupEmail);
  130.   }
  131.   catch(e){
  132.     log("REMOVE USER FROM GROUP", "FAILURE", "Failed to remove user: " + userEmail + " from group: " + groupEmail + ". Failure:" + e);
  133.   }
  134. }
  135.  
  136. function log(operation, status, fullLog){
  137.   var date = new Date();
  138.   sheet.getSheetByName("Log Sheet").insertRowBefore(2);
  139.   sheet.getRange("A2:D2").setValues([[date.toISOString(),operation, status, fullLog]]);
  140. }
  141.  
  142. function retrieveManager(groupMember){
  143.  
  144.   var relations = AdminDirectory.Users.get(groupMember).relations;
  145.  
  146.   for (var i = 0; i < relations.length; i++){
  147.     if (relations[i].type == "manager"){
  148.       var managerEmail = relations[i].value;
  149.       break;
  150.     }
  151.   }
  152.  
  153.   return managerEmail
  154. }
  155.  
  156. function updateGroupSettings(groupEmail){
  157.  
  158. try{
  159. AdminGroupsSettings.Groups.patch({"showInGroupDirectory":false,"whoCanModerateMembers": "NONE", "whoCanLeaveGroup":"NONE_CAN_LEAVE","isArchived":true}, groupEmail);
  160. log("UPDATE GROUP SETTINGS", "SUCCESS", "Updated group settings for group: " + groupEmail);
  161. }
  162. catch(e){
  163. log("UPDATE GROUP SETTINGS", "FAILURE", "Failed to updated group settings for group: " + groupEmail + " " + e);
  164. }
  165.  
  166. }
Add Comment
Please, Sign In to add comment