/// <summary>
        /// If available, retrieve a single validated domain for this tenant
        /// </summary>
        /// <param name="domain"></param>
        /// <returns></returns>
        public async Task <AdalResponse <Domain> > GetDomain(string domain)
        {
            var url = string.Format("https://graph.microsoft.com/v1.0/domains/{0}", domain);
            var res = await AdalLib.GetResourceAsync(url, _accessToken, HttpMethod.Get);

            return(new AdalResponse <Domain>(res));
        }
        /// <summary>
        /// Get the list of custom domains validated for this tenant
        /// </summary>
        /// <returns></returns>
        public async Task <AdalResponse <IEnumerable <Domain> > > GetDomains()
        {
            var url = "https://graph.microsoft.com/v1.0/domains";
            var res = await AdalLib.GetResourceAsync(url, _tenantId, _hctx, HttpMethod.Get);

            return(new AdalResponse <IEnumerable <Domain> >(res));
        }
        public async Task <MicrosoftTeamcodes> GetCodes(string oid)
        {
            var url = string.Format("https://graph.microsoft.com/v1.0/users/{0}?$select=displayName,id,description,microsoft_teamcodes", oid);
            var res = await AdalLib.GetResourceAsync(url, _accessToken, HttpMethod.Get);

            return(JsonConvert.DeserializeObject <AttributeUpdate>(res.ResponseContent).microsoft_teamcodes);
        }
        public async Task <AdalResponse> DeleteObject(string id)
        {
            var url = string.Format("https://graph.microsoft.com/v1.0/directoryObjects/{0}", id);
            var res = await AdalLib.GetResourceAsync(url, _accessToken, HttpMethod.Delete);

            return(res);
        }
        /// <summary>
        /// Add Team code and Lab code as custom attributes of the logged-in user
        /// </summary>
        /// <returns></returns>
        public async Task <AdalResponse> LinkUserToTeam(string oid, string teamCode, string labCode)
        {
            var url  = string.Format("https://graph.microsoft.com/v1.0/users/{0}", oid);
            var data = new AttributeUpdate
            {
                microsoft_teamcodes = new MicrosoftTeamcodes
                {
                    labCode  = labCode,
                    teamCode = teamCode
                }
            };
            string body = JsonConvert.SerializeObject(data);

            return(await AdalLib.GetResourceAsync(url, _accessToken, new HttpMethod("PATCH"), body));
        }
        /// <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);
        }