auth page renewed, fix in MainLayout
This commit is contained in:
@@ -11,7 +11,7 @@
|
|||||||
<!-- CSS -->
|
<!-- CSS -->
|
||||||
<link rel="stylesheet" href="css/general.css?version=0.2.0.3"/>
|
<link rel="stylesheet" href="css/general.css?version=0.2.0.3"/>
|
||||||
<link rel="stylesheet" href="css/main_button.css?version=0.2.0.0"/>
|
<link rel="stylesheet" href="css/main_button.css?version=0.2.0.0"/>
|
||||||
<link rel="stylesheet" href="WatchIt.Website.styles.css?version=0.2.0.11"/>
|
<link rel="stylesheet" href="WatchIt.Website.styles.css?version=0.2.0.12"/>
|
||||||
|
|
||||||
<!-- BOOTSTRAP -->
|
<!-- BOOTSTRAP -->
|
||||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
|
||||||
|
|||||||
@@ -28,9 +28,7 @@
|
|||||||
<InputText class="form-control" placeholder="Search with regex" @bind-Value="@(_searchbarText)"/>
|
<InputText class="form-control" placeholder="Search with regex" @bind-Value="@(_searchbarText)"/>
|
||||||
</div>
|
</div>
|
||||||
<button type="button" class="btn btn-sm btn-outline-secondary" @onclick="@(SearchStart)">⌕</button>
|
<button type="button" class="btn btn-sm btn-outline-secondary" @onclick="@(SearchStart)">⌕</button>
|
||||||
<a id="searchbarCancel" @onclick="@(() => _searchbarVisible = false)">
|
<button type="button" class="btn btn-sm" @onclick="@(() => _searchbarVisible = false)">❌︎</button>
|
||||||
<img src="assets/icons/cancel.png" alt="cancel_icon" height="20" width="20"/>
|
|
||||||
</a>
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -8,91 +8,91 @@
|
|||||||
@if (_loaded)
|
@if (_loaded)
|
||||||
{
|
{
|
||||||
<div class="h-100 d-flex align-items-center justify-content-center">
|
<div class="h-100 d-flex align-items-center justify-content-center">
|
||||||
<div class="d-inline-flex flex-column justify-content-center panel panel-header rounded-3">
|
<div class="panel panel-header rounded-3 p-3">
|
||||||
<a id="logo" class="logo" href="/">
|
<div class="d-flex flex-column align-items-center gap-3">
|
||||||
WatchIt
|
<a id="logo" class="logo m-0" href="/">WatchIt</a>
|
||||||
</a>
|
|
||||||
<div>
|
|
||||||
@if (_isSingUp)
|
@if (_isSingUp)
|
||||||
{
|
{
|
||||||
<form method="post" @onsubmit="Register" @formname="register">
|
<EditForm Model="@(_registerModel)">
|
||||||
<AntiforgeryToken/>
|
<AntiforgeryToken/>
|
||||||
<div>
|
<div class="container-grid">
|
||||||
<label>
|
<div class="row form-group mb-1">
|
||||||
Username:
|
<label for="username" class="col-5 col-form-label">Username:</label>
|
||||||
<InputText @bind-Value="_registerModel!.Username"/>
|
<div class="col">
|
||||||
</label>
|
<InputText id="username" class="form-control" @bind-Value="_registerModel!.Username"/>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
|
||||||
<label>
|
|
||||||
Email:
|
|
||||||
<InputText @bind-Value="_registerModel!.Email"/>
|
|
||||||
</label>
|
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div class="row form-group my-1">
|
||||||
<label>
|
<label for="email" class="col-5 col-form-label">Email:</label>
|
||||||
Password:
|
<div class="col">
|
||||||
<InputText type="password" @bind-Value="_registerModel!.Password"/>
|
<InputText id="email" class="form-control" @bind-Value="_registerModel!.Email"/>
|
||||||
</label>
|
|
||||||
</div>
|
</div>
|
||||||
<div>
|
|
||||||
<label>
|
|
||||||
Confirm password:
|
|
||||||
<InputText type="password" @bind-Value="_passwordConfirmation"/>
|
|
||||||
</label>
|
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div class="row form-group my-1">
|
||||||
<button type="submit">Sign up</button>
|
<label for="password" class="col-5 col-form-label">Password:</label>
|
||||||
|
<div class="col">
|
||||||
|
<InputText id="password" class="form-control" type="password" @bind-Value="_registerModel!.Password"/>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</div>
|
||||||
|
<div class="row form-group my-1">
|
||||||
|
<label for="confpassword" class="col-5 col-form-label">Confirm password:</label>
|
||||||
|
<div class="col">
|
||||||
|
<InputText id="confpassword" class="form-control" type="password" @bind-Value="_registerPasswordConfirmation"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col align-self-center">
|
||||||
|
<span class="text-@(_formMessageIsSuccess ? "success" : "danger")">@_formMessage</span>
|
||||||
|
</div>
|
||||||
|
<div class="col-auto">
|
||||||
|
<button type="submit" class="btn btn-dark" @onclick="@(Register)">Sign up</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</EditForm>
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<form method="post" @onsubmit="Login" @formname="login">
|
<EditForm Model="@(_loginModel)">
|
||||||
<AntiforgeryToken/>
|
<AntiforgeryToken/>
|
||||||
<div>
|
<div class="container-grid">
|
||||||
<label>
|
<div class="row form-group mb-1">
|
||||||
Username or email:
|
<label for="username" class="col-5 col-form-label">Username or email:</label>
|
||||||
<InputText @bind-Value="_loginModel!.UsernameOrEmail"/>
|
<div class="col">
|
||||||
</label>
|
<InputText id="username" class="form-control" @bind-Value="_loginModel!.UsernameOrEmail"/>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
|
||||||
<label>
|
|
||||||
Password:
|
|
||||||
<InputText type="password" @bind-Value="_loginModel!.Password"/>
|
|
||||||
</label>
|
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div class="row form-group my-1">
|
||||||
<label>
|
<label for="password" class="col-5 col-form-label">Password:</label>
|
||||||
<InputCheckbox @bind-Value="_loginModel!.RememberMe"></InputCheckbox>
|
<div class="col">
|
||||||
Remember me
|
<InputText id="password" type="password" class="form-control" @bind-Value="_loginModel!.Password"/>
|
||||||
</label>
|
|
||||||
</div>
|
</div>
|
||||||
<div>
|
|
||||||
<button type="submit">Sign in</button>
|
|
||||||
</div>
|
</div>
|
||||||
</form>
|
<div class="row form-group">
|
||||||
|
<div class="col">
|
||||||
|
<div class="form-check">
|
||||||
|
<InputCheckbox class="form-check-input" @bind-Value="_loginModel!.RememberMe"/>
|
||||||
|
<label class="form-check-label">Remember me</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col align-self-center">
|
||||||
|
<span class="text-@(_formMessageIsSuccess ? "success" : "danger")">@_formMessage</span>
|
||||||
|
</div>
|
||||||
|
<div class="col-auto">
|
||||||
|
<button type="submit" class="btn btn-dark" @onclick="@(Login)">Sign in</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</EditForm>
|
||||||
}
|
}
|
||||||
|
<div class="btn-group w-100">
|
||||||
|
<input type="radio" class="btn-check" name="signtype" id="signin" autocomplete="off" checked="@(!_isSingUp)" @onclick="() => { _isSingUp = false; _formMessage = null; _formMessageIsSuccess = false; }">
|
||||||
|
<label class="btn btn-outline-secondary" for="signin">Sign in</label>
|
||||||
|
<input type="radio" class="btn-check" name="signtype" id="signup" autocomplete="off" checked="@(_isSingUp)" @onclick="() => { _isSingUp = true; _formMessage = null; _formMessageIsSuccess = false; }">
|
||||||
|
<label class="btn btn-outline-secondary" for="signup">Sign up</label>
|
||||||
</div>
|
</div>
|
||||||
@if (_errors is not null)
|
|
||||||
{
|
|
||||||
<div class="text-danger">
|
|
||||||
@foreach (string error in _errors)
|
|
||||||
{
|
|
||||||
@error
|
|
||||||
<br/>
|
|
||||||
}
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
<div>
|
|
||||||
<label>
|
|
||||||
<input type="radio" checked="@(() => !_isSingUp)" name="auth" @onchange="@(() => _isSingUp = false)" />
|
|
||||||
Sign in
|
|
||||||
</label>
|
|
||||||
<label>
|
|
||||||
<input type="radio" checked="@(() => _isSingUp)" name="auth" @onchange="@(() => _isSingUp = true)" />
|
|
||||||
Sign up
|
|
||||||
</label>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -43,14 +43,8 @@ public partial class AuthPage
|
|||||||
private PhotoResponse? _background;
|
private PhotoResponse? _background;
|
||||||
|
|
||||||
private bool _isSingUp;
|
private bool _isSingUp;
|
||||||
|
private string? _formMessage;
|
||||||
|
private bool _formMessageIsSuccess;
|
||||||
|
|
||||||
private AuthenticateRequest _loginModel = new AuthenticateRequest
|
|
||||||
{
|
|
||||||
UsernameOrEmail = null,
|
|
||||||
Password = null
|
|
||||||
};
|
|
||||||
|
|
||||||
private RegisterRequest _registerModel = new RegisterRequest
|
private RegisterRequest _registerModel = new RegisterRequest
|
||||||
{
|
{
|
||||||
@@ -58,9 +52,13 @@ public partial class AuthPage
|
|||||||
Email = null,
|
Email = null,
|
||||||
Password = null
|
Password = null
|
||||||
};
|
};
|
||||||
private string _passwordConfirmation;
|
private string _registerPasswordConfirmation;
|
||||||
|
|
||||||
private IEnumerable<string> _errors;
|
private AuthenticateRequest _loginModel = new AuthenticateRequest
|
||||||
|
{
|
||||||
|
UsernameOrEmail = null,
|
||||||
|
Password = null
|
||||||
|
};
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@@ -95,44 +93,51 @@ public partial class AuthPage
|
|||||||
|
|
||||||
private async Task Login()
|
private async Task Login()
|
||||||
{
|
{
|
||||||
await AccountsWebAPIService.Authenticate(_loginModel, LoginSuccess, LoginBadRequest, LoginUnauthorized);
|
void LoginBadRequest(IDictionary<string, string[]> data)
|
||||||
|
{
|
||||||
|
_formMessageIsSuccess = false;
|
||||||
|
_formMessage = data.SelectMany(x => x.Value).FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
async void LoginSuccess(AuthenticateResponse data)
|
void LoginUnauthorized()
|
||||||
|
{
|
||||||
|
_formMessageIsSuccess = false;
|
||||||
|
_formMessage = "Incorrect account data";
|
||||||
|
}
|
||||||
|
|
||||||
|
async Task LoginSuccess(AuthenticateResponse data)
|
||||||
{
|
{
|
||||||
await TokensService.SaveAuthenticationData(data);
|
await TokensService.SaveAuthenticationData(data);
|
||||||
NavigationManager.NavigateTo(RedirectTo);
|
NavigationManager.NavigateTo(RedirectTo);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LoginBadRequest(IDictionary<string, string[]> data)
|
|
||||||
{
|
|
||||||
_errors = data.SelectMany(x => x.Value).Select(x => $"• {x}");
|
|
||||||
}
|
|
||||||
|
|
||||||
void LoginUnauthorized()
|
await AccountsWebAPIService.Authenticate(_loginModel, async (data) => await LoginSuccess(data), LoginBadRequest, LoginUnauthorized);
|
||||||
{
|
|
||||||
_errors = [ "Incorrect account data" ];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task Register()
|
private async Task Register()
|
||||||
{
|
{
|
||||||
if (_registerModel.Password != _passwordConfirmation)
|
|
||||||
{
|
|
||||||
_errors = [ "Password fields don't match" ];
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
await AccountsWebAPIService.Register(_registerModel, RegisterSuccess, RegisterBadRequest);
|
|
||||||
|
|
||||||
void RegisterSuccess(RegisterResponse data)
|
void RegisterSuccess(RegisterResponse data)
|
||||||
{
|
{
|
||||||
|
_formMessageIsSuccess = true;
|
||||||
|
_formMessage = "You are registered. You can sign in now.";
|
||||||
_isSingUp = false;
|
_isSingUp = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RegisterBadRequest(IDictionary<string, string[]> data)
|
void RegisterBadRequest(IDictionary<string, string[]> data)
|
||||||
{
|
{
|
||||||
_errors = data.SelectMany(x => x.Value).Select(x => $"• {x}");
|
_formMessageIsSuccess = false;
|
||||||
|
_formMessage = data.SelectMany(x => x.Value).FirstOrDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (_registerModel.Password != _registerPasswordConfirmation)
|
||||||
|
{
|
||||||
|
_formMessageIsSuccess = false;
|
||||||
|
_formMessage = "Password fields don't match";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
await AccountsWebAPIService.Register(_registerModel, RegisterSuccess, RegisterBadRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
Reference in New Issue
Block a user