コード例 #1
0
        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
                }));
            }
        }
コード例 #2
0
        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)
                }));
            }
        }
コード例 #3
0
        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"
            });
        }
コード例 #4
0
        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"
            });
        }
コード例 #5
0
        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> &copy; 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> &copy; 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);
        }