예제 #1
0
 public CookieTempDataProvider(
     IDataProtectionProvider dataProtectionProvider,
     ILoggerFactory loggerFactory,
     IOptions <CookieTempDataProviderOptions> options)
 {
     _dataProtector         = dataProtectionProvider.CreateProtector(Purpose);
     _logger                = loggerFactory.CreateLogger <CookieTempDataProvider>();
     _tempDataSerializer    = new TempDataSerializer();
     _chunkingCookieManager = new ChunkingCookieManager();
     _options               = options.Value;
 }
예제 #2
0
        public void SaveTempData_HonorsCookieSecurePolicy_OnOptions(
            bool isRequestSecure,
            CookieSecurePolicy cookieSecurePolicy,
            bool expectedSecureFlag)
        {
            // Arrange
            var values = new Dictionary <string, object>();

            values.Add("int", 10);
            var tempDataProviderStore = new TempDataSerializer();
            var expectedDataToProtect = tempDataProviderStore.Serialize(values);
            var expectedDataInCookie  = WebEncoders.Base64UrlEncode(expectedDataToProtect);
            var dataProtector         = new PassThroughDataProtector();
            var options = new CookieTempDataProviderOptions();

            options.Cookie.SecurePolicy = cookieSecurePolicy;
            var tempDataProvider = GetProvider(dataProtector, options);
            var responseCookies  = new MockResponseCookieCollection();
            var httpContext      = new Mock <HttpContext>();

            httpContext
            .SetupGet(hc => hc.Request.PathBase)
            .Returns("/");
            httpContext
            .SetupGet(hc => hc.Request.IsHttps)
            .Returns(isRequestSecure);
            httpContext
            .Setup(hc => hc.Response.Cookies)
            .Returns(responseCookies);

            // Act
            tempDataProvider.SaveTempData(httpContext.Object, values);

            // Assert
            Assert.Equal(1, responseCookies.Count);
            var cookieInfo = responseCookies[CookieTempDataProvider.CookieName];

            Assert.NotNull(cookieInfo);
            Assert.Equal(expectedDataInCookie, cookieInfo.Value);
            Assert.Equal(expectedDataToProtect, dataProtector.PlainTextToProtect);
            Assert.Equal("/", cookieInfo.Options.Path);
            Assert.Equal(expectedSecureFlag, cookieInfo.Options.Secure);
            Assert.True(cookieInfo.Options.HttpOnly);
            Assert.Null(cookieInfo.Options.Expires);
            Assert.Null(cookieInfo.Options.Domain);
        }
예제 #3
0
        private CookieTempDataProvider GetProvider(IDataProtector dataProtector = null, CookieTempDataProviderOptions options = null)
        {
            if (dataProtector == null)
            {
                dataProtector = new PassThroughDataProtector();
            }
            if (options == null)
            {
                options = new CookieTempDataProviderOptions();
            }

            var testOptions = new Mock <IOptions <CookieTempDataProviderOptions> >();

            testOptions.SetupGet(o => o.Value).Returns(options);

            return(new CookieTempDataProvider(new PassThroughDataProtectionProvider(dataProtector), NullLoggerFactory.Instance, testOptions.Object));
        }
예제 #4
0
        public CompositeTempDataProvider(
            IDataProtectionProvider dataProtectionProvider,
            IOptions <CookieTempDataProviderOptions> options,
            TempDataSerializer tempDataSerializer,
            ILoggerFactory loggerFactory)
        {
            _dataProtector         = dataProtectionProvider.CreateProtector(Purpose);
            _tempDataSerializer    = tempDataSerializer;
            _chunkingCookieManager = new ChunkingCookieManager();
            _logger     = loggerFactory.CreateLogger <CookieTempDataProvider>();
            _options    = options.Value;
            _cookieName = options.Value.Cookie.Name;

            _tempDataCookieLoadFailure = LoggerMessage.Define <string>(
                LogLevel.Warning,
                new EventId(3, "TempDataCookieLoadFailure"),
                "The temp data cookie {CookieName} could not be loaded.");
        }