public async Task PutGroupListDetails(GroupListDetails groupDetailsToStore) { CloudStorageAccount storageAccount = CloudStorageAccount.Parse(_appSettings.AzureStorageConnectionString); CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); CloudBlobContainer container = blobClient.GetContainerReference(_appSettings.BlobContainerName); await container.CreateIfNotExistsAsync(BlobContainerPublicAccessType.Blob, null, null); try { CloudBlockBlob blockBlob = container.GetBlockBlobReference("AadCollection"); var storedGroupListDetails = JsonConvert.SerializeObject(groupDetailsToStore); await blockBlob.UploadTextAsync(storedGroupListDetails); } catch { } }
/// <summary> /// TODO: move methode /// </summary> /// <param name="usermail"></param> /// <param name="groupData"></param> /// <returns></returns> private GroupUser GetGroupsAndDepartmentsForUPN(string usermail, GroupListDetails groupData) { try { var _filledGroupList = new GroupListDetails(); var user = new GroupUser(); user.UPN = usermail.ToLower(); var usergroups = new List <GroupList>(); foreach (var groupItem in groupData.GroupList) { GroupList grp = new GroupList(); grp.Name = groupItem.Name.ToString(); if (groupItem.Members.Contains(user.UPN)) { grp.Selected = true; } usergroups.Add(grp); } user.Groups = usergroups; var userdepartments = new List <DepartmentList>(); foreach (var departnmentItem in groupData.DepartmentList) { DepartmentList dep = new DepartmentList(); dep.Name = departnmentItem.Name.ToString(); if (departnmentItem.Members.Contains(user.UPN)) { dep.Selected = true; } userdepartments.Add(dep); } user.Departments = userdepartments; return(user); } catch (Exception e) { _logger.LogError(8, e, "HomeController"); return(null); } }
public async Task <GroupListDetails> GetGroupListDetails() { CloudStorageAccount storageAccount = CloudStorageAccount.Parse(_appSettings.AzureStorageConnectionString); CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); CloudBlobContainer container = blobClient.GetContainerReference(_appSettings.BlobContainerName); await container.CreateIfNotExistsAsync(BlobContainerPublicAccessType.Blob, null, null); try { CloudBlockBlob blockBlob = container.GetBlockBlobReference("AadCollection"); var aadCollection = await blockBlob.DownloadTextAsync(); GroupListDetails storedGroupListDetails = await Task.Factory.StartNew(() => JsonConvert.DeserializeObject <GroupListDetails>(aadCollection)); return(storedGroupListDetails); } catch (Exception) { return(null); } }
/// <summary> /// User group membership update method. /// /// Fire and forget action, the Azure Runbook will handle the update process. /// Based on groupmembership of the user in the stored Blob, it looks for differences in group membership and triggers the webhook. /// The methode sends the update calls to an Azure runbook webhook which handles the action. /// /// </summary> /// <param name="groupuser"></param> /// <param name="requestByUser"></param> /// <param name="current"></param> /// <returns></returns> private async Task SetDepartments(GroupUser groupuser, string requestByUser, GroupListDetails current) { foreach (var department in groupuser.Departments) { string depName = department.Name; DepartmentList dep = current.DepartmentList.FirstOrDefault(n => n.Name == depName); if (dep.Members.Contains(groupuser.UPN) & department.Selected == true || !dep.Members.Contains(groupuser.UPN) & department.Selected == false) //staat goed { //all good } else { string jobId = ""; try { var webhookToCall = _appSettings.WebHookUrlUserMembershipGroupRunbook; var jsonObjectForWebhook = new DepartmentWebhook(); jsonObjectForWebhook.UPN = groupuser.UPN; switch (department.Selected) { case false: { jsonObjectForWebhook.RemoveGroupDep = department.Name; break; } case true: { jsonObjectForWebhook.AddGroupDep = department.Name; break; } default: break; } var userGroupMemebershipInJson = JsonConvert.SerializeObject(jsonObjectForWebhook); var jobResult = _webhookService.CallWebHook(userGroupMemebershipInJson, webhookToCall).Result; Job _job = null; if (jobResult.Length != 0) { _job = await Task.Factory.StartNew(() => JsonConvert.DeserializeObject <Job>(jobResult)); } jobId = _job.JobIds[0]; try { await _logTable.AddLogToTable(jobId, requestByUser, "Edit", groupuser.UPN); } catch (Exception) { // don't break } } catch (Exception) { throw; } } } }
private async Task <GroupListDetails> GetGroupMembershipsForGroups() { var groupslistdetails = new GroupListDetails(); List <GroupList> groupList = new List <GroupList>(); List <DepartmentList> departmentList = new List <DepartmentList>(); try { string clientId = _appSettings.ClientId; string clientSecret = _appSettings.clientSecret; string directory = _appSettings.directory; ClientCredential creds = new ClientCredential(clientId, clientSecret); GraphServiceClient graphClient = new GraphServiceClient(new AzureAuthenticationProvider(creds, directory)); var result = await graphClient.Groups.Request().GetAsync(); var foundGroups = result.CurrentPage.ToList(); if (foundGroups != null && foundGroups.Count > 0) { do { foundGroups = result.CurrentPage.ToList(); foreach (var item in foundGroups) { _logger.LogInformation(8, item.DisplayName, "Group"); if (item.DisplayName.ToString().ToLower().StartsWith("dep") || item.DisplayName.ToString().ToLower().StartsWith("az") || item.DisplayName.ToString().ToLower().StartsWith("app ")) { string groupname = item.DisplayName.ToString().ToLower(); if (groupname.StartsWith("dep")) { var groupdetails = new DepartmentList() { Id = item.Id, Name = item.DisplayName }; var t = await GetGroupFrom(graphClient, item.Id); groupdetails.Members = t; departmentList.Add(groupdetails); } if (groupname.StartsWith("az") || groupname.StartsWith("app ")) { var groupdetails = new GroupList() { Id = item.Id, Name = item.DisplayName }; var t = await GetGroupFrom(graphClient, item.Id); groupdetails.Members = t; groupList.Add(groupdetails); } } } if (result.NextPageRequest != null) { result = await result.NextPageRequest.GetAsync(); } else { result = null; } } while (result != null && result.Count > 0); } groupslistdetails.GroupList = groupList; groupslistdetails.DepartmentList = departmentList; return(groupslistdetails); } catch (Exception e) { _logger.LogError(8, e, "GetGroupMembershipsForGroups"); throw e; } }