// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using System.Text.Encodings.Web; using Microsoft.AspNet.Builder; using Microsoft.AspNet.DataProtection; using Microsoft.AspNet.Http; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; namespace Microsoft.AspNet.Authentication.Cookies { public class CookieAuthenticationMiddleware : AuthenticationMiddleware { public CookieAuthenticationMiddleware( RequestDelegate next, IDataProtectionProvider dataProtectionProvider, ILoggerFactory loggerFactory, UrlEncoder urlEncoder, IOptions options) : base(next, options, loggerFactory, urlEncoder) { if (dataProtectionProvider == null) { throw new ArgumentNullException(nameof(dataProtectionProvider)); } if (Options.Events == null) { Options.Events = new CookieAuthenticationEvents(); } if (String.IsNullOrEmpty(Options.CookieName)) { Options.CookieName = CookieAuthenticationDefaults.CookiePrefix + Options.AuthenticationScheme; } if (Options.TicketDataFormat == null) { var provider = Options.DataProtectionProvider ?? dataProtectionProvider; var dataProtector = provider.CreateProtector(typeof(CookieAuthenticationMiddleware).FullName, Options.AuthenticationScheme, "v2"); Options.TicketDataFormat = new TicketDataFormat(dataProtector); } if (Options.CookieManager == null) { Options.CookieManager = new ChunkingCookieManager(urlEncoder); } if (!Options.LoginPath.HasValue) { Options.LoginPath = CookieAuthenticationDefaults.LoginPath; } if (!Options.LogoutPath.HasValue) { Options.LogoutPath = CookieAuthenticationDefaults.LogoutPath; } if (!Options.AccessDeniedPath.HasValue) { Options.AccessDeniedPath = CookieAuthenticationDefaults.AccessDeniedPath; } } protected override AuthenticationHandler CreateHandler() { return new CookieAuthenticationHandler(); } } }