Allow OpenID Users to sign up with a token.
This commit is contained in:
@@ -99,6 +99,7 @@ namespace CarCareTracker.Controllers
|
|||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
_logger.LogInformation($"User {userEmailAddress} tried to login via OpenID but is not a registered user in LubeLogger.");
|
_logger.LogInformation($"User {userEmailAddress} tried to login via OpenID but is not a registered user in LubeLogger.");
|
||||||
|
return View("OpenIDRegistration", model: userEmailAddress);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -149,6 +150,12 @@ namespace CarCareTracker.Controllers
|
|||||||
return Json(result);
|
return Json(result);
|
||||||
}
|
}
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
|
public IActionResult RegisterOpenIdUser(LoginModel credentials)
|
||||||
|
{
|
||||||
|
var result = _loginLogic.RegisterOpenIdUser(credentials);
|
||||||
|
return Json(result);
|
||||||
|
}
|
||||||
|
[HttpPost]
|
||||||
public IActionResult RequestResetPassword(LoginModel credentials)
|
public IActionResult RequestResetPassword(LoginModel credentials)
|
||||||
{
|
{
|
||||||
var result = _loginLogic.RequestResetPassword(credentials);
|
var result = _loginLogic.RequestResetPassword(credentials);
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ namespace CarCareTracker.Logic
|
|||||||
OperationResponse GenerateUserToken(string emailAddress, bool autoNotify);
|
OperationResponse GenerateUserToken(string emailAddress, bool autoNotify);
|
||||||
bool DeleteUserToken(int tokenId);
|
bool DeleteUserToken(int tokenId);
|
||||||
bool DeleteUser(int userId);
|
bool DeleteUser(int userId);
|
||||||
|
OperationResponse RegisterOpenIdUser(LoginModel credentials);
|
||||||
OperationResponse RegisterNewUser(LoginModel credentials);
|
OperationResponse RegisterNewUser(LoginModel credentials);
|
||||||
OperationResponse RequestResetPassword(LoginModel credentials);
|
OperationResponse RequestResetPassword(LoginModel credentials);
|
||||||
OperationResponse ResetPasswordByUser(LoginModel credentials);
|
OperationResponse ResetPasswordByUser(LoginModel credentials);
|
||||||
@@ -60,6 +61,45 @@ namespace CarCareTracker.Logic
|
|||||||
return result.Id != 0;
|
return result.Id != 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public OperationResponse RegisterOpenIdUser(LoginModel credentials)
|
||||||
|
{
|
||||||
|
//validate their token.
|
||||||
|
var existingToken = _tokenData.GetTokenRecordByBody(credentials.Token);
|
||||||
|
if (existingToken.Id == default || existingToken.EmailAddress != credentials.EmailAddress)
|
||||||
|
{
|
||||||
|
return new OperationResponse { Success = false, Message = "Invalid Token" };
|
||||||
|
}
|
||||||
|
if (string.IsNullOrWhiteSpace(credentials.EmailAddress) || string.IsNullOrWhiteSpace(credentials.UserName))
|
||||||
|
{
|
||||||
|
return new OperationResponse { Success = false, Message = "Username cannot be blank" };
|
||||||
|
}
|
||||||
|
var existingUser = _userData.GetUserRecordByUserName(credentials.UserName);
|
||||||
|
if (existingUser.Id != default)
|
||||||
|
{
|
||||||
|
return new OperationResponse { Success = false, Message = "Username already taken" };
|
||||||
|
}
|
||||||
|
var existingUserWithEmail = _userData.GetUserRecordByEmailAddress(credentials.EmailAddress);
|
||||||
|
if (existingUserWithEmail.Id != default)
|
||||||
|
{
|
||||||
|
return new OperationResponse { Success = false, Message = "A user with that email already exists" };
|
||||||
|
}
|
||||||
|
_tokenData.DeleteToken(existingToken.Id);
|
||||||
|
var newUser = new UserData()
|
||||||
|
{
|
||||||
|
UserName = credentials.UserName,
|
||||||
|
Password = GetHash(NewToken()), //generate a password for OpenID User
|
||||||
|
EmailAddress = credentials.EmailAddress
|
||||||
|
};
|
||||||
|
var result = _userData.SaveUserRecord(newUser);
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
return new OperationResponse { Success = true, Message = "You will be redirected to the login page briefly." };
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return new OperationResponse { Success = false, Message = "Something went wrong, please try again later." };
|
||||||
|
}
|
||||||
|
}
|
||||||
//handles user registration
|
//handles user registration
|
||||||
public OperationResponse RegisterNewUser(LoginModel credentials)
|
public OperationResponse RegisterNewUser(LoginModel credentials)
|
||||||
{
|
{
|
||||||
|
|||||||
50
Views/Login/OpenIDRegistration.cshtml
Normal file
50
Views/Login/OpenIDRegistration.cshtml
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
@using CarCareTracker.Helper
|
||||||
|
@inject IConfigHelper config
|
||||||
|
@inject ITranslationHelper translator
|
||||||
|
@{
|
||||||
|
var logoUrl = config.GetLogoUrl();
|
||||||
|
var userLanguage = config.GetServerLanguage();
|
||||||
|
}
|
||||||
|
@model string
|
||||||
|
@{
|
||||||
|
ViewData["Title"] = "LubeLogger - Register";
|
||||||
|
}
|
||||||
|
@section Scripts {
|
||||||
|
<script src="~/js/login.js"></script>
|
||||||
|
}
|
||||||
|
<div class="container d-flex align-items-center justify-content-center" style="height:100vh">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12">
|
||||||
|
<img src="@logoUrl" />
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="inputToken">@translator.Translate(userLanguage, "Token")</label>
|
||||||
|
<input type="text" id="inputToken" class="form-control">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="inputUserName">@translator.Translate(userLanguage, "Username")</label>
|
||||||
|
<input type="text" id="inputUserName" class="form-control" value="@Model">
|
||||||
|
</div>
|
||||||
|
<div class="d-grid">
|
||||||
|
<button type="button" class="btn btn-warning mt-2" onclick="performOpenIdRegistration()"><i class="bi bi-box-arrow-in-right me-2"></i>@translator.Translate(userLanguage, "Register")</button>
|
||||||
|
</div>
|
||||||
|
<div class="d-grid">
|
||||||
|
<a href="/Login/Index" class="btn btn-link mt-2">@translator.Translate(userLanguage, "Back to Login")</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
function performOpenIdRegistration() {
|
||||||
|
var token = $("#inputToken").val();
|
||||||
|
var userName = $("#inputUserName").val();
|
||||||
|
var userEmail = decodeHTMLEntities('@Model');
|
||||||
|
$.post('/Login/RegisterOpenIdUser', { userName: userName, token: token, emailAddress: userEmail }, function (data) {
|
||||||
|
if (data.success) {
|
||||||
|
successToast(data.message);
|
||||||
|
setTimeout(function () { window.location.href = '/Login/Index' }, 500);
|
||||||
|
} else {
|
||||||
|
errorToast(data.message);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
Reference in New Issue
Block a user