public async Task <BridgeLoginResponseModel> Login(BridgeLoginRequestModel model) { var request = model as FacebookWithPhoneRequestModel; var profile = await _facebookService.GetProfile(request.Token); var userWithFacebook = _unitOfWork.Repository <ApplicationUser>().Get(x => x.FacebookId == profile.Id) .Include(x => x.VerificationTokens) .FirstOrDefault(); // If there is such user in DB - just return if (userWithFacebook != null) { var loginResponse = await _jwtService.BuildLoginResponse(userWithFacebook); return(loginResponse); } else if (userWithFacebook == null && request.PhoneNumber != null) { // Check if there is such user in DB, if so - add to it facebook id var existingUser = _unitOfWork.Repository <ApplicationUser>().Find(x => x.PhoneNumber == request.PhoneNumber); if (existingUser != null) { existingUser.FacebookId = profile.Id; _unitOfWork.Repository <ApplicationUser>().Update(existingUser); _unitOfWork.SaveChanges(); var loginResponse = await _jwtService.BuildLoginResponse(existingUser); return(loginResponse); } else { // In other case create VerificationCode with user data and send core to user try { var data = JsonConvert.SerializeObject(new RegisterWithFacebookUsingPhoneInternalModel { PhoneNumber = request.PhoneNumber, FacebookId = profile.Id }, new JsonSerializerSettings { Formatting = Formatting.Indented }); await _smsService.SendVerificationCodeAsync(request.PhoneNumber, VerificationCodeType.ConfirmFacebook, data); } catch { throw new CustomException(HttpStatusCode.BadRequest, "phoneNumber", "Error while sending message"); } throw new CustomException(HttpStatusCode.NoContent, "phoneNumber", "Verification code sent"); } } else { throw new CustomException(HttpStatusCode.BadRequest, "token", "There is no user with such facebook id"); } }
public async Task <LoginResponseModel> ConfirmEmail(ConfirmEmailRequestModel model) { var user = _unitOfWork.Repository <ApplicationUser>().Find(x => x.Email == model.Email); var token = HttpUtility.UrlDecode(model.Token).Replace(" ", "+"); if (user == null) { throw new CustomException(HttpStatusCode.BadRequest, "email", "Email is invalid"); } if (user.EmailConfirmed) { throw new CustomException(HttpStatusCode.BadRequest, "token", "The email address has been already verified"); } // Confirm email var confirmResult = await _userManager.ConfirmEmailAsync(user, token); if (!confirmResult.Succeeded) { throw new CustomException(HttpStatusCode.BadRequest, "token", "The verification link is not active"); } return(await _jwtService.BuildLoginResponse(user)); }
public async Task <BridgeLoginResponseModel> Login(BridgeLoginRequestModel model) { var request = model as LoginRequestModel; var user = _unitOfWork.Repository <ApplicationUser>().Get(x => x.Email == request.Email) .Include(x => x.UserRoles) .ThenInclude(x => x.Role) .FirstOrDefault(); if (user == null || !await _userManager.CheckPasswordAsync(user, request.Password) || !user.UserRoles.Any(x => x.Role.Name == Role.User)) { throw new CustomException(HttpStatusCode.BadRequest, "credentials", "Invalid credentials"); } if (!string.IsNullOrEmpty(request.Email) && !user.EmailConfirmed) { throw new CustomException(HttpStatusCode.BadRequest, "email", "Email is not confirmed"); } if (user.IsDeleted) { throw new CustomException(HttpStatusCode.BadRequest, "general", "Your account was deleted by admin, to know more please contact administration."); } if (!user.IsActive) { throw new CustomException(HttpStatusCode.MethodNotAllowed, "general", "Your account was blocked. For more information please email to following address: "); } return(await _jwtService.BuildLoginResponse(user, request.AccessTokenLifetime)); }
public async Task <BridgeLoginResponseModel> Login(BridgeLoginRequestModel model) { var request = model as LoginWithPhoneRequestModel; var user = _unitOfWork.Repository <ApplicationUser>().Find(x => x.PhoneNumber == request.PhoneNumber); if (user == null || !await _userManager.CheckPasswordAsync(user, request.Password)) { throw new CustomException(HttpStatusCode.BadRequest, "credentials", "Invalid credentials"); } if (!user.PhoneNumberConfirmed) { throw new CustomException(HttpStatusCode.BadRequest, "phoneNumber", "PhoneNumber is not confirmed"); } if (user.IsDeleted) { throw new CustomException(HttpStatusCode.BadRequest, "general", "Your account was deleted by admin, to know more please contact administration."); } if (!user.IsActive) { throw new CustomException(HttpStatusCode.MethodNotAllowed, "general", "Your account was blocked. For more information please email to following address: "); } return(await _jwtService.BuildLoginResponse(user, request.AccessTokenLifetime)); }
public async Task <BridgeLoginResponseModel> Login(BridgeLoginRequestModel model) { var request = model as AdminLoginRequestModel; var user = _unitOfWork.Repository <ApplicationUser>().Get(x => x.Email == request.Email) .TagWith(nameof(BridgeAdminImplementation) + "_GetAdmin") .Include(x => x.UserRoles) .ThenInclude(x => x.Role) .FirstOrDefault(); if (user == null || !await _userManager.CheckPasswordAsync(user, request.Password) || !user.UserRoles.Any(x => x.Role.Name == Role.Admin || x.Role.Name == Role.SuperAdmin)) { throw new CustomException(HttpStatusCode.BadRequest, "general", "Invalid credentials"); } return(await _jwtService.BuildLoginResponse(user, request.AccessTokenLifetime)); }
public async Task <LoginResponseModel> ConfirmFacebookRegistration(ConfirmPhoneRequestModel model) { var code = _unitOfWork.Repository <VerificationToken>() .Find(x => !x.IsUsed && x.IsValid && x.Type == VerificationCodeType.ConfirmFacebook && x.TokenHash == _hashUtility.GetHash(model.Code)); if (code == null) { throw new CustomException(HttpStatusCode.BadRequest, "code", "SMS code is not valid. Add correct code or re-send it"); } // Parse and create user var userData = JsonConvert.DeserializeObject <RegisterWithFacebookUsingPhoneInternalModel>(code.Data); var user = CreateUserWithPhone(userData); var result = await _userManager.CreateAsync(user); if (!result.Succeeded) { throw new CustomException(HttpStatusCode.BadRequest, "general", result.Errors.FirstOrDefault().Description); } result = await _userManager.AddToRoleAsync(user, Role.User); if (!result.Succeeded) { throw new CustomException(HttpStatusCode.BadRequest, "general", result.Errors.FirstOrDefault().Description); } code.IsUsed = true; _unitOfWork.Repository <VerificationToken>().Update(code); _unitOfWork.SaveChanges(); var loginResponse = await _jwtService.BuildLoginResponse(user); return(loginResponse); }
public async Task <BridgeLoginResponseModel> Login(BridgeLoginRequestModel model) { var request = model as FacebookWithEmailRequestModel; var profile = await _facebookService.GetProfile(request.Token); var userWithFacebook = _unitOfWork.Repository <ApplicationUser>().Get(x => x.FacebookId == profile.Id) .Include(x => x.VerificationTokens) .FirstOrDefault(); var email = profile?.Email ?? request.Email; // If there is such user in DB - just return if (userWithFacebook != null) { var loginResponse = await _jwtService.BuildLoginResponse(userWithFacebook); return(loginResponse); } else if (userWithFacebook == null && email != null) { // Check if there is such user in DB, if so - add to it facebook id var existingUser = _unitOfWork.Repository <ApplicationUser>().Find(x => x.Email == email); if (existingUser != null) { existingUser.FacebookId = profile.Id; _unitOfWork.Repository <ApplicationUser>().Update(existingUser); _unitOfWork.SaveChanges(); var loginResponse = await _jwtService.BuildLoginResponse(existingUser); return(loginResponse); } else { // In other case - create new user var user = CreateUserWithEmail(new RegisterWithFacebookUsingEmailInternalModel { Email = email, FacebookId = profile.Id }); var result = await _userManager.CreateAsync(user); if (!result.Succeeded) { throw new CustomException(HttpStatusCode.BadRequest, "general", result.Errors.FirstOrDefault().Description); } result = await _userManager.AddToRoleAsync(user, Role.User); if (!result.Succeeded) { throw new CustomException(HttpStatusCode.BadRequest, "general", result.Errors.FirstOrDefault().Description); } var loginResponse = await _jwtService.BuildLoginResponse(user); return(loginResponse); } } else { throw new CustomException(HttpStatusCode.BadRequest, "token", "There is no user with such facebook id"); } }
public async Task <LoginResponseModel> ProcessRequest(LinkedInWithEmailRequestModel model) { var profile = await GetProfile(model.Token, model.RedirectUri, string.IsNullOrEmpty(model.Email)); // If we didn`t get email from profile, get it from model var email = profile?.Email ?? model?.Email ?? null; var userWithLinkedIn = _unitOfWork.Repository <ApplicationUser>().Get(x => x.LinkedInId == profile.Id) .Include(x => x.VerificationTokens) .FirstOrDefault(); // If there is such user in DB - just return if (userWithLinkedIn != null) { var loginResponse = await _jwtService.BuildLoginResponse(userWithLinkedIn); return(loginResponse); } else if (userWithLinkedIn == null && email != null) { // Check if there is such user in DB, if so - add to it google id var existingUser = _unitOfWork.Repository <ApplicationUser>().Find(x => x.Email == email); if (existingUser != null) { existingUser.LinkedInId = profile.Id; _unitOfWork.Repository <ApplicationUser>().Update(existingUser); _unitOfWork.SaveChanges(); var loginResponse = await _jwtService.BuildLoginResponse(existingUser); return(loginResponse); } else { // In other case - create new user var user = new ApplicationUser { Email = email, UserName = email, IsActive = true, RegistratedAt = DateTime.UtcNow, EmailConfirmed = false, GoogleId = profile.Id }; var result = await _userManager.CreateAsync(user); if (!result.Succeeded) { throw new CustomException(HttpStatusCode.BadRequest, "general", result.Errors.FirstOrDefault().Description); } result = await _userManager.AddToRoleAsync(user, Role.User); if (!result.Succeeded) { throw new CustomException(HttpStatusCode.BadRequest, "general", result.Errors.FirstOrDefault().Description); } var loginResponse = await _jwtService.BuildLoginResponse(user); return(loginResponse); } } else { throw new CustomException(HttpStatusCode.BadRequest, "token", "There is no user with such linkedin id"); } }