private User ValidateAgainstUserSynchronization(IUserSynchronizedOAuthClientConfiguration configuration, User user, NameValueCollection state, Action<Uri> redirect) { if (!configuration.EnableEvolutionUserSynchronization || redirect == null) return user; var evolutionUserName = GetEvolutionAuthenticatedUserName(configuration); if (string.IsNullOrEmpty(evolutionUserName)) { if (user != null) return null; } else if (user == null || (string.CompareOrdinal(evolutionUserName, user.UserName) != 0 && string.CompareOrdinal(evolutionUserName, user.SynchronizedUserName) != 0)) { state[Constants.SynchronizedUserNameQueryStringKey] = evolutionUserName; IUserCreatableOAuthClientConfiguration userCreateClient = configuration as IUserCreatableOAuthClientConfiguration; userCreateClient = (IUserCreatableOAuthClientConfiguration)configuration; if (userCreateClient != null && userCreateClient.EnableEvolutionUserCreation) { if (user == null) redirect(GetEvolutionLogOutUrl(configuration, state)); else redirect(GetAuthenticatedRedirectUrlInternal(configuration, user.UserName, GetLoginUrl(configuration, state).OriginalString)); return user; } else { redirect(GetLoginUrl(configuration, state)); return null; } } return user; }
private string GetEvolutionAuthenticatedUserName(IUserSynchronizedOAuthClientConfiguration configuration) { var value = configuration.GetEvolutionUserSynchronizationCookieValue(); if (string.IsNullOrEmpty(value)) return null; var queryString = System.Web.HttpUtility.ParseQueryString(value); if (queryString != null && !string.IsNullOrEmpty(queryString["lastAuthenticatedUserName"])) return queryString["lastAuthenticatedUserName"]; else return null; }