/// <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)); } }
/// <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)); } }
/// <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)); } }