105         String userId = 
event.userId;
   106         UserModel user = session.users().getUserById(userId, realm);
   111         UserLoginFailureModel userLoginFailure = 
getUserModel(session, event);
   112         if (userLoginFailure == null) {
   113             userLoginFailure = session.sessions().addUserLoginFailure(realm, userId);
   115         userLoginFailure.setLastIPFailure(event.ip);
   116         long currentTime = Time.currentTimeMillis();
   117         long last = userLoginFailure.getLastFailure();
   120             deltaTime = currentTime - last;
   122         userLoginFailure.setLastFailure(currentTime);
   124         if(realm.isPermanentLockout()) {
   125             userLoginFailure.incrementFailures();
   126             logger.debugv(
"new num failures: {0}", userLoginFailure.getNumFailures());
   128             if(userLoginFailure.getNumFailures() == realm.getFailureFactor()) {
   129                 logger.debugv(
"user {0} locked permanently due to too many login attempts", user.getUsername());
   130                 user.setEnabled(
false);
   134             if (last > 0 && deltaTime < realm.getQuickLoginCheckMilliSeconds()) {
   135                 logger.debugv(
"quick login, set min wait seconds");
   136                 int waitSeconds = realm.getMinimumQuickLoginWaitSeconds();
   137                 int notBefore = (int) (currentTime / 1000) + waitSeconds;
   138                 logger.debugv(
"set notBefore: {0}", notBefore);
   139                 userLoginFailure.setFailedLoginNotBefore(notBefore);
   146             if (deltaTime > (
long) realm.getMaxDeltaTimeSeconds() * 1000L) {
   147                 userLoginFailure.clearFailures();
   150         userLoginFailure.incrementFailures();
   151         logger.debugv(
"new num failures: {0}", userLoginFailure.getNumFailures());
   153         int waitSeconds = realm.getWaitIncrementSeconds() *  (userLoginFailure.getNumFailures() / realm.getFailureFactor());
   154         logger.debugv(
"waitSeconds: {0}", waitSeconds);
   155         logger.debugv(
"deltaTime: {0}", deltaTime);
   157         if (waitSeconds == 0) {
   158             if (last > 0 && deltaTime < realm.getQuickLoginCheckMilliSeconds()) {
   159                 logger.debugv(
"quick login, set min wait seconds");
   160                 waitSeconds = realm.getMinimumQuickLoginWaitSeconds();
   163         if (waitSeconds > 0) {
   164             waitSeconds = Math.min(realm.getMaxFailureWaitSeconds(), waitSeconds);
   165             int notBefore = (int) (currentTime / 1000) + waitSeconds;
   166             logger.debugv(
"set notBefore: {0}", notBefore);
   167             userLoginFailure.setFailedLoginNotBefore(notBefore);
 UserLoginFailureModel getUserModel(KeycloakSession session, LoginEvent event)
Definition: DefaultBruteForceProtector.java:172
 
RealmModel getRealmModel(KeycloakSession session, LoginEvent event)
Definition: DefaultBruteForceProtector.java:180
 
static final Logger logger
Definition: DefaultBruteForceProtector.java:43
 
void logFailure(LoginEvent event)
Definition: DefaultBruteForceProtector.java:263