public static void AddCookie(OwinResponse response, string key, string value, CookieOptions options) { if (options == null) { throw new ArgumentNullException("options"); } var domainHasValue = !string.IsNullOrEmpty(options.Domain); var pathHasValue = !string.IsNullOrEmpty(options.Path); var expiresHasValue = options.Expires.HasValue; var setCookieValue = string.Concat( Uri.EscapeDataString(key), "=", Uri.EscapeDataString(value ?? string.Empty), !domainHasValue ? null : "; domain=", !domainHasValue ? null : options.Domain, !pathHasValue ? null : "; path=", !pathHasValue ? null : options.Path, !expiresHasValue ? null : "; expires=", !expiresHasValue ? null : options.Expires.Value.ToString("ddd, dd-MMM-yyyy HH:mm:ss ", CultureInfo.InvariantCulture) + "GMT", !options.Secure ? null : "; secure", !options.HttpOnly ? null : "; HttpOnly"); response.AddHeader("Set-Cookie", setCookieValue); }
public static void DeleteCookie(OwinResponse response, string key, CookieOptions options) { if (options == null) { throw new ArgumentNullException("options"); } var domainHasValue = !string.IsNullOrEmpty(options.Domain); var pathHasValue = !string.IsNullOrEmpty(options.Path); Func<string, bool> rejectPredicate; if (domainHasValue) { rejectPredicate = value => value.StartsWith(key + "=", StringComparison.OrdinalIgnoreCase) && value.IndexOf("domain=" + options.Domain, StringComparison.OrdinalIgnoreCase) != -1; } else if (pathHasValue) { rejectPredicate = value => value.StartsWith(key + "=", StringComparison.OrdinalIgnoreCase) && value.IndexOf("path=" + options.Path, StringComparison.OrdinalIgnoreCase) != -1; } else { rejectPredicate = value => value.StartsWith(key + "=", StringComparison.OrdinalIgnoreCase); } var existingValues = response.GetHeaderUnmodified("Set-Cookie"); if (existingValues != null) { response.SetHeaderUnmodified("Set-Cookie", existingValues.Where(value => !rejectPredicate(value)).ToArray()); } AddCookie(response, key, string.Empty, new CookieOptions { Path = options.Path, Domain = options.Domain, Expires = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc), }); }
public void ResponseSignIn(FormsResponseSignInContext context) { var authResult = new AuthenticationResult { Success = true }; ChatUser loggedInUser = GetLoggedInUser(context.Environment); var principal = new ClaimsPrincipal(context.Identity); // Do nothing if it's authenticated if (principal.IsAuthenticated()) { EnsurePersistentCookie(context); return; } ChatUser user = _repository.GetUser(principal); authResult.ProviderName = principal.GetIdentityProvider(); // The user exists so add the claim if (user != null) { if (loggedInUser != null && user != loggedInUser) { // Set an error message authResult.Message = String.Format("This {0} account has already been linked to another user.", authResult.ProviderName); authResult.Success = false; // Keep the old user logged in context.Identity.AddClaim(new Claim(JabbRClaimTypes.Identifier, loggedInUser.Id)); } else { // Login this user AddClaim(context, user); } } else if (principal.HasRequiredClaims()) { ChatUser targetUser = null; // The user doesn't exist but the claims to create the user do exist if (loggedInUser == null) { // New user so add them user = _membershipService.AddUser(principal); targetUser = user; } else { // If the user is logged in then link _membershipService.LinkIdentity(loggedInUser, principal); _repository.CommitChanges(); authResult.Message = String.Format("Successfully linked {0} account.", authResult.ProviderName); targetUser = loggedInUser; } AddClaim(context, targetUser); } else if(!principal.HasPartialIdentity()) { // A partial identity means the user needs to add more claims to login context.Identity.AddClaim(new Claim(JabbRClaimTypes.PartialIdentity, "true")); } var response = new OwinResponse(context.Environment); var cookieOptions = new CookieOptions { HttpOnly = true }; response.AddCookie(Constants.AuthResultCookie, JsonConvert.SerializeObject(authResult), cookieOptions); }
public static OwinResponse DeleteCookie(this OwinResponse response, string key, CookieOptions options) { OwinHelpers.DeleteCookie(response, key, options); return response; }
public static OwinResponse AddCookie(this OwinResponse response, string key, string value, CookieOptions options) { OwinHelpers.AddCookie(response, key, value, options); return response; }