feat: started working on password reset and email confirmation, added columns to DB
Signed-off-by: limited_dev <loginakkisativ@gmail.com>
This commit is contained in:
parent
e6b2c22bab
commit
828f784fc8
13 changed files with 179 additions and 13 deletions
|
@ -14,6 +14,9 @@ public class UserData
|
|||
[Required]
|
||||
public long TimeBanned { get; set; }
|
||||
|
||||
[Required]
|
||||
public string BanReason { get; set; }
|
||||
|
||||
[Required]
|
||||
public long lastActionTimeStamp { get; set; }
|
||||
|
||||
|
@ -35,4 +38,13 @@ public class UserData
|
|||
public List<ReportData> RecivedReports { get; set; }
|
||||
|
||||
public string LastUsedName { get; set; }
|
||||
|
||||
public bool ConfirmedEmail { get; set; }
|
||||
|
||||
public string ConfirmEmailToken { get; set; }
|
||||
|
||||
public string ResetPasswordToken { get; set; }
|
||||
|
||||
public long ResetPasswordExpiresAt { get; set; }
|
||||
|
||||
}
|
|
@ -1,6 +1,8 @@
|
|||
@page "/sys/banned"
|
||||
<h3>Banned</h3>
|
||||
|
||||
<PageTitle>You are BANNED!</PageTitle>
|
||||
|
||||
<img class="image" src="img/static/banned/@i"/>
|
||||
|
||||
@code {
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
@page "/sys/click/confirmmail/{userid}/{email}/{token}"
|
||||
<h3>Confirming your Email...</h3>
|
||||
|
||||
@code {
|
||||
|
||||
}
|
|
@ -0,0 +1,51 @@
|
|||
@page "/sys/click/resetpw/{userid}/{hash}"
|
||||
@using System.ComponentModel.DataAnnotations
|
||||
@using ImageBoardServerApp.Data.Repository
|
||||
@inject AuthenticationStateProvider authStateProvider
|
||||
@inject NavigationManager navManager
|
||||
<PageTitle>Password reset</PageTitle>
|
||||
<span>Password reset for account id #@userid</span>
|
||||
|
||||
<div class="login">
|
||||
<form>
|
||||
<RadzenFormField Text="New Password" Variant="Variant.Outlined">
|
||||
<RadzenPassword @bind-Value="@Password" />
|
||||
</RadzenFormField>
|
||||
<br/>
|
||||
<br/>
|
||||
<RadzenButton Click=@reset Text="reset" ButtonStyle="ButtonStyle.Secondary" />
|
||||
<br/>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
|
||||
@code {
|
||||
private string Password { get; set; }
|
||||
|
||||
[Parameter]
|
||||
[Required]
|
||||
public string userid { get; set; }
|
||||
|
||||
[Parameter]
|
||||
[Required]
|
||||
public string hash { get; set; }
|
||||
|
||||
public async void reset()
|
||||
{
|
||||
if (int.TryParse(userid, out _))
|
||||
return;
|
||||
var user = await UsersRepository.getUserByIdAsync(int.Parse(userid));
|
||||
if (user == null)
|
||||
return;
|
||||
if (user.ResetPasswordToken != hash)
|
||||
{
|
||||
return;
|
||||
}
|
||||
Console.WriteLine("Resetting a password...");
|
||||
|
||||
user.Password = Password = BCrypt.Net.BCrypt.HashPassword(Password);
|
||||
|
||||
await UsersRepository.updateUserAsync(user);
|
||||
|
||||
}
|
||||
}
|
|
@ -5,8 +5,8 @@
|
|||
@inject AuthenticationStateProvider authStateProvider
|
||||
@inject NavigationManager navManager
|
||||
|
||||
|
||||
<h3 class="headLogin">Login to bulletbroards</h3>
|
||||
<PageTitle>Login - Bulletboards</PageTitle>
|
||||
<h3 class="headLogin">Login to Bulletboards</h3>
|
||||
<div class="login">
|
||||
<form>
|
||||
<RadzenFormField Text="Email" Variant="Variant.Outlined">
|
||||
|
@ -19,8 +19,10 @@
|
|||
<br/>
|
||||
<br/>
|
||||
<RadzenButton Click=@login Text="login" ButtonStyle="ButtonStyle.Secondary" />
|
||||
<br/>
|
||||
</form>
|
||||
</div>
|
||||
<a href="/sys/resetpw">Reset Password</a>
|
||||
|
||||
@code {
|
||||
private Variant vari = Variant.Outlined;
|
||||
|
|
|
@ -2,10 +2,13 @@
|
|||
text-align: center;
|
||||
-webkit-text-size-adjust: auto;
|
||||
}
|
||||
|
||||
.login{
|
||||
text-align: center;
|
||||
align-items:center;
|
||||
font-style: unset;}
|
||||
font-style: unset;
|
||||
}
|
||||
|
||||
.gaping{
|
||||
alignment: left;
|
||||
}
|
20
ImageBoardServerApp/Pages/Accounts/Logout.razor
Normal file
20
ImageBoardServerApp/Pages/Accounts/Logout.razor
Normal file
|
@ -0,0 +1,20 @@
|
|||
@page "/sys/logout"
|
||||
@using ImageBoardServerApp.Auth
|
||||
@inject NavigationManager navManager
|
||||
@inject AuthenticationStateProvider authStateProvider
|
||||
<h3>Logging out...</h3>
|
||||
|
||||
@code {
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
await base.OnParametersSetAsync();
|
||||
}
|
||||
|
||||
protected override async Task OnAfterRenderAsync(bool firstRender)
|
||||
{
|
||||
await base.OnAfterRenderAsync(firstRender);
|
||||
var customAuthStateProvider = (CustomAuthenticationStateProvider) authStateProvider;
|
||||
await customAuthStateProvider.UpdateAuthenticationStateAsync(null);
|
||||
navManager.NavigateTo("/", true);
|
||||
}
|
||||
}
|
|
@ -1,10 +1,13 @@
|
|||
@page "/sys/register"
|
||||
@using ImageBoardServerApp.Util
|
||||
@using ImageBoardServerApp.Data.Repository
|
||||
@using ImageBoardServerApp.Auth
|
||||
@inject IJSRuntime js
|
||||
@inject AuthenticationStateProvider authStateProvider
|
||||
@inject NavigationManager navManager
|
||||
|
||||
<PageTitle>Register - Buttletboards</PageTitle>
|
||||
|
||||
<div class="login">
|
||||
<form>
|
||||
<RadzenFormField Text="Email" Variant="Variant.Outlined">
|
||||
|
@ -19,7 +22,7 @@
|
|||
<RadzenLabel Text="I am atleast 18 Years old." Component="is_18" />
|
||||
<br/>
|
||||
<br/>
|
||||
<RadzenButton Click=@login Text="login" ButtonStyle="ButtonStyle.Secondary" />
|
||||
<RadzenButton Click=@login Text="register" ButtonStyle="ButtonStyle.Secondary" />
|
||||
</form>
|
||||
<br/>
|
||||
<br/>
|
||||
|
@ -64,14 +67,23 @@
|
|||
Password = BCrypt.Net.BCrypt.HashPassword(Password),
|
||||
Role = "User",
|
||||
TimeBanned = -1,
|
||||
LastUsedName = "Anonymous"
|
||||
LastUsedName = "Anonymous",
|
||||
BanReason = "Not banned",
|
||||
ConfirmedEmail = false,
|
||||
ResetPasswordExpiresAt = DateTimeOffset.Now.ToUnixTimeMilliseconds() + 300000,
|
||||
ConfirmEmailToken = TheManager.getmd5Hash(),
|
||||
ResetPasswordToken = "-1"
|
||||
};
|
||||
if (await UsersRepository.getUserByEmailAsync(Email) != null)
|
||||
{
|
||||
msg = "This Email is already registered.";
|
||||
return;
|
||||
}
|
||||
|
||||
await UsersRepository.createUserAsync(userToCreate);
|
||||
|
||||
Postman.sendMail(Email, "Confirm Email", "");
|
||||
|
||||
var user = await UsersRepository.getUserByEmailRawAsync(Email);
|
||||
if (user == null)
|
||||
{
|
||||
|
|
49
ImageBoardServerApp/Pages/Accounts/ResetPassword.razor
Normal file
49
ImageBoardServerApp/Pages/Accounts/ResetPassword.razor
Normal file
|
@ -0,0 +1,49 @@
|
|||
@page "/sys/resetpw"
|
||||
@using ImageBoardServerApp.Data.Repository
|
||||
@using ImageBoardServerApp.Util
|
||||
<h3 class="headLogin">Reset your Password</h3>
|
||||
|
||||
<div class="login">
|
||||
<form>
|
||||
<RadzenFormField Text="Email" Variant="Variant.Outlined">
|
||||
<RadzenTextBox @bind-Value="@Email" />
|
||||
</RadzenFormField>
|
||||
<br/>
|
||||
<br/>
|
||||
<RadzenButton Click=@resetPassword Text="Send reset Email" ButtonStyle="ButtonStyle.Secondary" />
|
||||
<br/>
|
||||
</form>
|
||||
@if (msg != null)
|
||||
{
|
||||
<div>
|
||||
<span class="msg">@msg</span>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
|
||||
@code {
|
||||
private string Email { get; set; }
|
||||
private string msg { get; set; }
|
||||
|
||||
private async void resetPassword()
|
||||
{
|
||||
Console.WriteLine("Resetting Password...");
|
||||
var user = await UsersRepository.getUserByEmailRawAsync(Email);
|
||||
if (user == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var hash = TheManager.getmd5Hash();
|
||||
user.ResetPasswordToken = hash;
|
||||
user.ResetPasswordExpiresAt = DateTimeOffset.Now.ToUnixTimeMilliseconds() + 300000;
|
||||
|
||||
await UsersRepository.updateUserAsync(user);
|
||||
|
||||
Postman.sendMail(user.Email,
|
||||
"Password Reset",
|
||||
"Reset your Password using this link:\n" +
|
||||
$"https://bulletboards.xyz/sys/click/resetpw/{user.UserID}/{hash}");
|
||||
msg = "A reset email has been sent to the selected email, if that email is registered here. The link expires in 5 Minutes";
|
||||
}
|
||||
}
|
14
ImageBoardServerApp/Pages/Accounts/ResetPassword.razor.css
Normal file
14
ImageBoardServerApp/Pages/Accounts/ResetPassword.razor.css
Normal file
|
@ -0,0 +1,14 @@
|
|||
.headLogin{
|
||||
text-align: center;
|
||||
-webkit-text-size-adjust: auto;
|
||||
}
|
||||
|
||||
.login{
|
||||
text-align: center;
|
||||
align-items:center;
|
||||
font-style: unset;
|
||||
}
|
||||
|
||||
.gaping{
|
||||
alignment: left;
|
||||
}
|
|
@ -4,6 +4,8 @@
|
|||
@inject AuthenticationStateProvider authStateProvider
|
||||
@inject NavigationManager navManager
|
||||
|
||||
<PageTitle>YOU - Bulletboards</PageTitle>
|
||||
|
||||
<AuthorizeView>
|
||||
<Authorized>
|
||||
<h3>YOU</h3>
|
||||
|
@ -18,7 +20,7 @@
|
|||
<input type="password" id="password" @bind="newPassword" />
|
||||
<a @onclick="changePassword" href="javascript:void(0)">[Change Password]</a>
|
||||
<br/>
|
||||
<a @onclick="logout" href="javascript:void(0)">[Logout]</a>
|
||||
<a href="/sys/logout">[Logout]</a>
|
||||
</Authorized>
|
||||
<NotAuthorized>
|
||||
<span>You are not logged in.</span>
|
||||
|
@ -42,13 +44,6 @@
|
|||
}
|
||||
}
|
||||
|
||||
private async Task logout()
|
||||
{
|
||||
var customAuthStateProvider = (CustomAuthenticationStateProvider) authStateProvider;
|
||||
await customAuthStateProvider.UpdateAuthenticationStateAsync(null);
|
||||
navManager.NavigateTo("/", true);
|
||||
}
|
||||
|
||||
private async Task changeEmail()
|
||||
{
|
||||
var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider;
|
||||
|
|
Loading…
Reference in a new issue