From a14ccfadce4e9d03d389ec49ae854af9e90d04bf Mon Sep 17 00:00:00 2001 From: Abdullah Atta Date: Mon, 16 Jan 2023 13:28:35 +0500 Subject: [PATCH] identity: better handling of unregistered users --- .../Extensions/UserManagerExtensions.cs | 33 +++++++++++++++++++ .../Validation/EmailGrantValidator.cs | 3 +- 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 Streetwriters.Identity/Extensions/UserManagerExtensions.cs 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