예제 #1
0
        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
            }));
        }
예제 #4
0
        // 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);
        }