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);
            }
        }
Exemple #4
0
        /// <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;
                    }
                }
            }
        }
Exemple #5
0
        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;
            }
        }