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); } }
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); } }
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));; }