180 lines
7.6 KiB
Plaintext
180 lines
7.6 KiB
Plaintext
@namespace Oqtane.Modules.Admin.Register
|
|
@using System.Net
|
|
@inherits ModuleBase
|
|
@inject NavigationManager NavigationManager
|
|
@inject IUserService UserService
|
|
@inject IStringLocalizer<Index> Localizer
|
|
@inject IStringLocalizer<SharedResources> SharedLocalizer
|
|
@inject ISettingService SettingService
|
|
|
|
@if (PageState.Site.AllowRegistration)
|
|
{
|
|
<AuthorizeView Roles="@RoleNames.Registered">
|
|
<Authorizing>
|
|
<text>...</text>
|
|
</Authorizing>
|
|
<Authorized>
|
|
<ModuleMessage Message="@Localizer["Info.Registration.Exists"]" Type="MessageType.Info" />
|
|
</Authorized>
|
|
<NotAuthorized>
|
|
<ModuleMessage Message="@_passwordrequirements" Type="MessageType.Info" />
|
|
<form @ref="form" class="@(validated ? "was-validated" : "needs-validation")" novalidate>
|
|
<div class="container">
|
|
<div class="row mb-1 align-items-center">
|
|
<Label Class="col-sm-3" For="username" HelpText="Your username. Note that this field can not be modified once it is saved." ResourceKey="Username"></Label>
|
|
<div class="col-sm-9">
|
|
<input id="username" class="form-control" @bind="@_username" maxlength="256" required />
|
|
</div>
|
|
</div>
|
|
<div class="row mb-1 align-items-center">
|
|
<Label Class="col-sm-3" For="password" HelpText="Please choose a sufficiently secure password and enter it here" ResourceKey="Password"></Label>
|
|
<div class="col-sm-9">
|
|
<div class="input-group">
|
|
<input id="password" type="@_passwordtype" class="form-control" @bind="@_password" autocomplete="new-password" required />
|
|
<button type="button" class="btn btn-secondary" @onclick="@TogglePassword" tabindex="-1">@_togglepassword</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="row mb-1 align-items-center">
|
|
<Label Class="col-sm-3" For="confirm" HelpText="Enter your password again to confirm it matches the value entered above" ResourceKey="Confirm"></Label>
|
|
<div class="col-sm-9">
|
|
<div class="input-group">
|
|
<input id="confirm" type="@_passwordtype" class="form-control" @bind="@_confirm" autocomplete="new-password" required />
|
|
<button type="button" class="btn btn-secondary" @onclick="@TogglePassword" tabindex="-1">@_togglepassword</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="row mb-1 align-items-center">
|
|
<Label Class="col-sm-3" For="email" HelpText="Your email address where you wish to receive notifications" ResourceKey="Email"></Label>
|
|
<div class="col-sm-9">
|
|
<input id="email" class="form-control" @bind="@_email" maxlength="256" required />
|
|
</div>
|
|
</div>
|
|
<div class="row mb-1 align-items-center">
|
|
<Label Class="col-sm-3" For="displayname" HelpText="Your full name" ResourceKey="DisplayName"></Label>
|
|
<div class="col-sm-9">
|
|
<input id="displayname" class="form-control" @bind="@_displayname" maxlength="50" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<br />
|
|
<button type="button" class="btn btn-primary" @onclick="Register">@Localizer["Register"]</button>
|
|
<button type="button" class="btn btn-secondary" @onclick="Cancel">@SharedLocalizer["Cancel"]</button>
|
|
</form>
|
|
</NotAuthorized>
|
|
</AuthorizeView>
|
|
}
|
|
else
|
|
{
|
|
<ModuleMessage Message="@Localizer["Info.Registration.Disabled"]" Type="MessageType.Info" />
|
|
}
|
|
|
|
@code {
|
|
private string _passwordrequirements;
|
|
private string _username = string.Empty;
|
|
private ElementReference form;
|
|
private bool validated = false;
|
|
private string _password = string.Empty;
|
|
private string _passwordtype = "password";
|
|
private string _togglepassword = string.Empty;
|
|
private string _confirm = string.Empty;
|
|
private string _email = string.Empty;
|
|
private string _displayname = string.Empty;
|
|
|
|
public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Anonymous;
|
|
|
|
protected override async Task OnInitializedAsync()
|
|
{
|
|
_passwordrequirements = await UserService.GetPasswordRequirementsAsync(PageState.Site.SiteId);
|
|
}
|
|
|
|
protected override void OnParametersSet()
|
|
{
|
|
_togglepassword = SharedLocalizer["ShowPassword"];
|
|
}
|
|
|
|
private async Task Register()
|
|
{
|
|
validated = true;
|
|
var interop = new Interop(JSRuntime);
|
|
if (await interop.FormValid(form))
|
|
{
|
|
try
|
|
{
|
|
bool _isEmailValid = Utilities.IsValidEmail(_email);
|
|
|
|
if (_isEmailValid)
|
|
{
|
|
if (_password == _confirm)
|
|
{
|
|
var user = new User
|
|
{
|
|
SiteId = PageState.Site.SiteId,
|
|
Username = _username,
|
|
Password = _password,
|
|
Email = _email,
|
|
DisplayName = (_displayname == string.Empty ? _username : _displayname),
|
|
PhotoFileId = null
|
|
};
|
|
user = await UserService.AddUserAsync(user);
|
|
|
|
if (user != null)
|
|
{
|
|
await logger.LogInformation("User Created {Username} {Email}", _username, _email);
|
|
if (PageState.QueryString.ContainsKey("returnurl"))
|
|
{
|
|
NavigationManager.NavigateTo(WebUtility.UrlDecode(PageState.QueryString["returnurl"]));
|
|
}
|
|
else // legacy behavior
|
|
{
|
|
AddModuleMessage(Localizer["Info.User.AccountCreate"], MessageType.Info);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
await logger.LogError("Error Adding User {Username} {Email}", _username, _email);
|
|
AddModuleMessage(Localizer["Error.User.AddInfo"], MessageType.Error);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
AddModuleMessage(Localizer["Message.Password.NoMatch"], MessageType.Warning);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
AddModuleMessage(Localizer["Message.Required.UserInfo"], MessageType.Warning);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
await logger.LogError(ex, "Error Adding User {Username} {Email} {Error}", _username, _email, ex.Message);
|
|
AddModuleMessage(Localizer["Error.User.Add"], MessageType.Error);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
AddModuleMessage(SharedLocalizer["Message.InfoRequired"], MessageType.Warning);
|
|
}
|
|
}
|
|
|
|
private void Cancel()
|
|
{
|
|
NavigationManager.NavigateTo(NavigateUrl(string.Empty));
|
|
}
|
|
|
|
private void TogglePassword()
|
|
{
|
|
if (_passwordtype == "password")
|
|
{
|
|
_passwordtype = "text";
|
|
_togglepassword = SharedLocalizer["HidePassword"];
|
|
}
|
|
else
|
|
{
|
|
_passwordtype = "password";
|
|
_togglepassword = SharedLocalizer["ShowPassword"];
|
|
}
|
|
}
|
|
}
|