feat: finished email confirmation, finished Password Reset
!fix: The user auth system now uses the id, not the email Signed-off-by: limited_dev <loginakkisativ@gmail.com>
This commit is contained in:
parent
828f784fc8
commit
e8e97b2cd9
11 changed files with 89 additions and 20 deletions
|
@ -27,7 +27,7 @@ public class CustomAuthenticationStateProvider : AuthenticationStateProvider
|
||||||
var claimsPrincipal = new ClaimsPrincipal(new ClaimsIdentity(new List<Claim>
|
var claimsPrincipal = new ClaimsPrincipal(new ClaimsIdentity(new List<Claim>
|
||||||
{
|
{
|
||||||
//new Claim(ClaimTypes.Email, userSession.Email),
|
//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)
|
new Claim(ClaimTypes.Role, userSession.Role)
|
||||||
}, "CustomAuth"));
|
}, "CustomAuth"));
|
||||||
return await Task.FromResult(new AuthenticationState(claimsPrincipal));
|
return await Task.FromResult(new AuthenticationState(claimsPrincipal));
|
||||||
|
@ -47,7 +47,7 @@ public class CustomAuthenticationStateProvider : AuthenticationStateProvider
|
||||||
await _sessionStorage.SetAsync("UserSession", session);
|
await _sessionStorage.SetAsync("UserSession", session);
|
||||||
claimsPrincipal = new ClaimsPrincipal(new ClaimsIdentity(new List<Claim>
|
claimsPrincipal = new ClaimsPrincipal(new ClaimsIdentity(new List<Claim>
|
||||||
{
|
{
|
||||||
new Claim(ClaimTypes.Email, session.Email),
|
new Claim(ClaimTypes.Email, session.UserID.ToString()),
|
||||||
new Claim(ClaimTypes.Email, session.Role)
|
new Claim(ClaimTypes.Email, session.Role)
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,13 @@ public static class UsersRepository
|
||||||
public static async Task<UserData> getUserByIdAsync(int userId)
|
public static async Task<UserData> getUserByIdAsync(int userId)
|
||||||
{
|
{
|
||||||
await using var db = new AppDBContext();
|
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<UserData> getUserByEmailRawAsync(string email)
|
public static async Task<UserData> getUserByEmailRawAsync(string email)
|
||||||
|
|
|
@ -1,6 +1,61 @@
|
||||||
@page "/sys/click/confirmmail/{userid}/{email}/{token}"
|
@page "/sys/click/confirmmail/{userid}/{email}/{token}"
|
||||||
<h3>Confirming your Email...</h3>
|
@using System.ComponentModel.DataAnnotations
|
||||||
|
@using ImageBoardServerApp.Data.Repository
|
||||||
|
<h3>Confirm your Email</h3>
|
||||||
|
|
||||||
|
<span>@msg</span>
|
||||||
|
|
||||||
@code {
|
@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.";
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -16,12 +16,18 @@
|
||||||
<RadzenButton Click=@reset Text="reset" ButtonStyle="ButtonStyle.Secondary" />
|
<RadzenButton Click=@reset Text="reset" ButtonStyle="ButtonStyle.Secondary" />
|
||||||
<br/>
|
<br/>
|
||||||
</form>
|
</form>
|
||||||
|
@if (msg != null)
|
||||||
|
{
|
||||||
|
<span>@msg</span>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
private string Password { get; set; }
|
private string Password { get; set; }
|
||||||
|
|
||||||
|
private string msg { get; set; }
|
||||||
|
|
||||||
[Parameter]
|
[Parameter]
|
||||||
[Required]
|
[Required]
|
||||||
public string userid { get; set; }
|
public string userid { get; set; }
|
||||||
|
@ -32,7 +38,7 @@
|
||||||
|
|
||||||
public async void reset()
|
public async void reset()
|
||||||
{
|
{
|
||||||
if (int.TryParse(userid, out _))
|
if (!int.TryParse(userid, out _))
|
||||||
return;
|
return;
|
||||||
var user = await UsersRepository.getUserByIdAsync(int.Parse(userid));
|
var user = await UsersRepository.getUserByIdAsync(int.Parse(userid));
|
||||||
if (user == null)
|
if (user == null)
|
||||||
|
@ -44,8 +50,11 @@
|
||||||
Console.WriteLine("Resetting a password...");
|
Console.WriteLine("Resetting a password...");
|
||||||
|
|
||||||
user.Password = Password = BCrypt.Net.BCrypt.HashPassword(Password);
|
user.Password = Password = BCrypt.Net.BCrypt.HashPassword(Password);
|
||||||
|
user.ResetPasswordToken = "-1";
|
||||||
|
|
||||||
await UsersRepository.updateUserAsync(user);
|
await UsersRepository.updateUserAsync(user);
|
||||||
|
|
||||||
|
msg = "Your Password has been updated.";
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -49,7 +49,7 @@
|
||||||
var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider;
|
var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider;
|
||||||
var user = await cauthStateProvder.GetAuthenticationStateAsync();
|
var user = await cauthStateProvder.GetAuthenticationStateAsync();
|
||||||
var usr = user.User;
|
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)
|
if (foundusr == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
|
@ -69,7 +69,7 @@
|
||||||
var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider;
|
var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider;
|
||||||
var user = await cauthStateProvder.GetAuthenticationStateAsync();
|
var user = await cauthStateProvder.GetAuthenticationStateAsync();
|
||||||
var usr = user.User;
|
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)
|
if (foundusr == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -58,7 +58,7 @@
|
||||||
var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider;
|
var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider;
|
||||||
var user = await cauthStateProvder.GetAuthenticationStateAsync();
|
var user = await cauthStateProvder.GetAuthenticationStateAsync();
|
||||||
var usr = user.User;
|
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)
|
if (foundusr == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
|
@ -100,7 +100,7 @@
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var reportID = await ReportsRepository.createReportAsync(reportData);
|
await ReportsRepository.createReportAsync(reportData);
|
||||||
js.InvokeVoidAsync("window.close");
|
js.InvokeVoidAsync("window.close");
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -124,7 +124,7 @@
|
||||||
var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider;
|
var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider;
|
||||||
var user = await cauthStateProvder.GetAuthenticationStateAsync();
|
var user = await cauthStateProvder.GetAuthenticationStateAsync();
|
||||||
var usr = user.User;
|
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)
|
if (foundusr.Role != "User" || comment.UserID == foundusr.UserID)
|
||||||
{
|
{
|
||||||
await TheManager.deleteComment(comment);
|
await TheManager.deleteComment(comment);
|
||||||
|
@ -148,7 +148,7 @@
|
||||||
var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider;
|
var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider;
|
||||||
var user = await cauthStateProvder.GetAuthenticationStateAsync();
|
var user = await cauthStateProvder.GetAuthenticationStateAsync();
|
||||||
var usr = user.User;
|
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))
|
if (foundusr != null && (foundusr.Role != "User" || comment.UserID == foundusr.UserID))
|
||||||
{
|
{
|
||||||
canDel = true;
|
canDel = true;
|
||||||
|
|
|
@ -63,7 +63,7 @@
|
||||||
var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider;
|
var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider;
|
||||||
var user = await cauthStateProvder.GetAuthenticationStateAsync();
|
var user = await cauthStateProvder.GetAuthenticationStateAsync();
|
||||||
var usr = user.User;
|
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)
|
if (foundusr == null)
|
||||||
{
|
{
|
||||||
hasErr = true;
|
hasErr = true;
|
||||||
|
@ -90,7 +90,7 @@
|
||||||
var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider;
|
var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider;
|
||||||
var user = await cauthStateProvder.GetAuthenticationStateAsync();
|
var user = await cauthStateProvder.GetAuthenticationStateAsync();
|
||||||
var usr = user.User;
|
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)
|
if (foundusr == null)
|
||||||
{
|
{
|
||||||
hasErr = true;
|
hasErr = true;
|
||||||
|
|
|
@ -69,7 +69,7 @@
|
||||||
var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider;
|
var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider;
|
||||||
var user = await cauthStateProvder.GetAuthenticationStateAsync();
|
var user = await cauthStateProvder.GetAuthenticationStateAsync();
|
||||||
var usr = user.User;
|
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)
|
if (foundusr == null)
|
||||||
{
|
{
|
||||||
hasErr = true;
|
hasErr = true;
|
||||||
|
@ -98,7 +98,7 @@
|
||||||
var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider;
|
var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider;
|
||||||
var user = await cauthStateProvder.GetAuthenticationStateAsync();
|
var user = await cauthStateProvder.GetAuthenticationStateAsync();
|
||||||
var usr = user.User;
|
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)
|
if (foundusr == null)
|
||||||
{
|
{
|
||||||
hasErr = true;
|
hasErr = true;
|
||||||
|
|
|
@ -157,7 +157,7 @@
|
||||||
var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider;
|
var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider;
|
||||||
var user = await cauthStateProvder.GetAuthenticationStateAsync();
|
var user = await cauthStateProvder.GetAuthenticationStateAsync();
|
||||||
var usr = user.User;
|
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)
|
if (foundusr.Role != "User" || post.UserID == foundusr.UserID)
|
||||||
{
|
{
|
||||||
await TheManager.deleteThread(post);
|
await TheManager.deleteThread(post);
|
||||||
|
@ -183,11 +183,10 @@
|
||||||
{
|
{
|
||||||
await base.OnParametersSetAsync();
|
await base.OnParametersSetAsync();
|
||||||
value = TheManager.getBumpValue(post) + "v";
|
value = TheManager.getBumpValue(post) + "v";
|
||||||
string boardTag = post.Board;
|
|
||||||
var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider;
|
var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider;
|
||||||
var user = await cauthStateProvder.GetAuthenticationStateAsync();
|
var user = await cauthStateProvder.GetAuthenticationStateAsync();
|
||||||
var usr = user.User;
|
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}";
|
reportURL = $"/sys/report/op/{post.Board}/{post.PostID}";
|
||||||
threadURL = $"/{post.Board}/thread/{post.PostID}";
|
threadURL = $"/{post.Board}/thread/{post.PostID}";
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
var user = await cauthStateProvder.GetAuthenticationStateAsync();
|
var user = await cauthStateProvder.GetAuthenticationStateAsync();
|
||||||
if (user.User.Identity.IsAuthenticated)
|
if (user.User.Identity.IsAuthenticated)
|
||||||
{
|
{
|
||||||
mail = user.User.Identity.Name;
|
mail = $"Welcome User # {user.User.Identity.Name}";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue