예제 #1
0
        /// <summary>
        /// Count login attempt for the specific user
        /// </summary>
        /// <param name="accountSignIn"></param>
        /// <returns>A count of tried login attempts</returns>
        private async Task <int> CountLoginAttempt(AccountSignIn accountSignIn)
        {
            var loginAttemptRepo = _unitOfWork.GetRepository <LoginAttempt>();

            return((await loginAttemptRepo.GetPagedListAsync(a =>
                                                             a.Ipv4 == accountSignIn.Ipv4 && a.Created > DateTime.Now.AddHours(-1))).TotalCount);
        }
예제 #2
0
        /// <summary>
        /// Create a new Login Attempt
        /// </summary>
        /// <param name="accountSignIn"></param>
        private async Task CreateLoginAttempt(AccountSignIn accountSignIn)
        {
            var loginAttemptRepo = _unitOfWork.GetRepository <LoginAttempt>();
            await loginAttemptRepo.InsertAsync(new LoginAttempt
                                               { Created = DateTime.Now, Ipv4 = accountSignIn.Ipv4, UserName = accountSignIn.UserName });

            await _unitOfWork.SaveChangesAsync();
        }
예제 #3
0
 public AccountAppService(IUnitOfWork work,
                          AccountManager accountManager,
                          IAssertion assertion,
                          AccountSignIn accountSign,
                          ILogger <AccountAppService> logger)
 {
     this.logger         = logger;
     this.accountSign    = accountSign;
     this.accountManager = accountManager;
     this.work           = work;
     this.assertion      = assertion;
 }
예제 #4
0
        public async Task <User> GetAndValidateAsync(AccountSignIn accountSignIn)
        {
            accountSignIn.EmailAddress.ToLowerEmail();
            var accountInfo = await _accountManagementContext.Users.FirstOrDefaultAsync(x => x.EmailAddress.Equals(accountSignIn.EmailAddress) && x.UserTypeId == accountSignIn.UserType);

            if (accountInfo != null && VerifyPassword(accountInfo, accountSignIn.Password))
            {
                accountInfo.Password = string.Empty;
                accountInfo.HashSalt = string.Empty;
                return(accountInfo);
            }

            return(default);
예제 #5
0
 public ActionResult Index(AccountSignIn account)
 {
     if (ModelState.IsValid)
     {
         ToDoSignIn TDSI = new ToDoSignIn(account);
         if (!TDSI.Login())
         {
             ModelState.AddModelError("", "Password or Login is invalid ! ! !");
             return(View(account));
         }
         Cookie cookie = new Cookie();
         cookie.UserCookie(Response, account.Login + account.Password, TDSI.UserId());
         return(RedirectToAction("ToDo", "Account"));
     }
     return(View(account));
 }
예제 #6
0
        public async Task <AccountJwtToken> LoginAccount(AccountSignIn accountSignIn)
        {
            var accountRepo = _unitOfWork.GetRepository <Models.Entities.Account>();

            //Check how many login attempts ip have
            var count = await CountLoginAttempt(accountSignIn);

            //TODO Config instead of value
            if (count <= 6)
            {
                //Get account by username
                var account =
                    await accountRepo.GetFirstOrDefaultAsync(predicate : a => a.UserName == accountSignIn.UserName);

                if (account == null)
                {
                    //If account did not exists try to get with email
                    account = await accountRepo.GetFirstOrDefaultAsync(
                        predicate : a => a.Email == accountSignIn.UserName);
                }

                //Check if account is verified
                if (account.Verified)
                {
                    //Compare account password with database
                    if (_passwordService.ComparePasswords(accountSignIn.Password, account.Password, account.Salt))
                    {
                        //Return the created token for account
                        return(CreateJwtToken(account));
                    }
                }

                //Create login attempt
                await CreateLoginAttempt(accountSignIn);

                return(null);
            }

            //Create login attempt
            await CreateLoginAttempt(accountSignIn);

            return(null);
        }
예제 #7
0
        public async Task <IActionResult> SigninAccount(AccountSignIn accountSignIn)
        {
            //Check parameters
            if (accountSignIn == null)
            {
                return(BadRequest("Email/Brugernavn eller password er forkert"));
            }
            if (string.IsNullOrEmpty(accountSignIn.UserName))
            {
                return(BadRequest("Email/Brugernavn eller password er forkert"));
            }
            if (string.IsNullOrEmpty(accountSignIn.Password))
            {
                return(BadRequest("Email/Brugernavn eller password er forkert"));
            }
            if (string.IsNullOrEmpty(accountSignIn.Ipv4))
            {
                return(BadRequest("IP Fejl, kontakt venligst [email protected] hvis dette fortsætter"));
            }

            try
            {
                //Login account
                var token = await _accountService.LoginAccount(accountSignIn);

                if (token != null)
                {
                    return(Ok(token));
                }
            }
            catch (Exception)
            {
                return(BadRequest(
                           "Der skete en fejl ved log ind, kontakt venligst [email protected] hvis dette fortsætter"));
            }

            return(BadRequest("Der skete en fejl ved log ind, kontakt venligst [email protected] hvis dette fortsætter"));
        }
        public async Task <ReturnResponse <RegisterAccountViewModel> > LoginAsync(AccountSignIn accountSignIn)
        {
            var returnResponse  = new ReturnResponse <RegisterAccountViewModel>();
            var validator       = new AccountSignInValidator();
            var validatorResult = await validator.ValidateAsync(accountSignIn);

            if (validatorResult.Errors.Any())
            {
                returnResponse.Error     = validatorResult.Errors.Join().ToString();
                returnResponse.Succeeded = false;
                return(returnResponse);
            }
            var user = await _userRepository.GetAndValidateAsync(accountSignIn);

            if (user != null)
            {
                var tokenInfo = await _tokenService.GenerateTokenAsync(user);

                returnResponse.Data = new RegisterAccountViewModel()
                {
                    TokenInfo = new TokenInfo
                    {
                        AccessToken     = tokenInfo.AccessToken,
                        ExpiredInMinute = tokenInfo.ExpiredInMinute,
                        RefreshToken    = tokenInfo.RefreshToken
                    },
                    EmailAddress = user.EmailAddress,
                    FirstName    = user.FirstName,
                    LastName     = user.LastName
                };
                returnResponse.Succeeded = true;
                return(returnResponse);
            }
            returnResponse.Succeeded = false;
            return(returnResponse);
        }
예제 #9
0
        public async Task <IActionResult> LoginAccountAsync([FromBody] AccountSignIn accountSignIn)
        {
            var result = await _accountManagementModule.ExecuteCommandAsync(new LoginAccountCommand(accountSignIn));

            return(Ok(result));
        }
 public LoginAccountCommand(AccountSignIn accountLogin)
 {
     AccountLogin = accountLogin;
 }
예제 #11
0
 public ToDoSignIn(AccountSignIn _asi)
 {
     ASI      = _asi;
     password = CryptoProvider.GetMD5Hash(ASI.Password);
 }