From b751cf19d0b4b573dd0bdd558879e5128675e1df Mon Sep 17 00:00:00 2001 From: Chris Ross Date: Tue, 22 Apr 2014 09:35:49 -0700 Subject: [PATCH] #34 - Make HttpContext.User return non-null. --- .../DefaultHttpContext.cs | 11 ++++- .../DefaultHttpContextTests.cs | 43 +++++++++++++++++++ .../Microsoft.AspNet.PipelineCore.Tests.kproj | 1 + 3 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 test/Microsoft.AspNet.PipelineCore.Tests/DefaultHttpContextTests.cs diff --git a/src/Microsoft.AspNet.PipelineCore/DefaultHttpContext.cs b/src/Microsoft.AspNet.PipelineCore/DefaultHttpContext.cs index 0525f0cd6c..dd114e9e8b 100644 --- a/src/Microsoft.AspNet.PipelineCore/DefaultHttpContext.cs +++ b/src/Microsoft.AspNet.PipelineCore/DefaultHttpContext.cs @@ -54,7 +54,16 @@ namespace Microsoft.AspNet.PipelineCore public override ClaimsPrincipal User { - get { return HttpAuthentication.User; } + get + { + var user = HttpAuthentication.User; + if (user == null) + { + user = new ClaimsPrincipal(new ClaimsIdentity()); + HttpAuthentication.User = user; + } + return user; + } set { HttpAuthentication.User = value; } } diff --git a/test/Microsoft.AspNet.PipelineCore.Tests/DefaultHttpContextTests.cs b/test/Microsoft.AspNet.PipelineCore.Tests/DefaultHttpContextTests.cs new file mode 100644 index 0000000000..4eb0b87d9e --- /dev/null +++ b/test/Microsoft.AspNet.PipelineCore.Tests/DefaultHttpContextTests.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Security.Claims; +using System.Linq; +using Microsoft.AspNet.Abstractions; +using Microsoft.AspNet.FeatureModel; +using Microsoft.AspNet.HttpFeature; +using Xunit; + +namespace Microsoft.AspNet.PipelineCore.Tests +{ + public class DefaultHttpContextTests + { + [Fact] + public void EmptyUserIsNeverNull() + { + var context = new DefaultHttpContext(new FeatureCollection()); + Assert.NotNull(context.User); + Assert.Equal(1, context.User.Identities.Count()); + Assert.True(object.ReferenceEquals(context.User, context.User)); + Assert.False(context.User.Identity.IsAuthenticated); + Assert.True(string.IsNullOrEmpty(context.User.Identity.AuthenticationType)); + + context.User = null; + Assert.NotNull(context.User); + Assert.Equal(1, context.User.Identities.Count()); + Assert.True(object.ReferenceEquals(context.User, context.User)); + Assert.False(context.User.Identity.IsAuthenticated); + Assert.True(string.IsNullOrEmpty(context.User.Identity.AuthenticationType)); + + context.User = new ClaimsPrincipal(); + Assert.NotNull(context.User); + Assert.Equal(0, context.User.Identities.Count()); + Assert.True(object.ReferenceEquals(context.User, context.User)); + Assert.Null(context.User.Identity); + + context.User = new ClaimsPrincipal(new ClaimsIdentity("SomeAuthType")); + Assert.Equal("SomeAuthType", context.User.Identity.AuthenticationType); + Assert.True(context.User.Identity.IsAuthenticated); + } + } +} \ No newline at end of file diff --git a/test/Microsoft.AspNet.PipelineCore.Tests/Microsoft.AspNet.PipelineCore.Tests.kproj b/test/Microsoft.AspNet.PipelineCore.Tests/Microsoft.AspNet.PipelineCore.Tests.kproj index efb347f4aa..2f35d88951 100644 --- a/test/Microsoft.AspNet.PipelineCore.Tests/Microsoft.AspNet.PipelineCore.Tests.kproj +++ b/test/Microsoft.AspNet.PipelineCore.Tests/Microsoft.AspNet.PipelineCore.Tests.kproj @@ -24,6 +24,7 @@ +