Beispiel #1
0
        /// <summary>
        /// Gets group members for AD group.
        /// </summary>
        /// <param name="groupIds">Group ids.</param>
        /// <param name="accessToken">accessToken to get Graph API data.</param>
        /// <returns>List of members.</returns>
        public async Task <List <Models.ADGroup> > GetBatchADGroupsInfoAsync(
            IEnumerable <string> groupIds,
            string accessToken)
        {
            var allRequests             = new BatchRequestCreator().CreateBatchRequestPayloadForGroupsDetails(groupIds);
            BatchRequestPayload payload = new BatchRequestPayload()
            {
                Requests = allRequests,
            };
            List <Models.ADGroup> responses = await this.CallGraphApiBatchPostToGetGroupsAsync(accessToken, this.graphQuery, JsonConvert.SerializeObject(payload));

            return(responses);
        }
Beispiel #2
0
        /// <summary>
        /// To Call GraphApi to get AD Group members.
        /// </summary>
        /// <param name="accessToken">Access Token.</param>
        /// <param name="payload">input JSON.</param>
        /// <returns>A <see cref="T"/> representing the result of operation.</returns>
        public async Task <dynamic> CallGraphApiBatchPostAsync(string accessToken, string payload)
        {
            List <ADGroupMembers> users = new List <ADGroupMembers>();

            HttpClient.DefaultRequestHeaders.Clear();
            HttpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
            var request = new StringContent(payload, Encoding.UTF8, "application/json");
            Uri myUri   = new Uri(this.graphQuery);
            HttpResponseMessage response = await HttpClient.PostAsync(myUri, request).ConfigureAwait(true);

            string content = await response.Content.ReadAsStringAsync();

            if (response.StatusCode == HttpStatusCode.OK)
            {
                var           responses        = this.GetValue <dynamic>(content, "responses");
                List <string> pagingResultURLs = new List <string>();

                foreach (var res in responses)
                {
                    var userlist = this.GetValue <dynamic>(JsonConvert.SerializeObject(res), "body");
                    var result   = this.GetValue <List <ADGroupMembers> >(JsonConvert.SerializeObject(userlist), "value");
                    users.AddRange(result);

                    string query = this.GetValue <string>(JsonConvert.SerializeObject(userlist), "@odata.nextLink");
                    if (query != null)
                    {
                        pagingResultURLs.Add(query);
                    }
                }

                if (pagingResultURLs.Count > 0)
                {
                    var allRequests = new BatchRequestCreator().CreatePagingBatchRequestPayloadForDetails(pagingResultURLs);
                    BatchRequestPayload payloadPagingRequests = new BatchRequestPayload()
                    {
                        Requests = allRequests,
                    };

                    users.AddRange(await this.CallGraphApiBatchPostAsync(accessToken, JsonConvert.SerializeObject(payloadPagingRequests)));
                }

                return(users);
            }

            return(content);

            throw new Exception(content);
        }
Beispiel #3
0
        /// <summary>
        /// Gets group members for AD group.
        /// </summary>
        /// <param name="groupIds">Group ids.</param>
        /// <param name="accessToken">accessToken to get Graph API data.</param>
        /// <returns>List of members.</returns>
        public async Task <List <ADGroupMembers> > GetBatchADGroupMembersAsync(
            IEnumerable <string> groupIds,
            string accessToken)
        {
            List <ADGroupMembers> adGroupMembers = new List <ADGroupMembers>();

            try
            {
                var allRequests = new BatchRequestCreator().CreateBatchRequestPayloadForDetails(groupIds);

                BatchRequestPayload payload = new BatchRequestPayload()
                {
                    Requests = allRequests,
                };
                List <ADGroupMembers> responses = await this.CallGraphApiBatchPostAsync(accessToken, JsonConvert.SerializeObject(payload));

                List <string> nestedGroupIds = new List <string>();

                for (int i = 0; i < responses.Count; i++)
                {
                    if (responses[i].Type == "#microsoft.graph.group")
                    {
                        nestedGroupIds.Add(responses[i].Id);
                    }
                    else
                    {
                        adGroupMembers.Add(responses[i]);
                    }
                }

                if (nestedGroupIds.Count > 0)
                {
                    adGroupMembers.AddRange(await this.GetBatchADGroupMembersAsync(nestedGroupIds, accessToken));
                }
            }
            catch (Exception)
            {
                throw;
            }

            return(adGroupMembers);
        }