diff --git a/ImageBoardServerApp/Data/Repository/UsersRepository.cs b/ImageBoardServerApp/Data/Repository/UsersRepository.cs index 4f4b53b..89fb13b 100644 --- a/ImageBoardServerApp/Data/Repository/UsersRepository.cs +++ b/ImageBoardServerApp/Data/Repository/UsersRepository.cs @@ -7,7 +7,12 @@ public static class UsersRepository public static async Task> getUsersAsync() { await using var db = new AppDBContext(); - return await db.Users.ToListAsync(); + return await db.Users + .Include(user => user.SubmittedReports) + .Include(user => user.RecivedReports) + .Include(user => user.Comments) + .Include(user => user.Posts) + .ToListAsync(); } public static async Task getUserByIdAsync(int userId) @@ -19,7 +24,10 @@ public static class UsersRepository public static async Task getUserByEmailAsync(string email) { await using var db = new AppDBContext(); - return await db.Users.FirstOrDefaultAsync(user => user.Email == email); + return await db.Users + .Where(user => user.Email == email) + .Include(user => user.SubmittedReports) + .FirstOrDefaultAsync(); } public static async Task createUserAsync(UserData userToCreate) diff --git a/ImageBoardServerApp/Pages/Accounts/UserPage.razor b/ImageBoardServerApp/Pages/Accounts/UserPage.razor index 289c167..3fc3eea 100644 --- a/ImageBoardServerApp/Pages/Accounts/UserPage.razor +++ b/ImageBoardServerApp/Pages/Accounts/UserPage.razor @@ -1,6 +1,90 @@ @page "/sys/you" -

UserPage

+@using ImageBoardServerApp.Auth +@using ImageBoardServerApp.Data.Repository +@inject AuthenticationStateProvider authStateProvider +@inject NavigationManager navManager + + +

YOU

+
+ Email: @mail +
+ Email: + + [Change Email] +
+ Password: + + [Change Password] +
+ [Logout] +
+ + You are not logged in. + Please login first. + +
@code { + private string mail { get; set; } = ""; + private string newMail { get; set; } + private string newPassword { get; set; } + + protected override async Task OnInitializedAsync() + { + var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider; + var user = await cauthStateProvder.GetAuthenticationStateAsync(); + if (user.User.Identity.IsAuthenticated) + { + mail = user.User.Identity.Name; + } + } + + private async Task logout() + { + var customAuthStateProvider = (CustomAuthenticationStateProvider) authStateProvider; + await customAuthStateProvider.UpdateAuthenticationStateAsync(null); + navManager.NavigateTo("/", true); + } + + private async Task changeEmail() + { + var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider; + var user = await cauthStateProvder.GetAuthenticationStateAsync(); + var usr = user.User; + UserData foundusr = await UsersRepository.getUserByEmailAsync(usr.Identity.Name); + if (foundusr == null) + { + return; + } + int userID = foundusr.UserID; + if (newMail == null || newMail == "" || !newMail.Contains("@")) + { + return; + } + foundusr.Email = newMail; + foundusr.lastActionTimeStamp = DateTimeOffset.Now.ToUnixTimeMilliseconds(); + await UsersRepository.updateUserAsync(foundusr); + } + + private async Task changePassword() + { + var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider; + var user = await cauthStateProvder.GetAuthenticationStateAsync(); + var usr = user.User; + UserData foundusr = await UsersRepository.getUserByEmailAsync(usr.Identity.Name); + if (foundusr == null) + { + return; + } + int userID = foundusr.UserID; + if (newPassword == null || newPassword == "") + { + return; + } + foundusr.Password = BCrypt.Net.BCrypt.HashPassword(newPassword); + foundusr.lastActionTimeStamp = DateTimeOffset.Now.ToUnixTimeMilliseconds(); + await UsersRepository.updateUserAsync(foundusr); + } } \ No newline at end of file diff --git a/ImageBoardServerApp/Pages/Basic/Index.razor b/ImageBoardServerApp/Pages/Basic/Index.razor index 99a6427..63fc5c2 100644 --- a/ImageBoardServerApp/Pages/Basic/Index.razor +++ b/ImageBoardServerApp/Pages/Basic/Index.razor @@ -9,6 +9,12 @@ We're currently hosting @amountOfPosts Threads, @amountOfComments Comments and @amountOfUsers Users. @Details + + +
+ Edit your account +
+
@code{ private string Details { get; set; } diff --git a/ImageBoardServerApp/Pages/Components/ReportPage.razor b/ImageBoardServerApp/Pages/Basic/ReportPage.razor similarity index 63% rename from ImageBoardServerApp/Pages/Components/ReportPage.razor rename to ImageBoardServerApp/Pages/Basic/ReportPage.razor index dbb8d43..0b21862 100644 --- a/ImageBoardServerApp/Pages/Components/ReportPage.razor +++ b/ImageBoardServerApp/Pages/Basic/ReportPage.razor @@ -6,29 +6,29 @@ @inject AuthenticationStateProvider authStateProvider @inject IJSRuntime js - -

Report @type#@id on /@board/

- -
- -
- @selectedItem - Explain further (optional) -
- -
- -
- - Please login to report - -
+ +

Report @type#@id on /@board/

+
+ +
+ @selectedItem +
+ Explain further (optional) +
+ +
+ +
+ + Please login to report + + @code { private IEnumerable rules; @@ -51,6 +51,8 @@ private async Task onReportClick() { + if (selectedItem == null || selectedItem == "none") + return; var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider; var user = await cauthStateProvder.GetAuthenticationStateAsync(); var usr = user.User; @@ -89,6 +91,13 @@ ReportExlaination = explaination }; + List submittedReports = foundusr.RecivedReports; + foreach(var r in submittedReports) + { + if (r.ReportedPostID == reportData.ReportedPostID && r.ReportedCommentID == reportData.ReportedCommentID) + return; + } + var reportID = await ReportsRepository.createReportAsync(reportData); js.InvokeVoidAsync("window.close"); } diff --git a/ImageBoardServerApp/Pages/Components/ReportPage.razor.css b/ImageBoardServerApp/Pages/Basic/ReportPage.razor.css similarity index 100% rename from ImageBoardServerApp/Pages/Components/ReportPage.razor.css rename to ImageBoardServerApp/Pages/Basic/ReportPage.razor.css diff --git a/ImageBoardServerApp/Pages/Components/ThreadPage.razor b/ImageBoardServerApp/Pages/Basic/ThreadPage.razor similarity index 100% rename from ImageBoardServerApp/Pages/Components/ThreadPage.razor rename to ImageBoardServerApp/Pages/Basic/ThreadPage.razor diff --git a/ImageBoardServerApp/Pages/Moderation/UsersPage.razor b/ImageBoardServerApp/Pages/Moderation/UsersPage.razor index 9889cc3..afdad0d 100644 --- a/ImageBoardServerApp/Pages/Moderation/UsersPage.razor +++ b/ImageBoardServerApp/Pages/Moderation/UsersPage.razor @@ -1,13 +1,24 @@ @page "/sys/users" +@using ImageBoardServerApp.Data.Repository

Users

- + @foreach (var u in users) + { + +
+ }
@code { - + private List users { get; set; } + + protected override async Task OnInitializedAsync() + { + users = await UsersRepository.getUsersAsync(); + } + } \ No newline at end of file diff --git a/ImageBoardServerApp/Shared/Components/Report.razor b/ImageBoardServerApp/Shared/Components/Report.razor index 0e7f97c..8c2dbd4 100644 --- a/ImageBoardServerApp/Shared/Components/Report.razor +++ b/ImageBoardServerApp/Shared/Components/Report.razor @@ -6,7 +6,7 @@ } else { - /@report.ReportedComment/ + /@report.ReportedComment.Board/ } #@report.ReportID @report.Type diff --git a/ImageBoardServerApp/Shared/Components/UserEntry.razor b/ImageBoardServerApp/Shared/Components/UserEntry.razor new file mode 100644 index 0000000..b6d66d0 --- /dev/null +++ b/ImageBoardServerApp/Shared/Components/UserEntry.razor @@ -0,0 +1,16 @@ +@using System.ComponentModel.DataAnnotations +@user.Email | +@user.Posts.Count Posts | +@user.Comments.Count Comments | +@user.SubmittedReports.Count Reports submitted | +@user.RecivedReports.Count Reports recived | +@user.Role +
+ +@code { + + [Parameter] + [Required] + public UserData user { get; set; } + +} \ No newline at end of file diff --git a/ImageBoardServerApp/Shared/NavMenu.razor b/ImageBoardServerApp/Shared/NavMenu.razor index e1497d3..e0a844f 100644 --- a/ImageBoardServerApp/Shared/NavMenu.razor +++ b/ImageBoardServerApp/Shared/NavMenu.razor @@ -65,5 +65,4 @@ await customAuthStateProvider.UpdateAuthenticationStateAsync(null); navManager.NavigateTo("/", true); } - } \ No newline at end of file diff --git a/ImageBoardServerApp/_Imports.razor b/ImageBoardServerApp/_Imports.razor index 3613cc4..4340349 100644 --- a/ImageBoardServerApp/_Imports.razor +++ b/ImageBoardServerApp/_Imports.razor @@ -13,7 +13,6 @@ @using ImageBoardServerApp.Pages.Boards @using ImageBoardServerApp.Pages.Accounts @using ImageBoardServerApp.Pages.Basic -@using ImageBoardServerApp.Pages.Components @using ImageBoardServerApp.Pages.Status @using ImageBoardServerApp.Shared @using ImageBoardServerApp.Shared.Components