public async Task <SharepointSiteValidationResponse> ValidateSite(string token, string name, bool exactMatch = false)
        {
            var graphserviceClient = new GraphServiceClient(
                new DelegateAuthenticationProvider(
                    (requestMessage) =>
            {
                requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", token);
                return(Task.FromResult(0));
            }));

            var sites = await graphserviceClient.Sites.Request(new [] { new QueryOption("search", name) }).GetAsync();

            var siteValidationResponse = new SharepointSiteValidationResponse();

            if (sites.Count >= 1)
            {
                if (exactMatch)
                {
                    siteValidationResponse.IsValid      = true;
                    siteValidationResponse.SiteId       = sites.First().Id;
                    siteValidationResponse.MatchingUris = new List <Uri>()
                    {
                        new Uri(sites.First().WebUrl)
                    };
                    siteValidationResponse.MatchingSites = new List <string>()
                    {
                        sites.First().DisplayName
                    };
                }
                else
                {
                    siteValidationResponse.IsValid       = true;
                    siteValidationResponse.SiteId        = sites.Count > 1 ? null : sites.First().Id;
                    siteValidationResponse.MatchingUris  = sites.CurrentPage.Select(i => new Uri(i.WebUrl)).ToList();
                    siteValidationResponse.MatchingSites = sites.CurrentPage.Select(i => i.DisplayName).ToList();
                }
            }
            else
            {
                siteValidationResponse.IsValid = false;
            }

            return(siteValidationResponse);
        }
        public async Task <SharepointSiteValidationResponse> ValidateSite(string accessToken, Uri url)
        {
            var graphService = new GraphServiceClient(
                new DelegateAuthenticationProvider(
                    (requestMessage) =>
            {
                requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", accessToken);
                return(Task.FromResult(0));
            }));

            var siteValidationResponse = new SharepointSiteValidationResponse();

            if (url.IsAbsoluteUri)
            {
                try
                {
                    var siteInfo = await graphService.Sites.GetByPath(string.Join(string.Empty, url.Segments.Skip(1).Take(3)), "root").Request().GetAsync();

                    siteValidationResponse.IsValid      = true;
                    siteValidationResponse.MatchingUris = new List <Uri>()
                    {
                        new Uri(siteInfo.WebUrl)
                    };
                    siteValidationResponse.SiteId = siteInfo.Id;
                }
                catch (Exception e)
                {
                    siteValidationResponse.IsValid = false;
                }
            }
            else
            {
                siteValidationResponse.IsValid = false;
            }

            return(siteValidationResponse);
        }