Add support for reading options from config

This commit is contained in:
Hao Kung 2014-05-07 15:36:02 -07:00
commit 71750d668b
10 changed files with 222 additions and 249 deletions

View File

@ -20,11 +20,6 @@ namespace Microsoft.AspNet.Identity
UserName = ClaimTypes.Name;
}
public ClaimTypeOptions(IConfiguration config) : this()
{
IdentityOptions.Read(this, config);
}
/// <summary>
/// Claim type used for role claims
/// </summary>

View File

@ -18,53 +18,6 @@ namespace Microsoft.AspNet.Identity
Lockout = new LockoutOptions();
}
public IdentityOptions(IConfiguration config)
{
ClaimType = new ClaimTypeOptions(config.GetSubKey("identity:claimtype"));
User = new UserOptions(config.GetSubKey("identity:user"));
Password = new PasswordOptions(config.GetSubKey("identity:password"));
//Lockout = new LockoutOptions(config.GetSubKey("identity:lockout"));
}
public static void Read(object obj, IConfiguration config)
{
var type = obj.GetType();
var props = type.GetTypeInfo().DeclaredProperties;
foreach (var prop in props)
{
// TODO: handle non string types?
if (!prop.CanWrite)
{
continue;
}
var configValue = config.Get(prop.Name);
if (configValue == null)
{
continue;
}
if (prop.PropertyType == typeof(string))
{
prop.SetValue(obj, configValue);
}
else if (prop.PropertyType == typeof(int))
{
// todo: TryParse/ errors?
prop.SetValue(obj, int.Parse(configValue));
}
else if (prop.PropertyType == typeof(bool))
{
// todo: TryParse/ errors?
prop.SetValue(obj, bool.Parse(configValue));
}
//else if (prop.PropertyType == typeof(TimeSpan))
//{
// // todo: TryParse/ errors?
// prop.SetValue(obj, TimeSpan.Parse(configValue));
//}
}
}
public ClaimTypeOptions ClaimType { get; set; }
public UserOptions User { get; set; }

View File

@ -0,0 +1,64 @@
using System;
using System.Reflection;
using Microsoft.Framework.ConfigurationModel;
using Microsoft.Framework.DependencyInjection;
namespace Microsoft.AspNet.Identity
{
public class IdentityOptionsSetup : IOptionsSetup<IdentityOptions>
{
private readonly IConfiguration _config;
public IdentityOptionsSetup(IConfiguration config)
{
_config = config;
}
public int Order { get; set; }
public void Setup(IdentityOptions options)
{
if (_config != null)
{
ReadProperties(options.ClaimType, _config.GetSubKey("identity:claimtype"));
ReadProperties(options.User, _config.GetSubKey("identity:user"));
ReadProperties(options.Password, _config.GetSubKey("identity:password"));
ReadProperties(options.Lockout, _config.GetSubKey("identity:lockout"));
}
}
// TODO: Move this somewhere common (Config?) or at least the config.Get conversion
public static void ReadProperties(object obj, IConfiguration config)
{
if (obj == null || config == null)
{
return;
}
var props = obj.GetType().GetTypeInfo().DeclaredProperties;
foreach (var prop in props)
{
if (!prop.CanWrite)
{
continue;
}
var configValue = config.Get(prop.Name);
if (configValue == null)
{
continue;
}
try
{
// No convert on portable
#if NET45 || K10
prop.SetValue(obj, Convert.ChangeType(configValue, prop.PropertyType));
#endif
}
catch
{
// TODO: what do we do about errors?
}
}
}
}
}

View File

@ -28,6 +28,7 @@ namespace Microsoft.Framework.DependencyInjection
{
services.Add(IdentityServices.GetDefaultUserServices<TUser>());
services.Add(IdentityServices.GetDefaultRoleServices<TRole>());
services.AddTransient<IOptionsSetup<IdentityOptions>, IdentityOptionsSetup>();
services.AddSingleton<IOptionsAccessor<IdentityOptions>, OptionsAccessor<IdentityOptions>>();
actionBuilder(new IdentityBuilder<TUser, TRole>(services));
return services;

View File

@ -1,44 +0,0 @@
// Copyright (c) Microsoft Open Technologies, Inc.
// All Rights Reserved
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR
// CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING
// WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF
// TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR
// NON-INFRINGEMENT.
// See the Apache 2 License for the specific language governing
// permissions and limitations under the License.
using System;
using System.Collections.Generic;
using System.Linq;
namespace Microsoft.AspNet.Identity
{
/// <summary>
/// Configuration for lockout
/// </summary>
public class LockoutPolicy
{
/// <summary>
/// If true, will enable user lockout when users are created
/// </summary>
public bool UserLockoutEnabledByDefault { get; set; }
/// <summary>
/// Number of access attempts allowed for a user before lockout (if enabled)
/// </summary>
public int MaxFailedAccessAttemptsBeforeLockout { get; set; }
/// <summary>
/// Default amount of time an user is locked out for after MaxFailedAccessAttempsBeforeLockout is reached
/// </summary>
public TimeSpan DefaultAccountLockoutTimeSpan { get; set; }
}
}

View File

@ -13,11 +13,6 @@ namespace Microsoft.AspNet.Identity
RequiredLength = 6;
}
public PasswordOptions(IConfiguration config) : this()
{
IdentityOptions.Read(this, config);
}
/// <summary>
/// Minimum required length
/// </summary>

View File

@ -10,11 +10,6 @@ namespace Microsoft.AspNet.Identity
//User.RequireUniqueEmail = true; // TODO: app decision?
}
public UserOptions(IConfiguration config) : this()
{
IdentityOptions.Read(this, config);
}
/// <summary>
/// Only allow [A-Za-z0-9@_] in UserNames
/// </summary>

View File

@ -3,25 +3,25 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0.30408.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNet.Identity.net45", "..\src\Microsoft.AspNet.Identity\Microsoft.AspNet.Identity.net45.csproj", "{4D061067-3FE9-442D-81D3-29658DA2FF8F}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNet.Identity.net45", "..\src\Microsoft.AspNet.Identity\Microsoft.AspNet.Identity.net45.csproj", "{FF3ECD18-9F70-4C8F-A052-2CC36E92496F}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{31019886-9CDA-4072-B3D9-E513122CECD0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNet.Identity.Entity.net45", "..\src\Microsoft.AspNet.Identity.Entity\Microsoft.AspNet.Identity.Entity.net45.csproj", "{1832A433-ABB4-4D87-B7CE-E80E9A3E8CA7}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNet.Identity.Entity.net45", "..\src\Microsoft.AspNet.Identity.Entity\Microsoft.AspNet.Identity.Entity.net45.csproj", "{B8C12CE9-F3DA-450D-AE52-40014B8F8B53}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNet.Identity.InMemory.net45", "..\src\Microsoft.AspNet.Identity.InMemory\Microsoft.AspNet.Identity.InMemory.net45.csproj", "{173CABE9-9FDF-43A0-AF9B-409F8AA2BE56}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNet.Identity.InMemory.net45", "..\src\Microsoft.AspNet.Identity.InMemory\Microsoft.AspNet.Identity.InMemory.net45.csproj", "{2CBC40BC-15EC-45CC-BD23-7FA8FE7F5D43}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNet.Identity.Security.net45", "..\src\Microsoft.AspNet.Identity.Security\Microsoft.AspNet.Identity.Security.net45.csproj", "{720B2280-085C-441D-98CD-B241145A1C12}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNet.Identity.Security.net45", "..\src\Microsoft.AspNet.Identity.Security\Microsoft.AspNet.Identity.Security.net45.csproj", "{0C5F4428-383D-4D8F-B99D-5E9686390DB9}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{394C0E59-7E24-453E-993C-7B914C62110A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNet.Identity.Test.net45", "..\test\Microsoft.AspNet.Identity.Test\Microsoft.AspNet.Identity.Test.net45.csproj", "{B3A5D740-2C31-4EBC-AADB-356263965C1F}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNet.Identity.Test.net45", "..\test\Microsoft.AspNet.Identity.Test\Microsoft.AspNet.Identity.Test.net45.csproj", "{2F5247A3-BB35-4A0B-BDA7-E5A6630B13A3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNet.Identity.Security.Test.net45", "..\test\Microsoft.AspNet.Identity.Security.Test\Microsoft.AspNet.Identity.Security.Test.net45.csproj", "{9F67914A-1F35-4068-A21A-F279C4053ADD}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNet.Identity.Security.Test.net45", "..\test\Microsoft.AspNet.Identity.Security.Test\Microsoft.AspNet.Identity.Security.Test.net45.csproj", "{7922374C-77B6-4A64-A50C-50F6E31A29A6}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNet.Identity.InMemory.Test.net45", "..\test\Microsoft.AspNet.Identity.InMemory.Test\Microsoft.AspNet.Identity.InMemory.Test.net45.csproj", "{E2154446-8A68-478B-927F-FD05251C8452}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNet.Identity.InMemory.Test.net45", "..\test\Microsoft.AspNet.Identity.InMemory.Test\Microsoft.AspNet.Identity.InMemory.Test.net45.csproj", "{F5A4A5FC-9D4C-492E-9A1C-4F94255A42C9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNet.Identity.Entity.Test.net45", "..\test\Microsoft.AspNet.Identity.Entity.Test\Microsoft.AspNet.Identity.Entity.Test.net45.csproj", "{CFCEFA4C-548D-459A-A051-1DBE3F2FF91F}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNet.Identity.Entity.Test.net45", "..\test\Microsoft.AspNet.Identity.Entity.Test\Microsoft.AspNet.Identity.Entity.Test.net45.csproj", "{B646BB82-C0C9-46F3-9836-6AB456D9ADF9}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -33,98 +33,98 @@ Global
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{4D061067-3FE9-442D-81D3-29658DA2FF8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4D061067-3FE9-442D-81D3-29658DA2FF8F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4D061067-3FE9-442D-81D3-29658DA2FF8F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{4D061067-3FE9-442D-81D3-29658DA2FF8F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{4D061067-3FE9-442D-81D3-29658DA2FF8F}.Debug|x86.ActiveCfg = Debug|Any CPU
{4D061067-3FE9-442D-81D3-29658DA2FF8F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4D061067-3FE9-442D-81D3-29658DA2FF8F}.Release|Any CPU.Build.0 = Release|Any CPU
{4D061067-3FE9-442D-81D3-29658DA2FF8F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{4D061067-3FE9-442D-81D3-29658DA2FF8F}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{4D061067-3FE9-442D-81D3-29658DA2FF8F}.Release|x86.ActiveCfg = Release|Any CPU
{1832A433-ABB4-4D87-B7CE-E80E9A3E8CA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1832A433-ABB4-4D87-B7CE-E80E9A3E8CA7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1832A433-ABB4-4D87-B7CE-E80E9A3E8CA7}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{1832A433-ABB4-4D87-B7CE-E80E9A3E8CA7}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{1832A433-ABB4-4D87-B7CE-E80E9A3E8CA7}.Debug|x86.ActiveCfg = Debug|Any CPU
{1832A433-ABB4-4D87-B7CE-E80E9A3E8CA7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1832A433-ABB4-4D87-B7CE-E80E9A3E8CA7}.Release|Any CPU.Build.0 = Release|Any CPU
{1832A433-ABB4-4D87-B7CE-E80E9A3E8CA7}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{1832A433-ABB4-4D87-B7CE-E80E9A3E8CA7}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{1832A433-ABB4-4D87-B7CE-E80E9A3E8CA7}.Release|x86.ActiveCfg = Release|Any CPU
{173CABE9-9FDF-43A0-AF9B-409F8AA2BE56}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{173CABE9-9FDF-43A0-AF9B-409F8AA2BE56}.Debug|Any CPU.Build.0 = Debug|Any CPU
{173CABE9-9FDF-43A0-AF9B-409F8AA2BE56}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{173CABE9-9FDF-43A0-AF9B-409F8AA2BE56}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{173CABE9-9FDF-43A0-AF9B-409F8AA2BE56}.Debug|x86.ActiveCfg = Debug|Any CPU
{173CABE9-9FDF-43A0-AF9B-409F8AA2BE56}.Release|Any CPU.ActiveCfg = Release|Any CPU
{173CABE9-9FDF-43A0-AF9B-409F8AA2BE56}.Release|Any CPU.Build.0 = Release|Any CPU
{173CABE9-9FDF-43A0-AF9B-409F8AA2BE56}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{173CABE9-9FDF-43A0-AF9B-409F8AA2BE56}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{173CABE9-9FDF-43A0-AF9B-409F8AA2BE56}.Release|x86.ActiveCfg = Release|Any CPU
{720B2280-085C-441D-98CD-B241145A1C12}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{720B2280-085C-441D-98CD-B241145A1C12}.Debug|Any CPU.Build.0 = Debug|Any CPU
{720B2280-085C-441D-98CD-B241145A1C12}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{720B2280-085C-441D-98CD-B241145A1C12}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{720B2280-085C-441D-98CD-B241145A1C12}.Debug|x86.ActiveCfg = Debug|Any CPU
{720B2280-085C-441D-98CD-B241145A1C12}.Release|Any CPU.ActiveCfg = Release|Any CPU
{720B2280-085C-441D-98CD-B241145A1C12}.Release|Any CPU.Build.0 = Release|Any CPU
{720B2280-085C-441D-98CD-B241145A1C12}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{720B2280-085C-441D-98CD-B241145A1C12}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{720B2280-085C-441D-98CD-B241145A1C12}.Release|x86.ActiveCfg = Release|Any CPU
{B3A5D740-2C31-4EBC-AADB-356263965C1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B3A5D740-2C31-4EBC-AADB-356263965C1F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B3A5D740-2C31-4EBC-AADB-356263965C1F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{B3A5D740-2C31-4EBC-AADB-356263965C1F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{B3A5D740-2C31-4EBC-AADB-356263965C1F}.Debug|x86.ActiveCfg = Debug|Any CPU
{B3A5D740-2C31-4EBC-AADB-356263965C1F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B3A5D740-2C31-4EBC-AADB-356263965C1F}.Release|Any CPU.Build.0 = Release|Any CPU
{B3A5D740-2C31-4EBC-AADB-356263965C1F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{B3A5D740-2C31-4EBC-AADB-356263965C1F}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{B3A5D740-2C31-4EBC-AADB-356263965C1F}.Release|x86.ActiveCfg = Release|Any CPU
{9F67914A-1F35-4068-A21A-F279C4053ADD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9F67914A-1F35-4068-A21A-F279C4053ADD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9F67914A-1F35-4068-A21A-F279C4053ADD}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{9F67914A-1F35-4068-A21A-F279C4053ADD}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{9F67914A-1F35-4068-A21A-F279C4053ADD}.Debug|x86.ActiveCfg = Debug|Any CPU
{9F67914A-1F35-4068-A21A-F279C4053ADD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9F67914A-1F35-4068-A21A-F279C4053ADD}.Release|Any CPU.Build.0 = Release|Any CPU
{9F67914A-1F35-4068-A21A-F279C4053ADD}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{9F67914A-1F35-4068-A21A-F279C4053ADD}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{9F67914A-1F35-4068-A21A-F279C4053ADD}.Release|x86.ActiveCfg = Release|Any CPU
{E2154446-8A68-478B-927F-FD05251C8452}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E2154446-8A68-478B-927F-FD05251C8452}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E2154446-8A68-478B-927F-FD05251C8452}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{E2154446-8A68-478B-927F-FD05251C8452}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{E2154446-8A68-478B-927F-FD05251C8452}.Debug|x86.ActiveCfg = Debug|Any CPU
{E2154446-8A68-478B-927F-FD05251C8452}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E2154446-8A68-478B-927F-FD05251C8452}.Release|Any CPU.Build.0 = Release|Any CPU
{E2154446-8A68-478B-927F-FD05251C8452}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{E2154446-8A68-478B-927F-FD05251C8452}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{E2154446-8A68-478B-927F-FD05251C8452}.Release|x86.ActiveCfg = Release|Any CPU
{CFCEFA4C-548D-459A-A051-1DBE3F2FF91F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CFCEFA4C-548D-459A-A051-1DBE3F2FF91F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CFCEFA4C-548D-459A-A051-1DBE3F2FF91F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{CFCEFA4C-548D-459A-A051-1DBE3F2FF91F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{CFCEFA4C-548D-459A-A051-1DBE3F2FF91F}.Debug|x86.ActiveCfg = Debug|Any CPU
{CFCEFA4C-548D-459A-A051-1DBE3F2FF91F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CFCEFA4C-548D-459A-A051-1DBE3F2FF91F}.Release|Any CPU.Build.0 = Release|Any CPU
{CFCEFA4C-548D-459A-A051-1DBE3F2FF91F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{CFCEFA4C-548D-459A-A051-1DBE3F2FF91F}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{CFCEFA4C-548D-459A-A051-1DBE3F2FF91F}.Release|x86.ActiveCfg = Release|Any CPU
{FF3ECD18-9F70-4C8F-A052-2CC36E92496F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FF3ECD18-9F70-4C8F-A052-2CC36E92496F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FF3ECD18-9F70-4C8F-A052-2CC36E92496F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{FF3ECD18-9F70-4C8F-A052-2CC36E92496F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{FF3ECD18-9F70-4C8F-A052-2CC36E92496F}.Debug|x86.ActiveCfg = Debug|Any CPU
{FF3ECD18-9F70-4C8F-A052-2CC36E92496F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FF3ECD18-9F70-4C8F-A052-2CC36E92496F}.Release|Any CPU.Build.0 = Release|Any CPU
{FF3ECD18-9F70-4C8F-A052-2CC36E92496F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{FF3ECD18-9F70-4C8F-A052-2CC36E92496F}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{FF3ECD18-9F70-4C8F-A052-2CC36E92496F}.Release|x86.ActiveCfg = Release|Any CPU
{B8C12CE9-F3DA-450D-AE52-40014B8F8B53}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B8C12CE9-F3DA-450D-AE52-40014B8F8B53}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B8C12CE9-F3DA-450D-AE52-40014B8F8B53}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{B8C12CE9-F3DA-450D-AE52-40014B8F8B53}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{B8C12CE9-F3DA-450D-AE52-40014B8F8B53}.Debug|x86.ActiveCfg = Debug|Any CPU
{B8C12CE9-F3DA-450D-AE52-40014B8F8B53}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B8C12CE9-F3DA-450D-AE52-40014B8F8B53}.Release|Any CPU.Build.0 = Release|Any CPU
{B8C12CE9-F3DA-450D-AE52-40014B8F8B53}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{B8C12CE9-F3DA-450D-AE52-40014B8F8B53}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{B8C12CE9-F3DA-450D-AE52-40014B8F8B53}.Release|x86.ActiveCfg = Release|Any CPU
{2CBC40BC-15EC-45CC-BD23-7FA8FE7F5D43}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2CBC40BC-15EC-45CC-BD23-7FA8FE7F5D43}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2CBC40BC-15EC-45CC-BD23-7FA8FE7F5D43}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{2CBC40BC-15EC-45CC-BD23-7FA8FE7F5D43}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{2CBC40BC-15EC-45CC-BD23-7FA8FE7F5D43}.Debug|x86.ActiveCfg = Debug|Any CPU
{2CBC40BC-15EC-45CC-BD23-7FA8FE7F5D43}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2CBC40BC-15EC-45CC-BD23-7FA8FE7F5D43}.Release|Any CPU.Build.0 = Release|Any CPU
{2CBC40BC-15EC-45CC-BD23-7FA8FE7F5D43}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{2CBC40BC-15EC-45CC-BD23-7FA8FE7F5D43}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{2CBC40BC-15EC-45CC-BD23-7FA8FE7F5D43}.Release|x86.ActiveCfg = Release|Any CPU
{0C5F4428-383D-4D8F-B99D-5E9686390DB9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0C5F4428-383D-4D8F-B99D-5E9686390DB9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0C5F4428-383D-4D8F-B99D-5E9686390DB9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{0C5F4428-383D-4D8F-B99D-5E9686390DB9}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{0C5F4428-383D-4D8F-B99D-5E9686390DB9}.Debug|x86.ActiveCfg = Debug|Any CPU
{0C5F4428-383D-4D8F-B99D-5E9686390DB9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0C5F4428-383D-4D8F-B99D-5E9686390DB9}.Release|Any CPU.Build.0 = Release|Any CPU
{0C5F4428-383D-4D8F-B99D-5E9686390DB9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{0C5F4428-383D-4D8F-B99D-5E9686390DB9}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{0C5F4428-383D-4D8F-B99D-5E9686390DB9}.Release|x86.ActiveCfg = Release|Any CPU
{2F5247A3-BB35-4A0B-BDA7-E5A6630B13A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2F5247A3-BB35-4A0B-BDA7-E5A6630B13A3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2F5247A3-BB35-4A0B-BDA7-E5A6630B13A3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{2F5247A3-BB35-4A0B-BDA7-E5A6630B13A3}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{2F5247A3-BB35-4A0B-BDA7-E5A6630B13A3}.Debug|x86.ActiveCfg = Debug|Any CPU
{2F5247A3-BB35-4A0B-BDA7-E5A6630B13A3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2F5247A3-BB35-4A0B-BDA7-E5A6630B13A3}.Release|Any CPU.Build.0 = Release|Any CPU
{2F5247A3-BB35-4A0B-BDA7-E5A6630B13A3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{2F5247A3-BB35-4A0B-BDA7-E5A6630B13A3}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{2F5247A3-BB35-4A0B-BDA7-E5A6630B13A3}.Release|x86.ActiveCfg = Release|Any CPU
{7922374C-77B6-4A64-A50C-50F6E31A29A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7922374C-77B6-4A64-A50C-50F6E31A29A6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7922374C-77B6-4A64-A50C-50F6E31A29A6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{7922374C-77B6-4A64-A50C-50F6E31A29A6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{7922374C-77B6-4A64-A50C-50F6E31A29A6}.Debug|x86.ActiveCfg = Debug|Any CPU
{7922374C-77B6-4A64-A50C-50F6E31A29A6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7922374C-77B6-4A64-A50C-50F6E31A29A6}.Release|Any CPU.Build.0 = Release|Any CPU
{7922374C-77B6-4A64-A50C-50F6E31A29A6}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{7922374C-77B6-4A64-A50C-50F6E31A29A6}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{7922374C-77B6-4A64-A50C-50F6E31A29A6}.Release|x86.ActiveCfg = Release|Any CPU
{F5A4A5FC-9D4C-492E-9A1C-4F94255A42C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F5A4A5FC-9D4C-492E-9A1C-4F94255A42C9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F5A4A5FC-9D4C-492E-9A1C-4F94255A42C9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{F5A4A5FC-9D4C-492E-9A1C-4F94255A42C9}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{F5A4A5FC-9D4C-492E-9A1C-4F94255A42C9}.Debug|x86.ActiveCfg = Debug|Any CPU
{F5A4A5FC-9D4C-492E-9A1C-4F94255A42C9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F5A4A5FC-9D4C-492E-9A1C-4F94255A42C9}.Release|Any CPU.Build.0 = Release|Any CPU
{F5A4A5FC-9D4C-492E-9A1C-4F94255A42C9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{F5A4A5FC-9D4C-492E-9A1C-4F94255A42C9}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{F5A4A5FC-9D4C-492E-9A1C-4F94255A42C9}.Release|x86.ActiveCfg = Release|Any CPU
{B646BB82-C0C9-46F3-9836-6AB456D9ADF9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B646BB82-C0C9-46F3-9836-6AB456D9ADF9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B646BB82-C0C9-46F3-9836-6AB456D9ADF9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{B646BB82-C0C9-46F3-9836-6AB456D9ADF9}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{B646BB82-C0C9-46F3-9836-6AB456D9ADF9}.Debug|x86.ActiveCfg = Debug|Any CPU
{B646BB82-C0C9-46F3-9836-6AB456D9ADF9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B646BB82-C0C9-46F3-9836-6AB456D9ADF9}.Release|Any CPU.Build.0 = Release|Any CPU
{B646BB82-C0C9-46F3-9836-6AB456D9ADF9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{B646BB82-C0C9-46F3-9836-6AB456D9ADF9}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{B646BB82-C0C9-46F3-9836-6AB456D9ADF9}.Release|x86.ActiveCfg = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{4D061067-3FE9-442D-81D3-29658DA2FF8F} = {31019886-9CDA-4072-B3D9-E513122CECD0}
{1832A433-ABB4-4D87-B7CE-E80E9A3E8CA7} = {31019886-9CDA-4072-B3D9-E513122CECD0}
{173CABE9-9FDF-43A0-AF9B-409F8AA2BE56} = {31019886-9CDA-4072-B3D9-E513122CECD0}
{720B2280-085C-441D-98CD-B241145A1C12} = {31019886-9CDA-4072-B3D9-E513122CECD0}
{B3A5D740-2C31-4EBC-AADB-356263965C1F} = {394C0E59-7E24-453E-993C-7B914C62110A}
{9F67914A-1F35-4068-A21A-F279C4053ADD} = {394C0E59-7E24-453E-993C-7B914C62110A}
{E2154446-8A68-478B-927F-FD05251C8452} = {394C0E59-7E24-453E-993C-7B914C62110A}
{CFCEFA4C-548D-459A-A051-1DBE3F2FF91F} = {394C0E59-7E24-453E-993C-7B914C62110A}
{FF3ECD18-9F70-4C8F-A052-2CC36E92496F} = {31019886-9CDA-4072-B3D9-E513122CECD0}
{B8C12CE9-F3DA-450D-AE52-40014B8F8B53} = {31019886-9CDA-4072-B3D9-E513122CECD0}
{2CBC40BC-15EC-45CC-BD23-7FA8FE7F5D43} = {31019886-9CDA-4072-B3D9-E513122CECD0}
{0C5F4428-383D-4D8F-B99D-5E9686390DB9} = {31019886-9CDA-4072-B3D9-E513122CECD0}
{2F5247A3-BB35-4A0B-BDA7-E5A6630B13A3} = {394C0E59-7E24-453E-993C-7B914C62110A}
{7922374C-77B6-4A64-A50C-50F6E31A29A6} = {394C0E59-7E24-453E-993C-7B914C62110A}
{F5A4A5FC-9D4C-492E-9A1C-4F94255A42C9} = {394C0E59-7E24-453E-993C-7B914C62110A}
{B646BB82-C0C9-46F3-9836-6AB456D9ADF9} = {394C0E59-7E24-453E-993C-7B914C62110A}
EndGlobalSection
EndGlobal

View File

@ -8,11 +8,12 @@
"Microsoft.AspNet.RequestContainer": "0.1-alpha-*",
"Microsoft.AspNet.Security.DataProtection": "0.1-alpha-*",
"Microsoft.AspNet.Testing": "0.1-alpha-*",
"Microsoft.Data.Common": "0.1-alpha-*",
"Microsoft.Data.Entity": "0.1-alpha-*",
"Microsoft.Data.Entity.InMemory": "0.1-alpha-*",
"Microsoft.Data.Entity.Migrations": "0.1-alpha-*",
"Microsoft.Data.Entity.Relational": "0.1-alpha-*",
"Microsoft.Data.Entity.SqlServer": "0.1-alpha-*",
"Microsoft.Data.Entity.InMemory": "0.1-alpha-*",
"Remotion.Linq": "1.15.13.0",
"Microsoft.Framework.ConfigurationModel": "0.1-alpha-*",
"Microsoft.Framework.DependencyInjection": "0.1-alpha-*",
"Microsoft.Framework.Logging": "0.1-alpha-*",
@ -23,6 +24,7 @@
"xunit.core": "2.0.0-aspnet-*",
"xunit.execution": "2.0.0-aspnet-*"
},
"code": "**\\*.cs;..\\Shared\\*.cs",
"configurations": {
"net45": {
"dependencies": {

View File

@ -2,6 +2,8 @@ using System;
using System.Collections.Generic;
using System.Security.Claims;
using Microsoft.Framework.ConfigurationModel;
using Microsoft.Framework.DependencyInjection;
using Microsoft.Framework.DependencyInjection.Fallback;
using Xunit;
namespace Microsoft.AspNet.Identity.Test
@ -57,11 +59,21 @@ namespace Microsoft.AspNet.Identity.Test
{"identity:password:RequireNonLetterOrDigit", "false"},
{"identity:password:RequireUpperCase", "false"},
{"identity:password:RequireDigit", "false"},
{"identity:password:RequireLowerCase", "false"}
{"identity:password:RequireLowerCase", "false"},
{"identity:lockout:EnabledByDefault", "TRUe"},
{"identity:lockout:MaxFailedAccessAttempts", "1000"}
};
var config = new Configuration { new MemoryConfigurationSource(dic) };
Assert.Equal(roleClaimType, config.Get("identity:claimtype:role"));
var options = new IdentityOptions(config);
var setup = new IdentityOptionsSetup(config);
var services = new ServiceCollection();
services.AddInstance<IConfiguration>(config);
services.AddTransient<IOptionsSetup<IdentityOptions>, IdentityOptionsSetup>();
services.AddTransient<IOptionsAccessor<IdentityOptions>, OptionsAccessor<IdentityOptions>>();
var accessor = services.BuildServiceProvider().GetService<IOptionsAccessor<IdentityOptions>>();
Assert.NotNull(accessor);
var options = accessor.Options;
Assert.Equal(roleClaimType, options.ClaimType.Role);
Assert.Equal(useridClaimType, options.ClaimType.UserId);
Assert.Equal(usernameClaimType, options.ClaimType.UserName);
@ -74,51 +86,51 @@ namespace Microsoft.AspNet.Identity.Test
Assert.False(options.Password.RequireNonLetterOrDigit);
Assert.False(options.Password.RequireUppercase);
Assert.Equal(10, options.Password.RequiredLength);
Assert.True(options.Lockout.EnabledByDefault);
Assert.Equal(1000, options.Lockout.MaxFailedAccessAttempts);
}
[Fact]
public void ClaimTypeOptionsFromConfig()
{
const string roleClaimType = "rolez";
const string usernameClaimType = "namez";
const string useridClaimType = "idz";
const string securityStampClaimType = "stampz";
var dic = new Dictionary<string, string>
{
{"role", roleClaimType},
{"username", usernameClaimType},
{"userid", useridClaimType},
{"securitystamp", securityStampClaimType}
};
var config = new Configuration {new MemoryConfigurationSource(dic)};
Assert.Equal(roleClaimType, config.Get("role"));
var options = new ClaimTypeOptions(config);
Assert.Equal(roleClaimType, options.Role);
Assert.Equal(useridClaimType, options.UserId);
Assert.Equal(usernameClaimType, options.UserName);
Assert.Equal(securityStampClaimType, options.SecurityStamp);
}
[Fact]
public void PasswordOptionsFromConfig()
{
var dic = new Dictionary<string, string>
{
{"RequiredLength", "10"},
{"RequireNonLetterOrDigit", "false"},
{"RequireUpperCase", "false"},
{"RequireDigit", "false"},
{"RequireLowerCase", "false"}
};
var config = new Configuration { new MemoryConfigurationSource(dic) };
var options = new PasswordOptions(config);
Assert.False(options.RequireDigit);
Assert.False(options.RequireLowercase);
Assert.False(options.RequireNonLetterOrDigit);
Assert.False(options.RequireUppercase);
Assert.Equal(10, options.RequiredLength);
}
//[Fact]
//public void ClaimTypeOptionsFromConfig()
//{
// const string roleClaimType = "rolez";
// const string usernameClaimType = "namez";
// const string useridClaimType = "idz";
// const string securityStampClaimType = "stampz";
// var dic = new Dictionary<string, string>
// {
// {"role", roleClaimType},
// {"username", usernameClaimType},
// {"userid", useridClaimType},
// {"securitystamp", securityStampClaimType}
// };
// var config = new ConfigurationModel.Configuration {new MemoryConfigurationSource(dic)};
// Assert.Equal(roleClaimType, config.Get("role"));
// var options = new ClaimTypeOptions(config);
// Assert.Equal(roleClaimType, options.Role);
// Assert.Equal(useridClaimType, options.UserId);
// Assert.Equal(usernameClaimType, options.UserName);
// Assert.Equal(securityStampClaimType, options.SecurityStamp);
//}
//[Fact]
//public void PasswordOptionsFromConfig()
//{
// var dic = new Dictionary<string, string>
// {
// {"RequiredLength", "10"},
// {"RequireNonLetterOrDigit", "false"},
// {"RequireUpperCase", "false"},
// {"RequireDigit", "false"},
// {"RequireLowerCase", "false"}
// };
// var config = new ConfigurationModel.Configuration { new MemoryConfigurationSource(dic) };
// var options = new PasswordOptions(config);
// Assert.False(options.RequireDigit);
// Assert.False(options.RequireLowercase);
// Assert.False(options.RequireNonLetterOrDigit);
// Assert.False(options.RequireUppercase);
// Assert.Equal(10, options.RequiredLength);
//}
}
}