Skip to content

Commit 5e1a54c

Browse files
committed
fix: test
1 parent 71c4ab4 commit 5e1a54c

File tree

2 files changed

+16
-3
lines changed

2 files changed

+16
-3
lines changed

src/VirtoCommerce.Platform.Web/Controllers/Api/AuthorizationController.cs

+15-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
using VirtoCommerce.Platform.Core.Security;
1919
using VirtoCommerce.Platform.Core.Security.Events;
2020
using VirtoCommerce.Platform.Security;
21+
using VirtoCommerce.Platform.Security.Services;
2122
using VirtoCommerce.Platform.Web.Model.Security;
2223
using static OpenIddict.Abstractions.OpenIddictConstants;
2324

@@ -31,6 +32,7 @@ public class AuthorizationController : Controller
3132
private readonly UserManager<ApplicationUser> _userManager;
3233
private readonly PasswordLoginOptions _passwordLoginOptions;
3334
private readonly IEventPublisher _eventPublisher;
35+
private readonly List<IUserSignInValidator> _userSignInValidators;
3436

3537
private UserManager<ApplicationUser> UserManager => _signInManager.UserManager;
3638

@@ -40,14 +42,16 @@ public AuthorizationController(
4042
SignInManager<ApplicationUser> signInManager,
4143
UserManager<ApplicationUser> userManager,
4244
IOptions<PasswordLoginOptions> passwordLoginOptions,
43-
IEventPublisher eventPublisher)
45+
IEventPublisher eventPublisher,
46+
IEnumerable<IUserSignInValidator> userSignInValidators)
4447
{
4548
_applicationManager = applicationManager;
4649
_identityOptions = identityOptions.Value;
4750
_passwordLoginOptions = passwordLoginOptions.Value ?? new PasswordLoginOptions();
4851
_signInManager = signInManager;
4952
_userManager = userManager;
5053
_eventPublisher = eventPublisher;
54+
_userSignInValidators = userSignInValidators.ToList();
5155
}
5256

5357
#region Password, authorization code and refresh token flows
@@ -101,6 +105,16 @@ public async Task<ActionResult> Exchange()
101105
return BadRequest(SecurityErrorDescriber.LoginFailed());
102106
}
103107

108+
foreach (var loginValidation in _userSignInValidators.OrderByDescending(x => x.Priority).ThenBy(x => x.GetType().Name).ToList())
109+
{
110+
var validationErrors = await loginValidation.ValidateUserAsync(user, result, new Dictionary<string, object>());
111+
var error = validationErrors.FirstOrDefault();
112+
if (error != null)
113+
{
114+
return BadRequest(error);
115+
}
116+
}
117+
104118
await _eventPublisher.Publish(new BeforeUserLoginEvent(user));
105119

106120
// Create a new authentication ticket.

src/VirtoCommerce.Platform.Web/Security/ServiceCollectionExtensions.cs

+1-2
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ public static IServiceCollection AddSecurityServices(this IServiceCollection ser
5050
services.AddSingleton<IUserPasswordHasher, DefaultUserPasswordHasher>();
5151
//Use custom ClaimsPrincipalFactory to add system roles claims for user principal
5252
services.TryAddScoped<IUserClaimsPrincipalFactory<ApplicationUser>, CustomUserClaimsPrincipalFactory>();
53+
services.AddTransient<IUserSignInValidator, BaseUserSignInValidator>();
5354

5455
if (setupAction != null)
5556
{
@@ -61,8 +62,6 @@ public static IServiceCollection AddSecurityServices(this IServiceCollection ser
6162

6263
services.AddTransient<IServerCertificateService, ServerCertificateService>();
6364

64-
services.AddTransient<IUserSignInValidator, BaseUserSignInValidator>();
65-
6665
return services;
6766
}
6867

0 commit comments

Comments
 (0)