public async Task <LogInResponse> LogInUser(string userEmail, string userPassword, AccountSalt accountSalt) { try { SHA512 sHA512 = new SHA512Managed(); byte[] data = sHA512.ComputeHash(Encoding.UTF8.GetBytes(userPassword + accountSalt.password_salt)); // take the password and account salt to generate hash string hashedPassword = BitConverter.ToString(data).Replace("-", string.Empty).ToLower(); // convert hash to hex LogInPost loginPostContent = new LogInPost(); loginPostContent.email = userEmail; loginPostContent.password = hashedPassword; string loginPostContentJson = JsonConvert.SerializeObject(loginPostContent); // make orderContent into json var httpContent = new StringContent(loginPostContentJson, Encoding.UTF8, "application/json"); // encode orderContentJson into format to send to database var response = await client.PostAsync(Constant.LogInUrl, httpContent); // try to post to database if (response.Content != null) { var responseContent = await response.Content.ReadAsStringAsync(); var loginResponse = JsonConvert.DeserializeObject <LogInResponse>(responseContent); return(loginResponse); } return(null); } catch (Exception e) { System.Diagnostics.Debug.WriteLine("Exception message: " + e.Message); return(null); } }
public async Task <IActionResult> Driver([Bind("Email,Password")][FromBody] LogInPost model) { return(await LogInAsync(model, "Driver")); }
private async Task <IActionResult> LogInAsync(LogInPost model, string role) { if (!ModelState.IsValid) { return(BadRequest(ErrorEnum.InvalidModelState)); } var user = await userManager.FindByNameAsync(model.Email); if (user == null) { return(BadRequest(ErrorEnum.EmailNotRegistered)); } if (DateTime.Now < user.AccountActivationTime) { return(Unauthorized(ErrorEnum.AccountActivationBlock)); } var email = user.Email; if (!await userManager.CheckPasswordAsync(user, model.Password)) { await mailService.SendEmailAsync(email, "Neuspešno Prijavljivanje - CallAndGo", "Neuspešno prijavljivanje na Vaš nalog - " + DateTime.Now + "."); return(BadRequest(ErrorEnum.InvalidPassword)); } if (userManager.Options.SignIn.RequireConfirmedEmail && !await userManager.IsEmailConfirmedAsync(user)) { return(Unauthorized(ErrorEnum.EmailNotConfirmed)); } var claims = new[] { new Claim(ClaimTypes.Name, user.UserName), new Claim(ClaimTypes.NameIdentifier, user.Id), new Claim(ClaimTypes.Role, role) }; var passwordHasher = userManager.PasswordHasher; var accessToken = tokenService.GenerateAccessToken(claims); var refreshToken = tokenService.GenerateRefreshToken(); var refreshTokenExpiryTime = DateTime.Now.AddDays(7); var refreshTokenHash = passwordHasher.HashPassword(user, refreshToken); user.RefreshTokenHash = refreshTokenHash; user.RefreshTokenExpiryTime = refreshTokenExpiryTime; await userManager.UpdateAsync(user); await mailService.SendEmailAsync(email, "Uspešno Prijavljivanje - CallAndGo", "Uspešno prijavljivanje na Vaš nalog - " + DateTime.Now + "."); return(Ok(new { AccessToken = accessToken, RefreshToken = refreshToken, RefreshTokenExpiryTime = refreshTokenExpiryTime })); }
// This function verifies if credentails exist and whether or not user is // authenticated by our system. (Overloading) public async Task <string> VerifyUserCredentials(string userEmail, string userPassword, AccountSalt accountSalt) { string isUserVerified = ""; try { SHA512 sHA512 = new SHA512Managed(); var client = new HttpClient(); byte[] data = sHA512.ComputeHash(Encoding.UTF8.GetBytes(userPassword + accountSalt.password_salt)); string hashedPassword = BitConverter.ToString(data).Replace("-", string.Empty).ToLower(); LogInPost loginPostContent = new LogInPost(); loginPostContent.email = userEmail; loginPostContent.password = hashedPassword; loginPostContent.social_id = ""; loginPostContent.signup_platform = ""; string loginPostContentJson = JsonConvert.SerializeObject(loginPostContent); var httpContent = new StringContent(loginPostContentJson, Encoding.UTF8, "application/json"); var response = await client.PostAsync(Constant.LogInUrl, httpContent); if (response.IsSuccessStatusCode) { var responseContent = await response.Content.ReadAsStringAsync(); var authetication = JsonConvert.DeserializeObject <RDSAuthentication>(responseContent); if (authetication.code.ToString() == Constant.EmailNotFound) { userToSignUp = new SignUpAccount(); userToSignUp.email = userEmail.ToLower().Trim(); userToSignUp.password = userPassword.Trim(); userToSignUp.platform = "DIRECT"; isUserVerified = "USER NEEDS TO SIGN UP"; } else if (authetication.code.ToString() == Constant.AutheticatedSuccesful) { DateTime today = DateTime.Now; DateTime expDate = today.AddDays(Constant.days); user = new User(); user.id = authetication.result[0].driver_uid; user.sessionTime = expDate; user.platform = "DIRECT"; user.email = ""; user.socialId = ""; user.route_id = ""; //var notificationStatus = await SetUserRemoteNotification(); //isUserVerified = EvaluteUserUpdates(notificationStatus); isUserVerified = "SUCCESSFUL:0"; SaveUser(user); } else if (authetication.code.ToString() == Constant.ErrorPlatform) { //var RDSCode = JsonConvert.DeserializeObject<RDSLogInMessage>(responseContent); isUserVerified = "WRONG SOCIAL MEDIA TO SIGN IN"; } else if (authetication.code.ToString() == Constant.ErrorUserDirectLogIn) { isUserVerified = "WRONG DIRECT PASSWORD"; } } } catch (Exception errorLogInUser) { //var client = new Diagnostic(); //client.parseException(errorLogInUser.ToString(), user); Debug.WriteLine("ERROR THE 'errorLogInUser' FUNCTION: " + errorLogInUser.Message); } return(isUserVerified); }