public async Task <IEnumerable <DeleteError> > InvalidateAllValidatedDomains(string labCode)
        {
            var list = await LabRepo.GetDomAssignments(labCode);

            var          errList = new List <DeleteError>();
            AdalResponse delRes  = null;

            foreach (var item in list)
            {
                if (item.AssignedTenantId != null)
                {
                    delRes = await DeleteDomain(item.DomainName);

                    if (!delRes.Successful)
                    {
                        errList.Add(new DeleteError
                        {
                            DomainName   = item.DomainName,
                            ErrorMessage = delRes.Message,
                            Response     = delRes,
                            TenantId     = item.AssignedTenantId
                        });
                    }
                }
            }
            return(errList);
        }
 private dynamic GetResult(AdalResponse response)
 {
     if (!response.Successful)
     {
         return(new { });
     }
     return((dynamic)JsonConvert.DeserializeObject(response.ResponseContent));
 }
        private async Task <AdalResponse> CallApi(string url, HttpMethod verb = null, string body = null)
        {
            CheckInit();
            HttpResponseMessage response = null;
            var res = new AdalResponse
            {
                Successful = true
            };

            try
            {
                verb = verb ?? HttpMethod.Get;
                var msg = new HttpRequestMessage(verb, url);
                //msg.Headers.Add("Authorization", "bearer " + _token);
                CancellationToken _cancel = new CancellationToken();
                await _serviceCreds.ProcessHttpRequestAsync(msg, _cancel);

                if (body != null)
                {
                    msg.Content = new StringContent(body, Encoding.UTF8, "application/json");
                }

                using (var client = new HttpClient())
                {
                    client.Timeout = TimeSpan.FromSeconds(300);
                    client.DefaultRequestHeaders.Add("client-request-id", Guid.NewGuid().ToString());
                    response = await client.SendAsync(msg);

                    res.ResponseContent = await response.Content.ReadAsStringAsync();

                    res.StatusCode = response.StatusCode;
                    res.Message    = response.ReasonPhrase;
                    if (!response.IsSuccessStatusCode)
                    {
                        res.Successful = false;
                        dynamic serverError        = JsonConvert.DeserializeObject(res.ResponseContent);
                        var     reason             = (response == null ? "N/A" : response.ReasonPhrase);
                        var     serverErrorMessage = (serverError.Error == null) ? "N/A" : serverError.Error.Message;
                        res.Message = string.Format("(Server response: {0}. Server detail: {1})", reason, serverErrorMessage);
                        return(res);
                    }
                }
                return(res);
            }
            catch (Exception ex)
            {
                res.Successful = false;
                res.Message    = ex.Message;
                return(res);
            }
        }
        /// <summary>
        /// Remove a validated domain from this tenant
        /// </summary>
        /// <param name="domain"></param>
        /// <returns></returns>
        public async Task <AdalResponse> DeleteDomain(string domain)
        {
            var url = string.Format("https://graph.microsoft.com/v1.0/domains/{0}", domain);
            var res = await AdalLib.GetResourceAsync(url, _accessToken, HttpMethod.Delete);

            if (!res.Successful)
            {
                var err = new AdalResponse <DomainError>(res);

                //test to see if the error is around dependency objects
                if (err.Object.Error.Details.Count() > 0)
                {
                    if (err.Object.Error.Details.Any(d => d.Code == "ObjectInUse"))
                    {
                        res.Message = "ObjectInUse";
                    }
                }
            }
            return(res);
        }