Exemplo n.º 1
0
        public static DTOStatus CreateUserMethod(DTOUser DTOUser, IHostingEnvironment _hostEnvironment, UserManager <ApplicationUser> _userManager, SignInManager <ApplicationUser> _signInManager, string ConnectionString, string CurrentHostLocation, string strCurrentUser)
        {
            // Status to return
            DTOStatus objDTOStatus = new DTOStatus();

            objDTOStatus.StatusMessage = "Failure";
            objDTOStatus.Success       = false;

            try
            {
                RegisterDTO objRegisterDTO = new RegisterDTO();

                objRegisterDTO.userName  = DTOUser.userName;
                objRegisterDTO.email     = DTOUser.email;
                objRegisterDTO.firstName = DTOUser.firstName;
                objRegisterDTO.lastName  = DTOUser.lastName;
                objRegisterDTO.password  = DTOUser.password;

                var objRegisterStatus = RegisterController.RegisterUser(objRegisterDTO,
                                                                        ConnectionString, _hostEnvironment, _userManager, _signInManager, CurrentHostLocation, true, false);

                if (!objRegisterStatus.isSuccessful)
                {
                    // Registration was not successful
                    objDTOStatus.StatusMessage = objRegisterStatus.status;
                    return(objDTOStatus);
                }

                var optionsBuilder = new DbContextOptionsBuilder <ADefHelpDeskContext>();
                optionsBuilder.UseSqlServer(ConnectionString);

                using (var context = new ADefHelpDeskContext(optionsBuilder.Options))
                {
                    // Get User
                    var objDTOUser = (from objuser in context.AdefHelpDeskUsers
                                      where objuser.Username == DTOUser.userName
                                      select objuser).FirstOrDefault();

                    if (objDTOUser != null)
                    {
                        // Update remaining fields
                        objDTOUser.IsSuperUser = DTOUser.isSuperUser;
                    }

                    // Add the Roles for the user
                    int UserId = objDTOUser.UserId;
                    foreach (var itemRole in DTOUser.userRoles)
                    {
                        AdefHelpDeskUserRoles objRoleDTO = new AdefHelpDeskUserRoles();

                        objRoleDTO.RoleId = itemRole.iD;
                        objRoleDTO.UserId = UserId;

                        context.AdefHelpDeskUserRoles.Add(objRoleDTO);
                    }

                    context.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                objDTOStatus.StatusMessage = ex.GetBaseException().Message;
                objDTOStatus.Success       = false;
                return(objDTOStatus);
            }

            objDTOStatus.StatusMessage = "";
            objDTOStatus.Success       = true;
            return(objDTOStatus);
        }
Exemplo n.º 2
0
        public static DTOStatus UpdateUser(int id, DTOUser DTOUser, UserManager <ApplicationUser> _userManager, string ConnectionString, string strCurrentUser)
        {
            // Status to return
            DTOStatus objDTOStatus = new DTOStatus();

            objDTOStatus.StatusMessage = "Failure";
            objDTOStatus.Success       = false;

            #region Validation ****************************
            EmailValidation objEmailValidation = new EmailValidation();
            if (!objEmailValidation.IsValidEmail(DTOUser.email))
            {
                objDTOStatus.StatusMessage = "This Email is not valid.";
                objDTOStatus.Success       = false;
                return(objDTOStatus);
            }

            if ((DTOUser.firstName == null) || (DTOUser.firstName.Length < 1))
            {
                objDTOStatus.StatusMessage = "This First Name is not long enough.";
                objDTOStatus.Success       = false;
                return(objDTOStatus);
            }

            if ((DTOUser.lastName == null) || (DTOUser.lastName.Length < 1))
            {
                objDTOStatus.StatusMessage = "This Last Name is not long enough.";
                objDTOStatus.Success       = false;
                return(objDTOStatus);
            }
            #endregion

            var optionsBuilder = new DbContextOptionsBuilder <ADefHelpDeskContext>();
            optionsBuilder.UseSqlServer(ConnectionString);

            using (var context = new ADefHelpDeskContext(optionsBuilder.Options))
            {
                // Get User
                var objDTOUser = (from objuser in context.AdefHelpDeskUsers
                                  .Include(role => role.AdefHelpDeskUserRoles)
                                  where objuser.UserId == id
                                  select objuser).FirstOrDefault();

                if (objDTOUser == null)
                {
                    objDTOStatus.StatusMessage = "Not Found";
                    objDTOStatus.Success       = false;
                    return(objDTOStatus);
                }

                // Check the Email
                var objAdefHelpDeskEmail = (from AdefHelpDeskUsers in context.AdefHelpDeskUsers
                                            where AdefHelpDeskUsers.Email.ToLower() == DTOUser.email.ToLower()
                                            where AdefHelpDeskUsers.Username != DTOUser.userName
                                            select AdefHelpDeskUsers).FirstOrDefault();

                if (objAdefHelpDeskEmail != null)
                {
                    // User is already taken
                    objDTOStatus.StatusMessage = "This Email address is already taken.";
                    objDTOStatus.Success       = false;
                    return(objDTOStatus);
                }

                try
                {
                    // Update the user
                    objDTOUser.FirstName        = DTOUser.firstName;
                    objDTOUser.LastName         = DTOUser.lastName;
                    objDTOUser.Email            = DTOUser.email;
                    objDTOUser.VerificationCode = null; // Admin updating user always clears verification code

                    // Cannot change your own IsSuperUser status
                    if (objDTOUser.Username != strCurrentUser)
                    {
                        objDTOUser.IsSuperUser = DTOUser.isSuperUser;
                    }

                    context.SaveChanges();
                }
                catch (Exception ex)
                {
                    objDTOStatus.Success       = false;
                    objDTOStatus.StatusMessage = ex.GetBaseException().Message;
                    return(objDTOStatus);
                }

                // Delete all roles -- so we can add the new ones
                foreach (var itemRole in objDTOUser.AdefHelpDeskUserRoles)
                {
                    var objUserRole = context.AdefHelpDeskUserRoles.SingleOrDefault(x => x.UserRoleId == itemRole.UserRoleId);
                    context.AdefHelpDeskUserRoles.Remove(objUserRole);
                }

                context.SaveChanges();

                // Add the Roles for the user
                foreach (var itemRole in DTOUser.userRoles)
                {
                    AdefHelpDeskUserRoles objRoleDTO = new AdefHelpDeskUserRoles();

                    objRoleDTO.RoleId = itemRole.iD;
                    objRoleDTO.UserId = DTOUser.userId;

                    context.AdefHelpDeskUserRoles.Add(objRoleDTO);
                }

                context.SaveChanges();
            }

            #region Migrate User (if needed)
            // Get user in UserManager
            var user = _userManager.FindByNameAsync(DTOUser.userName).Result;
            if (user == null)
            {
                // The user is in the old memebership API
                // Migrate them

                if ((DTOUser.password != null) && (DTOUser.password.Trim().Length < 1))
                {
                    objDTOStatus.Success       = false;
                    objDTOStatus.StatusMessage = "Account must be migrated to the new membership system -- Must supply a new password";
                    return(objDTOStatus);
                }

                RegisterDTO objRegisterDTO = new RegisterDTO();

                objRegisterDTO.email     = DTOUser.email;
                objRegisterDTO.firstName = DTOUser.firstName;
                objRegisterDTO.lastName  = DTOUser.lastName;
                objRegisterDTO.password  = DTOUser.password;
                objRegisterDTO.userName  = DTOUser.userName;

                try
                {
                    // Membership API

                    user = new ApplicationUser {
                        UserName = DTOUser.userName, Email = DTOUser.email
                    };
                    var RegisterStatus = _userManager.CreateAsync(user, DTOUser.password).Result;

                    if (!RegisterStatus.Succeeded)
                    {
                        // Registration was not successful
                        if (RegisterStatus.Errors.FirstOrDefault() != null)
                        {
                            objDTOStatus.StatusMessage = RegisterStatus.Errors.FirstOrDefault().Description;
                        }
                        else
                        {
                            objDTOStatus.StatusMessage = "Registration error";
                        }

                        objDTOStatus.Success = false;
                        return(objDTOStatus);
                    }
                }
                catch (Exception ex)
                {
                    objDTOStatus.Success       = false;
                    objDTOStatus.StatusMessage = ex.Message;
                    return(objDTOStatus);
                }
            }
            #endregion

            // Update Email
            var result = _userManager.SetEmailAsync(user, DTOUser.email).Result;

            // Only update password if it is passed
            if ((DTOUser.password != null) && (DTOUser.password.Trim().Length > 1))
            {
                try
                {
                    var resetToken     = _userManager.GeneratePasswordResetTokenAsync(user).Result;
                    var passwordResult = _userManager.ResetPasswordAsync(user, resetToken, DTOUser.password).Result;

                    if (!passwordResult.Succeeded)
                    {
                        if (passwordResult.Errors.FirstOrDefault() != null)
                        {
                            objDTOStatus.StatusMessage = passwordResult.Errors.FirstOrDefault().Description;
                        }
                        else
                        {
                            objDTOStatus.StatusMessage = "Pasword error";
                        }

                        objDTOStatus.Success = false;
                        return(objDTOStatus);
                    }
                }
                catch (Exception ex)
                {
                    objDTOStatus.Success       = false;
                    objDTOStatus.StatusMessage = ex.Message;
                    return(objDTOStatus);
                }
            }

            objDTOStatus.StatusMessage = "";
            objDTOStatus.Success       = true;

            return(objDTOStatus);
        }