public async Task <bool> IsAuthenticationAttemptValidAsync(
            string userAreaCode,
            string username,
            string ipAddress,
            DateTime dateNow,
            int?ipAddressRateLimitQuantity,
            int?ipAddressRateLimitWindowInSeconds,
            int?usernameRateLimitQuantity,
            int?usernameRateLimitWindowInSeconds
            )
        {
            var isValid = await _entityFrameworkSqlExecutor.ExecuteScalarAsync <int>(_dbContext,
                                                                                     "Cofoundry.UserAuthenticationFailLog_IsAttemptValid",
                                                                                     new SqlParameter("UserAreaCode", userAreaCode),
                                                                                     new SqlParameter("Username", username),
                                                                                     new SqlParameter("IPAddress", ipAddress),
                                                                                     new SqlParameter("DateNow", dateNow),
                                                                                     new SqlParameter("IPAddressRateLimitQuantity", ipAddressRateLimitQuantity),
                                                                                     new SqlParameter("IPAddressRateLimitWindowInSeconds", ipAddressRateLimitWindowInSeconds),
                                                                                     new SqlParameter("UsernameRateLimitQuantity", usernameRateLimitQuantity),
                                                                                     new SqlParameter("UsernameRateLimitWindowInSeconds", usernameRateLimitWindowInSeconds)
                                                                                     );

            return(isValid == 1);
        }
        public async Task <bool> ExecuteAsync(HasExceededMaxLoginAttemptsQuery query, IExecutionContext executionContext)
        {
            var connectionInfo = _clientConnectionService.GetConnectionInfo();

            var isValid = await _sqlExecutor.ExecuteScalarAsync <int>("Cofoundry.FailedAuthticationAttempt_IsAttemptValid",
                                                                      new SqlParameter("UserAreaCode", query.UserAreaCode),
                                                                      new SqlParameter("Username", query.Username.Trim()),
                                                                      new SqlParameter("IPAddress", connectionInfo.IPAddress),
                                                                      new SqlParameter("DateTimeNow", executionContext.ExecutionDate),
                                                                      new SqlParameter("MaxIPAttempts", _authenticationSettings.MaxIPAttempts),
                                                                      new SqlParameter("MaxUsernameAttempts", _authenticationSettings.MaxUsernameAttempts),
                                                                      new SqlParameter("MaxIPAttemptsBoundaryInMinutes", _authenticationSettings.MaxIPAttemptsBoundaryInMinutes),
                                                                      new SqlParameter("MaxUsernameAttemptsBoundaryInMinutes", _authenticationSettings.MaxUsernameAttemptsBoundaryInMinutes)
                                                                      );

            return(isValid != 1);
        }