Beispiel #1
0
        /// <summary>
        /// Service method to register a new user
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public async Task <(UserView user, string message)> RegisterUser(SignUp model)
        {
            var userExists = await _userrepo.FirstOrDefault(r => r.Username == model.Username || r.Email == model.Email);

            if (userExists != null)
            {
                return(user : null, message : $"User {userExists.Username} exists.");
            }
            // Validate Email-add in-app
            var(IsValid, Email) = AuthUtil.ValidateEmail(model.Email);

            if (IsValid == false || model.Password.Length == 0)
            {
                return(user : null, message : $"Email format incorrect. or Password not inputed");
            }

            if (userExists == null)
            {
                AuthUtil.CreatePasswordHash(model.Password, out byte[] passwordHash, out byte[] passwordSalt);
                var userDetails = new FXUser
                {
                    CreatedAt    = DateTime.Now,
                    PasswordHash = passwordHash,
                    PasswordSalt = passwordSalt,
                    Username     = model.Username,
                    Email        = model.Email,
                    Role         = UserRoles.User
                };

                //Send verification notification
                Random rand               = new Random();
                string digits             = rand.Next(0, 999999).ToString("D6");
                var    prepMessageDetails = new EmailMessage();
                prepMessageDetails.ToEmail = model.Email;
                prepMessageDetails.Subject = $"Verify your Email";
                prepMessageDetails.Body    = $"Your OTP is {digits}";

                // TODO: Set expiry on OTP.
                userDetails.OTP = digits;

                var newuser = await _userrepo.Insert(userDetails);

                //send email to user
                var sendmail = await _mail.SendEmailAsync(prepMessageDetails);

                if (sendmail)
                {
                    var returnView = new UserView
                    {
                        Username   = newuser.Username,
                        Email      = newuser.Email,
                        LastName   = model.LastName,
                        FirstName  = model.FirstName,
                        Message    = $"An Email has been sent to {model.Email} for verification.",
                        IsVerified = false
                    };

                    return(user : returnView, message : $"User created successfully. Check email {model.Email} for an OTP.");
                }
            }
            return(user : null, message : $"Something went wrong.");
        }