// GET: Groups
        public async Task<ActionResult> Index()
        {
            var viewModel = new GroupsMembersViewModel();
            List<Group> groupList = new List<Group>();
            List<User> memberList = new List<User>();
            viewModel.Groups = groupList;
            viewModel.GroupMembers = memberList;

            try
            {
                ActiveDirectoryClient client = AuthenticationHelper.GetActiveDirectoryClient();

                IPagedCollection<IGroup> pagedCollection = await client.Groups.ExecuteAsync();
                do
                {
                    List<IGroup> groups = pagedCollection.CurrentPage.ToList();
                    foreach (IGroup group in groups)
                    {
                        groupList.Add((Group)group);
                    }
                    pagedCollection = pagedCollection.GetNextPageAsync().Result;
                } while (pagedCollection != null);
            }
            catch (Exception e)
            {
                if (Request.QueryString["reauth"] == "True")
                {
                    HttpContext.GetOwinContext()
                        .Authentication.Challenge(OpenIdConnectAuthenticationDefaults.AuthenticationType);
                }
                ViewBag.ErrorMessage = "AuthorizationRequired";
                return View(viewModel);
            }
            return View(viewModel);
        }
        public async Task<ActionResult> GetGroupMembers(string objectId)
        {
            var viewModel = new GroupsMembersViewModel();
            List<Group> groupList = new List<Group>();
            List<User> memberList = new List<User>();
            viewModel.Groups = groupList;
            viewModel.GroupMembers = memberList;

            try
            {
                ActiveDirectoryClient client = AuthenticationHelper.GetActiveDirectoryClient();

                #region GetGroups

                IPagedCollection<IGroup> pagedCollection = await client.Groups.ExecuteAsync();
                do
                {
                    List<IGroup> groups = pagedCollection.CurrentPage.ToList();
                    foreach (IGroup group in groups)
                    {
                        groupList.Add((Group)group);
                    }
                    pagedCollection = pagedCollection.GetNextPageAsync().Result;
                } while (pagedCollection != null);
                #endregion

                #region Populate selected group members
                if (string.IsNullOrEmpty(objectId)) return View("Index",viewModel);

                var selectedGroup = await client.Groups.Where
                    (g => g.ObjectId == objectId).ExecuteSingleAsync();
                IGroupFetcher groupFetcher = (IGroupFetcher)selectedGroup;
                IPagedCollection<IDirectoryObject> members =
                    groupFetcher.Members.ExecuteAsync().Result;

                do
                {
                    List<IDirectoryObject> directoryObjects = members.CurrentPage.ToList();
                    foreach (IDirectoryObject member in directoryObjects)
                    {
                        var user = member as User;
                        viewModel.GroupMembers.Add(user);
                    }

                    members = members.MorePagesAvailable ?
                        members = members.GetNextPageAsync().Result : null;
                }
                while (members != null);

                #endregion
            }
            catch (Exception e)
            {
                if (Request.QueryString["reauth"] == "True")
                {   HttpContext.GetOwinContext()
                        .Authentication.Challenge(OpenIdConnectAuthenticationDefaults.AuthenticationType);
                }

                ViewBag.ErrorMessage = "AuthorizationRequired";
                return View("Index", viewModel);
            }
            return View("Index", viewModel);
        }