diff --git a/samples/IdentitySample.Mvc/Controllers/AccountController.cs b/samples/IdentitySample.Mvc/Controllers/AccountController.cs
index 2d2bcd4f85..85006948b4 100644
--- a/samples/IdentitySample.Mvc/Controllers/AccountController.cs
+++ b/samples/IdentitySample.Mvc/Controllers/AccountController.cs
@@ -2,13 +2,15 @@
using System.Security.Claims;
using System.Security.Principal;
using System.Threading.Tasks;
+using IdentitySample.Models;
+using IdentitySamples;
using Microsoft.AspNet.Authentication;
+using Microsoft.AspNet.Authorization;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Mvc;
using Microsoft.AspNet.Mvc.Rendering;
-using Microsoft.AspNet.Authorization;
-namespace IdentitySample.Models
+namespace IdentitySample.Controllers
{
[Authorize]
public class AccountController : Controller
@@ -92,13 +94,8 @@ namespace IdentitySample.Models
{
var code = await UserManager.GenerateEmailConfirmationTokenAsync(user);
var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Context.Request.Scheme);
- var email = new IdentityMessage
- {
- Destination = model.Email,
- Subject = "Confirm your account",
- Body = "Please confirm your account by clicking this link: link"
- };
- await UserManager.SendMessageAsync("Email", email);
+ await MessageServices.SendEmailAsync(model.Email, "Confirm your account",
+ "Please confirm your account by clicking this link: link");
ViewBag.Link = callbackUrl;
return View("DisplayEmail");
}
@@ -255,13 +252,8 @@ namespace IdentitySample.Models
var code = await UserManager.GeneratePasswordResetTokenAsync(user);
var callbackUrl = Url.Action("ResetPassword", "Account", new { userId = user.Id, code = code }, protocol: Context.Request.Scheme);
- var email = new IdentityMessage
- {
- Destination = model.Email,
- Subject = "Reset Password",
- Body = "Please reset your password by clicking here: link"
- };
- await UserManager.SendMessageAsync("Email", email);
+ await MessageServices.SendEmailAsync(model.Email, "Reset Password",
+ "Please reset your password by clicking here: link");
ViewBag.Link = callbackUrl;
return View("ForgotPasswordConfirmation");
}
@@ -351,11 +343,29 @@ namespace IdentitySample.Models
return View();
}
- // Generate the token and send it
- if (!await SignInManager.SendTwoFactorCodeAsync(model.SelectedProvider))
+ var user = await SignInManager.GetTwoFactorAuthenticationUserAsync();
+ if (user == null)
{
return View("Error");
}
+
+ // Generate the token and send it
+ var code = await UserManager.GenerateTwoFactorTokenAsync(user, model.SelectedProvider);
+ if (string.IsNullOrWhiteSpace(code))
+ {
+ return View("Error");
+ }
+
+ var message = "Your security code is: " + code;
+ if (model.SelectedProvider == "Email")
+ {
+ await MessageServices.SendEmailAsync(await UserManager.GetEmailAsync(user), "Security Code", message);
+ }
+ else if (model.SelectedProvider == "Phone")
+ {
+ await MessageServices.SendSmsAsync(await UserManager.GetPhoneNumberAsync(user), message);
+ }
+
return RedirectToAction("VerifyCode", new { Provider = model.SelectedProvider, ReturnUrl = model.ReturnUrl, RememberMe = model.RememberMe });
}
diff --git a/samples/IdentitySample.Mvc/Controllers/HomeController.cs b/samples/IdentitySample.Mvc/Controllers/HomeController.cs
index 3a831a25ed..b6dae59f8d 100644
--- a/samples/IdentitySample.Mvc/Controllers/HomeController.cs
+++ b/samples/IdentitySample.Mvc/Controllers/HomeController.cs
@@ -1,6 +1,6 @@
using Microsoft.AspNet.Mvc;
-namespace IdentitySample.Models
+namespace IdentitySample.Controllers
{
public class HomeController : Controller
{
diff --git a/samples/IdentitySample.Mvc/Controllers/ManageController.cs b/samples/IdentitySample.Mvc/Controllers/ManageController.cs
index 5c7736baef..13223ceed9 100644
--- a/samples/IdentitySample.Mvc/Controllers/ManageController.cs
+++ b/samples/IdentitySample.Mvc/Controllers/ManageController.cs
@@ -2,11 +2,12 @@
using System.Security.Principal;
using System.Threading.Tasks;
using IdentitySample.Models;
+using IdentitySamples;
using Microsoft.AspNet.Authorization;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Mvc;
-namespace IdentitySample
+namespace IdentitySample.Controllers
{
[Authorize]
public class ManageController : Controller
@@ -98,12 +99,7 @@ namespace IdentitySample
// Generate the token and send it
var user = await GetCurrentUserAsync();
var code = await UserManager.GenerateChangePhoneNumberTokenAsync(user, model.Number);
- var message = new IdentityMessage
- {
- Destination = model.Number,
- Body = "Your security code is: " + code
- };
- await UserManager.SendMessageAsync("SMS", message);
+ await MessageServices.SendSmsAsync(model.Number, "Your security code is: " + code);
return RedirectToAction("VerifyPhoneNumber", new { PhoneNumber = model.Number });
}
diff --git a/samples/IdentitySample.Mvc/MessageServices.cs b/samples/IdentitySample.Mvc/MessageServices.cs
new file mode 100644
index 0000000000..6860d99af9
--- /dev/null
+++ b/samples/IdentitySample.Mvc/MessageServices.cs
@@ -0,0 +1,20 @@
+using System.Threading.Tasks;
+
+namespace IdentitySamples
+{
+ public static class MessageServices
+ {
+ public static Task SendEmailAsync(string email, string subject, string message)
+ {
+ // Plug in your email service
+ return Task.FromResult(0);
+ }
+
+ public static Task SendSmsAsync(string number, string message)
+ {
+ // Plug in your sms service
+ return Task.FromResult(0);
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/samples/IdentitySample.Mvc/Startup.cs b/samples/IdentitySample.Mvc/Startup.cs
index 7921d2753f..b1ebf48e26 100644
--- a/samples/IdentitySample.Mvc/Startup.cs
+++ b/samples/IdentitySample.Mvc/Startup.cs
@@ -1,16 +1,12 @@
-using System;
using IdentitySample.Models;
using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Diagnostics;
using Microsoft.AspNet.Identity;
-using Microsoft.AspNet.Routing;
using Microsoft.Data.Entity;
using Microsoft.Framework.ConfigurationModel;
using Microsoft.Framework.DependencyInjection;
using Microsoft.Framework.Logging;
using Microsoft.Framework.Logging.Console;
-using System.Threading.Tasks;
-using System.Threading;
namespace IdentitySamples
{
@@ -42,9 +38,7 @@ namespace IdentitySamples
services.AddIdentity(Configuration)
.AddEntityFrameworkStores()
- .AddDefaultTokenProviders()
- .AddMessageProvider()
- .AddMessageProvider();
+ .AddDefaultTokenProviders();
services.ConfigureFacebookAuthentication(options =>
{
@@ -86,39 +80,5 @@ namespace IdentitySamples
SampleData.InitializeIdentityDatabaseAsync(app.ApplicationServices).Wait();
}
- public class EmailMessageProvider : IIdentityMessageProvider
- {
- public string Name
- {
- get
- {
- return "Email";
- }
- }
-
- public Task SendAsync(IdentityMessage message, CancellationToken cancellationToken = default(CancellationToken))
- {
- // Plug in your service
- return Task.FromResult(0);
- }
- }
-
- public class SmsMessageProvider : IIdentityMessageProvider
- {
- public string Name
- {
- get
- {
- return "SMS";
- }
- }
-
- public Task SendAsync(IdentityMessage message, CancellationToken cancellationToken = default(CancellationToken))
- {
- // Plug in your service
- return Task.FromResult(0);
- }
- }
-
}
}
\ No newline at end of file
diff --git a/src/Microsoft.AspNet.Identity/EmailTokenProvider.cs b/src/Microsoft.AspNet.Identity/EmailTokenProvider.cs
index d192dde38e..776d1f8e19 100644
--- a/src/Microsoft.AspNet.Identity/EmailTokenProvider.cs
+++ b/src/Microsoft.AspNet.Identity/EmailTokenProvider.cs
@@ -1,6 +1,4 @@
using System;
-using System.Globalization;
-using System.Threading;
using System.Threading.Tasks;
using Microsoft.Framework.OptionsModel;
@@ -8,16 +6,7 @@ namespace Microsoft.AspNet.Identity
{
public class EmailTokenProviderOptions
{
- public string Name { get; set; } = Resources.DefaultEmailTokenProviderName;
-
- public string MessageProvider { get; set; } = "Email";
-
- public string Subject { get; set; } = "Security Code";
-
- ///
- /// Format string which will be used for the email body, it will be passed the token for the first parameter
- ///
- public string BodyFormat { get; set; } = "Your security code is: {0}";
+ public string Name { get; set; } = "Email";
}
///
@@ -65,27 +54,5 @@ namespace Microsoft.AspNet.Identity
var email = await manager.GetEmailAsync(user);
return "Email:" + purpose + ":" + email;
}
-
- ///
- /// Notifies the user with a token via email using the Subject and BodyFormat
- ///
- ///
- ///
- ///
- ///
- public override async Task NotifyAsync(string token, UserManager manager, TUser user)
- {
- if (manager == null)
- {
- throw new ArgumentNullException(nameof(manager));
- }
- var msg = new IdentityMessage
- {
- Destination = await manager.GetEmailAsync(user),
- Subject = Options.Subject,
- Body = string.Format(CultureInfo.CurrentCulture, Options.BodyFormat, token)
- };
- await manager.SendMessageAsync(Options.MessageProvider, msg);
- }
}
}
\ No newline at end of file
diff --git a/src/Microsoft.AspNet.Identity/IIdentityMessageProvider.cs b/src/Microsoft.AspNet.Identity/IIdentityMessageProvider.cs
deleted file mode 100644
index 2eaa60a115..0000000000
--- a/src/Microsoft.AspNet.Identity/IIdentityMessageProvider.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Microsoft.AspNet.Identity
-{
- public interface IIdentityMessageProvider
- {
- string Name { get; }
-
- Task SendAsync(IdentityMessage message, CancellationToken cancellationToken);
- }
-}
\ No newline at end of file
diff --git a/src/Microsoft.AspNet.Identity/IUserTokenProvider.cs b/src/Microsoft.AspNet.Identity/IUserTokenProvider.cs
index d785f41bd5..184b9844ff 100644
--- a/src/Microsoft.AspNet.Identity/IUserTokenProvider.cs
+++ b/src/Microsoft.AspNet.Identity/IUserTokenProvider.cs
@@ -1,7 +1,6 @@
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-using System.Threading;
using System.Threading.Tasks;
namespace Microsoft.AspNet.Identity
@@ -35,15 +34,6 @@ namespace Microsoft.AspNet.Identity
///
Task ValidateAsync(string purpose, string token, UserManager manager, TUser user);
- ///
- /// Notifies the user that a token has been generated, i.e. via email or sms, or can no-op
- ///
- ///
- ///
- ///
- ///
- Task NotifyAsync(string token, UserManager manager, TUser user);
-
///
/// Returns true if provider can be used for this user to generate two factor tokens, i.e. could require a user to have an email
///
diff --git a/src/Microsoft.AspNet.Identity/IdentityBuilder.cs b/src/Microsoft.AspNet.Identity/IdentityBuilder.cs
index 80efa2f345..7dbc04c9f1 100644
--- a/src/Microsoft.AspNet.Identity/IdentityBuilder.cs
+++ b/src/Microsoft.AspNet.Identity/IdentityBuilder.cs
@@ -66,11 +66,6 @@ namespace Microsoft.AspNet.Identity
return AddScoped(typeof(IUserTokenProvider<>).MakeGenericType(UserType), provider);
}
- public virtual IdentityBuilder AddMessageProvider() where TProvider : IIdentityMessageProvider
- {
- return AddScoped(typeof(IIdentityMessageProvider), typeof(TProvider));
- }
-
public virtual IdentityBuilder AddDefaultTokenProviders()
{
Services.Configure(options =>
diff --git a/src/Microsoft.AspNet.Identity/IdentityMessage.cs b/src/Microsoft.AspNet.Identity/IdentityMessage.cs
deleted file mode 100644
index 44c9b3e16f..0000000000
--- a/src/Microsoft.AspNet.Identity/IdentityMessage.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-namespace Microsoft.AspNet.Identity
-{
- ///
- /// Represents a message
- ///
- public class IdentityMessage
- {
- ///
- /// Target for the message, i.e. email or phone number
- ///
- public virtual string Destination { get; set; }
-
- ///
- /// Subject
- ///
- public virtual string Subject { get; set; }
-
- ///
- /// Message contents
- ///
- public virtual string Body { get; set; }
- }
-}
\ No newline at end of file
diff --git a/src/Microsoft.AspNet.Identity/PhoneNumberTokenProvider.cs b/src/Microsoft.AspNet.Identity/PhoneNumberTokenProvider.cs
index cec3f7740a..83bb2406b4 100644
--- a/src/Microsoft.AspNet.Identity/PhoneNumberTokenProvider.cs
+++ b/src/Microsoft.AspNet.Identity/PhoneNumberTokenProvider.cs
@@ -7,14 +7,7 @@ namespace Microsoft.AspNet.Identity
{
public class PhoneNumberTokenProviderOptions
{
- public string Name { get; set; } = Resources.DefaultPhoneNumberTokenProviderName;
-
- public string MessageProvider { get; set; } = "SMS";
-
- ///
- /// Message contents which should contain a format string which the token will be the only argument
- ///
- public string MessageFormat { get; set; } = Resources.DefaultPhoneNumberTokenProviderMessageFormat;
+ public string Name { get; set; } = "Phone";
}
///
@@ -69,26 +62,5 @@ namespace Microsoft.AspNet.Identity
var phoneNumber = await manager.GetPhoneNumberAsync(user);
return "PhoneNumber:" + purpose + ":" + phoneNumber;
}
-
- ///
- /// Notifies the user with a token via SMS using the MessageFormat
- ///
- ///
- ///
- ///
- ///
- public override async Task NotifyAsync(string token, UserManager manager, TUser user)
- {
- if (manager == null)
- {
- throw new ArgumentNullException("manager");
- }
- var msg = new IdentityMessage
- {
- Destination = await manager.GetPhoneNumberAsync(user),
- Body = string.Format(CultureInfo.CurrentCulture, Options.MessageFormat, token)
- };
- await manager.SendMessageAsync(Options.MessageProvider, msg);
- }
}
}
\ No newline at end of file
diff --git a/src/Microsoft.AspNet.Identity/Properties/Resources.Designer.cs b/src/Microsoft.AspNet.Identity/Properties/Resources.Designer.cs
index 2aa5369096..416c98f9e5 100644
--- a/src/Microsoft.AspNet.Identity/Properties/Resources.Designer.cs
+++ b/src/Microsoft.AspNet.Identity/Properties/Resources.Designer.cs
@@ -26,54 +26,6 @@ namespace Microsoft.AspNet.Identity
return GetString("ConcurrencyFailure");
}
- ///
- /// Your security code is: {0}
- ///
- internal static string DefaultEmailTokenProviderBodyFormat
- {
- get { return GetString("DefaultEmailTokenProviderBodyFormat"); }
- }
-
- ///
- /// Your security code is: {0}
- ///
- internal static string FormatDefaultEmailTokenProviderBodyFormat(object p0)
- {
- return string.Format(CultureInfo.CurrentCulture, GetString("DefaultEmailTokenProviderBodyFormat"), p0);
- }
-
- ///
- /// Email
- ///
- internal static string DefaultEmailTokenProviderName
- {
- get { return GetString("DefaultEmailTokenProviderName"); }
- }
-
- ///
- /// Email
- ///
- internal static string FormatDefaultEmailTokenProviderName()
- {
- return GetString("DefaultEmailTokenProviderName");
- }
-
- ///
- /// Security code
- ///
- internal static string DefaultEmailTokenProviderSubject
- {
- get { return GetString("DefaultEmailTokenProviderSubject"); }
- }
-
- ///
- /// Security code
- ///
- internal static string FormatDefaultEmailTokenProviderSubject()
- {
- return GetString("DefaultEmailTokenProviderSubject");
- }
-
///
/// An unknown failure has occured.
///
@@ -90,38 +42,6 @@ namespace Microsoft.AspNet.Identity
return GetString("DefaultError");
}
- ///
- /// Your security code is: {0}
- ///
- internal static string DefaultPhoneNumberTokenProviderMessageFormat
- {
- get { return GetString("DefaultPhoneNumberTokenProviderMessageFormat"); }
- }
-
- ///
- /// Your security code is: {0}
- ///
- internal static string FormatDefaultPhoneNumberTokenProviderMessageFormat(object p0)
- {
- return string.Format(CultureInfo.CurrentCulture, GetString("DefaultPhoneNumberTokenProviderMessageFormat"), p0);
- }
-
- ///
- /// Phone
- ///
- internal static string DefaultPhoneNumberTokenProviderName
- {
- get { return GetString("DefaultPhoneNumberTokenProviderName"); }
- }
-
- ///
- /// Phone
- ///
- internal static string FormatDefaultPhoneNumberTokenProviderName()
- {
- return GetString("DefaultPhoneNumberTokenProviderName");
- }
-
///
/// Default Token Provider
///
@@ -298,22 +218,6 @@ namespace Microsoft.AspNet.Identity
return GetString("LoginAlreadyAssociated");
}
- ///
- /// No IUserMessageProvider named '{0}' is registered.
- ///
- internal static string NoMessageProvider
- {
- get { return GetString("NoMessageProvider"); }
- }
-
- ///
- /// No IUserMessageProvider named '{0}' is registered.
- ///
- internal static string FormatNoMessageProvider(object p0)
- {
- return string.Format(CultureInfo.CurrentCulture, GetString("NoMessageProvider"), p0);
- }
-
///
/// No IUserTokenProvider named '{0}' is registered.
///
diff --git a/src/Microsoft.AspNet.Identity/Resources.resx b/src/Microsoft.AspNet.Identity/Resources.resx
index 2351b1e7aa..f3cd081aa8 100644
--- a/src/Microsoft.AspNet.Identity/Resources.resx
+++ b/src/Microsoft.AspNet.Identity/Resources.resx
@@ -121,30 +121,10 @@
Optimistic concurrency failure, object has been modified.
Error when optimistic concurrency fails
-
- Your security code is: {0}
- Default body format for the email
-
-
- Email
- Default name for the email token provider
-
-
- Security code
- Default subject for the email
-
An unknown failure has occured.
Default identity result error message
-
- Your security code is: {0}
- Default message format for the phone number token provider
-
-
- Phone
- Default name for the phone number token provider
-
Default Token Provider
Name of the default token provider
@@ -189,10 +169,6 @@
A user with this login already exists.
Error when a login already linked
-
- No IUserMessageProvider named '{0}' is registered.
- Error when there is no IUserMessageProvider
-
No IUserTokenProvider named '{0}' is registered.
Error when there is no IUserTokenProvider
diff --git a/src/Microsoft.AspNet.Identity/SignInManager.cs b/src/Microsoft.AspNet.Identity/SignInManager.cs
index 9b61fbb588..ce5ddb22b6 100644
--- a/src/Microsoft.AspNet.Identity/SignInManager.cs
+++ b/src/Microsoft.AspNet.Identity/SignInManager.cs
@@ -202,24 +202,6 @@ namespace Microsoft.AspNet.Identity
return identity;
}
- public virtual async Task SendTwoFactorCodeAsync(string provider)
- {
- var twoFactorInfo = await RetrieveTwoFactorInfoAsync();
- if (twoFactorInfo == null || twoFactorInfo.UserId == null)
- {
- return false;
- }
-
- var user = await UserManager.FindByIdAsync(twoFactorInfo.UserId);
- if (user == null)
- {
- return false;
- }
- var token = await UserManager.GenerateTwoFactorTokenAsync(user, provider);
- await UserManager.NotifyTwoFactorTokenAsync(user, provider, token);
- return await LogResultAsync(true, user);
- }
-
public virtual async Task IsTwoFactorClientRememberedAsync(TUser user)
{
var userId = await UserManager.GetUserIdAsync(user);
diff --git a/src/Microsoft.AspNet.Identity/TotpSecurityStampBasedTokenProvider.cs b/src/Microsoft.AspNet.Identity/TotpSecurityStampBasedTokenProvider.cs
index 721f371efc..3c175149ee 100644
--- a/src/Microsoft.AspNet.Identity/TotpSecurityStampBasedTokenProvider.cs
+++ b/src/Microsoft.AspNet.Identity/TotpSecurityStampBasedTokenProvider.cs
@@ -15,18 +15,6 @@ namespace Microsoft.AspNet.Identity
{
public abstract string Name { get; }
- ///
- /// This token provider does not notify the user by default
- ///
- ///
- ///
- ///
- ///
- public virtual Task NotifyAsync(string token, UserManager manager, TUser user)
- {
- return Task.FromResult(0);
- }
-
///
/// Generate a token for the user using their security stamp
///
diff --git a/src/Microsoft.AspNet.Identity/UserManager.cs b/src/Microsoft.AspNet.Identity/UserManager.cs
index 04c0edc96c..2cc9c0ac00 100644
--- a/src/Microsoft.AspNet.Identity/UserManager.cs
+++ b/src/Microsoft.AspNet.Identity/UserManager.cs
@@ -24,8 +24,6 @@ namespace Microsoft.AspNet.Identity
{
private readonly Dictionary> _tokenProviders =
new Dictionary>();
- private readonly Dictionary _msgProviders =
- new Dictionary();
private TimeSpan _defaultLockout = TimeSpan.Zero;
private bool _disposed;
@@ -42,7 +40,6 @@ namespace Microsoft.AspNet.Identity
///
///
///
- ///
///
public UserManager(IUserStore store,
IOptions optionsAccessor,
@@ -52,7 +49,6 @@ namespace Microsoft.AspNet.Identity
ILookupNormalizer keyNormalizer,
IdentityErrorDescriber errors,
IEnumerable> tokenProviders,
- IEnumerable msgProviders,
ILogger> logger,
IHttpContextAccessor contextAccessor)
{
@@ -91,13 +87,6 @@ namespace Microsoft.AspNet.Identity
RegisterTokenProvider(tokenProvider);
}
}
- if (msgProviders != null)
- {
- foreach (var msgProvider in msgProviders)
- {
- RegisterMessageProvider(msgProvider);
- }
- }
}
///
@@ -1527,20 +1516,6 @@ namespace Microsoft.AspNet.Identity
_tokenProviders[provider.Name] = provider;
}
- ///
- /// Register a user message provider
- ///
- ///
- public virtual void RegisterMessageProvider(IIdentityMessageProvider provider)
- {
- ThrowIfDisposed();
- if (provider == null)
- {
- throw new ArgumentNullException("provider");
- }
- _msgProviders[provider.Name] = provider;
- }
-
///
/// Returns a list of valid two factor providers for a user
///
@@ -1619,33 +1594,6 @@ namespace Microsoft.AspNet.Identity
return token;
}
- ///
- /// Notify a user with a token from a specific user factor provider
- ///
- ///
- ///
- ///
- ///
- public virtual async Task NotifyTwoFactorTokenAsync(TUser user, string tokenProvider, string token)
- {
- ThrowIfDisposed();
- if (user == null)
- {
- throw new ArgumentNullException("user");
- }
- if (tokenProvider == null)
- {
- throw new ArgumentNullException(nameof(tokenProvider));
- }
- if (!_tokenProviders.ContainsKey(tokenProvider))
- {
- throw new NotSupportedException(String.Format(CultureInfo.CurrentCulture,
- Resources.NoTokenProvider, tokenProvider));
- }
- await _tokenProviders[tokenProvider].NotifyAsync(token, this, user);
- return await LogResultAsync(IdentityResult.Success, user);
- }
-
// IUserFactorStore methods
internal IUserTwoFactorStore GetUserTwoFactorStore()
{
@@ -1692,30 +1640,6 @@ namespace Microsoft.AspNet.Identity
return await LogResultAsync(await UpdateUserAsync(user), user);
}
- // Messaging methods
-
- ///
- /// Send a message to the user using the specified provider
- ///
- ///
- ///
- ///
- public virtual async Task SendMessageAsync(string messageProvider, IdentityMessage message)
- {
- ThrowIfDisposed();
- if (message == null)
- {
- throw new ArgumentNullException(nameof(message));
- }
- if (!_msgProviders.ContainsKey(messageProvider))
- {
- throw new NotSupportedException(String.Format(CultureInfo.CurrentCulture,
- Resources.NoMessageProvider, messageProvider));
- }
- await _msgProviders[messageProvider].SendAsync(message, CancellationToken);
- return IdentityResult.Success;
- }
-
// IUserLockoutStore methods
internal IUserLockoutStore GetUserLockoutStore()
{
diff --git a/test/Microsoft.AspNet.Identity.Test/IdentityBuilderTest.cs b/test/Microsoft.AspNet.Identity.Test/IdentityBuilderTest.cs
index d58f558fad..31dae8f25f 100644
--- a/test/Microsoft.AspNet.Identity.Test/IdentityBuilderTest.cs
+++ b/test/Microsoft.AspNet.Identity.Test/IdentityBuilderTest.cs
@@ -234,7 +234,7 @@ namespace Microsoft.AspNet.Identity.Test
private class MyUserManager : UserManager
{
- public MyUserManager(IUserStore store) : base(store, null, null, null, null, null, null, null, null, null, null) { }
+ public MyUserManager(IUserStore store) : base(store, null, null, null, null, null, null, null, null, null) { }
}
private class MyRoleManager : RoleManager
diff --git a/test/Microsoft.AspNet.Identity.Test/UserManagerTest.cs b/test/Microsoft.AspNet.Identity.Test/UserManagerTest.cs
index ddbb38eabb..b1f95cb7c6 100644
--- a/test/Microsoft.AspNet.Identity.Test/UserManagerTest.cs
+++ b/test/Microsoft.AspNet.Identity.Test/UserManagerTest.cs
@@ -631,7 +631,7 @@ namespace Microsoft.AspNet.Identity.Test
public async Task ManagerPublicNullChecks()
{
Assert.Throws("store",
- () => new UserManager(null, null, null, null, null, null, null, null, null, null, null));
+ () => new UserManager(null, null, null, null, null, null, null, null, null, null));
var manager = MockHelpers.TestUserManager(new NotImplementedStore());
@@ -736,8 +736,6 @@ namespace Microsoft.AspNet.Identity.Test
async () => await manager.GenerateTwoFactorTokenAsync(null, null));
await Assert.ThrowsAsync("user",
async () => await manager.VerifyTwoFactorTokenAsync(null, null, null));
- await Assert.ThrowsAsync("user",
- async () => await manager.NotifyTwoFactorTokenAsync(null, null, null));
await Assert.ThrowsAsync("user",
async () => await manager.GetValidTwoFactorProvidersAsync(null));
await Assert.ThrowsAsync("user",
@@ -797,7 +795,6 @@ namespace Microsoft.AspNet.Identity.Test
await Assert.ThrowsAsync(() => manager.GenerateEmailConfirmationTokenAsync(null));
await Assert.ThrowsAsync(() => manager.IsEmailConfirmedAsync(null));
await Assert.ThrowsAsync(() => manager.ConfirmEmailAsync(null, null));
- await Assert.ThrowsAsync(() => manager.SendMessageAsync(null, null));
}
private class BadPasswordValidator : IPasswordValidator where TUser : class
diff --git a/test/Shared/MockHelpers.cs b/test/Shared/MockHelpers.cs
index ddc30e09b1..ca7fd850d9 100644
--- a/test/Shared/MockHelpers.cs
+++ b/test/Shared/MockHelpers.cs
@@ -21,7 +21,7 @@ namespace Microsoft.AspNet.Identity.Test
public static Mock> MockUserManager() where TUser : class
{
var store = new Mock>();
- var mgr = new Mock>(store.Object, null, null, null, null, null, null, null, null, null, null);
+ var mgr = new Mock>(store.Object, null, null, null, null, null, null, null, null, null);
mgr.Object.UserValidators.Add(new UserValidator());
mgr.Object.PasswordValidators.Add(new PasswordValidator());
return mgr;
@@ -63,7 +63,6 @@ namespace Microsoft.AspNet.Identity.Test
var userManager = new UserManager(store, options.Object, new PasswordHasher(),
userValidators, pwdValidators, new UpperInvariantLookupNormalizer(),
new IdentityErrorDescriber(), Enumerable.Empty>(),
- Enumerable.Empty(),
new Logger>(new LoggerFactory()),
null);
validator.Setup(v => v.ValidateAsync(userManager, It.IsAny()))
diff --git a/test/Shared/TestMessageService.cs b/test/Shared/TestMessageService.cs
deleted file mode 100644
index 52040cf594..0000000000
--- a/test/Shared/TestMessageService.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Microsoft.AspNet.Identity.Test
-{
- public class TestMessageService : IIdentityMessageProvider
- {
- public IdentityMessage Message { get; set; }
-
- public string Name { get; set; } = "Test";
-
- public Task SendAsync(IdentityMessage message, CancellationToken cancellationToken = default(CancellationToken))
- {
- Message = message;
- return Task.FromResult(0);
- }
- }
-
-}
\ No newline at end of file
diff --git a/test/Shared/UserManagerTestBase.cs b/test/Shared/UserManagerTestBase.cs
index a72112e538..d834cda845 100644
--- a/test/Shared/UserManagerTestBase.cs
+++ b/test/Shared/UserManagerTestBase.cs
@@ -1447,76 +1447,6 @@ namespace Microsoft.AspNet.Identity.Test
Assert.Equal(stamp, user.SecurityStamp);
}
- [Fact]
- public async Task CanEmailTwoFactorToken()
- {
- var manager = CreateManager();
- var messageService = new TestMessageService { Name = "Email" };
- manager.RegisterMessageProvider(messageService);
- const string factorId = "Email"; // default
- var user = new TUser() { UserName = "EmailCodeTest", Email = "foo@foo.com" };
- user.EmailConfirmed = true;
- const string password = "password";
- IdentityResultAssert.IsSuccess(await manager.CreateAsync(user, password));
- var stamp = user.SecurityStamp;
- Assert.NotNull(stamp);
- var token = await manager.GenerateTwoFactorTokenAsync(user, factorId);
- Assert.NotNull(token);
- Assert.Null(messageService.Message);
- IdentityResultAssert.IsSuccess(await manager.NotifyTwoFactorTokenAsync(user, factorId, token));
- Assert.NotNull(messageService.Message);
- Assert.Equal("Your security code is: " + token, messageService.Message.Body);
- Assert.True(await manager.VerifyTwoFactorTokenAsync(user, factorId, token));
- IdentityResultAssert.VerifyUserManagerSuccessLog(manager.Logger, "VerifyTwoFactorTokenAsync", user.Id.ToString());
- }
-
- [Fact]
- public async Task NotifyWithUnknownProviderFails()
- {
- var manager = CreateManager();
- var user = CreateTestUser();
- IdentityResultAssert.IsSuccess(await manager.CreateAsync(user));
- await
- ExceptionAssert.ThrowsAsync(
- async () => await manager.NotifyTwoFactorTokenAsync(user, "Bogus", "token"),
- "No IUserTokenProvider named 'Bogus' is registered.");
- }
-
- [Fact]
- public async Task EmailTokenFactorWithFormatTest()
- {
- // CONSIDER: do we want to support multiple email token options?
- const string factorId = "Email"; // default
- const string subject = "Custom subject";
- const string body = "Your code is {0}!";
- var services = new ServiceCollection();
- services.Configure(o =>
- {
- o.Name = factorId;
- o.Subject = subject;
- o.BodyFormat = body;
- });
- var manager = CreateManager(null, services);
- var messageService = new TestMessageService { Name = "Email" };
- manager.RegisterMessageProvider(messageService);
- var user = CreateTestUser();
- user.Email = user.UserName + "@foo.com";
- const string password = "password";
- IdentityResultAssert.IsSuccess(await manager.CreateAsync(user, password));
- var stamp = user.SecurityStamp;
- Assert.NotNull(stamp);
- var token = await manager.GenerateTwoFactorTokenAsync(user, factorId);
- Assert.NotNull(token);
- IdentityResultAssert.VerifyUserManagerSuccessLog(manager.Logger, "GenerateTwoFactorTokenAsync", user.Id.ToString());
- Assert.Null(messageService.Message);
- IdentityResultAssert.IsSuccess(await manager.NotifyTwoFactorTokenAsync(user, factorId, token));
- Assert.NotNull(messageService.Message);
- Assert.Equal(subject, messageService.Message.Subject);
- Assert.Equal(string.Format(body, token), messageService.Message.Body);
- IdentityResultAssert.VerifyUserManagerSuccessLog(manager.Logger, "NotifyTwoFactorTokenAsync", user.Id.ToString());
- Assert.True(await manager.VerifyTwoFactorTokenAsync(user, factorId, token));
- }
-
[Fact]
public async Task EmailFactorFailsAfterSecurityStampChangeTest()
{
@@ -1548,69 +1478,6 @@ namespace Microsoft.AspNet.Identity.Test
Assert.True(await manager.GetTwoFactorEnabledAsync(user));
}
- [Fact]
- public async Task CanSendMessage()
- {
- var manager = CreateManager();
- var messageService = new TestMessageService();
- manager.RegisterMessageProvider(messageService);
- var user = CreateTestUser();
- IdentityResultAssert.IsSuccess(await manager.CreateAsync(user));
- await manager.SendMessageAsync(messageService.Name, new IdentityMessage { Destination = "foo", Subject = "Hi", Body = "Body" });
- Assert.NotNull(messageService.Message);
- Assert.Equal("foo", messageService.Message.Destination);
- Assert.Equal("Hi", messageService.Message.Subject);
- Assert.Equal("Body", messageService.Message.Body);
- }
-
- [Fact]
- public async Task CanSmsTwoFactorToken()
- {
- var manager = CreateManager();
- var messageService = new TestMessageService { Name = "SMS" };
- manager.RegisterMessageProvider(messageService);
- const string factorId = "Phone"; // default
- var user = CreateTestUser();
- user.PhoneNumber = "4251234567";
- IdentityResultAssert.IsSuccess(await manager.CreateAsync(user));
- var stamp = user.SecurityStamp;
- Assert.NotNull(stamp);
- var token = await manager.GenerateTwoFactorTokenAsync(user, factorId);
- Assert.NotNull(token);
- Assert.Null(messageService.Message);
- IdentityResultAssert.IsSuccess(await manager.NotifyTwoFactorTokenAsync(user, factorId, token));
- Assert.NotNull(messageService.Message);
- Assert.Equal("Your security code is: " + token, messageService.Message.Body);
- Assert.True(await manager.VerifyTwoFactorTokenAsync(user, factorId, token));
- }
-
- [Fact]
- public async Task PhoneTokenFactorFormatTest()
- {
- const string factorId = "Phone"; // default
- var services = new ServiceCollection();
- services.Configure(o =>
- {
- o.Name = factorId;
- o.MessageFormat = "Your code is: {0}";
- });
- var manager = CreateManager(null, services);
- var messageService = new TestMessageService { Name = "SMS" };
- manager.RegisterMessageProvider(messageService);
- var user = CreateTestUser();
- user.PhoneNumber = "4251234567";
- IdentityResultAssert.IsSuccess(await manager.CreateAsync(user));
- var stamp = user.SecurityStamp;
- Assert.NotNull(stamp);
- var token = await manager.GenerateTwoFactorTokenAsync(user, factorId);
- Assert.NotNull(token);
- Assert.Null(messageService.Message);
- IdentityResultAssert.IsSuccess(await manager.NotifyTwoFactorTokenAsync(user, factorId, token));
- Assert.NotNull(messageService.Message);
- Assert.Equal("Your code is: " + token, messageService.Message.Body);
- Assert.True(await manager.VerifyTwoFactorTokenAsync(user, factorId, token));
- }
-
[Fact]
public async Task GenerateTwoFactorWithUnknownFactorProviderWillThrow()
{