From e8e97b2cd9613d64459006b4bf5950515c82f79b Mon Sep 17 00:00:00 2001 From: limited_dev Date: Fri, 9 Jun 2023 09:45:14 +0200 Subject: [PATCH] feat: finished email confirmation, finished Password Reset !fix: The user auth system now uses the id, not the email Signed-off-by: limited_dev --- .../Auth/CustomAuthenticationStateProvider.cs | 4 +- .../Data/Repository/UsersRepository.cs | 8 ++- .../ClickOn/ClickOnConfirmEmail.razor | 57 ++++++++++++++++++- .../Pages/Accounts/ClickOn/ClickOnReset.razor | 13 ++++- .../Pages/Accounts/UserPage.razor | 4 +- .../Pages/Basic/ReportPage.razor | 4 +- .../Shared/Components/Comment.razor | 4 +- .../Shared/Components/Forms/CommentForm.razor | 4 +- .../Shared/Components/Forms/PostForm.razor | 4 +- .../Shared/Components/Post.razor | 5 +- ImageBoardServerApp/Shared/MainLayout.razor | 2 +- 11 files changed, 89 insertions(+), 20 deletions(-) diff --git a/ImageBoardServerApp/Auth/CustomAuthenticationStateProvider.cs b/ImageBoardServerApp/Auth/CustomAuthenticationStateProvider.cs index 3234b0a..31d55b5 100644 --- a/ImageBoardServerApp/Auth/CustomAuthenticationStateProvider.cs +++ b/ImageBoardServerApp/Auth/CustomAuthenticationStateProvider.cs @@ -27,7 +27,7 @@ public class CustomAuthenticationStateProvider : AuthenticationStateProvider var claimsPrincipal = new ClaimsPrincipal(new ClaimsIdentity(new List { //new Claim(ClaimTypes.Email, userSession.Email), - new Claim(ClaimTypes.Name, userSession.Email), + new Claim(ClaimTypes.Name, userSession.UserID.ToString()), new Claim(ClaimTypes.Role, userSession.Role) }, "CustomAuth")); return await Task.FromResult(new AuthenticationState(claimsPrincipal)); @@ -47,7 +47,7 @@ public class CustomAuthenticationStateProvider : AuthenticationStateProvider await _sessionStorage.SetAsync("UserSession", session); claimsPrincipal = new ClaimsPrincipal(new ClaimsIdentity(new List { - new Claim(ClaimTypes.Email, session.Email), + new Claim(ClaimTypes.Email, session.UserID.ToString()), new Claim(ClaimTypes.Email, session.Role) })); } diff --git a/ImageBoardServerApp/Data/Repository/UsersRepository.cs b/ImageBoardServerApp/Data/Repository/UsersRepository.cs index 2b3141d..2c90eeb 100644 --- a/ImageBoardServerApp/Data/Repository/UsersRepository.cs +++ b/ImageBoardServerApp/Data/Repository/UsersRepository.cs @@ -18,7 +18,13 @@ public static class UsersRepository public static async Task getUserByIdAsync(int userId) { await using var db = new AppDBContext(); - return await db.Users.FirstOrDefaultAsync(user => user.UserID == userId); + return await db.Users + .Where(user => user.UserID == userId) + .Include(user => user.SubmittedReports) + .Include(user => user.Posts) + .Include(user => user.Comments) + .Include(user => user.RecivedReports) + .FirstOrDefaultAsync(); } public static async Task getUserByEmailRawAsync(string email) diff --git a/ImageBoardServerApp/Pages/Accounts/ClickOn/ClickOnConfirmEmail.razor b/ImageBoardServerApp/Pages/Accounts/ClickOn/ClickOnConfirmEmail.razor index b1003fe..e8ace62 100644 --- a/ImageBoardServerApp/Pages/Accounts/ClickOn/ClickOnConfirmEmail.razor +++ b/ImageBoardServerApp/Pages/Accounts/ClickOn/ClickOnConfirmEmail.razor @@ -1,6 +1,61 @@ @page "/sys/click/confirmmail/{userid}/{email}/{token}" -

Confirming your Email...

+@using System.ComponentModel.DataAnnotations +@using ImageBoardServerApp.Data.Repository +

Confirm your Email

+ +@msg @code { + private string msg { get; set; } = "Loading..."; + [Parameter] + [Required] + public string userid { get; set; } + + [Parameter] + [Required] + public string email { get; set; } + + [Parameter] + [Required] + public string token { get; set; } + + protected override async Task OnParametersSetAsync() + { + await base.OnParametersSetAsync(); + + if (!int.TryParse(userid, out _)) + { + msg = "This is not a valid id."; + return; + } + + var user = await UsersRepository.getUserByIdAsync(int.Parse(userid)); + + if (user == null) + { + msg = "Could not find user."; + return; + } + + if (user.Email != email) + { + msg = "The email does not match."; + return; + } + + if (user.ConfirmEmailToken != token) + { + msg = "The token is not correct."; + return; + } + + user.ConfirmEmailToken = "0"; + user.ConfirmedEmail = true; + + await UsersRepository.updateUserAsync(user); + + msg = "The email has been confirmed."; + } + } \ No newline at end of file diff --git a/ImageBoardServerApp/Pages/Accounts/ClickOn/ClickOnReset.razor b/ImageBoardServerApp/Pages/Accounts/ClickOn/ClickOnReset.razor index 98a8ba3..b2e5edf 100644 --- a/ImageBoardServerApp/Pages/Accounts/ClickOn/ClickOnReset.razor +++ b/ImageBoardServerApp/Pages/Accounts/ClickOn/ClickOnReset.razor @@ -16,12 +16,18 @@
+ @if (msg != null) + { + @msg + } @code { private string Password { get; set; } + private string msg { get; set; } + [Parameter] [Required] public string userid { get; set; } @@ -32,7 +38,7 @@ public async void reset() { - if (int.TryParse(userid, out _)) + if (!int.TryParse(userid, out _)) return; var user = await UsersRepository.getUserByIdAsync(int.Parse(userid)); if (user == null) @@ -44,8 +50,11 @@ Console.WriteLine("Resetting a password..."); user.Password = Password = BCrypt.Net.BCrypt.HashPassword(Password); + user.ResetPasswordToken = "-1"; await UsersRepository.updateUserAsync(user); - + + msg = "Your Password has been updated."; + } } \ No newline at end of file diff --git a/ImageBoardServerApp/Pages/Accounts/UserPage.razor b/ImageBoardServerApp/Pages/Accounts/UserPage.razor index 7df8cbd..11072e4 100644 --- a/ImageBoardServerApp/Pages/Accounts/UserPage.razor +++ b/ImageBoardServerApp/Pages/Accounts/UserPage.razor @@ -49,7 +49,7 @@ var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider; var user = await cauthStateProvder.GetAuthenticationStateAsync(); var usr = user.User; - UserData foundusr = await UsersRepository.getUserByEmailAsync(usr.Identity.Name); + UserData foundusr = await UsersRepository.getUserByIdAsync(int.Parse(usr.Identity.Name)); if (foundusr == null) { return; @@ -69,7 +69,7 @@ var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider; var user = await cauthStateProvder.GetAuthenticationStateAsync(); var usr = user.User; - UserData foundusr = await UsersRepository.getUserByEmailAsync(usr.Identity.Name); + UserData foundusr = await UsersRepository.getUserByIdAsync(int.Parse(usr.Identity.Name)); if (foundusr == null) { return; diff --git a/ImageBoardServerApp/Pages/Basic/ReportPage.razor b/ImageBoardServerApp/Pages/Basic/ReportPage.razor index 7240a68..40ddb84 100644 --- a/ImageBoardServerApp/Pages/Basic/ReportPage.razor +++ b/ImageBoardServerApp/Pages/Basic/ReportPage.razor @@ -58,7 +58,7 @@ var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider; var user = await cauthStateProvder.GetAuthenticationStateAsync(); var usr = user.User; - UserData foundusr = await UsersRepository.getUserByEmailAsync(usr.Identity.Name); + UserData foundusr = await UsersRepository.getUserByIdAsync(int.Parse(usr.Identity.Name)); if (foundusr == null) { return; @@ -100,7 +100,7 @@ return; } - var reportID = await ReportsRepository.createReportAsync(reportData); + await ReportsRepository.createReportAsync(reportData); js.InvokeVoidAsync("window.close"); } } \ No newline at end of file diff --git a/ImageBoardServerApp/Shared/Components/Comment.razor b/ImageBoardServerApp/Shared/Components/Comment.razor index fd07ad9..970e1de 100644 --- a/ImageBoardServerApp/Shared/Components/Comment.razor +++ b/ImageBoardServerApp/Shared/Components/Comment.razor @@ -124,7 +124,7 @@ var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider; var user = await cauthStateProvder.GetAuthenticationStateAsync(); var usr = user.User; - UserData foundusr = await UsersRepository.getUserByEmailAsync(usr.Identity.Name); + UserData foundusr = await UsersRepository.getUserByIdAsync(int.Parse(usr.Identity.Name)); if (foundusr.Role != "User" || comment.UserID == foundusr.UserID) { await TheManager.deleteComment(comment); @@ -148,7 +148,7 @@ var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider; var user = await cauthStateProvder.GetAuthenticationStateAsync(); var usr = user.User; - UserData foundusr = await UsersRepository.getUserByEmailAsync(usr.Identity.Name); + UserData foundusr = await UsersRepository.getUserByIdAsync(int.Parse(usr.Identity.Name)); if (foundusr != null && (foundusr.Role != "User" || comment.UserID == foundusr.UserID)) { canDel = true; diff --git a/ImageBoardServerApp/Shared/Components/Forms/CommentForm.razor b/ImageBoardServerApp/Shared/Components/Forms/CommentForm.razor index d632b39..59f292e 100644 --- a/ImageBoardServerApp/Shared/Components/Forms/CommentForm.razor +++ b/ImageBoardServerApp/Shared/Components/Forms/CommentForm.razor @@ -63,7 +63,7 @@ var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider; var user = await cauthStateProvder.GetAuthenticationStateAsync(); var usr = user.User; - UserData foundusr = await UsersRepository.getUserByEmailAsync(usr.Identity.Name); + UserData foundusr = await UsersRepository.getUserByIdAsync(int.Parse(usr.Identity.Name)); if (foundusr == null) { hasErr = true; @@ -90,7 +90,7 @@ var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider; var user = await cauthStateProvder.GetAuthenticationStateAsync(); var usr = user.User; - UserData foundusr = await UsersRepository.getUserByEmailAsync(usr.Identity.Name); + UserData foundusr = await UsersRepository.getUserByIdAsync(int.Parse(usr.Identity.Name)); if (foundusr == null) { hasErr = true; diff --git a/ImageBoardServerApp/Shared/Components/Forms/PostForm.razor b/ImageBoardServerApp/Shared/Components/Forms/PostForm.razor index 3534e66..7bb6984 100644 --- a/ImageBoardServerApp/Shared/Components/Forms/PostForm.razor +++ b/ImageBoardServerApp/Shared/Components/Forms/PostForm.razor @@ -69,7 +69,7 @@ var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider; var user = await cauthStateProvder.GetAuthenticationStateAsync(); var usr = user.User; - UserData foundusr = await UsersRepository.getUserByEmailAsync(usr.Identity.Name); + UserData foundusr = await UsersRepository.getUserByIdAsync(int.Parse(usr.Identity.Name)); if (foundusr == null) { hasErr = true; @@ -98,7 +98,7 @@ var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider; var user = await cauthStateProvder.GetAuthenticationStateAsync(); var usr = user.User; - UserData foundusr = await UsersRepository.getUserByEmailAsync(usr.Identity.Name); + UserData foundusr = await UsersRepository.getUserByIdAsync(int.Parse(usr.Identity.Name)); if (foundusr == null) { hasErr = true; diff --git a/ImageBoardServerApp/Shared/Components/Post.razor b/ImageBoardServerApp/Shared/Components/Post.razor index 3270e4a..14a24c0 100644 --- a/ImageBoardServerApp/Shared/Components/Post.razor +++ b/ImageBoardServerApp/Shared/Components/Post.razor @@ -157,7 +157,7 @@ var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider; var user = await cauthStateProvder.GetAuthenticationStateAsync(); var usr = user.User; - UserData foundusr = await UsersRepository.getUserByEmailAsync(usr.Identity.Name); + UserData foundusr = await UsersRepository.getUserByIdAsync(int.Parse(usr.Identity.Name)); if (foundusr.Role != "User" || post.UserID == foundusr.UserID) { await TheManager.deleteThread(post); @@ -183,11 +183,10 @@ { await base.OnParametersSetAsync(); value = TheManager.getBumpValue(post) + "v"; - string boardTag = post.Board; var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider; var user = await cauthStateProvder.GetAuthenticationStateAsync(); var usr = user.User; - UserData foundusr = await UsersRepository.getUserByEmailAsync(usr.Identity.Name); + UserData foundusr = await UsersRepository.getUserByIdAsync(int.Parse(usr.Identity.Name)); reportURL = $"/sys/report/op/{post.Board}/{post.PostID}"; threadURL = $"/{post.Board}/thread/{post.PostID}"; diff --git a/ImageBoardServerApp/Shared/MainLayout.razor b/ImageBoardServerApp/Shared/MainLayout.razor index 3457b28..b1cfe60 100644 --- a/ImageBoardServerApp/Shared/MainLayout.razor +++ b/ImageBoardServerApp/Shared/MainLayout.razor @@ -28,7 +28,7 @@ var user = await cauthStateProvder.GetAuthenticationStateAsync(); if (user.User.Identity.IsAuthenticated) { - mail = user.User.Identity.Name; + mail = $"Welcome User # {user.User.Identity.Name}"; } } }