Ejemplo n.º 1
0
        public async Task <bool> RegisterEmployeeAsync(EmployeeRegisterDto employeeRegisterDto)
        {
            var employee = Mapper.Map <Employee>(employeeRegisterDto);

            employee.IsActive = true;

            string password = this.GenerateEmployeePassword();

            var result = await this.userManger.CreateAsync(employee, password);

            var emailResult = await this.emailSender.SendRegistrationMailAsync(employee.Email, employee.FullName, password);

            if (!emailResult)
            {
                throw new ArgumentException(ErrorMessages.SendGridMailArgumentException);
            }

            if (result.Succeeded)
            {
                if (await this.SignRolesToEmployee(employee, employeeRegisterDto.DepartmentId))
                {
                    await this.userManger.AddClaimAsync(employee, new Claim(Constants.ACCESS_LEVEL_CLAIM, employee.AccessLevel.ToString()));

                    return(true);
                }
            }

            return(false);
        }
Ejemplo n.º 2
0
        public async Task <IActionResult> Register(EmployeeRegisterDto employeeRegisterDto)
        {
            employeeRegisterDto.UserName = employeeRegisterDto.UserName.ToLower();
            employeeRegisterDto.Email    = employeeRegisterDto.Email.ToLower();

            if (await _repo.EmployeeExistsUserName(employeeRegisterDto.UserName))
            {
                return(BadRequest("اسم المستخدم مستجل مسبقا"));
            }
            if (await _repo.EmployeeExistsEmail(employeeRegisterDto.Email))
            {
                return(BadRequest("البريد الالكتروني مستجل مسبقا"));
            }
            var employeeToCreate = new Employee
            {
                UserName   = employeeRegisterDto.UserName,
                Email      = employeeRegisterDto.Email,
                FirstName  = employeeRegisterDto.FirstName,
                FatherName = employeeRegisterDto.FatherName,
                LastName   = employeeRegisterDto.LastName,
            };

            var CreatedEmployee = await _repo.Register(employeeToCreate, employeeRegisterDto.Password);

            return(StatusCode(201));
        }
Ejemplo n.º 3
0
        public async Task <IActionResult> Register([FromBody] EmployeeRegisterDto dto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var doesExist = await this.repo.EmployeeExists(dto.Email);

            if (doesExist)
            {
                return(BadRequest("Email is already taken!"));
            }

            var employeeToBeCreated = new Employee()
            {
                Email       = dto.Email,
                FirstName   = dto.FirstName,
                LastName    = dto.LastName,
                DateOfBirth = dto.DateOfBirth,
                PositionId  = dto.PositionId,
                Created     = DateTime.Parse(DateTime.Now.ToString("MM/dd/yyyy H:mm")),
                Salary      = dto.Salary,
                LastUpdated = DateTime.Parse(DateTime.Now.ToString("MM/dd/yyyy H:mm"))
            };
            var defaultPassword = dto.FirstName.ToLower();
            var createdEmployee = await this.repo.Register(employeeToBeCreated, defaultPassword);

            return(StatusCode(201));
        }
Ejemplo n.º 4
0
        // Used for tests.
        public async Task <IActionResult> Register([FromBody] EmployeeRegisterDto dto)
        {
            var identity = mapper.Map <EmployeeIdentity>(dto);

            if (await userService.CreateUser(identity, dto.Password))
            {
                return(Ok());
            }
            else
            {
                return(BadRequest());
            }
        }
Ejemplo n.º 5
0
        public async Task <IActionResult> EmployeeRegister([FromBody] EmployeeRegisterDto dto)
        {
            EmployeeRegisterDtoValidator validator = new EmployeeRegisterDtoValidator();
            ValidationResult             result    = await validator.ValidateAsync(dto);

            if (result.IsValid)
            {
                #region 驗證重複

                if (await _userManager.Users.AnyAsync(x => x.UserName == dto.UserName))
                {
                    result.Errors.Add(new ValidationFailure("userName", "使用者名稱已經被使用"));
                }
                if (await _userManager.Users.AnyAsync(x => x.Email == dto.Email))
                {
                    result.Errors.Add(new ValidationFailure("email", "電子郵件已經被使用"));
                }
                if (!string.IsNullOrEmpty(dto.PhoneNumber))
                {
                    if (await _userManager.Users.AnyAsync(x => x.PhoneNumber == dto.PhoneNumber))
                    {
                        result.Errors.Add(new ValidationFailure("phoneNumber", "手機號碼已經被使用"));
                    }
                }
                if (!string.IsNullOrEmpty(dto.NationalId))
                {
                    if (await _userManager.Users.AnyAsync(x => x.NationalId == dto.NationalId.ToUpper()))
                    {
                        result.Errors.Add(new ValidationFailure("nationalId", "身份證字號已經被使用"));
                    }
                }
                if (!string.IsNullOrEmpty(dto.NetworkId))
                {
                    if (await _userManager.Users.AnyAsync(x =>
                                                          x.Administrator.NetworkId == dto.NetworkId.ToUpper() ||
                                                          x.Employee.NetworkId == dto.NetworkId.ToUpper() ||
                                                          x.Student.NetworkId == dto.NetworkId.ToUpper()))
                    {
                        result.Errors.Add(new ValidationFailure("networkId", "證號已經被使用"));
                    }
                }

                #endregion

                if (result.IsValid)
                {
                    var entity = _mapper.Map <ApplicationUser>(dto);

                    await using (var transaction = await _dbContext.Database.BeginTransactionAsync())
                    {
                        try
                        {
                            #region 建立使用者

                            if (await _userManager.CreateAsync(entity, dto.Password) != IdentityResult.Success)
                            {
                                throw new DbUpdateException();
                            }

                            #endregion

                            #region 添加 Claim

                            var claims = new List <Claim>
                            {
                                new Claim(ClaimTypes.NameIdentifier, entity.Id),
                                new Claim(ClaimTypes.Name, entity.UserName),
                                new Claim(ClaimTypes.Email, entity.Email),
                                new Claim(ClaimTypes.Sid, entity.SecurityStamp)
                            };

                            if (await _userManager.AddClaimsAsync(entity, claims) != IdentityResult.Success)
                            {
                                throw new DbUpdateException();
                            }

                            #endregion

                            #region 添加角色

                            if (await _userManager.AddToRoleAsync(entity, "Employee") != IdentityResult.Success)
                            {
                                throw new DbUpdateException();
                            }

                            #endregion

                            await transaction.CommitAsync();
                        }
                        catch (DbUpdateException)
                        {
                            await transaction.RollbackAsync();

                            throw;
                        }
                    }

                    #region 寄信

                    var link = $"{_configuration["FrontendUrl"]}/account/email/confirm" +
                               $"?userId={Uri.EscapeDataString(entity.Id)}" +
                               $"&token={Uri.EscapeDataString(await _userManager.GenerateEmailConfirmationTokenAsync(entity))}";

                    await _mailService.SendEmailConfirmAsync(entity.Email, entity.Email, link, true);

                    #endregion

                    var returnDto = _mapper.Map <EmployeeProfileDto>(entity);
                    return(CreatedAtAction(nameof(EmployeeProfile), null, returnDto));
                }
            }
            return(BadRequest(result.Errors));
        }