diff --git a/Streetwriters.Identity/Extensions/UserManagerExtensions.cs b/Streetwriters.Identity/Extensions/UserManagerExtensions.cs new file mode 100644 index 0000000..1d215ba --- /dev/null +++ b/Streetwriters.Identity/Extensions/UserManagerExtensions.cs @@ -0,0 +1,33 @@ +/* +This file is part of the Notesnook Sync Server project (https://notesnook.com/) + +Copyright (C) 2022 Streetwriters (Private) Limited + +This program is free software: you can redistribute it and/or modify +it under the terms of the Affero GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +Affero GNU General Public License for more details. + +You should have received a copy of the Affero GNU General Public License +along with this program. If not, see . +*/ + +using System.Threading.Tasks; +using Streetwriters.Common.Models; + +namespace Microsoft.AspNetCore.Identity +{ + public static class UserManagerExtensions + { + public static async Task FindRegisteredUserAsync(this UserManager userManager, string email, string clientId) + { + var user = await userManager.FindByEmailAsync(email); + return user != null && await userManager.IsInRoleAsync(user, clientId) ? user : null; + } + } +} \ No newline at end of file diff --git a/Streetwriters.Identity/Validation/EmailGrantValidator.cs b/Streetwriters.Identity/Validation/EmailGrantValidator.cs index c11160e..dc86a8f 100644 --- a/Streetwriters.Identity/Validation/EmailGrantValidator.cs +++ b/Streetwriters.Identity/Validation/EmailGrantValidator.cs @@ -63,7 +63,8 @@ namespace Streetwriters.Identity.Validation public async Task ValidateAsync(ExtensionGrantValidationContext context) { var email = context.Request.Raw["email"]; - var user = await UserManager.FindByEmailAsync(email); + var clientId = context.Request.ClientId; + var user = await UserManager.FindRegisteredUserAsync(email, clientId); if (user == null) { user = new User