// [Route("RegisterUser")]
        public async Task <IActionResult> Post(UserRegistrationRequestDto request)
        {
            ServiceResponse result = null;

            try
            {
                result = await _registrationService.UserRegistration(request);

                return(Ok(result));
            }
            catch (BadRequestException brEx)
            {
                result = new ServiceResponse {
                    Msg = brEx.Message, Success = false
                };
                return(BadRequest(result));
            }
            catch (NotFoundException nfEx)
            {
                result = new ServiceResponse {
                    Msg = nfEx.Message, Success = false
                };
                return(NotFound(result));
            }
            catch (Exception ex)
            {
                return(HandleError(ex, MethodBase.GetCurrentMethod()?.Name));
            }
        }
        public async Task <IActionResult> Register([FromBody] UserRegistrationRequestDto user)
        {
            // Check if the incoming request is valid
            if (ModelState.IsValid)
            {
                // check i the user with the same email exist
                var existingUser = await _userManager.FindByEmailAsync(user.Email);

                if (existingUser != null)
                {
                    return(BadRequest(new RegistrationResponse()
                    {
                        Result = false,
                        Errors = new List <string>()
                        {
                            "Email already exist"
                        }
                    }));
                }

                var newUser = new IdentityUser()
                {
                    Email = user.Email, UserName = user.Email
                };
                var isCreated = await _userManager.CreateAsync(newUser, user.Password);

                if (isCreated.Succeeded)
                {
                    var jwtToken = GenerateJwtToken(newUser);

                    return(Ok(new RegistrationResponse()
                    {
                        User = newUser,
                        Result = true,
                        Token = jwtToken
                    }));
                }

                return(new JsonResult(new RegistrationResponse()
                {
                    Result = false,
                    Errors = isCreated.Errors.Select(x => x.Description).ToList()
                }
                                      )
                {
                    StatusCode = 500
                });
            }

            return(BadRequest(new RegistrationResponse()
            {
                Result = false,
                Errors = new List <string>()
                {
                    "Invalid payload"
                }
            }));
        }
        public async Task <IActionResult> CreateUser([FromBody] UserRegistrationRequestDto registrationRequest, CancellationToken cancellationToken)
        {
            var currentUserName = User.FindFirst(ClaimTypes.NameIdentifier).Value;

            await _authenticationService
            .CreateUserAsync(currentUserName, _mapper.Map <UserRegistrationRequest>(registrationRequest));

            return(Created("", registrationRequest.Username));
        }
示例#4
0
        public DataResult <User> Register(UserRegistrationRequestDto registrationRequest)
        {
            UnitOfWork.Begin();

            var result = _authenticationWorkflow.Register(registrationRequest);

            UnitOfWork.End();

            return(result);
        }
 public async Task <ActionResult <UserRegistrationResponseDto> > Registration(
     [FromBody] UserRegistrationRequestDto requestDto,
     [FromHeader(Name = "User-Agent")] string userAgent,
     [FromHeader(Name = "X-Application-Version")]
     string appVersion
     )
 {
     requestDto.UserAgent  = userAgent;
     requestDto.AppVersion = appVersion;
     return(await ProcessResultAsync(() => _authenticationService.Register(requestDto)));
 }
示例#6
0
        /// <summary>
        /// User registration
        /// </summary>
        /// <param name="requestDto" class="UserRegistrationResponseDto">UserRegistrationResponseDto</param>
        /// <returns></returns>
        public async Task <Result <UserRegistrationResponseDto> > Register(
            UserRegistrationRequestDto requestDto)
        {
            var userEmailExists = await _userRepository.GetByEmail(requestDto.Email);

            if (userEmailExists != null)
            {
                return(Result <UserRegistrationResponseDto> .FromIError(new ApiError(ErrorCodes.UserEmailExists, nameof(requestDto.Email))));
            }

            var userPhoneExists = await _userRepository.GetByPhone(requestDto.Phone);

            if (userPhoneExists != null)
            {
                return(Result <UserRegistrationResponseDto> .FromIError(new ApiError(ErrorCodes.UserEmailExists, nameof(requestDto.Phone))));
            }

            using var scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled);
            var res = await _userRepository.Create(new UserModel
            {
                NameFirst      = requestDto.NameFirst,
                NameSecond     = requestDto.NameSecond,
                NamePatronymic = requestDto.NamePatronymic,
                Password       = _cryptoHelper.GetHash(requestDto.Password),
                Phone          = requestDto.Phone,
                Email          = requestDto.Email.ToLower()
            }
                                                   );

            var sessionId = Guid.NewGuid();
            var token     = _tokenService.GenerateToken(res.Id, sessionId, _secretKey);

            await _tokenRepository.Create(new TokenModel
            {
                Id         = sessionId,
                UserAgent  = requestDto.UserAgent,
                Token      = token,
                UserId     = res.Id,
                AppVersion = requestDto.AppVersion
            }
                                          );

            scope.Complete();

            return(new Result <UserRegistrationResponseDto>(
                       new UserRegistrationResponseDto
            {
                Id = res.Id,
                AuthToken = token
            }
                       ));
        }
        public async Task <ActionResult> Registration([FromBody] UserRegistrationRequestDto requestDto)
        {
            requestDto.UserAgent  = Request.Headers["User-Agent"].ToString();
            requestDto.AppVersion = Request.Headers["X-Application-Version"].ToString();
            var result = await _authenticateService.Registration(requestDto);

            if (result.Error != null)
            {
                var error = result.Error ?? ErrorCodes.NotFound;
                BadRequest(error, result.ErrorField);
            }

            return(Ok(result));
        }
        public DataResult <User> Register(UserRegistrationRequestDto registrationRequest)
        {
            if (!registrationRequest.Password.Equals(registrationRequest.PasswordConfirmation))
            {
                return(new DataResult <User>(DataResultType.ValidationError,
                                             "The password and confirmation password must be the same."));
            }

            var saltBytes = new byte[128];

            new RNGCryptoServiceProvider().GetBytes(saltBytes);

            var systemLogin = new SystemLogin
            {
                CreatedDate            = DateTime.Now,
                EmailAddress           = registrationRequest.EmailAddress,
                PasswordHash           = Convert.ToBase64String(GetSaltedHash(registrationRequest.Password, saltBytes)),
                PasswordSalt           = Convert.ToBase64String(saltBytes),
                EmailConfirmationToken = registrationRequest.ConfirmationToken,
                IsEmailConfirmed       = false
            };

            _databaseContext.SystemLogins.Add(systemLogin);
            _databaseContext.SaveChanges();
            if (systemLogin.SystemLoginId == 0)
            {
                return(new DataResult <User>(DataResultType.UnableToCreateRecord, "Unable to create system login"));
            }

            var user = new User
            {
                CreatedDate   = DateTime.Now,
                SystemLoginId = systemLogin.SystemLoginId,
                FirstName     = registrationRequest.FirstName,
                Surname       = registrationRequest.Surname,
                DateOfBirth   = registrationRequest.DateOfBirth,
                SystemRoleId  = (int)SystemRoles.Unknown,
                BranchId      = 1
            };

            _databaseContext.Users.Add(user);
            _databaseContext.SaveChanges();
            if (user.UserId == 0)
            {
                return(new DataResult <User>(DataResultType.UnableToCreateRecord, "Unable to create user"));
            }

            return(new DataResult <User>(user, new DataResult(DataResultType.Success, "Successfully created user")));
        }
示例#9
0
        public async Task <IActionResult> Register([FromBody] UserRegistrationRequestDto user)
        {
            if (ModelState.IsValid)
            {
                var existingUser = await _userManager.FindByEmailAsync(user.Email);

                if (existingUser != null)
                {
                    return(BadRequest(new RegistrationResponse
                    {
                        Success = false,
                        Errors = new List <string>()
                        {
                            "Email already exist"
                        }
                    }));
                }

                var newUser = new IdentityUser(user.Email)
                {
                    Email = user.Email
                };
                var isCreated = await _userManager.CreateAsync(newUser, user.Password);

                if (isCreated.Succeeded)
                {
                    return(Ok(await GenerateJwtAsync(newUser)));
                }

                return(new JsonResult(new RegistrationResponse()
                {
                    Success = false,
                    Errors = isCreated.Errors.Select(x => x.Description).ToList()
                })
                {
                    StatusCode = 500
                });
            }

            return(BadRequest(new RegistrationResponse()
            {
                Success = false,
                Errors = new List <string>()
                {
                    "Invalid payload"
                }
            }));
        }
示例#10
0
        public async Task <ServiceResponse> UserRegistration(UserRegistrationRequestDto request)
        {
            var response = new ServiceResponse {
                ErrorList = new List <ErrorMessage>()
            };

            request.FirstName = request.FirstName?.TitleCase();
            request.LastName  = request.LastName?.TitleCase();
            request.UserName  = request.UserName?.LowerCase();
            request.Password  = _encryptData.EncryptPassword(request.Password);
            request.UserEmail = request.UserEmail?.LowerCase();
            request.Remarks   = request.Remarks?.TitleCase();
            request.Active    = true;
            var user = _mapper.Map <IM_USERS>(request);

            // to fix an issue related to claims generation during login
            if (string.IsNullOrEmpty(user.LASTNAME))
            {
                user.LASTNAME = "";
            }

            user.CreatedBy   = "SYSTEM";
            user.CreatedDate = DateTime.Now;
            user.ID          = Guid.NewGuid().ToString();

            _transactionalUnitOfWork.SetIsActive(false);

            await _transactionalUnitOfWork.CommitAsync();

            _userRepository.Add(user);

            var contributorGroup = await _groupsRepository.GetReadOnlyAsync(x => x.NAME == "CONTRIBUTORS");

            if (contributorGroup == null)
            {
                throw new BadRequestException("Unable to assign access to user");
            }

            var addUserGroup = new IM_USERS_GROUPS
            {
                ID          = Guid.NewGuid().ToString(),
                CreatedBy   = "ADMIN",
                CreatedDate = DateTime.Now,
                GROUP_ID    = contributorGroup.ID,
                ACTIVE      = true,
                USER_NAME   = user.USERNAME
            };

            _transactionalUnitOfWork.SetIsActive(true);

            _usersGroupsRepository.Add(addUserGroup);

            var committedRows = await _transactionalUnitOfWork.CommitAsync();

            if (committedRows > 0)
            {
                response.Success = true;
                response.Msg     = "User registered successfully";
            }
            else
            {
                response.Success = false;
                response.Msg     = "Failed to register user";
            }

            var recipients = new List <EmailRecipientDto>
            {
                new EmailRecipientDto
                {
                    RecipientName         = $"{user.FIRSTNAME} {user.LASTNAME}",
                    RecipientEmailAddress = user.USEREMAIL
                }
            };

            var newUserRegistrationEmailTemplate =
                await _templateSettingRepository.GetReadOnlyAsync(x => x.KEY == "NEW_USER_TEMPLATE");

            if (newUserRegistrationEmailTemplate != null)
            {
                var emailTemplateString = newUserRegistrationEmailTemplate.VALUE;

                if (!string.IsNullOrEmpty(emailTemplateString))
                {
                    var emailHtmlBody = emailTemplateString.Replace("{username}", $"{user.FIRSTNAME} {user.LASTNAME}")
                                        // TODO: get application ui url from appsettings
                                        .Replace("{link}", "https://www.google.com");

                    await EmailNotificationHelper.SendEmailNotification(_configuration.GetSection("SendGridAPIKey").Value,
                                                                        newUserRegistrationEmailTemplate.NAME, emailHtmlBody, "", recipients);
                }
            }



            return(await Task.Run(() => response));
        }
示例#11
0
        public async Task <IdentityResult> RegisterAsync(UserRegistrationRequestDto userRegistrationDto)
        {
            var user = _mapper.Map <ApplicationUser>(userRegistrationDto);

            return(await _userManager.CreateAsync(user, userRegistrationDto?.Password).ConfigureAwait(false));
        }
示例#12
0
        public async Task <IActionResult> Register([FromBody] UserRegistrationRequestDto registrationDto)
        {
            // Check the model or obj is valid
            if (ModelState.IsValid)
            {
                // Check email existing
                var existingUser = await _userManager.FindByEmailAsync(registrationDto.Email);

                if (existingUser is not null)
                {
                    return(BadRequest(
                               new UserRegistrationResponseDto()
                    {
                        Success = false,
                        Errors = new List <string>()
                        {
                            "Email already in use"
                        }
                    }
                               ));
                }

                // Add the user
                var newUser = new IdentityUser()
                {
                    Email          = registrationDto.Email,
                    UserName       = registrationDto.Email,
                    EmailConfirmed = true // Todo: send user to confirm email
                };

                // Add user to database
                var isCreated = await _userManager.CreateAsync(newUser, registrationDto.Password);

                if (!isCreated.Succeeded)
                {
                    return(BadRequest(
                               new UserRegistrationResponseDto()
                    {
                        Success = false,
                        Errors = isCreated.Errors.Select(x => x.Description).ToList()
                    }
                               ));
                }
                // Add Khach hang to db
                var _khachHang = new Customer();
                _khachHang.CustomerId   = 1;
                _khachHang.CustomerName = registrationDto.TenKhachHang;
                _khachHang.Email        = registrationDto.Email;

                await _context.Customers.AddAsync(_khachHang);

                await _context.SaveChangesAsync();

                //Create Roles
                if (!await _roleManager.RoleExistsAsync(RoleConstants.Admin))
                {
                    await _roleManager.CreateAsync(new IdentityRole(RoleConstants.Admin));
                }
                if (!await _roleManager.RoleExistsAsync(RoleConstants.Khach))
                {
                    await _roleManager.CreateAsync(new IdentityRole(RoleConstants.Khach));
                }
                if (!await _roleManager.RoleExistsAsync(RoleConstants.TaiXe))
                {
                    await _roleManager.CreateAsync(new IdentityRole(RoleConstants.TaiXe));
                }
                if (!await _roleManager.RoleExistsAsync(RoleConstants.CuaHang))
                {
                    await _roleManager.CreateAsync(new IdentityRole(RoleConstants.CuaHang));
                }

                if (await _roleManager.RoleExistsAsync(RoleConstants.Khach))
                {
                    await _userManager.AddToRoleAsync(newUser, RoleConstants.Khach);
                }
                // Create a jwt token
                var userRoles = await _userManager.GetRolesAsync(newUser);

                var token = GenerateJwtToken(newUser, userRoles);

                // return the new user
                return(Ok(new UserRegistrationResponseDto()
                {
                    Success = true,
                    Token = token
                }
                          ));
            }
            else
            {
                return(BadRequest(
                           new UserRegistrationResponseDto
                {
                    Success = false,
                    Errors = new List <string>()
                    {
                        "Invalid payload"
                    }
                }
                           ));
            }
        }
        public async Task <UserRegistrationResponseDto> Registration(UserRegistrationRequestDto requestDto)
        {
            var userEmailExists = await _userRepository.GetByEmail(requestDto.Email);

            if (userEmailExists != null)
            {
                return(new UserRegistrationResponseDto
                {
                    Error = ErrorCodes.UserEmailExists,
                    ErrorField = new List <string> {
                        nameof(requestDto.Email)
                    }
                });
            }

            var userPhoneExists = await _userRepository.GetByPhone(requestDto.Phone);

            if (userPhoneExists != null)
            {
                return(new UserRegistrationResponseDto
                {
                    Error = ErrorCodes.UserPhoneExists,
                    ErrorField = new List <string> {
                        nameof(requestDto.Phone)
                    }
                });
            }

            try
            {
                using var scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled);
                var res = await _userRepository.Create(new UserModel
                {
                    NameFirst      = requestDto.NameFirst,
                    NameSecond     = requestDto.NameSecond,
                    NamePatronymic = requestDto.NamePatronymic,
                    Password       = _cryptoHelper.GetHash(requestDto.Password),
                    Phone          = requestDto.Phone,
                    Email          = requestDto.Email.ToLower()
                }
                                                       );

                var sessionId = Guid.NewGuid();
                var token     = _tokenService.GenerateToken(res.Id, sessionId, _secretKey);

                await _tokenRepository.Create(new TokenModel
                {
                    Id         = sessionId,
                    UserAgent  = requestDto.UserAgent,
                    Token      = token,
                    UserId     = res.Id,
                    AppVersion = requestDto.AppVersion
                }
                                              );

                scope.Complete();

                return(new UserRegistrationResponseDto
                {
                    Id = res.Id,
                    AuthToken = token
                });
            }
            catch (Exception e)
            {
                return(new UserRegistrationResponseDto
                {
                    Error = ErrorCodes.ServerError
                });
                //TODO логирование
            }
        }
示例#14
0
        public async Task <IActionResult> Register([FromBody] UserRegistrationRequestDto user)
        {
            // Check if the incoming request is valid
            if (ModelState.IsValid)
            {
                // check if the user with the same username exist
                var existingUser = await _userManager.FindByNameAsync(user.UserName);

                if (existingUser != null)
                {
                    return(BadRequest(new RegistrationResponse()
                    {
                        Success = false,
                        Errors = new List <string>()
                        {
                            "Username already exist"
                        }
                    }));
                }

                var newUser = new ApplicationUser()
                {
                    UserName    = user.UserName,
                    FirstName   = user.FirstName,
                    LastName    = user.LastName,
                    Address     = user.Address,
                    TRN         = user.TRN,
                    Role        = user.Role,
                    PhoneNumber = user.PhoneNumber,
                    Email       = user.Email
                };

                var isCreated = await _userManager.CreateAsync(newUser, user.Password);

                if (isCreated.Succeeded)
                {
                    var isAddToRole = await _userManager.AddToRoleAsync(newUser, user.Role);

                    if (isAddToRole.Succeeded)
                    {
                        return(Ok());
                    }
                }

                return(new JsonResult(new RegistrationResponse()
                {
                    Success = false,
                    Errors = isCreated.Errors.Select(x => x.Description).ToList()
                }
                                      )
                {
                    StatusCode = 500
                });
            }

            return(BadRequest(new RegistrationResponse()
            {
                Success = false,
                Errors = new List <string>()
                {
                    "Invalid payload"
                }
            }));
        }