Exemplo n.º 1
0
        private void ProcessAuthResult(Token authResult, string siteUrl, Uri spUrl, ref IList <SpResourceContext> resourceContexts)
        {
            var sameSite = resourceContexts.Count(r => r.Url == siteUrl) > 0;
            var sameHost = resourceContexts.Where(r => r.Host == spUrl.Host).ToList();

            //update token for all other host
            if (sameHost != null && sameHost.Count > 0)
            {
                foreach (var item in sameHost)
                {
                    CopyAccessToken(authResult.access_token, authResult.expires_on, authResult.refresh_token, item, siteUrl, spUrl.Host);
                }
            }

            if (!sameSite)
            {
                SpResourceContext context = new SpResourceContext();
                CopyAccessToken(authResult.access_token, authResult.expires_on, authResult.refresh_token, context, siteUrl, spUrl.Host);
                resourceContexts.Add(context);
            }
        }
Exemplo n.º 2
0
 private void CopyAccessToken(string access_token, string expires_on, string refresh_token, SpResourceContext context, string siteUrl, string host)
 {
     if ((context.AccessToken != access_token) || context.AccessToken == null)
     {
         context.AccessToken  = access_token;
         context.ExpiresOn    = expires_on;
         context.RefreshToken = refresh_token;
         context.Host         = System.Web.HttpUtility.HtmlDecode(host);
         context.Url          = System.Web.HttpUtility.HtmlDecode(siteUrl);
     }
 }
Exemplo n.º 3
0
        private async Task <Tuple <IList <SpResourceContext>, string> > ManageSharePointToken(string siteUrl, string authCode, IList <SpResourceContext> resourceContexts, Uri redirectUri)
        {
            Uri spUrl = new Uri(siteUrl);
            Tuple <IList <SpResourceContext>, Token> tokenResult = null;
            Token spAccessToken = null;

            if (resourceContexts == null)
            {
                resourceContexts = new List <SpResourceContext>();
            }
            bool isError = false;

            try
            {
                tokenResult = await GetSpToken(siteUrl, authCode, resourceContexts, redirectUri);

                spAccessToken = tokenResult.Item2;
            }
            catch (AdalServiceException ex)
            {
                isError = true;
                _logger.Error(Utility.LogStringFormat("LocationController", "BrowseLocations()"), ex);
                if (ex.ErrorCode == GlobalConstants.INVALID_GRANT)
                {
                    return(new Tuple <IList <SpResourceContext>, string>(resourceContexts, GlobalConstants.INVALID_GRANT));
                }
                else if (ex.ErrorCode == GlobalConstants.INVALID_RESOURCE)
                {
                    //show the resource on UI only as it is added by user
                    resourceContexts.Add(
                        new SpResourceContext
                    {
                        AccessToken = "",
                        Host        = System.Web.HttpUtility.HtmlDecode(spUrl.Host),
                        Url         = System.Web.HttpUtility.HtmlDecode(siteUrl)
                    });
                }
            }
            if (spAccessToken == null && !isError)
            {
                var sameSite = resourceContexts.Count(r => r.Url == siteUrl) > 0;
                if (!sameSite)
                {
                    SpResourceContext context = resourceContexts.FirstOrDefault(p => p.Host == spUrl.Host);
                    spAccessToken = new Token()
                    {
                        access_token = context.AccessToken, expires_on = context.ExpiresOn, refresh_token = context.RefreshToken
                    };
                }
            }
            if (spAccessToken != null)
            {
                if (spAccessToken.error == GlobalConstants.INVALID_GRANT && string.IsNullOrEmpty(spAccessToken.suberror))
                {
                    return(new Tuple <IList <SpResourceContext>, string>(resourceContexts, GlobalConstants.INVALID_GRANT));
                }
                //process the authentication result
                this.ProcessAuthResult(spAccessToken, siteUrl, spUrl, ref resourceContexts);
            }

            await Task.Delay(0);

            return(new Tuple <IList <SpResourceContext>, string>(resourceContexts, string.Empty));;
        }