From c4d32ef1d6ae39049fed8be1f15c7b68ac1eafca Mon Sep 17 00:00:00 2001 From: Hao Kung Date: Thu, 20 Mar 2014 09:42:52 -0700 Subject: [PATCH] Remove ConfigureAwait(false) everywhere --- .../InMemoryRoleStore.cs | 9 +- .../InMemoryUserStore.cs | 278 +++++----- .../ClaimsIdentityFactory.cs | 7 +- src/Microsoft.AspNet.Identity/Crypto.cs | 2 +- .../IUserValidator.cs | 2 +- .../IdentityMessage.cs | 4 +- .../PasswordHasher.cs | 4 +- .../PasswordValidator.cs | 5 +- .../Rfc6238AuthenticationService.cs | 5 +- src/Microsoft.AspNet.Identity/RoleManager.cs | 12 +- .../RoleValidator.cs | 3 +- src/Microsoft.AspNet.Identity/UserManager.cs | 283 +++++----- .../UserValidator.cs | 10 +- .../InMemoryStoreTest.cs | 101 ++-- .../ClaimsIdentityFactoryTest.cs | 8 +- .../IdentityResultTest.cs | 4 - .../NoopRoleStore.cs | 63 +-- .../NoopUserStore.cs | 59 +- .../PasswordValidatorTest.cs | 38 +- .../RoleManagerTest.cs | 5 - .../RoleValidatorTest.cs | 2 +- .../TestRole.cs | 3 +- .../TestServices.cs | 11 +- .../TestUser.cs | 4 +- .../UserManagerTest.cs | 510 +++++++++--------- .../UserValidatorTest.cs | 10 +- 26 files changed, 736 insertions(+), 706 deletions(-) diff --git a/src/Microsoft.AspNet.Identity.InMemory/InMemoryRoleStore.cs b/src/Microsoft.AspNet.Identity.InMemory/InMemoryRoleStore.cs index 891f6c2d34..93cb6e53b3 100644 --- a/src/Microsoft.AspNet.Identity.InMemory/InMemoryRoleStore.cs +++ b/src/Microsoft.AspNet.Identity.InMemory/InMemoryRoleStore.cs @@ -42,13 +42,18 @@ namespace Microsoft.AspNet.Identity.InMemory public Task FindByName(string roleName) { - return Task.FromResult(Roles.SingleOrDefault(r => String.Equals(r.Name, roleName, StringComparison.OrdinalIgnoreCase))); + return + Task.FromResult( + Roles.SingleOrDefault(r => String.Equals(r.Name, roleName, StringComparison.OrdinalIgnoreCase))); } public void Dispose() { } - public IQueryable Roles { get { return _roles.Values.AsQueryable(); } } + public IQueryable Roles + { + get { return _roles.Values.AsQueryable(); } + } } } \ No newline at end of file diff --git a/src/Microsoft.AspNet.Identity.InMemory/InMemoryUserStore.cs b/src/Microsoft.AspNet.Identity.InMemory/InMemoryUserStore.cs index 1d613f55d2..456d12041c 100644 --- a/src/Microsoft.AspNet.Identity.InMemory/InMemoryUserStore.cs +++ b/src/Microsoft.AspNet.Identity.InMemory/InMemoryUserStore.cs @@ -6,11 +6,11 @@ using System.Threading.Tasks; namespace Microsoft.AspNet.Identity.InMemory { - public class InMemoryUserStore : - IUserLoginStore, + public class InMemoryUserStore : + IUserLoginStore, IUserRoleStore, - IUserClaimStore, - IUserPasswordStore, + IUserClaimStore, + IUserPasswordStore, IUserSecurityStampStore, IUserEmailStore, IUserLockoutStore, @@ -46,129 +46,6 @@ namespace Microsoft.AspNet.Identity.InMemory return Task.FromResult(0); } - public Task AddLogin(TUser user, UserLoginInfo login) - { - user.Logins.Add(login); - _logins[login] = user; - return Task.FromResult(0); - } - - public Task RemoveLogin(TUser user, UserLoginInfo login) - { - var logs = - user.Logins.Where(l => l.ProviderKey == login.ProviderKey && l.LoginProvider == login.LoginProvider) - .ToList(); - foreach (var l in logs) - { - user.Logins.Remove(l); - _logins[l] = null; - } - return Task.FromResult(0); - } - - public Task> GetLogins(TUser user) - { - return Task.FromResult(user.Logins); - } - - public Task Find(UserLoginInfo login) - { - if (_logins.ContainsKey(login)) - { - return Task.FromResult(_logins[login]); - } - return Task.FromResult(null); - } - - public Task SetPasswordHash(TUser user, string passwordHash) - { - user.PasswordHash = passwordHash; - return Task.FromResult(0); - } - - public Task GetPasswordHash(TUser user) - { - return Task.FromResult(user.PasswordHash); - } - - public Task HasPassword(TUser user) - { - return Task.FromResult(user.PasswordHash != null); - } - - public Task AddToRole(TUser user, string role) - { - user.Roles.Add(role); - return Task.FromResult(0); - } - - public Task RemoveFromRole(TUser user, string role) - { - user.Roles.Remove(role); - return Task.FromResult(0); - } - - public Task> GetRoles(TUser user) - { - return Task.FromResult(user.Roles); - } - - public Task IsInRole(TUser user, string role) - { - return Task.FromResult(user.Roles.Contains(role)); - } - - public Task SetSecurityStamp(TUser user, string stamp) - { - user.SecurityStamp = stamp; - return Task.FromResult(0); - } - - public Task GetSecurityStamp(TUser user) - { - return Task.FromResult(user.SecurityStamp); - } - - public Task Create(TUser user) - { - _users[user.Id] = user; - return Task.FromResult(0); - } - - public Task Update(TUser user) - { - _users[user.Id] = user; - return Task.FromResult(0); - } - - public Task FindById(string userId) - { - if (_users.ContainsKey(userId)) - { - return Task.FromResult(_users[userId]); - } - return Task.FromResult(null); - } - - public void Dispose() - { - } - - public Task FindByName(string userName) - { - return Task.FromResult(Users.FirstOrDefault(u => String.Equals(u.UserName, userName, StringComparison.OrdinalIgnoreCase))); - } - - public Task Delete(TUser user) - { - if (user == null || !_users.ContainsKey(user.Id)) - { - throw new InvalidOperationException("Unknown user"); - } - _users.Remove(user.Id); - return Task.FromResult(0); - } - public Task SetEmail(TUser user, string email) { user.Email = email; @@ -193,7 +70,9 @@ namespace Microsoft.AspNet.Identity.InMemory public Task FindByEmail(string email) { - return Task.FromResult(Users.FirstOrDefault(u => String.Equals(u.Email, email, StringComparison.OrdinalIgnoreCase))); + return + Task.FromResult( + Users.FirstOrDefault(u => String.Equals(u.Email, email, StringComparison.OrdinalIgnoreCase))); } public Task GetLockoutEndDate(TUser user) @@ -235,6 +114,98 @@ namespace Microsoft.AspNet.Identity.InMemory return Task.FromResult(0); } + public Task AddLogin(TUser user, UserLoginInfo login) + { + user.Logins.Add(login); + _logins[login] = user; + return Task.FromResult(0); + } + + public Task RemoveLogin(TUser user, UserLoginInfo login) + { + var logs = + user.Logins.Where(l => l.ProviderKey == login.ProviderKey && l.LoginProvider == login.LoginProvider) + .ToList(); + foreach (var l in logs) + { + user.Logins.Remove(l); + _logins[l] = null; + } + return Task.FromResult(0); + } + + public Task> GetLogins(TUser user) + { + return Task.FromResult(user.Logins); + } + + public Task Find(UserLoginInfo login) + { + if (_logins.ContainsKey(login)) + { + return Task.FromResult(_logins[login]); + } + return Task.FromResult(null); + } + + public Task Create(TUser user) + { + _users[user.Id] = user; + return Task.FromResult(0); + } + + public Task Update(TUser user) + { + _users[user.Id] = user; + return Task.FromResult(0); + } + + public Task FindById(string userId) + { + if (_users.ContainsKey(userId)) + { + return Task.FromResult(_users[userId]); + } + return Task.FromResult(null); + } + + public void Dispose() + { + } + + public Task FindByName(string userName) + { + return + Task.FromResult( + Users.FirstOrDefault(u => String.Equals(u.UserName, userName, StringComparison.OrdinalIgnoreCase))); + } + + public Task Delete(TUser user) + { + if (user == null || !_users.ContainsKey(user.Id)) + { + throw new InvalidOperationException("Unknown user"); + } + _users.Remove(user.Id); + return Task.FromResult(0); + } + + public Task SetPasswordHash(TUser user, string passwordHash) + { + user.PasswordHash = passwordHash; + return Task.FromResult(0); + } + + public Task GetPasswordHash(TUser user) + { + return Task.FromResult(user.PasswordHash); + } + + public Task HasPassword(TUser user) + { + return Task.FromResult(user.PasswordHash != null); + } + public Task SetPhoneNumber(TUser user, string phoneNumber) { user.PhoneNumber = phoneNumber; @@ -257,17 +228,37 @@ namespace Microsoft.AspNet.Identity.InMemory return Task.FromResult(0); } - private class LoginComparer : IEqualityComparer + public Task AddToRole(TUser user, string role) { - public bool Equals(UserLoginInfo x, UserLoginInfo y) - { - return x.LoginProvider == y.LoginProvider && x.ProviderKey == y.ProviderKey; - } + user.Roles.Add(role); + return Task.FromResult(0); + } - public int GetHashCode(UserLoginInfo obj) - { - return (obj.ProviderKey + "--" + obj.LoginProvider).GetHashCode(); - } + public Task RemoveFromRole(TUser user, string role) + { + user.Roles.Remove(role); + return Task.FromResult(0); + } + + public Task> GetRoles(TUser user) + { + return Task.FromResult(user.Roles); + } + + public Task IsInRole(TUser user, string role) + { + return Task.FromResult(user.Roles.Contains(role)); + } + + public Task SetSecurityStamp(TUser user, string stamp) + { + user.SecurityStamp = stamp; + return Task.FromResult(0); + } + + public Task GetSecurityStamp(TUser user) + { + return Task.FromResult(user.SecurityStamp); } public Task SetTwoFactorEnabled(TUser user, bool enabled) @@ -280,5 +271,18 @@ namespace Microsoft.AspNet.Identity.InMemory { return Task.FromResult(user.TwoFactorEnabled); } + + private class LoginComparer : IEqualityComparer + { + public bool Equals(UserLoginInfo x, UserLoginInfo y) + { + return x.LoginProvider == y.LoginProvider && x.ProviderKey == y.ProviderKey; + } + + public int GetHashCode(UserLoginInfo obj) + { + return (obj.ProviderKey + "--" + obj.LoginProvider).GetHashCode(); + } + } } } \ No newline at end of file diff --git a/src/Microsoft.AspNet.Identity/ClaimsIdentityFactory.cs b/src/Microsoft.AspNet.Identity/ClaimsIdentityFactory.cs index 1b9fa3e8d8..5bf9164a1c 100644 --- a/src/Microsoft.AspNet.Identity/ClaimsIdentityFactory.cs +++ b/src/Microsoft.AspNet.Identity/ClaimsIdentityFactory.cs @@ -72,12 +72,11 @@ namespace Microsoft.AspNet.Identity id.AddClaim(new Claim(UserNameClaimType, user.UserName, ClaimValueTypes.String)); if (manager.SupportsUserSecurityStamp) { - id.AddClaim(new Claim(SecurityStampClaimType, - await manager.GetSecurityStamp(user.Id).ConfigureAwait(false))); + id.AddClaim(new Claim(SecurityStampClaimType, await manager.GetSecurityStamp(user.Id))); } if (manager.SupportsUserRole) { - var roles = await manager.GetRoles(user.Id).ConfigureAwait(false); + var roles = await manager.GetRoles(user.Id); foreach (var roleName in roles) { id.AddClaim(new Claim(RoleClaimType, roleName, ClaimValueTypes.String)); @@ -85,7 +84,7 @@ namespace Microsoft.AspNet.Identity } if (manager.SupportsUserClaim) { - id.AddClaims(await manager.GetClaims(user.Id).ConfigureAwait(false)); + id.AddClaims(await manager.GetClaims(user.Id)); } return id; } diff --git a/src/Microsoft.AspNet.Identity/Crypto.cs b/src/Microsoft.AspNet.Identity/Crypto.cs index 7ccbfad380..7d370d4b47 100644 --- a/src/Microsoft.AspNet.Identity/Crypto.cs +++ b/src/Microsoft.AspNet.Identity/Crypto.cs @@ -87,4 +87,4 @@ namespace Microsoft.AspNet.Identity return areSame; } } -} +} \ No newline at end of file diff --git a/src/Microsoft.AspNet.Identity/IUserValidator.cs b/src/Microsoft.AspNet.Identity/IUserValidator.cs index 807b00cd60..df04301913 100644 --- a/src/Microsoft.AspNet.Identity/IUserValidator.cs +++ b/src/Microsoft.AspNet.Identity/IUserValidator.cs @@ -8,7 +8,7 @@ namespace Microsoft.AspNet.Identity /// /// /// - public interface IUserValidator + public interface IUserValidator where TUser : class, IUser where TKey : IEquatable { diff --git a/src/Microsoft.AspNet.Identity/IdentityMessage.cs b/src/Microsoft.AspNet.Identity/IdentityMessage.cs index 0382172847..8f08e19597 100644 --- a/src/Microsoft.AspNet.Identity/IdentityMessage.cs +++ b/src/Microsoft.AspNet.Identity/IdentityMessage.cs @@ -1,6 +1,4 @@ -using System.Threading.Tasks; - -namespace Microsoft.AspNet.Identity +namespace Microsoft.AspNet.Identity { /// /// Represents a message diff --git a/src/Microsoft.AspNet.Identity/PasswordHasher.cs b/src/Microsoft.AspNet.Identity/PasswordHasher.cs index 9cec887116..36a0b63646 100644 --- a/src/Microsoft.AspNet.Identity/PasswordHasher.cs +++ b/src/Microsoft.AspNet.Identity/PasswordHasher.cs @@ -23,7 +23,9 @@ namespace Microsoft.AspNet.Identity /// public virtual PasswordVerificationResult VerifyHashedPassword(string hashedPassword, string providedPassword) { - return Crypto.VerifyHashedPassword(hashedPassword, providedPassword) ? PasswordVerificationResult.Success : PasswordVerificationResult.Failed; + return Crypto.VerifyHashedPassword(hashedPassword, providedPassword) + ? PasswordVerificationResult.Success + : PasswordVerificationResult.Failed; } } } \ No newline at end of file diff --git a/src/Microsoft.AspNet.Identity/PasswordValidator.cs b/src/Microsoft.AspNet.Identity/PasswordValidator.cs index ee8f01dbc7..d242b9e16f 100644 --- a/src/Microsoft.AspNet.Identity/PasswordValidator.cs +++ b/src/Microsoft.AspNet.Identity/PasswordValidator.cs @@ -68,7 +68,10 @@ namespace Microsoft.AspNet.Identity { errors.Add(Resources.PasswordRequireUpper); } - return Task.FromResult(errors.Count == 0 ? IdentityResult.Success : IdentityResult.Failed(String.Join(" ", errors))); + return + Task.FromResult(errors.Count == 0 + ? IdentityResult.Success + : IdentityResult.Failed(String.Join(" ", errors))); } /// diff --git a/src/Microsoft.AspNet.Identity/Rfc6238AuthenticationService.cs b/src/Microsoft.AspNet.Identity/Rfc6238AuthenticationService.cs index d6facc691f..3f24a25a45 100644 --- a/src/Microsoft.AspNet.Identity/Rfc6238AuthenticationService.cs +++ b/src/Microsoft.AspNet.Identity/Rfc6238AuthenticationService.cs @@ -1,4 +1,5 @@ -#if NET45 + +#if NET45 using System; using System.Diagnostics; @@ -112,4 +113,4 @@ namespace Microsoft.AspNet.Identity } } } -#endif +#endif \ No newline at end of file diff --git a/src/Microsoft.AspNet.Identity/RoleManager.cs b/src/Microsoft.AspNet.Identity/RoleManager.cs index 4feac38ad2..5f6f1067b2 100644 --- a/src/Microsoft.AspNet.Identity/RoleManager.cs +++ b/src/Microsoft.AspNet.Identity/RoleManager.cs @@ -94,7 +94,7 @@ namespace Microsoft.AspNet.Identity private async Task ValidateRoleInternal(TRole role) { - return (RoleValidator == null) ? IdentityResult.Success : await RoleValidator.Validate(this, role).ConfigureAwait(false); + return (RoleValidator == null) ? IdentityResult.Success : await RoleValidator.Validate(this, role); } /// @@ -137,7 +137,7 @@ namespace Microsoft.AspNet.Identity { return result; } - await Store.Update(role).ConfigureAwait(false); + await Store.Update(role); return IdentityResult.Success; } @@ -154,7 +154,7 @@ namespace Microsoft.AspNet.Identity throw new ArgumentNullException("role"); } - await Store.Delete(role).ConfigureAwait(false); + await Store.Delete(role); return IdentityResult.Success; } @@ -171,7 +171,7 @@ namespace Microsoft.AspNet.Identity throw new ArgumentNullException("roleName"); } - return await FindByName(roleName).ConfigureAwait(false) != null; + return await FindByName(roleName) != null; } /// @@ -182,7 +182,7 @@ namespace Microsoft.AspNet.Identity public virtual async Task FindById(TKey roleId) { ThrowIfDisposed(); - return await Store.FindById(roleId).ConfigureAwait(false); + return await Store.FindById(roleId); } /// @@ -198,7 +198,7 @@ namespace Microsoft.AspNet.Identity throw new ArgumentNullException("roleName"); } - return await Store.FindByName(roleName).ConfigureAwait(false); + return await Store.FindByName(roleName); } private void ThrowIfDisposed() diff --git a/src/Microsoft.AspNet.Identity/RoleValidator.cs b/src/Microsoft.AspNet.Identity/RoleValidator.cs index 1024021047..3cf92c4da9 100644 --- a/src/Microsoft.AspNet.Identity/RoleValidator.cs +++ b/src/Microsoft.AspNet.Identity/RoleValidator.cs @@ -39,7 +39,8 @@ namespace Microsoft.AspNet.Identity return IdentityResult.Success; } - private static async Task ValidateRoleName(RoleManager manager, TRole role, ICollection errors) + private static async Task ValidateRoleName(RoleManager manager, TRole role, + ICollection errors) { if (string.IsNullOrWhiteSpace(role.Name)) { diff --git a/src/Microsoft.AspNet.Identity/UserManager.cs b/src/Microsoft.AspNet.Identity/UserManager.cs index 40cedb7985..051522ca78 100644 --- a/src/Microsoft.AspNet.Identity/UserManager.cs +++ b/src/Microsoft.AspNet.Identity/UserManager.cs @@ -27,7 +27,7 @@ namespace Microsoft.AspNet.Identity private IPasswordHasher _passwordHasher; /// - /// Constructor which takes a service provider to find the default interfaces to hook up + /// Constructor which takes a service provider to find the default interfaces to hook up /// /// public UserManager(IServiceProvider serviceProvider) @@ -40,7 +40,7 @@ namespace Microsoft.AspNet.Identity UserValidator = serviceProvider.GetService>(); PasswordValidator = serviceProvider.GetService(); ClaimsIdentityFactory = serviceProvider.GetService>(); - //TODO: Store = serviceProvider.GetService>(); + Store = serviceProvider.GetService>(); // TODO: maybe each optional store as well? Email and SMS services? } @@ -320,8 +320,11 @@ namespace Microsoft.AspNet.Identity return ClaimsIdentityFactory.Create(this, user, authenticationType); } - private async Task ValidateUserInternal(TUser user) { - return (UserValidator == null) ? IdentityResult.Success : await UserValidator.Validate(this, user).ConfigureAwait(false); + private async Task ValidateUserInternal(TUser user) + { + return (UserValidator == null) + ? IdentityResult.Success + : await UserValidator.Validate(this, user); } /// @@ -332,7 +335,7 @@ namespace Microsoft.AspNet.Identity public virtual async Task Create(TUser user) { ThrowIfDisposed(); - await UpdateSecurityStampInternal(user).ConfigureAwait(false); + await UpdateSecurityStampInternal(user); var result = await ValidateUserInternal(user); if (!result.Succeeded) { @@ -340,9 +343,9 @@ namespace Microsoft.AspNet.Identity } if (UserLockoutEnabledByDefault && SupportsUserLockout) { - await GetUserLockoutStore().SetLockoutEnabled(user, true).ConfigureAwait(false); + await GetUserLockoutStore().SetLockoutEnabled(user, true); } - await Store.Create(user).ConfigureAwait(false); + await Store.Create(user); return IdentityResult.Success; } @@ -363,7 +366,7 @@ namespace Microsoft.AspNet.Identity { return result; } - await Store.Update(user).ConfigureAwait(false); + await Store.Update(user); return IdentityResult.Success; } @@ -379,7 +382,7 @@ namespace Microsoft.AspNet.Identity { throw new ArgumentNullException("user"); } - await Store.Delete(user).ConfigureAwait(false); + await Store.Delete(user); return IdentityResult.Success; } @@ -438,12 +441,12 @@ namespace Microsoft.AspNet.Identity { throw new ArgumentNullException("password"); } - var result = await UpdatePasswordInternal(passwordStore, user, password).ConfigureAwait(false); + var result = await UpdatePasswordInternal(passwordStore, user, password); if (!result.Succeeded) { return result; } - return await Create(user).ConfigureAwait(false); + return await Create(user); } /// @@ -455,12 +458,12 @@ namespace Microsoft.AspNet.Identity public virtual async Task Find(string userName, string password) { ThrowIfDisposed(); - var user = await FindByName(userName).ConfigureAwait(false); + var user = await FindByName(userName); if (user == null) { return null; } - return await CheckPassword(user, password).ConfigureAwait(false) ? user : null; + return await CheckPassword(user, password) ? user : null; } /// @@ -477,7 +480,7 @@ namespace Microsoft.AspNet.Identity { return false; } - return await VerifyPassword(passwordStore, user, password).ConfigureAwait(false); + return await VerifyPassword(passwordStore, user, password); } /// @@ -489,13 +492,13 @@ namespace Microsoft.AspNet.Identity { ThrowIfDisposed(); var passwordStore = GetPasswordStore(); - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, userId)); } - return await passwordStore.HasPassword(user).ConfigureAwait(false); + return await passwordStore.HasPassword(user); } /// @@ -508,23 +511,23 @@ namespace Microsoft.AspNet.Identity { ThrowIfDisposed(); var passwordStore = GetPasswordStore(); - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, userId)); } - var hash = await passwordStore.GetPasswordHash(user).ConfigureAwait(false); + var hash = await passwordStore.GetPasswordHash(user); if (hash != null) { return new IdentityResult(Resources.UserAlreadyHasPassword); } - var result = await UpdatePasswordInternal(passwordStore, user, password).ConfigureAwait(false); + var result = await UpdatePasswordInternal(passwordStore, user, password); if (!result.Succeeded) { return result; } - return await Update(user).ConfigureAwait(false); + return await Update(user); } /// @@ -539,20 +542,20 @@ namespace Microsoft.AspNet.Identity { ThrowIfDisposed(); var passwordStore = GetPasswordStore(); - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, userId)); } - if (await VerifyPassword(passwordStore, user, currentPassword).ConfigureAwait(false)) + if (await VerifyPassword(passwordStore, user, currentPassword)) { - var result = await UpdatePasswordInternal(passwordStore, user, newPassword).ConfigureAwait(false); + var result = await UpdatePasswordInternal(passwordStore, user, newPassword); if (!result.Succeeded) { return result; } - return await Update(user).ConfigureAwait(false); + return await Update(user); } return IdentityResult.Failed(Resources.PasswordMismatch); } @@ -566,15 +569,15 @@ namespace Microsoft.AspNet.Identity { ThrowIfDisposed(); var passwordStore = GetPasswordStore(); - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, userId)); } - await passwordStore.SetPasswordHash(user, null).ConfigureAwait(false); - await UpdateSecurityStampInternal(user).ConfigureAwait(false); - return await Update(user).ConfigureAwait(false); + await passwordStore.SetPasswordHash(user, null); + await UpdateSecurityStampInternal(user); + return await Update(user); } internal async Task UpdatePasswordInternal(IUserPasswordStore passwordStore, @@ -582,15 +585,15 @@ namespace Microsoft.AspNet.Identity { if (PasswordValidator != null) { - var result = await PasswordValidator.Validate(newPassword).ConfigureAwait(false); + var result = await PasswordValidator.Validate(newPassword); if (!result.Succeeded) { return result; } } await - passwordStore.SetPasswordHash(user, PasswordHasher.HashPassword(newPassword)).ConfigureAwait(false); - await UpdateSecurityStampInternal(user).ConfigureAwait(false); + passwordStore.SetPasswordHash(user, PasswordHasher.HashPassword(newPassword)); + await UpdateSecurityStampInternal(user); return IdentityResult.Success; } @@ -604,7 +607,7 @@ namespace Microsoft.AspNet.Identity protected virtual async Task VerifyPassword(IUserPasswordStore store, TUser user, string password) { - var hash = await store.GetPasswordHash(user).ConfigureAwait(false); + var hash = await store.GetPasswordHash(user); return PasswordHasher.VerifyHashedPassword(hash, password) != PasswordVerificationResult.Failed; } @@ -628,13 +631,13 @@ namespace Microsoft.AspNet.Identity { ThrowIfDisposed(); var securityStore = GetSecurityStore(); - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, userId)); } - return await securityStore.GetSecurityStamp(user).ConfigureAwait(false); + return await securityStore.GetSecurityStamp(user); } /// @@ -646,14 +649,14 @@ namespace Microsoft.AspNet.Identity { ThrowIfDisposed(); var securityStore = GetSecurityStore(); - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, userId)); } - await securityStore.SetSecurityStamp(user, NewSecurityStamp()).ConfigureAwait(false); - return await Update(user).ConfigureAwait(false); + await securityStore.SetSecurityStamp(user, NewSecurityStamp()); + return await Update(user); } /// @@ -677,24 +680,24 @@ namespace Microsoft.AspNet.Identity public virtual async Task ResetPassword(TKey userId, string token, string newPassword) { ThrowIfDisposed(); - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, userId)); } // Make sure the token is valid and the stamp matches - if (!await VerifyUserToken(userId, "ResetPassword", token).ConfigureAwait(false)) + if (!await VerifyUserToken(userId, "ResetPassword", token)) { return IdentityResult.Failed(Resources.InvalidToken); } var passwordStore = GetPasswordStore(); - var result = await UpdatePasswordInternal(passwordStore, user, newPassword).ConfigureAwait(false); + var result = await UpdatePasswordInternal(passwordStore, user, newPassword); if (!result.Succeeded) { return result; } - return await Update(user).ConfigureAwait(false); + return await Update(user); } // Update the security stamp if the store supports it @@ -702,7 +705,7 @@ namespace Microsoft.AspNet.Identity { if (SupportsUserSecurityStamp) { - await GetSecurityStore().SetSecurityStamp(user, NewSecurityStamp()).ConfigureAwait(false); + await GetSecurityStore().SetSecurityStamp(user, NewSecurityStamp()); } } @@ -746,15 +749,15 @@ namespace Microsoft.AspNet.Identity { throw new ArgumentNullException("login"); } - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, userId)); } - await loginStore.RemoveLogin(user, login).ConfigureAwait(false); - await UpdateSecurityStampInternal(user).ConfigureAwait(false); - return await Update(user).ConfigureAwait(false); + await loginStore.RemoveLogin(user, login); + await UpdateSecurityStampInternal(user); + return await Update(user); } /// @@ -771,19 +774,19 @@ namespace Microsoft.AspNet.Identity { throw new ArgumentNullException("login"); } - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, userId)); } - var existingUser = await Find(login).ConfigureAwait(false); + var existingUser = await Find(login); if (existingUser != null) { return IdentityResult.Failed(Resources.ExternalLoginExists); } - await loginStore.AddLogin(user, login).ConfigureAwait(false); - return await Update(user).ConfigureAwait(false); + await loginStore.AddLogin(user, login); + return await Update(user); } /// @@ -795,13 +798,13 @@ namespace Microsoft.AspNet.Identity { ThrowIfDisposed(); var loginStore = GetLoginStore(); - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, userId)); } - return await loginStore.GetLogins(user).ConfigureAwait(false); + return await loginStore.GetLogins(user); } // IUserClaimStore methods @@ -829,14 +832,14 @@ namespace Microsoft.AspNet.Identity { throw new ArgumentNullException("claim"); } - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, userId)); } - await claimStore.AddClaim(user, claim).ConfigureAwait(false); - return await Update(user).ConfigureAwait(false); + await claimStore.AddClaim(user, claim); + return await Update(user); } /// @@ -849,14 +852,14 @@ namespace Microsoft.AspNet.Identity { ThrowIfDisposed(); var claimStore = GetClaimStore(); - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, userId)); } - await claimStore.RemoveClaim(user, claim).ConfigureAwait(false); - return await Update(user).ConfigureAwait(false); + await claimStore.RemoveClaim(user, claim); + return await Update(user); } /// @@ -868,13 +871,13 @@ namespace Microsoft.AspNet.Identity { ThrowIfDisposed(); var claimStore = GetClaimStore(); - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, userId)); } - return await claimStore.GetClaims(user).ConfigureAwait(false); + return await claimStore.GetClaims(user); } private IUserRoleStore GetUserRoleStore() @@ -897,19 +900,19 @@ namespace Microsoft.AspNet.Identity { ThrowIfDisposed(); var userRoleStore = GetUserRoleStore(); - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, userId)); } - var userRoles = await userRoleStore.GetRoles(user).ConfigureAwait(false); + var userRoles = await userRoleStore.GetRoles(user); if (userRoles.Contains(role)) { return new IdentityResult(Resources.UserAlreadyInRole); } - await userRoleStore.AddToRole(user, role).ConfigureAwait(false); - return await Update(user).ConfigureAwait(false); + await userRoleStore.AddToRole(user, role); + return await Update(user); } /// @@ -922,18 +925,18 @@ namespace Microsoft.AspNet.Identity { ThrowIfDisposed(); var userRoleStore = GetUserRoleStore(); - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, userId)); } - if (!await userRoleStore.IsInRole(user, role).ConfigureAwait(false)) + if (!await userRoleStore.IsInRole(user, role)) { return new IdentityResult(Resources.UserNotInRole); } - await userRoleStore.RemoveFromRole(user, role).ConfigureAwait(false); - return await Update(user).ConfigureAwait(false); + await userRoleStore.RemoveFromRole(user, role); + return await Update(user); } /// @@ -945,13 +948,13 @@ namespace Microsoft.AspNet.Identity { ThrowIfDisposed(); var userRoleStore = GetUserRoleStore(); - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, userId)); } - return await userRoleStore.GetRoles(user).ConfigureAwait(false); + return await userRoleStore.GetRoles(user); } /// @@ -964,13 +967,13 @@ namespace Microsoft.AspNet.Identity { ThrowIfDisposed(); var userRoleStore = GetUserRoleStore(); - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, userId)); } - return await userRoleStore.IsInRole(user, role).ConfigureAwait(false); + return await userRoleStore.IsInRole(user, role); } // IUserEmailStore methods @@ -993,13 +996,13 @@ namespace Microsoft.AspNet.Identity { ThrowIfDisposed(); var store = GetEmailStore(); - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, userId)); } - return await store.GetEmail(user).ConfigureAwait(false); + return await store.GetEmail(user); } /// @@ -1012,16 +1015,16 @@ namespace Microsoft.AspNet.Identity { ThrowIfDisposed(); var store = GetEmailStore(); - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, userId)); } - await store.SetEmail(user, email).ConfigureAwait(false); - await store.SetEmailConfirmed(user, false).ConfigureAwait(false); - await UpdateSecurityStampInternal(user).ConfigureAwait(false); - return await Update(user).ConfigureAwait(false); + await store.SetEmail(user, email); + await store.SetEmailConfirmed(user, false); + await UpdateSecurityStampInternal(user); + return await Update(user); } /// @@ -1061,7 +1064,7 @@ namespace Microsoft.AspNet.Identity { ThrowIfDisposed(); var store = GetEmailStore(); - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, @@ -1071,8 +1074,8 @@ namespace Microsoft.AspNet.Identity { return IdentityResult.Failed(Resources.InvalidToken); } - await store.SetEmailConfirmed(user, true).ConfigureAwait(false); - return await Update(user).ConfigureAwait(false); + await store.SetEmailConfirmed(user, true); + return await Update(user); } /// @@ -1084,13 +1087,13 @@ namespace Microsoft.AspNet.Identity { ThrowIfDisposed(); var store = GetEmailStore(); - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, userId)); } - return await store.GetEmailConfirmed(user).ConfigureAwait(false); + return await store.GetEmailConfirmed(user); } // IUserPhoneNumberStore methods @@ -1113,13 +1116,13 @@ namespace Microsoft.AspNet.Identity { ThrowIfDisposed(); var store = GetPhoneNumberStore(); - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, userId)); } - return await store.GetPhoneNumber(user).ConfigureAwait(false); + return await store.GetPhoneNumber(user); } /// @@ -1132,16 +1135,16 @@ namespace Microsoft.AspNet.Identity { ThrowIfDisposed(); var store = GetPhoneNumberStore(); - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, userId)); } - await store.SetPhoneNumber(user, phoneNumber).ConfigureAwait(false); - await store.SetPhoneNumberConfirmed(user, false).ConfigureAwait(false); - await UpdateSecurityStampInternal(user).ConfigureAwait(false); - return await Update(user).ConfigureAwait(false); + await store.SetPhoneNumber(user, phoneNumber); + await store.SetPhoneNumberConfirmed(user, false); + await UpdateSecurityStampInternal(user); + return await Update(user); } /// @@ -1155,20 +1158,20 @@ namespace Microsoft.AspNet.Identity { ThrowIfDisposed(); var store = GetPhoneNumberStore(); - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, userId)); } - if (!await VerifyChangePhoneNumberToken(userId, token, phoneNumber).ConfigureAwait(false)) + if (!await VerifyChangePhoneNumberToken(userId, token, phoneNumber)) { return IdentityResult.Failed(Resources.InvalidToken); } - await store.SetPhoneNumber(user, phoneNumber).ConfigureAwait(false); - await store.SetPhoneNumberConfirmed(user, true).ConfigureAwait(false); - await UpdateSecurityStampInternal(user).ConfigureAwait(false); - return await Update(user).ConfigureAwait(false); + await store.SetPhoneNumber(user, phoneNumber); + await store.SetPhoneNumberConfirmed(user, true); + await UpdateSecurityStampInternal(user); + return await Update(user); } /// @@ -1180,13 +1183,13 @@ namespace Microsoft.AspNet.Identity { ThrowIfDisposed(); var store = GetPhoneNumberStore(); - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, userId)); } - return await store.GetPhoneNumberConfirmed(user).ConfigureAwait(false); + return await store.GetPhoneNumberConfirmed(user); } // Two factor APIS @@ -1195,7 +1198,7 @@ namespace Microsoft.AspNet.Identity internal async Task CreateSecurityToken(TKey userId) { return - new SecurityToken(Encoding.Unicode.GetBytes(await GetSecurityStamp(userId).ConfigureAwait(false))); + new SecurityToken(Encoding.Unicode.GetBytes(await GetSecurityStamp(userId))); } /// @@ -1248,14 +1251,14 @@ namespace Microsoft.AspNet.Identity { throw new NotSupportedException(Resources.NoTokenProvider); } - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, userId)); } // Make sure the token is valid - return await UserTokenProvider.Validate(purpose, token, this, user).ConfigureAwait(false); + return await UserTokenProvider.Validate(purpose, token, this, user); } /// @@ -1271,13 +1274,13 @@ namespace Microsoft.AspNet.Identity { throw new NotSupportedException(Resources.NoTokenProvider); } - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, userId)); } - return await UserTokenProvider.Generate(purpose, this, user).ConfigureAwait(false); + return await UserTokenProvider.Generate(purpose, this, user); } /// @@ -1307,7 +1310,7 @@ namespace Microsoft.AspNet.Identity public virtual async Task> GetValidTwoFactorProviders(TKey userId) { ThrowIfDisposed(); - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, @@ -1334,7 +1337,7 @@ namespace Microsoft.AspNet.Identity public virtual async Task VerifyTwoFactorToken(TKey userId, string twoFactorProvider, string token) { ThrowIfDisposed(); - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, @@ -1347,7 +1350,7 @@ namespace Microsoft.AspNet.Identity } // Make sure the token is valid var provider = _factors[twoFactorProvider]; - return await provider.Validate(twoFactorProvider, token, this, user).ConfigureAwait(false); + return await provider.Validate(twoFactorProvider, token, this, user); } /// @@ -1359,7 +1362,7 @@ namespace Microsoft.AspNet.Identity public virtual async Task GenerateTwoFactorToken(TKey userId, string twoFactorProvider) { ThrowIfDisposed(); - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, @@ -1370,7 +1373,7 @@ namespace Microsoft.AspNet.Identity throw new NotSupportedException(String.Format(CultureInfo.CurrentCulture, Resources.NoTwoFactorProvider, twoFactorProvider)); } - return await _factors[twoFactorProvider].Generate(twoFactorProvider, this, user).ConfigureAwait(false); + return await _factors[twoFactorProvider].Generate(twoFactorProvider, this, user); } /// @@ -1384,7 +1387,7 @@ namespace Microsoft.AspNet.Identity string token) { ThrowIfDisposed(); - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, @@ -1395,7 +1398,7 @@ namespace Microsoft.AspNet.Identity throw new NotSupportedException(String.Format(CultureInfo.CurrentCulture, Resources.NoTwoFactorProvider, twoFactorProvider)); } - await _factors[twoFactorProvider].Notify(token, this, user).ConfigureAwait(false); + await _factors[twoFactorProvider].Notify(token, this, user); return IdentityResult.Success; } @@ -1419,13 +1422,13 @@ namespace Microsoft.AspNet.Identity { ThrowIfDisposed(); var store = GetUserTwoFactorStore(); - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, userId)); } - return await store.GetTwoFactorEnabled(user).ConfigureAwait(false); + return await store.GetTwoFactorEnabled(user); } /// @@ -1438,15 +1441,15 @@ namespace Microsoft.AspNet.Identity { ThrowIfDisposed(); var store = GetUserTwoFactorStore(); - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, userId)); } - await store.SetTwoFactorEnabled(user, enabled).ConfigureAwait(false); - await UpdateSecurityStampInternal(user).ConfigureAwait(false); - return await Update(user).ConfigureAwait(false); + await store.SetTwoFactorEnabled(user, enabled); + await UpdateSecurityStampInternal(user); + return await Update(user); } // SMS/Email methods @@ -1513,13 +1516,13 @@ namespace Microsoft.AspNet.Identity { ThrowIfDisposed(); var store = GetUserLockoutStore(); - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, userId)); } - if (!await store.GetLockoutEnabled(user).ConfigureAwait(false)) + if (!await store.GetLockoutEnabled(user)) { return false; } @@ -1537,14 +1540,14 @@ namespace Microsoft.AspNet.Identity { ThrowIfDisposed(); var store = GetUserLockoutStore(); - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, userId)); } - await store.SetLockoutEnabled(user, enabled).ConfigureAwait(false); - return await Update(user).ConfigureAwait(false); + await store.SetLockoutEnabled(user, enabled); + return await Update(user); } /// @@ -1556,13 +1559,13 @@ namespace Microsoft.AspNet.Identity { ThrowIfDisposed(); var store = GetUserLockoutStore(); - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, userId)); } - return await store.GetLockoutEnabled(user).ConfigureAwait(false); + return await store.GetLockoutEnabled(user); } /// @@ -1574,13 +1577,13 @@ namespace Microsoft.AspNet.Identity { ThrowIfDisposed(); var store = GetUserLockoutStore(); - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, userId)); } - return await store.GetLockoutEndDate(user).ConfigureAwait(false); + return await store.GetLockoutEndDate(user); } /// @@ -1593,7 +1596,7 @@ namespace Microsoft.AspNet.Identity { ThrowIfDisposed(); var store = GetUserLockoutStore(); - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, @@ -1603,8 +1606,8 @@ namespace Microsoft.AspNet.Identity { return IdentityResult.Failed(Resources.LockoutNotEnabled); } - await store.SetLockoutEndDate(user, lockoutEnd).ConfigureAwait(false); - return await Update(user).ConfigureAwait(false); + await store.SetLockoutEndDate(user, lockoutEnd); + return await Update(user); } /// @@ -1618,23 +1621,23 @@ namespace Microsoft.AspNet.Identity { ThrowIfDisposed(); var store = GetUserLockoutStore(); - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, userId)); } // If this puts the user over the threshold for lockout, lock them out and reset the access failed count - var count = await store.IncrementAccessFailedCount(user).ConfigureAwait(false); + var count = await store.IncrementAccessFailedCount(user); if (count < MaxFailedAccessAttemptsBeforeLockout) { - return await Update(user).ConfigureAwait(false); + return await Update(user); } await store.SetLockoutEndDate(user, DateTimeOffset.UtcNow.Add(DefaultAccountLockoutTimeSpan)) - .ConfigureAwait(false); - await store.ResetAccessFailedCount(user).ConfigureAwait(false); - return await Update(user).ConfigureAwait(false); + ; + await store.ResetAccessFailedCount(user); + return await Update(user); } /// @@ -1646,14 +1649,14 @@ namespace Microsoft.AspNet.Identity { ThrowIfDisposed(); var store = GetUserLockoutStore(); - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, userId)); } - await store.ResetAccessFailedCount(user).ConfigureAwait(false); - return await Update(user).ConfigureAwait(false); + await store.ResetAccessFailedCount(user); + return await Update(user); } /// @@ -1665,13 +1668,13 @@ namespace Microsoft.AspNet.Identity { ThrowIfDisposed(); var store = GetUserLockoutStore(); - var user = await FindById(userId).ConfigureAwait(false); + var user = await FindById(userId); if (user == null) { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, userId)); } - return await store.GetAccessFailedCount(user).ConfigureAwait(false); + return await store.GetAccessFailedCount(user); } private void ThrowIfDisposed() diff --git a/src/Microsoft.AspNet.Identity/UserValidator.cs b/src/Microsoft.AspNet.Identity/UserValidator.cs index 4103031741..4fa83082d2 100644 --- a/src/Microsoft.AspNet.Identity/UserValidator.cs +++ b/src/Microsoft.AspNet.Identity/UserValidator.cs @@ -1,10 +1,10 @@ +#if NET45 +using System.Net.Mail; +#endif using System; using System.Collections.Generic; using System.Globalization; using System.Linq; -#if NET45 -using System.Net.Mail; -#endif using System.Threading.Tasks; namespace Microsoft.AspNet.Identity @@ -60,7 +60,7 @@ namespace Microsoft.AspNet.Identity } return errors.Count > 0 ? IdentityResult.Failed(errors.ToArray()) : IdentityResult.Success; } - + // TODO: Revisit extensibility for Validators /// @@ -127,7 +127,7 @@ namespace Microsoft.AspNet.Identity // make sure email is not empty, valid, and unique private static async Task ValidateEmail(UserManager manager, TUser user, List errors) { - var email = await manager.GetEmailStore().GetEmail(user).ConfigureAwait(false); + var email = await manager.GetEmailStore().GetEmail(user); if (string.IsNullOrWhiteSpace(email)) { errors.Add(String.Format(CultureInfo.CurrentCulture, Resources.PropertyTooShort, "Email")); diff --git a/test/Microsoft.AspNet.Identity.InMemory.Test/InMemoryStoreTest.cs b/test/Microsoft.AspNet.Identity.InMemory.Test/InMemoryStoreTest.cs index ee44d8ec47..026ab5c56f 100644 --- a/test/Microsoft.AspNet.Identity.InMemory.Test/InMemoryStoreTest.cs +++ b/test/Microsoft.AspNet.Identity.InMemory.Test/InMemoryStoreTest.cs @@ -57,8 +57,8 @@ namespace Microsoft.AspNet.Identity.InMemory.Test public async Task UserValidatorBlocksShortEmailsWhenRequiresUniqueEmail(string email) { var manager = CreateManager(); - var user = new InMemoryUser("UpdateBlocked") { Email = email }; - manager.UserValidator = new UserValidator { RequireUniqueEmail = true }; + var user = new InMemoryUser("UpdateBlocked") {Email = email}; + manager.UserValidator = new UserValidator {RequireUniqueEmail = true}; IdentityResultAssert.IsFailure(await manager.Create(user), "Email cannot be null or empty."); } @@ -69,9 +69,9 @@ namespace Microsoft.AspNet.Identity.InMemory.Test public async Task UserValidatorBlocksInvalidEmailsWhenRequiresUniqueEmail(string email) { var manager = CreateManager(); - var user = new InMemoryUser("UpdateBlocked") { Email = email }; - manager.UserValidator = new UserValidator { RequireUniqueEmail = true }; - IdentityResultAssert.IsFailure(await manager.Create(user), "Email '"+email+"' is invalid."); + var user = new InMemoryUser("UpdateBlocked") {Email = email}; + manager.UserValidator = new UserValidator {RequireUniqueEmail = true}; + IdentityResultAssert.IsFailure(await manager.Create(user), "Email '" + email + "' is invalid."); } #endif @@ -82,7 +82,8 @@ namespace Microsoft.AspNet.Identity.InMemory.Test var user = new InMemoryUser("AddPasswordBlocked"); IdentityResultAssert.IsSuccess(await manager.Create(user)); manager.PasswordValidator = new AlwaysBadValidator(); - IdentityResultAssert.IsFailure(await manager.AddPassword(user.Id, "password"), AlwaysBadValidator.ErrorMessage); + IdentityResultAssert.IsFailure(await manager.AddPassword(user.Id, "password"), + AlwaysBadValidator.ErrorMessage); } [Fact] @@ -92,7 +93,8 @@ namespace Microsoft.AspNet.Identity.InMemory.Test var user = new InMemoryUser("ChangePasswordBlocked"); IdentityResultAssert.IsSuccess(await manager.Create(user, "password")); manager.PasswordValidator = new AlwaysBadValidator(); - IdentityResultAssert.IsFailure(await manager.ChangePassword(user.Id, "password", "new"), AlwaysBadValidator.ErrorMessage); + IdentityResultAssert.IsFailure(await manager.ChangePassword(user.Id, "password", "new"), + AlwaysBadValidator.ErrorMessage); } [Fact] @@ -151,7 +153,8 @@ namespace Microsoft.AspNet.Identity.InMemory.Test var user = new InMemoryUser("CannotAddAnotherPassword"); IdentityResultAssert.IsSuccess(await manager.Create(user, "Password")); Assert.True(await manager.HasPassword(user.Id)); - IdentityResultAssert.IsFailure(await manager.AddPassword(user.Id, "password"), "User already has a password set."); + IdentityResultAssert.IsFailure(await manager.AddPassword(user.Id, "password"), + "User already has a password set."); } [Fact] @@ -216,7 +219,7 @@ namespace Microsoft.AspNet.Identity.InMemory.Test var manager = CreateManager(); var user = new InMemoryUser("ClaimsAddRemove"); IdentityResultAssert.IsSuccess(await manager.Create(user)); - Claim[] claims = { new Claim("c", "v"), new Claim("c2", "v2"), new Claim("c2", "v3") }; + Claim[] claims = {new Claim("c", "v"), new Claim("c2", "v2"), new Claim("c2", "v3")}; foreach (Claim c in claims) { IdentityResultAssert.IsSuccess(await manager.AddClaim(user.Id, c)); @@ -259,7 +262,7 @@ namespace Microsoft.AspNet.Identity.InMemory.Test { var manager = CreateManager(); var user = new InMemoryUser("dupe") {Email = "yup@yup.com"}; - var user2 = new InMemoryUser("dupeEmail") { Email = "yup@yup.com" }; + var user2 = new InMemoryUser("dupeEmail") {Email = "yup@yup.com"}; IdentityResultAssert.IsSuccess(await manager.Create(user)); IdentityResultAssert.IsSuccess(await manager.Create(user2)); } @@ -268,9 +271,9 @@ namespace Microsoft.AspNet.Identity.InMemory.Test public async Task AddDupeEmailFallsWhenUniqueEmailRequired() { var manager = CreateManager(); - manager.UserValidator = new UserValidator { RequireUniqueEmail = true }; - var user = new InMemoryUser("dupe") { Email = "yup@yup.com" }; - var user2 = new InMemoryUser("dupeEmail") { Email = "yup@yup.com" }; + manager.UserValidator = new UserValidator {RequireUniqueEmail = true}; + var user = new InMemoryUser("dupe") {Email = "yup@yup.com"}; + var user2 = new InMemoryUser("dupeEmail") {Email = "yup@yup.com"}; IdentityResultAssert.IsSuccess(await manager.Create(user)); IdentityResultAssert.IsFailure(await manager.Create(user2), "Email 'yup@yup.com' is already taken."); } @@ -307,7 +310,7 @@ namespace Microsoft.AspNet.Identity.InMemory.Test var manager = CreateManager(); const string userName = "EmailTest"; const string email = "email@test.com"; - var user = new InMemoryUser(userName) { Email = email }; + var user = new InMemoryUser(userName) {Email = email}; IdentityResultAssert.IsSuccess(await manager.Create(user)); var fetch = await manager.FindByEmail(email); Assert.Equal(user, fetch); @@ -384,11 +387,6 @@ namespace Microsoft.AspNet.Identity.InMemory.Test // TODO: No token provider implementations yet private class StaticTokenProvider : IUserTokenProvider { - private static string MakeToken(string purpose, IUser user) - { - return string.Join(":", user.Id, purpose, "ImmaToken"); - } - public Task Generate(string purpose, UserManager manager, InMemoryUser user) { @@ -410,6 +408,11 @@ namespace Microsoft.AspNet.Identity.InMemory.Test { return Task.FromResult(true); } + + private static string MakeToken(string purpose, IUser user) + { + return string.Join(":", user.Id, purpose, "ImmaToken"); + } } [Fact] @@ -445,7 +448,8 @@ namespace Microsoft.AspNet.Identity.InMemory.Test var token = await manager.GeneratePasswordResetToken(user.Id); Assert.NotNull(token); manager.PasswordValidator = new AlwaysBadValidator(); - IdentityResultAssert.IsFailure(await manager.ResetPassword(user.Id, token, newPassword), AlwaysBadValidator.ErrorMessage); + IdentityResultAssert.IsFailure(await manager.ResetPassword(user.Id, token, newPassword), + AlwaysBadValidator.ErrorMessage); Assert.NotNull(await manager.Find(user.UserName, password)); Assert.Equal(user, await manager.Find(user.UserName, password)); Assert.Equal(stamp, user.SecurityStamp); @@ -641,7 +645,8 @@ namespace Microsoft.AspNet.Identity.InMemory.Test IdentityResultAssert.IsSuccess(await mgr.Create(user)); Assert.False(await mgr.GetLockoutEnabled(user.Id)); Assert.False(user.LockoutEnabled); - IdentityResultAssert.IsFailure(await mgr.SetLockoutEndDate(user.Id, new DateTimeOffset()), "Lockout is not enabled for this user."); + IdentityResultAssert.IsFailure(await mgr.SetLockoutEndDate(user.Id, new DateTimeOffset()), + "Lockout is not enabled for this user."); Assert.False(await mgr.IsLockedOut(user.Id)); } @@ -650,7 +655,7 @@ namespace Microsoft.AspNet.Identity.InMemory.Test { var mgr = CreateManager(); mgr.UserLockoutEnabledByDefault = true; - var user = new InMemoryUser("LockoutUtcNowTest") { LockoutEnd = DateTimeOffset.UtcNow.AddSeconds(-1) }; + var user = new InMemoryUser("LockoutUtcNowTest") {LockoutEnd = DateTimeOffset.UtcNow.AddSeconds(-1)}; IdentityResultAssert.IsSuccess(await mgr.Create(user)); Assert.True(await mgr.GetLockoutEnabled(user.Id)); Assert.True(user.LockoutEnabled); @@ -675,7 +680,7 @@ namespace Microsoft.AspNet.Identity.InMemory.Test { var mgr = CreateManager(); mgr.UserLockoutEnabledByDefault = true; - var user = new InMemoryUser("LockoutUtcNowTest") { LockoutEnd = DateTimeOffset.UtcNow.AddMinutes(5) }; + var user = new InMemoryUser("LockoutUtcNowTest") {LockoutEnd = DateTimeOffset.UtcNow.AddMinutes(5)}; IdentityResultAssert.IsSuccess(await mgr.Create(user)); Assert.True(await mgr.GetLockoutEnabled(user.Id)); Assert.True(user.LockoutEnabled); @@ -709,11 +714,12 @@ namespace Microsoft.AspNet.Identity.InMemory.Test Assert.True(await manager.RoleExists(role.Name)); } - private class AlwaysBadValidator : IUserValidator, IRoleValidator, IPasswordValidator + private class AlwaysBadValidator : IUserValidator, IRoleValidator, + IPasswordValidator { public const string ErrorMessage = "I'm Bad."; - public Task Validate(UserManager manager, InMemoryUser user) + public Task Validate(string password) { return Task.FromResult(IdentityResult.Failed(ErrorMessage)); } @@ -723,7 +729,7 @@ namespace Microsoft.AspNet.Identity.InMemory.Test return Task.FromResult(IdentityResult.Failed(ErrorMessage)); } - public Task Validate(string password) + public Task Validate(UserManager manager, InMemoryUser user) { return Task.FromResult(IdentityResult.Failed(ErrorMessage)); } @@ -1086,17 +1092,13 @@ namespace Microsoft.AspNet.Identity.InMemory.Test private class EmailTokenProvider : IUserTokenProvider { - private static string MakeToken(string purpose) - { - return "email:" + purpose; - } - public Task Generate(string purpose, UserManager manager, InMemoryUser user) { return Task.FromResult(MakeToken(purpose)); } - public Task Validate(string purpose, string token, UserManager manager, InMemoryUser user) + public Task Validate(string purpose, string token, UserManager manager, + InMemoryUser user) { return Task.FromResult(token == MakeToken(purpose)); } @@ -1110,21 +1112,22 @@ namespace Microsoft.AspNet.Identity.InMemory.Test { return !string.IsNullOrEmpty(await manager.GetEmail(user.Id)); } + + private static string MakeToken(string purpose) + { + return "email:" + purpose; + } } private class SmsTokenProvider : IUserTokenProvider { - private static string MakeToken(string purpose) - { - return "sms:" + purpose; - } - public Task Generate(string purpose, UserManager manager, InMemoryUser user) { return Task.FromResult(MakeToken(purpose)); } - public Task Validate(string purpose, string token, UserManager manager, InMemoryUser user) + public Task Validate(string purpose, string token, UserManager manager, + InMemoryUser user) { return Task.FromResult(token == MakeToken(purpose)); } @@ -1138,6 +1141,11 @@ namespace Microsoft.AspNet.Identity.InMemory.Test { return !string.IsNullOrEmpty(await manager.GetPhoneNumber(user.Id)); } + + private static string MakeToken(string purpose) + { + return "sms:" + purpose; + } } [Fact] @@ -1148,7 +1156,7 @@ namespace Microsoft.AspNet.Identity.InMemory.Test manager.EmailService = messageService; const string factorId = "EmailCode"; manager.RegisterTwoFactorProvider(factorId, new EmailTokenProvider()); - var user = new InMemoryUser("EmailCodeTest") { Email = "foo@foo.com" }; + var user = new InMemoryUser("EmailCodeTest") {Email = "foo@foo.com"}; const string password = "password"; IdentityResultAssert.IsSuccess(await manager.Create(user, password)); var stamp = user.SecurityStamp; @@ -1169,7 +1177,10 @@ namespace Microsoft.AspNet.Identity.InMemory.Test var manager = CreateManager(); var user = new InMemoryUser("NotifyFail"); IdentityResultAssert.IsSuccess(await manager.Create(user)); - await ExceptionAssert.ThrowsAsync(async () => await manager.NotifyTwoFactorToken(user.Id, "Bogus", "token"), "No IUserTwoFactorProvider for 'Bogus' is registered."); + await + ExceptionAssert.ThrowsAsync( + async () => await manager.NotifyTwoFactorToken(user.Id, "Bogus", "token"), + "No IUserTwoFactorProvider for 'Bogus' is registered."); } @@ -1235,7 +1246,7 @@ namespace Microsoft.AspNet.Identity.InMemory.Test var manager = CreateManager(); var messageService = new TestMessageService(); manager.SmsService = messageService; - var user = new InMemoryUser("SmsTest") { PhoneNumber = "4251234567" }; + var user = new InMemoryUser("SmsTest") {PhoneNumber = "4251234567"}; IdentityResultAssert.IsSuccess(await manager.Create(user)); await manager.SendSms(user.Id, "Hi"); Assert.NotNull(messageService.Message); @@ -1248,7 +1259,7 @@ namespace Microsoft.AspNet.Identity.InMemory.Test var manager = CreateManager(); var messageService = new TestMessageService(); manager.EmailService = messageService; - var user = new InMemoryUser("EmailTest") { Email = "foo@foo.com" }; + var user = new InMemoryUser("EmailTest") {Email = "foo@foo.com"}; IdentityResultAssert.IsSuccess(await manager.Create(user)); await manager.SendEmail(user.Id, "Hi", "Body"); Assert.NotNull(messageService.Message); @@ -1264,7 +1275,7 @@ namespace Microsoft.AspNet.Identity.InMemory.Test manager.SmsService = messageService; const string factorId = "PhoneCode"; manager.RegisterTwoFactorProvider(factorId, new SmsTokenProvider()); - var user = new InMemoryUser("PhoneCodeTest") { PhoneNumber = "4251234567" }; + var user = new InMemoryUser("PhoneCodeTest") {PhoneNumber = "4251234567"}; IdentityResultAssert.IsSuccess(await manager.Create(user)); var stamp = user.SecurityStamp; Assert.NotNull(stamp); @@ -1308,7 +1319,9 @@ namespace Microsoft.AspNet.Identity.InMemory.Test var user = new InMemoryUser("PhoneCodeTest"); IdentityResultAssert.IsSuccess(await manager.Create(user)); const string error = "No IUserTwoFactorProvider for 'bogus' is registered."; - await ExceptionAssert.ThrowsAsync(() => manager.GenerateTwoFactorToken(user.Id, "bogus"), error); + await + ExceptionAssert.ThrowsAsync( + () => manager.GenerateTwoFactorToken(user.Id, "bogus"), error); await ExceptionAssert.ThrowsAsync( () => manager.VerifyTwoFactorToken(user.Id, "bogus", "bogus"), error); } diff --git a/test/Microsoft.AspNet.Identity.Test/ClaimsIdentityFactoryTest.cs b/test/Microsoft.AspNet.Identity.Test/ClaimsIdentityFactoryTest.cs index 42f4fc2464..e84fae5d76 100644 --- a/test/Microsoft.AspNet.Identity.Test/ClaimsIdentityFactoryTest.cs +++ b/test/Microsoft.AspNet.Identity.Test/ClaimsIdentityFactoryTest.cs @@ -1,9 +1,5 @@ using System; -using System.Linq; -using System.Security.Claims; using System.Threading.Tasks; -using Microsoft.AspNet.Identity; -using Microsoft.AspNet.Testing; using Xunit; namespace Microsoft.AspNet.Identity.Test @@ -15,12 +11,12 @@ namespace Microsoft.AspNet.Identity.Test { var factory = new ClaimsIdentityFactory(); var manager = new UserManager(new NoopUserStore()); - await Assert.ThrowsAsync("manager", + await Assert.ThrowsAsync("manager", async () => await factory.Create(null, null, "whatever")); await Assert.ThrowsAsync("user", async () => await factory.Create(manager, null, "whatever")); await Assert.ThrowsAsync("value", - async () => await factory.Create(manager, new TestUser(), null)); + async () => await factory.Create(manager, new TestUser(), null)); } [Fact] diff --git a/test/Microsoft.AspNet.Identity.Test/IdentityResultTest.cs b/test/Microsoft.AspNet.Identity.Test/IdentityResultTest.cs index 94618affc0..c417fa7a4d 100644 --- a/test/Microsoft.AspNet.Identity.Test/IdentityResultTest.cs +++ b/test/Microsoft.AspNet.Identity.Test/IdentityResultTest.cs @@ -1,7 +1,4 @@ -using System.Collections.Generic; -using System; using System.Linq; -using System.Threading.Tasks; using Xunit; namespace Microsoft.AspNet.Identity.Test @@ -25,6 +22,5 @@ namespace Microsoft.AspNet.Identity.Test Assert.Equal(1, result.Errors.Count()); Assert.Equal("An unknown failure has occured.", result.Errors.First()); } - } } \ No newline at end of file diff --git a/test/Microsoft.AspNet.Identity.Test/NoopRoleStore.cs b/test/Microsoft.AspNet.Identity.Test/NoopRoleStore.cs index 8ee0303c78..8ae6538e06 100644 --- a/test/Microsoft.AspNet.Identity.Test/NoopRoleStore.cs +++ b/test/Microsoft.AspNet.Identity.Test/NoopRoleStore.cs @@ -1,41 +1,36 @@ -using System.Collections.Generic; -using System.Security.Claims; -using System; -using System.Linq; using System.Threading.Tasks; namespace Microsoft.AspNet.Identity.Test { - public class NoopRoleStore : IRoleStore + public class NoopRoleStore : IRoleStore + { + public Task Create(TestRole user) { - public Task Create(TestRole user) - { - return Task.FromResult(0); - } - - public Task Update(TestRole user) - { - return Task.FromResult(0); - } - - public Task FindById(string roleId) - { - return Task.FromResult(null); - } - - public Task FindByName(string userName) - { - return Task.FromResult(null); - } - - public void Dispose() - { - } - - public Task Delete(TestRole user) - { - return Task.FromResult(0); - } + return Task.FromResult(0); } -} + public Task Update(TestRole user) + { + return Task.FromResult(0); + } + + public Task FindById(string roleId) + { + return Task.FromResult(null); + } + + public Task FindByName(string userName) + { + return Task.FromResult(null); + } + + public void Dispose() + { + } + + public Task Delete(TestRole user) + { + return Task.FromResult(0); + } + } +} \ No newline at end of file diff --git a/test/Microsoft.AspNet.Identity.Test/NoopUserStore.cs b/test/Microsoft.AspNet.Identity.Test/NoopUserStore.cs index e8503276e5..134f2c64b1 100644 --- a/test/Microsoft.AspNet.Identity.Test/NoopUserStore.cs +++ b/test/Microsoft.AspNet.Identity.Test/NoopUserStore.cs @@ -2,36 +2,35 @@ using System.Threading.Tasks; namespace Microsoft.AspNet.Identity.Test { - public class NoopUserStore : IUserStore + public class NoopUserStore : IUserStore + { + public Task Create(TestUser user) { - public Task Create(TestUser user) - { - return Task.FromResult(0); - } - - public Task Update(TestUser user) - { - return Task.FromResult(0); - } - - public Task FindById(string userId) - { - return Task.FromResult(null); - } - - public Task FindByName(string userName) - { - return Task.FromResult(null); - } - - public void Dispose() - { - } - - public Task Delete(TestUser user) - { - return Task.FromResult(0); - } + return Task.FromResult(0); } -} + public Task Update(TestUser user) + { + return Task.FromResult(0); + } + + public Task FindById(string userId) + { + return Task.FromResult(null); + } + + public Task FindByName(string userName) + { + return Task.FromResult(null); + } + + public void Dispose() + { + } + + public Task Delete(TestUser user) + { + return Task.FromResult(0); + } + } +} \ No newline at end of file diff --git a/test/Microsoft.AspNet.Identity.Test/PasswordValidatorTest.cs b/test/Microsoft.AspNet.Identity.Test/PasswordValidatorTest.cs index a09242f56e..377f2bd3f3 100644 --- a/test/Microsoft.AspNet.Identity.Test/PasswordValidatorTest.cs +++ b/test/Microsoft.AspNet.Identity.Test/PasswordValidatorTest.cs @@ -7,6 +7,17 @@ namespace Microsoft.AspNet.Identity.Test { public class PasswordValidatorTest { + [Flags] + public enum Errors + { + None = 0, + Length = 2, + Alpha = 4, + Upper = 8, + Lower = 16, + Digit = 32, + } + [Fact] public async Task ValidateThrowsWithNullTest() { @@ -21,7 +32,7 @@ namespace Microsoft.AspNet.Identity.Test [Theory] [InlineData("")] - [InlineData("abc")] + [InlineData("abc")] [InlineData("abcde")] public async Task FailsIfTooShortTests(string input) { @@ -33,41 +44,32 @@ namespace Microsoft.AspNet.Identity.Test [Theory] [InlineData("abcdef")] [InlineData("aaaaaaaaaaa")] - public async Task SuccessIfLongEnoughTests(string input) { + public async Task SuccessIfLongEnoughTests(string input) + { var valid = new PasswordValidator {RequiredLength = 6}; IdentityResultAssert.IsSuccess(await valid.Validate(input)); } [Theory] - [InlineData("a")] + [InlineData("a")] [InlineData("aaaaaaaaaaa")] public async Task FailsWithoutRequiredNonAlphanumericTests(string input) { - var valid = new PasswordValidator { RequireNonLetterOrDigit = true }; - IdentityResultAssert.IsFailure(await valid.Validate(input), "Passwords must have at least one non letter or digit character."); + var valid = new PasswordValidator {RequireNonLetterOrDigit = true}; + IdentityResultAssert.IsFailure(await valid.Validate(input), + "Passwords must have at least one non letter or digit character."); } - [Theory] + [Theory] [InlineData("@")] [InlineData("abcd@e!ld!kajfd")] [InlineData("!!!!!!")] public async Task SucceedsWithRequiredNonAlphanumericTests(string input) { - var valid = new PasswordValidator { RequireNonLetterOrDigit = true }; + var valid = new PasswordValidator {RequireNonLetterOrDigit = true}; IdentityResultAssert.IsSuccess(await valid.Validate(input)); } - [Flags] - public enum Errors - { - None = 0, - Length = 2, - Alpha = 4, - Upper = 8, - Lower = 16, - Digit = 32, - } - [Theory] [InlineData("abcde", Errors.Length | Errors.Alpha | Errors.Upper | Errors.Digit)] [InlineData("a@B@cd", Errors.Digit)] diff --git a/test/Microsoft.AspNet.Identity.Test/RoleManagerTest.cs b/test/Microsoft.AspNet.Identity.Test/RoleManagerTest.cs index 8149f51552..9fc3507758 100644 --- a/test/Microsoft.AspNet.Identity.Test/RoleManagerTest.cs +++ b/test/Microsoft.AspNet.Identity.Test/RoleManagerTest.cs @@ -1,6 +1,3 @@ -using System.Collections.Generic; -using System.Security.Claims; -using Moq; using System; using System.Linq; using System.Threading.Tasks; @@ -60,7 +57,6 @@ namespace Microsoft.AspNet.Identity.Test private class NotImplementedStore : IRoleStore { - public Task Create(TestRole role) { throw new NotImplementedException(); @@ -91,6 +87,5 @@ namespace Microsoft.AspNet.Identity.Test throw new NotImplementedException(); } } - } } \ No newline at end of file diff --git a/test/Microsoft.AspNet.Identity.Test/RoleValidatorTest.cs b/test/Microsoft.AspNet.Identity.Test/RoleValidatorTest.cs index 36478ecf4c..867d68747d 100644 --- a/test/Microsoft.AspNet.Identity.Test/RoleValidatorTest.cs +++ b/test/Microsoft.AspNet.Identity.Test/RoleValidatorTest.cs @@ -27,7 +27,7 @@ namespace Microsoft.AspNet.Identity.Test // Setup var manager = new RoleManager(new NoopRoleStore()); var validator = new RoleValidator(); - var user = new TestRole { Name = input }; + var user = new TestRole {Name = input}; // Act var result = await validator.Validate(manager, user); diff --git a/test/Microsoft.AspNet.Identity.Test/TestRole.cs b/test/Microsoft.AspNet.Identity.Test/TestRole.cs index 3cd26972e3..e171025596 100644 --- a/test/Microsoft.AspNet.Identity.Test/TestRole.cs +++ b/test/Microsoft.AspNet.Identity.Test/TestRole.cs @@ -1,4 +1,3 @@ - namespace Microsoft.AspNet.Identity.Test { public class TestRole : IRole @@ -6,4 +5,4 @@ namespace Microsoft.AspNet.Identity.Test public string Id { get; private set; } public string Name { get; set; } } -} +} \ No newline at end of file diff --git a/test/Microsoft.AspNet.Identity.Test/TestServices.cs b/test/Microsoft.AspNet.Identity.Test/TestServices.cs index 115a1ea98b..19caa4ee0f 100644 --- a/test/Microsoft.AspNet.Identity.Test/TestServices.cs +++ b/test/Microsoft.AspNet.Identity.Test/TestServices.cs @@ -8,15 +8,15 @@ namespace Microsoft.AspNet.Identity.Test public static class TestServices { public static IServiceProvider DefaultServiceProvider() - where TUser : class,IUser + where TUser : class, IUser where TKey : IEquatable { - var serviceCollection = new ServiceCollection { DefaultServices() }; + var serviceCollection = new ServiceCollection {DefaultServices()}; return serviceCollection.BuildServiceProvider(); } public static IEnumerable DefaultServices() - where TUser : class,IUser + where TUser : class, IUser where TKey : IEquatable { return new IServiceDescriptor[] @@ -25,6 +25,7 @@ namespace Microsoft.AspNet.Identity.Test new ServiceDescriptor, UserValidator>(), new ServiceDescriptor(), new ServiceDescriptor, ClaimsIdentityFactory>(), + new ServiceDescriptor, NoopUserStore>() }; } @@ -39,12 +40,12 @@ namespace Microsoft.AspNet.Identity.Test public Type ServiceType { - get { return typeof(TService); } + get { return typeof (TService); } } public Type ImplementationType { - get { return typeof(TImplementation); } + get { return typeof (TImplementation); } } public object ImplementationInstance diff --git a/test/Microsoft.AspNet.Identity.Test/TestUser.cs b/test/Microsoft.AspNet.Identity.Test/TestUser.cs index cf8ba9bf9c..b8455e4cdf 100644 --- a/test/Microsoft.AspNet.Identity.Test/TestUser.cs +++ b/test/Microsoft.AspNet.Identity.Test/TestUser.cs @@ -1,4 +1,3 @@ - namespace Microsoft.AspNet.Identity.Test { public class TestUser : TestUser @@ -10,5 +9,4 @@ namespace Microsoft.AspNet.Identity.Test public TKey Id { get; private set; } public string UserName { get; set; } } - -} +} \ No newline at end of file diff --git a/test/Microsoft.AspNet.Identity.Test/UserManagerTest.cs b/test/Microsoft.AspNet.Identity.Test/UserManagerTest.cs index c26d977060..461ae2b5f0 100644 --- a/test/Microsoft.AspNet.Identity.Test/UserManagerTest.cs +++ b/test/Microsoft.AspNet.Identity.Test/UserManagerTest.cs @@ -1,27 +1,33 @@ -using System.Collections.Generic; -using System.Runtime; -using System.Security.Claims; -using Microsoft.AspNet.Testing; -using Moq; using System; +using System.Collections.Generic; using System.Linq; +using System.Security.Claims; using System.Threading.Tasks; +using Microsoft.AspNet.Testing; using Xunit; namespace Microsoft.AspNet.Identity.Test { public class UserManagerTest { + private class TestManager : UserManager + { + public IUserStore StorePublic { get { return base.Store; } } + + public TestManager(IServiceProvider provider) : base(provider) { } + } + [Fact] public void ServiceProviderWireupTest() { - var manager = new UserManager(TestServices.DefaultServiceProvider()); + var manager = new TestManager(TestServices.DefaultServiceProvider()); Assert.NotNull(manager.PasswordHasher); Assert.NotNull(manager.PasswordValidator); Assert.NotNull(manager.UserValidator); + Assert.NotNull(manager.StorePublic); } - //TODO: Mock fails in K (this works fine in net45) + //TODO: Mock fails in K (this works fine in net45) //[Fact] //public async Task CreateTest() //{ @@ -113,8 +119,12 @@ namespace Microsoft.AspNet.Identity.Test Assert.False(manager.SupportsUserSecurityStamp); await Assert.ThrowsAsync(() => manager.UpdateSecurityStamp("bogus")); await Assert.ThrowsAsync(() => manager.GetSecurityStamp("bogus")); - await Assert.ThrowsAsync(() => manager.VerifyChangePhoneNumberToken("bogus", "1", "111-111-1111")); - await Assert.ThrowsAsync(() => manager.GenerateChangePhoneNumberToken("bogus", "111-111-1111")); + await + Assert.ThrowsAsync( + () => manager.VerifyChangePhoneNumberToken("bogus", "1", "111-111-1111")); + await + Assert.ThrowsAsync( + () => manager.GenerateChangePhoneNumberToken("bogus", "111-111-1111")); } [Fact] @@ -144,7 +154,8 @@ namespace Microsoft.AspNet.Identity.Test var manager = new UserManager(new NoopUserStore()); Assert.False(manager.SupportsUserTwoFactor); await Assert.ThrowsAsync(async () => await manager.GetTwoFactorEnabled("bogus")); - await Assert.ThrowsAsync(async () => await manager.SetTwoFactorEnabled("bogus", true)); + await + Assert.ThrowsAsync(async () => await manager.SetTwoFactorEnabled("bogus", true)); } [Fact] @@ -179,16 +190,6 @@ namespace Microsoft.AspNet.Identity.Test manager.Dispose(); } - private class BadPasswordValidtor : IPasswordValidator - { - public const string ErrorMessage = "I'm Bad."; - - public Task Validate(string password) - { - return Task.FromResult(IdentityResult.Failed(ErrorMessage)); - } - } - [Fact] public async Task PasswordValidatorBlocksCreate() { @@ -204,23 +205,32 @@ namespace Microsoft.AspNet.Identity.Test [Fact] public async Task ManagerPublicNullChecks() { - Assert.Throws("store", () => new UserManager((IUserStore)null)); + Assert.Throws("store", + () => new UserManager((IUserStore) null)); + Assert.Throws("serviceProvider", + () => new UserManager((IServiceProvider)null)); var manager = new UserManager(new NotImplementedStore()); Assert.Throws(() => manager.ClaimsIdentityFactory = null); Assert.Throws(() => manager.PasswordHasher = null); - await Assert.ThrowsAsync("user", async () => await manager.CreateIdentity(null, "whatever")); + await + Assert.ThrowsAsync("user", + async () => await manager.CreateIdentity(null, "whatever")); await Assert.ThrowsAsync("user", async () => await manager.Create(null)); await Assert.ThrowsAsync("user", async () => await manager.Create(null, null)); - await Assert.ThrowsAsync("password", async () => await manager.Create(new TestUser(), null)); + await + Assert.ThrowsAsync("password", + async () => await manager.Create(new TestUser(), null)); await Assert.ThrowsAsync("user", async () => await manager.Update(null)); await Assert.ThrowsAsync("user", async () => await manager.Delete(null)); await Assert.ThrowsAsync("claim", async () => await manager.AddClaim("bogus", null)); await Assert.ThrowsAsync("userName", async () => await manager.FindByName(null)); await Assert.ThrowsAsync("userName", async () => await manager.Find(null, null)); await Assert.ThrowsAsync("login", async () => await manager.AddLogin("bogus", null)); - await Assert.ThrowsAsync("login", async () => await manager.RemoveLogin("bogus", null)); + await + Assert.ThrowsAsync("login", async () => await manager.RemoveLogin("bogus", null)); await Assert.ThrowsAsync("email", async () => await manager.FindByEmail(null)); - Assert.Throws("twoFactorProvider", () => manager.RegisterTwoFactorProvider(null, null)); + Assert.Throws("twoFactorProvider", + () => manager.RegisterTwoFactorProvider(null, null)); Assert.Throws("provider", () => manager.RegisterTwoFactorProvider("bogus", null)); } @@ -358,27 +368,13 @@ namespace Microsoft.AspNet.Identity.Test await Assert.ThrowsAsync(() => manager.ConfirmEmail(null, null)); } - private class NoOpTokenProvider : IUserTokenProvider + private class BadPasswordValidtor : IPasswordValidator { + public const string ErrorMessage = "I'm Bad."; - public Task Generate(string purpose, UserManager manager, TestUser user) + public Task Validate(string password) { - return Task.FromResult("Test"); - } - - public Task Validate(string purpose, string token, UserManager manager, TestUser user) - { - return Task.FromResult(true); - } - - public Task Notify(string token, UserManager manager, TestUser user) - { - return Task.FromResult(0); - } - - public Task IsValidProviderForUser(UserManager manager, TestUser user) - { - return Task.FromResult(true); + return Task.FromResult(IdentityResult.Failed(ErrorMessage)); } } @@ -393,6 +389,101 @@ namespace Microsoft.AspNet.Identity.Test IUserRoleStore, IUserSecurityStampStore { + public Task> GetClaims(TestUser user) + { + return Task.FromResult>(new List()); + } + + public Task AddClaim(TestUser user, Claim claim) + { + return Task.FromResult(0); + } + + public Task RemoveClaim(TestUser user, Claim claim) + { + return Task.FromResult(0); + } + + public Task SetEmail(TestUser user, string email) + { + return Task.FromResult(0); + } + + public Task GetEmail(TestUser user) + { + return Task.FromResult(""); + } + + public Task GetEmailConfirmed(TestUser user) + { + return Task.FromResult(false); + } + + public Task SetEmailConfirmed(TestUser user, bool confirmed) + { + return Task.FromResult(0); + } + + public Task FindByEmail(string email) + { + return Task.FromResult(null); + } + + public Task GetLockoutEndDate(TestUser user) + { + return Task.FromResult(DateTimeOffset.MinValue); + } + + public Task SetLockoutEndDate(TestUser user, DateTimeOffset lockoutEnd) + { + return Task.FromResult(0); + } + + public Task IncrementAccessFailedCount(TestUser user) + { + return Task.FromResult(0); + } + + public Task ResetAccessFailedCount(TestUser user) + { + return Task.FromResult(0); + } + + public Task GetAccessFailedCount(TestUser user) + { + return Task.FromResult(0); + } + + public Task GetLockoutEnabled(TestUser user) + { + return Task.FromResult(false); + } + + public Task SetLockoutEnabled(TestUser user, bool enabled) + { + return Task.FromResult(0); + } + + public Task AddLogin(TestUser user, UserLoginInfo login) + { + return Task.FromResult(0); + } + + public Task RemoveLogin(TestUser user, UserLoginInfo login) + { + return Task.FromResult(0); + } + + public Task> GetLogins(TestUser user) + { + return Task.FromResult>(new List()); + } + + public Task Find(UserLoginInfo login) + { + return Task.FromResult(null); + } + public void Dispose() { } @@ -437,66 +528,6 @@ namespace Microsoft.AspNet.Identity.Test return Task.FromResult(false); } - public Task> GetClaims(TestUser user) - { - return Task.FromResult>(new List()); - } - - public Task AddClaim(TestUser user, Claim claim) - { - return Task.FromResult(0); - } - - public Task RemoveClaim(TestUser user, Claim claim) - { - return Task.FromResult(0); - } - - public Task AddLogin(TestUser user, UserLoginInfo login) - { - return Task.FromResult(0); - } - - public Task RemoveLogin(TestUser user, UserLoginInfo login) - { - return Task.FromResult(0); - } - - public Task> GetLogins(TestUser user) - { - return Task.FromResult>(new List()); - } - - public Task Find(UserLoginInfo login) - { - return Task.FromResult(null); - } - - public Task SetEmail(TestUser user, string email) - { - return Task.FromResult(0); - } - - public Task GetEmail(TestUser user) - { - return Task.FromResult(""); - } - - public Task GetEmailConfirmed(TestUser user) - { - return Task.FromResult(false); - } - - public Task SetEmailConfirmed(TestUser user, bool confirmed) - { - return Task.FromResult(0); - } - - public Task FindByEmail(string email) - { - return Task.FromResult(null); - } - public Task SetPhoneNumber(TestUser user, string phoneNumber) { return Task.FromResult(0); @@ -517,51 +548,6 @@ namespace Microsoft.AspNet.Identity.Test return Task.FromResult(0); } - public Task GetLockoutEndDate(TestUser user) - { - return Task.FromResult(DateTimeOffset.MinValue); - } - - public Task SetLockoutEndDate(TestUser user, DateTimeOffset lockoutEnd) - { - return Task.FromResult(0); - } - - public Task IncrementAccessFailedCount(TestUser user) - { - return Task.FromResult(0); - } - - public Task ResetAccessFailedCount(TestUser user) - { - return Task.FromResult(0); - } - - public Task GetAccessFailedCount(TestUser user) - { - return Task.FromResult(0); - } - - public Task GetLockoutEnabled(TestUser user) - { - return Task.FromResult(false); - } - - public Task SetLockoutEnabled(TestUser user, bool enabled) - { - return Task.FromResult(0); - } - - public Task SetTwoFactorEnabled(TestUser user, bool enabled) - { - return Task.FromResult(0); - } - - public Task GetTwoFactorEnabled(TestUser user) - { - return Task.FromResult(false); - } - public Task AddToRole(TestUser user, string roleName) { return Task.FromResult(0); @@ -591,10 +577,44 @@ namespace Microsoft.AspNet.Identity.Test { return Task.FromResult(""); } + + public Task SetTwoFactorEnabled(TestUser user, bool enabled) + { + return Task.FromResult(0); + } + + public Task GetTwoFactorEnabled(TestUser user) + { + return Task.FromResult(false); + } } - private class NotImplementedStore : - IUserPasswordStore, + private class NoOpTokenProvider : IUserTokenProvider + { + public Task Generate(string purpose, UserManager manager, TestUser user) + { + return Task.FromResult("Test"); + } + + public Task Validate(string purpose, string token, UserManager manager, + TestUser user) + { + return Task.FromResult(true); + } + + public Task Notify(string token, UserManager manager, TestUser user) + { + return Task.FromResult(0); + } + + public Task IsValidProviderForUser(UserManager manager, TestUser user) + { + return Task.FromResult(true); + } + } + + private class NotImplementedStore : + IUserPasswordStore, IUserClaimStore, IUserLoginStore, IUserEmailStore, @@ -602,6 +622,101 @@ namespace Microsoft.AspNet.Identity.Test IUserLockoutStore, IUserTwoFactorStore { + public Task> GetClaims(TestUser user) + { + throw new NotImplementedException(); + } + + public Task AddClaim(TestUser user, Claim claim) + { + throw new NotImplementedException(); + } + + public Task RemoveClaim(TestUser user, Claim claim) + { + throw new NotImplementedException(); + } + + public Task SetEmail(TestUser user, string email) + { + throw new NotImplementedException(); + } + + public Task GetEmail(TestUser user) + { + throw new NotImplementedException(); + } + + public Task GetEmailConfirmed(TestUser user) + { + throw new NotImplementedException(); + } + + public Task SetEmailConfirmed(TestUser user, bool confirmed) + { + throw new NotImplementedException(); + } + + public Task FindByEmail(string email) + { + throw new NotImplementedException(); + } + + public Task GetLockoutEndDate(TestUser user) + { + throw new NotImplementedException(); + } + + public Task SetLockoutEndDate(TestUser user, DateTimeOffset lockoutEnd) + { + throw new NotImplementedException(); + } + + public Task IncrementAccessFailedCount(TestUser user) + { + throw new NotImplementedException(); + } + + public Task ResetAccessFailedCount(TestUser user) + { + throw new NotImplementedException(); + } + + public Task GetAccessFailedCount(TestUser user) + { + throw new NotImplementedException(); + } + + public Task GetLockoutEnabled(TestUser user) + { + throw new NotImplementedException(); + } + + public Task SetLockoutEnabled(TestUser user, bool enabled) + { + throw new NotImplementedException(); + } + + public Task AddLogin(TestUser user, UserLoginInfo login) + { + throw new NotImplementedException(); + } + + public Task RemoveLogin(TestUser user, UserLoginInfo login) + { + throw new NotImplementedException(); + } + + public Task> GetLogins(TestUser user) + { + throw new NotImplementedException(); + } + + public Task Find(UserLoginInfo login) + { + throw new NotImplementedException(); + } + public void Dispose() { throw new NotImplementedException(); @@ -647,66 +762,6 @@ namespace Microsoft.AspNet.Identity.Test throw new NotImplementedException(); } - public Task> GetClaims(TestUser user) - { - throw new NotImplementedException(); - } - - public Task AddClaim(TestUser user, Claim claim) - { - throw new NotImplementedException(); - } - - public Task RemoveClaim(TestUser user, Claim claim) - { - throw new NotImplementedException(); - } - - public Task AddLogin(TestUser user, UserLoginInfo login) - { - throw new NotImplementedException(); - } - - public Task RemoveLogin(TestUser user, UserLoginInfo login) - { - throw new NotImplementedException(); - } - - public Task> GetLogins(TestUser user) - { - throw new NotImplementedException(); - } - - public Task Find(UserLoginInfo login) - { - throw new NotImplementedException(); - } - - public Task SetEmail(TestUser user, string email) - { - throw new NotImplementedException(); - } - - public Task GetEmail(TestUser user) - { - throw new NotImplementedException(); - } - - public Task GetEmailConfirmed(TestUser user) - { - throw new NotImplementedException(); - } - - public Task SetEmailConfirmed(TestUser user, bool confirmed) - { - throw new NotImplementedException(); - } - - public Task FindByEmail(string email) - { - throw new NotImplementedException(); - } - public Task SetPhoneNumber(TestUser user, string phoneNumber) { throw new NotImplementedException(); @@ -727,41 +782,6 @@ namespace Microsoft.AspNet.Identity.Test throw new NotImplementedException(); } - public Task GetLockoutEndDate(TestUser user) - { - throw new NotImplementedException(); - } - - public Task SetLockoutEndDate(TestUser user, DateTimeOffset lockoutEnd) - { - throw new NotImplementedException(); - } - - public Task IncrementAccessFailedCount(TestUser user) - { - throw new NotImplementedException(); - } - - public Task ResetAccessFailedCount(TestUser user) - { - throw new NotImplementedException(); - } - - public Task GetAccessFailedCount(TestUser user) - { - throw new NotImplementedException(); - } - - public Task GetLockoutEnabled(TestUser user) - { - throw new NotImplementedException(); - } - - public Task SetLockoutEnabled(TestUser user, bool enabled) - { - throw new NotImplementedException(); - } - public Task SetTwoFactorEnabled(TestUser user, bool enabled) { throw new NotImplementedException(); diff --git a/test/Microsoft.AspNet.Identity.Test/UserValidatorTest.cs b/test/Microsoft.AspNet.Identity.Test/UserValidatorTest.cs index c1e46573ab..7b16aad2d0 100644 --- a/test/Microsoft.AspNet.Identity.Test/UserValidatorTest.cs +++ b/test/Microsoft.AspNet.Identity.Test/UserValidatorTest.cs @@ -27,7 +27,7 @@ namespace Microsoft.AspNet.Identity.Test // Setup var manager = new UserManager(new NoopUserStore()); var validator = new UserValidator(); - var user = new TestUser() { UserName = input }; + var user = new TestUser {UserName = input}; // Act var result = await validator.Validate(manager, user); @@ -47,7 +47,7 @@ namespace Microsoft.AspNet.Identity.Test // Setup var manager = new UserManager(new NoopUserStore()); var validator = new UserValidator(); - var user = new TestUser() {UserName=userName}; + var user = new TestUser {UserName = userName}; // Act var result = await validator.Validate(manager, user); @@ -57,7 +57,7 @@ namespace Microsoft.AspNet.Identity.Test { IdentityResultAssert.IsSuccess(result); } - else + else { IdentityResultAssert.IsFailure(result); } @@ -73,8 +73,8 @@ namespace Microsoft.AspNet.Identity.Test { // Setup var manager = new UserManager(new NoopUserStore()); - var validator = new UserValidator() { AllowOnlyAlphanumericUserNames = false }; - var user = new TestUser() { UserName = userName }; + var validator = new UserValidator {AllowOnlyAlphanumericUserNames = false}; + var user = new TestUser {UserName = userName}; // Act var result = await validator.Validate(manager, user);