using System; using System.Linq; using System.Net.Http; using System.Net.Http.Headers; using System.Web; using Microsoft.Owin; using Umbraco.Core; namespace Umbraco.Web { /// /// Extension methods used to check/set cookie values /// /// /// This should 100% supercede the StateManager.Cookies /// internal static class HttpCookieExtensions { /// /// Removes the cookie from the request and the response if it exists /// /// /// public static void ExpireCookie(this HttpContextBase http, string cookieName) { //remove from the request http.Request.Cookies.Remove(cookieName); //expire from the response var angularCookie = http.Response.Cookies[cookieName]; if (angularCookie != null) { //this will expire immediately and be removed from the browser angularCookie.Expires = DateTime.Now.AddYears(-1); } else { //ensure there's def an expired cookie http.Response.Cookies.Add(new HttpCookie(cookieName) { Expires = DateTime.Now.AddYears(-1) }); } } public static string GetPreviewCookieValue(this HttpRequestMessage request) { var cookie = request.Headers.GetCookies(Constants.Web.PreviewCookieName).FirstOrDefault(); if (cookie != null) { if (cookie[Constants.Web.PreviewCookieName] != null) { return cookie[Constants.Web.PreviewCookieName].Value; } } return null; } /// /// Does a preview cookie exist ? /// /// /// public static bool HasPreviewCookie(this HttpRequestBase request) { return request.Cookies[Constants.Web.PreviewCookieName] != null; } /// /// Does a preview cookie exist ? /// /// /// public static bool HasPreviewCookie(this IOwinRequest request) { return request.Cookies[Constants.Web.PreviewCookieName] != null; } /// /// Does a cookie exist with the specified key ? /// /// /// /// public static bool HasCookie(this HttpRequestBase request, string key) { return request.Cookies[key] != null; } /// /// Is there a cookie with the key supplied and does it have a value that is not empty /// /// /// /// public static bool HasCookieValue(this HttpRequestBase request, string key) { return request.Cookies[key] != null && request.Cookies[key].Value != null && request.Cookies[key].Value.IsNullOrWhiteSpace() == false; } } }