private JsonResult CreateAdminUser(RegisterViewModel request) { try { var adminCheck = _context.Users.FirstOrDefault(u => u.UserName == request.RegNumber); if (adminCheck != null) { if (adminCheck.UserName == request.RegNumber) { return(Json(new ReturnData <HrpEmployee> { Success = false, Message = "Please user a different username" })); } if (adminCheck.Email == request.Email) { return(Json(new ReturnData <HrpEmployee> { Success = false, Message = "Please user a different email address" })); } } var user = new User { Email = request.Email, UserName = request.RegNumber, Code = Guid.NewGuid().ToString(), UserGroupsId = request.UserGroup, Role = Role.Admin }; _context.Users.Add(user); _context.SaveChanges(); mailMethod = MailSendMethod.AccountConfirmation; var subject = "Account Creation"; var emailContent = new MailsViewModel { UserCode = user.UserName, Firstname = request.Email, Code = user.Code, Email = request.Email, PortalUrl = request.PortalUrl, MailMethod = mailMethod, Subject = subject }; var success = emailSender.SendEmail(emailContent); var msg = "Account created successfully. "; return(Json(new ReturnData <bool> { Success = success, Message = success ? msg + "Check email inbox" : msg })); } catch (Exception ex) { return(Json(new ReturnData <bool> { Success = false, Message = ex.Message })); } }
public JsonResult ResetPassword(RegisterViewModel request) { request.Password = request.Password ?? ""; var requiredFields = new List <Tuple <string, string, DataType> > { Tuple.Create("username", request.RegNumber, DataType.Default), }; var validUserInputs = _validateService.Validate(requiredFields); if (!validUserInputs.Valid) { return(Json(new ReturnData <string> { Message = validUserInputs.Errors, Success = validUserInputs.Valid })); } try { var registeredUser = _context.Users.FirstOrDefault(u => (u.UserName.ToUpper().Equals(request.RegNumber.ToUpper())) || (u.Code.ToString() == request.RegNumber) || (u.Id.ToString() == request.RegNumber)); if (registeredUser == null) { return(Json(new ReturnData <string> { Success = false, Message = "Username not found" })); } if (string.IsNullOrEmpty(registeredUser.UserName)) { return(Json(new ReturnData <string> { Success = false, Message = "Username not found" })); } registeredUser.PasswordHash = registeredUser.PasswordHash ?? ""; var hashedNewPassword = SecurePasswordHasher.Hash(request.Password); if (hashedNewPassword.ToUpper().Equals(registeredUser.PasswordHash.ToUpper())) { return(Json(new ReturnData <string> { Success = false, Message = "Kindly use a different password from the previous" })); } var userResetPassword = new UserResetPassword(); if ((request.Role == Role.Admin) || (request.Role == Role.All)) { userResetPassword = _context.UserResetPasswords.FirstOrDefault(u => u.UserId == registeredUser.Id && u.Status == false); registeredUser.PasswordHash = SecurePasswordHasher.Hash(request.Password); registeredUser.EmailConfirmed = true; registeredUser.Status = true; if (userResetPassword != null) { userResetPassword.Status = true; _context.Update(userResetPassword); } _context.Update(registeredUser); _context.SaveChanges(); return(Json(new ReturnData <string> { Success = true, Message = "Password reset successful" })); } userResetPassword = new UserResetPassword { UserId = registeredUser.Id, ResetCode = Guid.NewGuid().ToString(), DateCreated = DateTime.Now, Status = false }; var success = false; var userGroup = _context.UserGroups.FirstOrDefault(u => u.Id == registeredUser.UserGroupsId); mailMethod = MailSendMethod.PasswordReset; var subject = "Reset Account Password"; if (userGroup?.Role == Role.Student) { var classStatus = _context.Settings.FirstOrDefault()?.ClassStatus; var result = _unisolApiProxy.CheckStudentExists(request.RegNumber, classStatus).Result; var jdata = new ProcessJsonReturnResults <UserDetails>(result).UnisolApiData; var emailContent = new MailsViewModel { UserCode = request.RegNumber, Firstname = jdata.Data.Names, Code = userResetPassword.ResetCode, Email = registeredUser.Email, MailMethod = mailMethod, PortalUrl = request.PortalUrl, Subject = subject }; success = emailSender.SendEmail(emailContent); } if (userGroup?.Role == Role.Staff) { var result = _unisolApiProxy.CheckEmployeeExists(request.RegNumber).Result; var jdata = JsonConvert.DeserializeObject <ReturnData <HrpEmployee> >(result); var emailContent = new MailsViewModel { UserCode = request.RegNumber, Firstname = jdata.Data.Names, PortalUrl = request.PortalUrl, Code = userResetPassword.ResetCode, Email = registeredUser.Email, MailMethod = mailMethod, Subject = subject }; success = emailSender.SendEmail(emailContent); } if (success) { registeredUser.Code = userResetPassword.ResetCode; _context.SaveChanges(); var email = registeredUser.Email.Split('@'); return(Json(new ReturnData <bool> { Success = true, Message = $"We have sent a link to reset your password, please check your email ({email[0].Substring(0, 1)}*****{email[0].Substring(email[0].Length - 2)}@{email[1]})." })); } return(Json(new ReturnData <bool> { Success = false, Message = "There was a problem while trying reset your password, please contact admin" })); } catch (Exception ex) { return(Json(new ReturnData <string> { Success = false, Message = "Something went wrong, please try again after sometime.", Error = new Error(ex) })); } }
private ReturnData <bool> CreateStudentUser(RegisterViewModel request, bool isAdmin, bool isTest) { var classStatus = _context.Settings.FirstOrDefault()?.ClassStatus ?? "Active"; var result = _unisolApiProxy.CheckStudentExists(request.RegNumber, classStatus).Result; var jdata = new ProcessJsonReturnResults <Register>(result).UnisolApiData; if (!jdata.Success) { return new ReturnData <bool> { Success = false, Message = jdata.Message } } ; var defaultStudentGroup = _context.UserGroups.FirstOrDefault(u => u.Status && u.IsDefault && u.Role == Role.Student); if (defaultStudentGroup == null) { logger.Error($"UserRegistrationDefaultStudentGroup: \t Students default group not set"); return(new ReturnData <bool> { Success = false, Message = "There was a problem while creating your account, please contact admin" }); } var groupId = request.UserGroup == 0 ? defaultStudentGroup.Id : request.UserGroup; var register = jdata.Data; var passwordConfirmed = isAdmin ? true : false; var user = new User { UserName = request.RegNumber, Email = register.Email, UserGroupsId = groupId, Code = Guid.NewGuid().ToString(), EmailConfirmed = passwordConfirmed, Status = passwordConfirmed, Role = Role.Student, PasswordHash = SecurePasswordHasher.Hash(request.Password) }; if (!isAdmin) { groupId = defaultStudentGroup.Id; mailMethod = MailSendMethod.AccountConfirmation; var subject = "Account Creation"; if (!isTest) { var emailContent = new MailsViewModel { UserCode = request.RegNumber, Firstname = register.Names, Code = user.Code, Email = register.Email, MailMethod = mailMethod, Subject = subject, PortalUrl = request.PortalUrl }; var emailResponse = emailSender.SendEmail(emailContent); if (!emailResponse) { return new ReturnData <bool> { Success = false, Message = "Sorry, an error has been encountered while sending an email. Kindly contact admin" } } ; } } _context.Users.Add(user); _context.SaveChanges(); return(new ReturnData <bool> { Success = true, Message = "Account created successfully" }); }
private ReturnData <bool> CreateStaffUser(RegisterViewModel request, bool isAdmin, bool isTest) { var result = _unisolApiProxy.CheckEmployeeExists(request.RegNumber).Result; var jdata = JsonConvert.DeserializeObject <ReturnData <HrpEmployee> >(result); if (!jdata.Success) { return new ReturnData <bool> { Success = false, Message = jdata.Message } } ; var defaultStaffGroup = _context.UserGroups.FirstOrDefault(u => u.Status && u.IsDefault && u.Role == Role.Staff); if (defaultStaffGroup == null) { logger.Error($"UserRegistrationDefaultStaffGroup: \t Students default group not set"); return(new ReturnData <bool> { Success = false, Message = "There was a problem while creating your account, please contact admin" }); } var groupId = string.IsNullOrEmpty(request.UserGroup.ToString()) || request.UserGroup < 1 ? defaultStaffGroup.Id : request.UserGroup; var register = jdata.Data; var user = new User { UserName = request.RegNumber, Email = register.Wemail, UserGroupsId = groupId, Code = Guid.NewGuid().ToString(), EmailConfirmed = isAdmin, Role = Role.Staff, PasswordHash = SecurePasswordHasher.Hash(request.Password) }; if (!isAdmin) { groupId = defaultStaffGroup.Id; mailMethod = MailSendMethod.AccountConfirmation; var subject = "Account Creation"; var emailContent = new MailsViewModel { UserCode = request.RegNumber, Firstname = register.Names, Code = user.Code, Email = register.Wemail, MailMethod = mailMethod, Subject = subject, PortalUrl = request.PortalUrl }; var success = emailSender.SendEmail(emailContent); if (!success) { return new ReturnData <bool> { Success = false, Message = "A problem occurred while sending an email for account creation, please contact admin" } } ; } _context.Users.Add(user); _context.SaveChanges(); return(new ReturnData <bool> { Success = true, Message = "Account created successfully" }); }
private string getMailMessage(string firstname, string varificationLink, string code, EmailAddress address, MailSendMethod mailMethod) { var message = ""; if (mailMethod == MailSendMethod.PasswordReset) { message = "<div style='margin: 2em 5em 2em 5em; background-color: #f2f2f2'>" + "<table style='width: 100 %; margin: 5% 10% 5% 10%;'><br>" + "<tr><td><img src='cid:logoId' style='width:200px; display: block; margin-left: auto; margin-right: auto;'/></td></tr>" + "<tr><td><h2 style='text-align: center; color: red'> Forgot Password ?<br></h2></td></tr>" + "<tr><td><h4>Dear " + firstname + ",</h4></td></tr>" + "<tr><td>You have requested for a password reset. Click on the 'reset password' button below to enter a new passsword <br> <br></td></tr>" + "<tr><td style='text-align: center;'><a href='" + varificationLink + "' style='background-color: red; color: white; padding: 0.5em 1em; text-align: center; text-decoration: none; border-radius: 0.5em;'> Reset Password<br></a></td></tr> " + "<tr><td><p><span style='font-weight: bold'> Disclaimer:- </span> <i>The content of this email is confidential and intended for the recipient specified in this message only. " + "It is strictly forbidden to share any part of this message with any third party. " + "If you received this message by mistake, please reply to this message and follow with its deletion, " + "so that we can ensure such a mistake does not occur in the future.</i> </p></td></tr>" + "<tr><td><p>Sincerely, <br><br> <span style='font-weight: bold'> " + address.Name + " </span><br></p></td></tr> " + "</table>" + "<p style='text-align: center'>Powered By <a href='http://www.abnosoftwares.co.ke/' target='_blank' style='color:blue;'>" + "<b>ABNO Softwares International Ltd.</b></a> © Copyright <span id='c-year'>" + DateTime.UtcNow.Year + "</span></p> <br>" + "</div>"; return(message); } if (mailMethod == MailSendMethod.AccountConfirmation) { message = "<div style='margin: 2em 5em 2em 5em; background-color: #f2f2f2'>" + "<table style='width: 100 %; margin: 5% 10% 5% 10%;'><br>" + "<tr><td><img src='cid:logoId' style='width:200px; display: block; margin-left: auto; margin-right: auto;'/></td></tr>" + "<tr><td><h2 style='text-align: center; color: red'> Account Created Successfully <br></h2></td></tr>" + "<tr><td><h4>Dear " + firstname + ",</h4></td></tr>" + "<tr><td> Your Account has been created. Click on the 'Confirm Account' button below to confirm your account <br> <br></td></tr>" + "<tr><td style='text-align: center;'><a href='" + varificationLink + "' style='background-color: red; color: white; padding: 0.5em 1em; text-align: center; text-decoration: none; border-radius: 0.5em;'> Confirm Account <br></a></td></tr> " + "<tr><td><p><span style='font-weight: bold'> Disclaimer:- </span> <i>The content of this email is confidential and intended for the recipient specified in this message only. " + "It is strictly forbidden to share any part of this message with any third party. " + "If you received this message by mistake, please reply to this message and follow with its deletion, " + "so that we can ensure such a mistake does not occur in the future.</i> </p></td></tr>" + "<tr><td><p>Sincerely, <br><br> <span style='font-weight: bold'> " + address.Name + " </span><br></p></td></tr> " + " </table>" + "<p style='text-align: center'>Powered By <a href='http://www.abnosoftwares.co.ke/' target='_blank' style='color:blue;'>" + "<b>ABNO Softwares International Ltd.</b></a> © Copyright <span id='c-year'>" + DateTime.UtcNow.Year + "</span></p><br>" + "</div>"; } if (mailMethod == MailSendMethod.NewsPosting || mailMethod == MailSendMethod.EventPosting) { message = code; } if (mailMethod == MailSendMethod.PortalDown) { message = $"{code} portal is inaccessible, kindly assist"; } return(message); }