Example #1
0
        /// <summary>
        /// This Method Handles Completion Of Vendor / Subscriber's Profile
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public async Task <ResponseViewModel> UpdateAsync(UserInputModel model)
        {
            try
            {
                var currentUser = await _userManager.FindByIdAsync(_httpContextAccessor.HttpContext.User.GetLoggedInUserId <int>().ToString());

                if (currentUser != null)
                {
                    currentUser.FirstName   = model.FirstName;
                    currentUser.LastName    = model.LastName;
                    currentUser.MiddleName  = model.MiddleName;
                    currentUser.PhoneNumber = model.PhoneNumber;

                    if (!string.IsNullOrEmpty(model.ProfilePhoto) && model.IsProfilePhotoChanged)
                    {
                        currentUser.ProfilePhoto = model.SaveProfilePhoto(_settings);
                    }

                    var gender = _utilityRepository.GetGenderByName(model.Gender);

                    if (gender == null)
                    {
                        return(ResponseViewModel.Failed(ResponseMessageViewModel.INVALID_GENDER, ResponseErrorCodeStatus.INVALID_GENDER));
                    }

                    currentUser.GenderId = gender.Id;

                    await _userManager.UpdateAsync(currentUser);

                    var mappedResult = _mapper.Map <AppUser, UserViewModel>(currentUser);

                    return(ResponseViewModel.Create(true).AddStatusMessage(ResponseMessageViewModel.SUCCESSFUL).AddData(mappedResult));
                }
                else
                {
                    return(ResponseViewModel.Failed());
                }
            }
            catch (Exception e)
            {
                return(ResponseViewModel.Create(false, ResponseMessageViewModel.UNSUCCESSFUL).AddStatusCode(ResponseErrorCodeStatus.FAIL).AddData(e));
            }
        }
Example #2
0
        /// <summary>
        /// Authenticate Asynchronous Method
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public async Task <ResponseViewModel> AuthenticateAsync(LoginInputModel model)
        {
            try
            {
                var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure : false);

                AppUser user = new AppUser();

                if (!result.Succeeded)
                {
                    return(Create(false)
                           .AddStatusCode(ResponseErrorCodeStatus.INVALID_CREDENTIALS)
                           .AddStatusMessage(ResponseMessageViewModel.INVALID_CREDENTIALS));
                }

                //Find User by Email Address after successful Authentication
                user = await _userManager.FindByEmailAsync(model.Email);

                if (string.IsNullOrEmpty(user.GUID))
                {
                    user.GUID = Guid.NewGuid().ToString();
                    await _userManager.UpdateAsync(user);
                }

                // authentication successful so generate jwt token
                var tokenHandler = new JwtSecurityTokenHandler();
                var key          = Encoding.ASCII.GetBytes(_settings.Secret);


                var claims = new List <Claim>()
                {
                    new Claim(ClaimTypes.Name, user.Id.ToString()),
                    new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
                    new Claim(ClaimTypes.Email, user.Email),
                    new Claim(ClaimTypes.GivenName, $"{user.FirstName} {user.LastName}"),
                };
                var tokenDescriptor = new SecurityTokenDescriptor
                {
                    Subject            = new ClaimsIdentity(claims),
                    Expires            = DateTime.UtcNow.AddDays(1),
                    SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
                };

                var roles = await _userManager.GetRolesAsync(user);

                AddRolesToClaims(claims, roles);

                var token = tokenHandler.CreateToken(tokenDescriptor);
                user.Token = tokenHandler.WriteToken(token);
                var mappedUser = _mapper.Map <AppUser, UserViewModel>(user);


                if (await _userManager.IsInRoleAsync(user, Res.VENDOR.ToUpper()))
                {
                    mappedUser.UserTypeId = (int)UserTypeEnum.VENDOR;
                }

                if (await _userManager.IsInRoleAsync(user, Res.SUBSCRIBER.ToUpper()))
                {
                    mappedUser.UserTypeId = (int)UserTypeEnum.SUBSCRIBER;
                }

                //mappedUser.Gender = _utilityRepository.GetGenderById(user.GenderId)?.Name;

                return(ResponseViewModel.Create(true)
                       .AddData(mappedUser)
                       .AddStatusCode(ResponseErrorCodeStatus.OK)
                       .AddStatusMessage(ResponseMessageViewModel.AUTHENTICATION_SUCCESSFUL));
            }
            catch (Exception e)
            {
                //Added Comment
                return(Create(false, ResponseMessageViewModel.UNSUCCESSFUL).AddStatusCode(ResponseErrorCodeStatus.FAIL).AddData(e));
            }
        }
Example #3
0
        /// <summary>
        /// This Method Handles User Registration
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public async Task <ResponseViewModel> RegisterAsync(RegisterInputModel model)
        {
            try
            {
                var user = new AppUser
                {
                    UserName = model.Email,
                    Email    = model.Email,
                    GUID     = new Guid().ToString()
                };

                var result = await _userManager.CreateAsync(user, model.Password);

                if (result.Succeeded)
                {
                    var emailHtmlTemplate = _emailService.GetEmailTemplate(_env, EmailTemplate.Welcome(model.Platform ?? Res.WEB_PLATFORM));

                    var code = _otpService.GenerateCode(user.Id, _settings.OtpExpirationInMinutes, model.Platform ?? Res.WEB_PLATFORM);

                    Dictionary <string, string> contentReplacements = new Dictionary <string, string>()
                    {
                        { Placeholder.EMAIL, user.Email },
                        { Placeholder.OTP, (model.Platform ?? Res.WEB_PLATFORM).ToLower() == Res.WEB_PLATFORM ? $"{_settings.WebApp.BaseUrl}{_settings.WebApp.Register}{code}" : code },
                    };

                    if (contentReplacements != null)
                    {
                        foreach (KeyValuePair <string, string> pair in contentReplacements)
                        {
                            emailHtmlTemplate = emailHtmlTemplate.Replace(pair.Key, pair.Value);
                        }
                    }

                    _ = _emailService.SendEmail(model.Email, Res.ACCOUNT_SETUP, emailHtmlTemplate);

                    if (!model.IsAdmin)
                    {
                        _ = await _userManager.AddToRoleAsync(user, model.UserType == UserTypeEnum.VENDOR?UserType.VENDOR : UserType.SUBSCRIBER);
                    }
                    else
                    {
                        _ = await _userManager.AddToRoleAsync(user, UserType.ADMIN);

                        user.DepartmentId = model.DepartmentId;
                        _ = await _userManager.UpdateAsync(user);
                    }


                    var mappedUser = _mapper.Map <AppUser, RegisterViewModel>(user);

                    return(ResponseViewModel.Create(true).AddStatusMessage(ResponseMessageViewModel.SUCCESSFUL).AddData(mappedUser).AddStatusCode(ResponseErrorCodeStatus.OK));
                }
                else
                {
                    return(ResponseViewModel.Error($"{ResponseMessageViewModel.UNABLE_TO_CREATE} {result.Errors.First().Description} ", ResponseErrorCodeStatus.ACCOUNT_ALREADY_EXIST));
                }
            }
            catch (Exception e)
            {
                return(ResponseViewModel.Create(false, ResponseMessageViewModel.UNSUCCESSFUL).AddStatusCode(ResponseErrorCodeStatus.FAIL).AddData(e));
            }
        }