Example #1
0
        public RoleResponse CreateRole(RolesDTO role, ApiContext apiContext)
        {
            _context = (MICAUMContext)DbManager.GetContext(apiContext.ProductType, apiContext.ServerType);
            var _roles = _mapper.Map <AspNetRoles>(role);

            if (string.IsNullOrEmpty(_roles.Id))
            {
                _roles.Id = Guid.NewGuid().ToString();
                DateTime now = DateTime.Now;
                _roles.ConcurrencyStamp = now.ToString();
                _context.AspNetRoles.Add(_roles);
                _context.SaveChanges();
                var _roleDTOs = _mapper.Map <RolesDTO>(_roles);
                return(new RoleResponse {
                    Status = BusinessStatus.Created, roles = _roleDTOs, Id = _roleDTOs.Id, ResponseMessage = $"Role created successfully! \n Role Name with: {_roleDTOs.Name}"
                });
                //return _roleDTOs;
            }
            else
            {
                _context.AspNetRoles.Update(_roles);
                _context.SaveChanges();
                var _roleDTOs = _mapper.Map <RolesDTO>(_roles);
                return(new RoleResponse {
                    Status = BusinessStatus.Created, roles = _roleDTOs, Id = _roleDTOs.Id, ResponseMessage = $"Role modified successfully!"
                });
                //return _roleDTOs;
            }
        }
        public UserResponse CreateProfileUser(UserDTO user, ApiContext apiContext)
        {
            _context = (MICAUMContext)DbManager.GetContext(apiContext.ProductType, apiContext.ServerType);
            var       userDetails = user.UserDetails.First();
            var       userAddress = user.UserAddress.First();
            EmailTest emailTest   = new EmailTest();

            if (string.IsNullOrEmpty(userDetails.UserId))
            {
                var aspNet = _context.AspNetUsers.SingleOrDefault(x => x.UserName == userDetails.Email);
                if (aspNet == null)
                {
                    userDetails.RoleId      = null;
                    userDetails.UserName    = userDetails.Email;
                    userDetails.CreatedDate = DateTime.Now;
                    //userDetails.ProfileImage = userDetails.ProfileImage;
                    AspNetUsers _users = _mapper.Map <AspNetUsers>(user);
                    if (string.IsNullOrEmpty(_users.Id))
                    {
                        _users.Id             = Guid.NewGuid().ToString();
                        _users.UserName       = userDetails.Email;
                        _users.Email          = userDetails.Email;
                        _users.FirstTimeLogin = 0;
                        _users.PasswordHash   = Utilities.GenerateDefaultPassword();
                        emailTest.To          = userDetails.Email;
                        emailTest.Subject     = "User profile creation";
                        emailTest.Message     = "Your account has been created with Username:"******"\n" + "Please use this for login.";
                        _context.AspNetUsers.Add(_users);
                    }
                    _context.SaveChanges();
                    var _usersDTOs = _mapper.Map <UserDTO>(_users);
                    SendEmailAsync(emailTest);
                    return(new UserResponse {
                        Status = BusinessStatus.Created, users = _usersDTOs, Id = _usersDTOs.Id, ResponseMessage = $"User created successfully! \n Login with: {_usersDTOs.Email}"
                    });
                }
                else
                {
                    return(new UserResponse {
                        Status = BusinessStatus.Error, ResponseMessage = $"User already exists"
                    });
                }
            }
            else
            {
                AspNetUsers _users       = _mapper.Map <AspNetUsers>(user);
                var         _useraddress = _mapper.Map <TblUserAddress>(userAddress);
                var         _usersDetail = _mapper.Map <TblUserDetails>(userDetails);
                //_context.AspNetUsers.Update(_users);
                //_context.TblUserDetails.Update(_usersDetail);
                _context.Update(_usersDetail);
                _context.Update(_useraddress);
                _context.SaveChanges();
                return(new UserResponse {
                    Status = BusinessStatus.Created, users = user, Id = _usersDetail.UserId, ResponseMessage = $"User modified successfully!"
                });
            }
        }
        public VerifyOTPResponse VerifyingOTP(VerifyOTP onetp, ApiContext apiContext)
        {
            _context = (MICAUMContext)DbManager.GetContext(apiContext.ProductType, apiContext.ServerType);
            var sentotp = _context.TblSendOtp.SingleOrDefault(x => x.UserId == onetp.UserId);

            if (sentotp.Otp == onetp.Otp)
            {
                var user = _context.AspNetUsers.SingleOrDefault(x => x.Id == sentotp.UserId);
                if (user != null)
                {
                    user.FirstTimeLogin = 1;
                }
                _context.AspNetUsers.Update(user);
                _context.TblSendOtp.Remove(sentotp);
                _context.SaveChanges();
                return(new VerifyOTPResponse {
                    Status = BusinessStatus.Ok, ResponseMessage = $"OTP verified successfully!"
                });;
            }
            else
            {
                return(new VerifyOTPResponse {
                    Status = BusinessStatus.NotFound, ResponseMessage = $"Invalid OTP"
                });;
            }
        }
        public String DeleteUserById(string Id, ApiContext apiContext)
        {
            _context = (MICAUMContext)DbManager.GetContext(apiContext.ProductType, apiContext.ServerType);
            var tbl_userdata = _context.AspNetUsers.Where(item => item.Id == Id).FirstOrDefault();

            tbl_userdata.IsActive = false;
            _context.SaveChanges();
            return("Deleted!");
        }
        public UserRoleResponse AssignRole(UserRoleMapDTO userRoles, ApiContext apiContext)
        {
            _context = (MICAUMContext)DbManager.GetContext(apiContext.ProductType, apiContext.ServerType);
            var          roledata = _context.AspNetUserRoles.FirstOrDefault(x => x.UserId == userRoles.UserId);
            UserRolesDTO roleDTO  = new UserRolesDTO();

            if (userRoles.RoleId != null)
            {
                if (roledata == null)
                {
                    for (int i = 0; i < userRoles.RoleId.Length; i++)
                    {
                        roleDTO.UserId = userRoles.UserId;
                        roleDTO.RoleId = userRoles.RoleId[i];
                        AspNetUserRoles _usersRole = _mapper.Map <AspNetUserRoles>(roleDTO);

                        _context.AspNetUserRoles.Add(_usersRole);
                        // _context.SaveChanges();
                    }
                }
                else
                {
                    var role = _context.AspNetUserRoles.Where(a => a.UserId == userRoles.UserId);
                    foreach (var item in role)
                    {
                        _context.AspNetUserRoles.Remove(item);
                    }
                    for (int i = 0; i < userRoles.RoleId.Length; i++)
                    {
                        roleDTO.UserId = userRoles.UserId;
                        roleDTO.RoleId = userRoles.RoleId[i];
                        AspNetUserRoles _usersRole = _mapper.Map <AspNetUserRoles>(roleDTO);

                        _context.AspNetUserRoles.Add(_usersRole);
                        // _context.SaveChanges();
                    }
                }
                var user = _context.TblUserDetails.SingleOrDefault(x => x.UserId == userRoles.UserId);

                if (string.IsNullOrEmpty(user.RoleId))
                {
                    user.RoleId = userRoles.RoleId[0].ToString();
                }
                _context.SaveChanges();

                //return userRoles;
                return(new UserRoleResponse {
                    Status = BusinessStatus.Created, role = userRoles, ResponseMessage = $"Assigned {userRoles.RoleId} Role successfully! "
                });
            }
            else
            {
                return(new UserRoleResponse {
                    Status = BusinessStatus.Error, role = userRoles, ResponseMessage = $"Please select the Role to assign "
                });
            }
        }
        //public UserDTO CreateProfileUser(UserDTO user)
        //{
        //    //  var userDetail = user.TblUserDetails.First();
        //    AspNetUsers _users = _mapper.Map<AspNetUsers>(user);
        //    _users.Id = Guid.NewGuid().ToString();
        //    DateTime now = DateTime.Now;
        //    _users.LockoutEnd = now;
        //    _context.AspNetUsers.Add(_users);
        //    _context.SaveChanges();
        //    var _usersDTOs = _mapper.Map<UserDTO>(_users);
        //    return _usersDTOs;
        //}

        public EmployeeDTO CreateProfileemployee(EmployeeDTO emp, ApiContext apiContext)
        {
            _context = (MICAUMContext)DbManager.GetContext(apiContext.ProductType, apiContext.ServerType);
            //  var userDetail = user.TblUserDetails.First();
            var _empls = _mapper.Map <TblEmployees>(emp);

            //_empls.Empid = Guid.NewGuid().ToString();
            //DateTime now = DateTime.Now;
            //_users.LockoutEnd = now;
            _context.TblEmployees.Add(_empls);
            _context.SaveChanges();
            var _empDTOs = _mapper.Map <EmployeeDTO>(_empls);

            return(_empDTOs);
        }
        public async Task <SendOtpResponse> ResetOTP(SendOtp sendOtp, ApiContext apiContext)
        {
            _context = (MICAUMContext)DbManager.GetContext(apiContext.ProductType, apiContext.ServerType);
            var user = _context.AspNetUsers.SingleOrDefault(x => x.Email == sendOtp.Email);

            try
            {
                if (user != null)
                {
                    EmailTest emailTest = new EmailTest();
                    Random    random    = new Random();
                    int       otp       = random.Next(1001, 9999);
                    var       chkotp    = _context.TblSendOtp.Where(a => a.Email == sendOtp.Email);
                    if (chkotp != null)
                    {
                        foreach (var item in chkotp)
                        {
                            _context.TblSendOtp.Remove(item);
                        }
                    }
                    sendOtp.UserId   = user.Id;
                    sendOtp.UserName = user.UserName;
                    sendOtp.Otp      = otp.ToString();
                    TblSendOtp _otp = _mapper.Map <TblSendOtp>(sendOtp);
                    _context.TblSendOtp.Add(_otp);
                    _context.SaveChanges();
                    emailTest.To      = sendOtp.Email;
                    emailTest.Subject = "Password reset for MICA";
                    emailTest.Message = "Dear User,\n" + "      " + "\n" + "      OTP for re-setting your MICA password is: " + otp + "      " + "\n" + "\nThanks & Regards:\n" + "      " + "MICA Team";
                    await SendEmailAsync(emailTest);
                }
                else
                {
                    return(new SendOtpResponse {
                        Status = BusinessStatus.NotFound, sendOtp = sendOtp, ResponseMessage = $"Please enter registered Email-ID"
                    });
                }
            }
            catch (Exception ex)
            {
                throw;
            }
            return(new SendOtpResponse {
                Status = BusinessStatus.Ok, sendOtp = sendOtp, ResponseMessage = $"OTP Sent Successfully!"
            });
        }
        public UserDTO ChangeMobileNumber(UserDTO userDTO, ApiContext apiContext)
        {
            _context = (MICAUMContext)DbManager.GetContext(apiContext.ProductType, apiContext.ServerType);
            AspNetUsers _aspNet   = _mapper.Map <AspNetUsers>(userDTO);
            var         _aspUsers = _context.AspNetUsers.SingleOrDefault(x => x.Id == _aspNet.Id);

            var _users = _context.TblUserDetails.SingleOrDefault(x => x.UserId == _aspNet.Id);

            _aspUsers.PhoneNumber = userDTO.PhoneNumber;
            _users.ContactNumber  = userDTO.PhoneNumber;
            _context.AspNetUsers.Update(_aspUsers);
            _context.TblUserDetails.Update(_users);
            _context.SaveChanges();
            var _usersDTOs = _mapper.Map <UserDTO>(_aspUsers);

            return(_usersDTOs);
        }
        /// <summary>
        /// Saves the assign permission.
        /// </summary>
        /// <param name="permissionIds">The permission ids.</param>
        /// <param name="apiContext">The API context.</param>
        /// <returns></returns>
        public UserPermissionResponse SaveAssignPermission(UserRolesPermissionDTO permissionIds, ApiContext apiContext)
        {
            _context = (MICAUMContext)DbManager.GetContext(apiContext.ProductType, apiContext.ServerType);
            TblUserPermissions userPermissions = null;

            foreach (var item in permissionIds.RolePermissionIds)
            {
                var newPermission = item.PermissionIds.ToList();
                var existingPerm  = _context.TblUserPermissions.Where(t => t.UserId == permissionIds.UserId && t.UserorRole == "User" && t.RoleId == item.RoleId).ToList();
                //Delete which are not in current permissions--
                var delPermission = existingPerm.Where(m => !item.PermissionIds.Contains((int)m.PermissionId)).ToList();
                foreach (var perm in delPermission)
                {
                    _context.Remove(perm);
                    existingPerm.Remove(perm);
                }
                var includedPermission = existingPerm.Where(m => item.PermissionIds.Contains((int)m.PermissionId)).ToList();
                foreach (var incPerm in includedPermission)
                {
                    newPermission.Remove((int)incPerm.PermissionId);
                }
                //Add new record
                foreach (var permissionId in newPermission)
                {
                    userPermissions              = new TblUserPermissions();
                    userPermissions.UserId       = permissionIds.UserId;
                    userPermissions.PermissionId = permissionId;
                    userPermissions.RoleId       = item.RoleId;
                    userPermissions.UserorRole   = "User";
                    // userPermissions.CreatedBy = CreatedBy;
                    userPermissions.CreatedDate = DateTime.Now;
                    userPermissions.Status      = true;
                    _context.TblUserPermissions.Add(userPermissions);
                }
            }

            _context.SaveChanges();
            return(new UserPermissionResponse {
                Status = BusinessStatus.Created, Id = userPermissions?.UserPermissionsId.ToString(), ResponseMessage = $"Assigned Permissions successfully!!"
            });
        }
        public UserDTO ModifyUser(UserDTO usersDTOs, ApiContext apiContext)
        {
            _context = (MICAUMContext)DbManager.GetContext(apiContext.ProductType, apiContext.ServerType);
            AspNetUsers _aspNet = _mapper.Map <AspNetUsers>(usersDTOs);

            //We Use .Include Function  to add all Child Classes from a Parent Table
            //In this Case Parent table is AspNet Users (Primary Key) Child Table is UserDetails (foreign Key)
            // var _aspUsers = _context.AspNetUsers.Include<>.SingleOrDefault(x => x.Id == usersDTOs.Id);
            //var _aspUsers = _context.AspNetUsers.Include<TblUserDetails,>
            //.SingleOrDefault(x => x.Id == usersDTOs.Id);

            //if (_aspUsers != null)
            //{
            //  _aspUsers.PhoneNumber = usersDTOs.PhoneNumber;
            //_aspNet.TblUserDetails.Update();
            _context.AspNetUsers.Update(_aspNet);
            _context.SaveChanges();
            //}
            var _usersDTOs = _mapper.Map <UserDTO>(_aspNet);

            return(_usersDTOs);
        }
        /// <summary>
        /// Assigns the permission.
        /// </summary>
        /// <param name="permissionIds">The permission ids.</param>
        /// <param name="apiContext">The API context.</param>
        /// <returns></returns>
        public UserPermissionResponse AssignPermission(UserPermissionDTO permissionIds, ApiContext apiContext)
        {
            _context = (MICAUMContext)DbManager.GetContext(apiContext.ProductType, apiContext.ServerType);
            UserPermissionsDTO userPermissions = null;

            for (int i = 0; i < permissionIds.PermissionIds.Length; i++)
            {
                userPermissions              = new UserPermissionsDTO();
                userPermissions.UserId       = permissionIds.UserId;
                userPermissions.PermissionId = Convert.ToInt16(permissionIds.PermissionIds[i]);
                userPermissions.UserorRole   = "User";
                // userPermissions.CreatedBy = CreatedBy;
                userPermissions.CreatedDate = DateTime.Now;
                userPermissions.Status      = true;
                var _usersPer = _mapper.Map <TblUserPermissions>(userPermissions);
                _context.TblUserPermissions.Add(_usersPer);
            }
            _context.SaveChanges();
            //return userPermissions;
            return(new UserPermissionResponse {
                Status = BusinessStatus.Created, perm = userPermissions, ResponseMessage = $"Assigned {userPermissions.PermissionId} Permissions successfully!!"
            });
        }
        public PasswordResponse ChangePassword(Password pass, ApiContext apiContext)
        {
            _context = (MICAUMContext)DbManager.GetContext(apiContext.ProductType, apiContext.ServerType);
            byte[] passwordHash;
            byte[] passwordSalt;
            var    _aspUsers = _context.AspNetUsers.FirstOrDefault(x => x.Id == pass.Id);

            if (pass.IsChangePassword == true)
            {
                if (pass.NewPassword == pass.ConfirmPassword)
                {
                    AspNetUsers _aspNet = _mapper.Map <AspNetUsers>(_aspUsers);

                    if (string.IsNullOrWhiteSpace(pass.ConfirmPassword))
                    {
                        throw new ArgumentException("Please enter valid password", "password");
                    }

                    passwordSalt = new byte[] { 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 };
                    using (var hmac = new System.Security.Cryptography.HMACSHA512(passwordSalt))
                    {
                        passwordHash = hmac.ComputeHash(System.Text.Encoding.UTF8.GetBytes(pass.ConfirmPassword));
                    }
                    _aspNet.PasswordHash = passwordHash;
                    _context.AspNetUsers.Update(_aspNet);
                    _context.SaveChanges();
                    var _usersDTOs = _mapper.Map <UserDTO>(_aspUsers);
                    return(new PasswordResponse {
                        Status = BusinessStatus.Created, passwd = pass, ResponseMessage = $"Password changed successfully!"
                    });
                }
                else
                {
                    return(new PasswordResponse {
                        Status = BusinessStatus.Error, ResponseMessage = $"Password not matching"
                    });
                }
            }
            else
            {
                if (pass.OldPassword != null)
                {
                    // check if user exists
                    if (_aspUsers == null)
                    {
                        return(null);
                    }

                    passwordSalt = new byte[] { 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 };

                    //// check if password is correct
                    if (!Utilities.VerifyPasswordHash(pass.OldPassword, _aspUsers.PasswordHash, passwordSalt))
                    {
                        return new PasswordResponse {
                                   Status = BusinessStatus.UnAuthorized, ResponseMessage = $"Please enter valid old password"
                        }
                    }
                    ;
                    //return null;

                    if (pass.NewPassword == pass.ConfirmPassword)
                    {
                        AspNetUsers _aspNet = _mapper.Map <AspNetUsers>(_aspUsers);

                        if (string.IsNullOrWhiteSpace(pass.ConfirmPassword))
                        {
                            throw new ArgumentException("Please enter valid password", "password");
                        }

                        passwordSalt = new byte[] { 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 };
                        using (var hmac = new System.Security.Cryptography.HMACSHA512(passwordSalt))
                        {
                            passwordHash = hmac.ComputeHash(System.Text.Encoding.UTF8.GetBytes(pass.ConfirmPassword));
                        }
                        _aspNet.PasswordHash = passwordHash;
                        _context.AspNetUsers.Update(_aspNet);
                        _context.SaveChanges();
                        var _usersDTOs = _mapper.Map <UserDTO>(_aspUsers);
                        return(new PasswordResponse {
                            Status = BusinessStatus.Created, passwd = pass, ResponseMessage = $"Password changed successfully!"
                        });
                    }
                    else
                    {
                        return(new PasswordResponse {
                            Status = BusinessStatus.InputValidationFailed, passwd = pass, ResponseMessage = $"Password not matching"
                        });
                    }
                }
                else
                {
                    return(new PasswordResponse {
                        Status = BusinessStatus.UnAuthorized, ResponseMessage = $"Please enter valid old password"
                    });
                }
            }
        }