protected function afterAuthorization(Result $result, $lastAuthorizer = null)
    {
        try {
            $select = $this->db->select();
            $select->from('gems__user_login_attempts', array('gula_failed_logins', 'gula_last_failed', 'gula_block_until', new \Zend_Db_Expr('UNIX_TIMESTAMP() - UNIX_TIMESTAMP(gula_last_failed) AS since_last')))
                    ->where('gula_login = ?', $this->getLoginName())
                    ->where('gula_id_organization = ?', $this->getCurrentOrganizationId())
                    ->limit(1);

            $values = $this->db->fetchRow($select);

            // The first login attempt
            if (! $values) {
                $values['gula_login']           = $this->getLoginName();
                $values['gula_id_organization'] = $this->getCurrentOrganizationId();
                $values['gula_failed_logins']   = 0;
                $values['gula_last_failed']     = null;
                $values['gula_block_until']     = null;
                $values['since_last']           = $this->failureIgnoreTime + 1;
            }

            if ($result->isValid()) {
                // Reset login failures
                $values['gula_failed_logins']   = 0;
                $values['gula_last_failed']     = null;
                $values['gula_block_until']     = null;

            } else {

                // Reset the counters when the last login was longer ago than the delay factor
                if ($values['since_last'] > $this->failureIgnoreTime) {
                    $values['gula_failed_logins'] = 1;
                } elseif ($lastAuthorizer === 'pwd') {
                    // Only increment failed login when password failed
                    $values['gula_failed_logins'] += 1;
                }

                // If block is already set
                if ($values['gula_block_until']) {
                    // Do not change it anymore
                    unset($values['gula_block_until']);

                } else {
                    // Only set the block when needed
                    if ($this->failureBlockCount <= $values['gula_failed_logins']) {
                        $values['gula_block_until'] = new \Zend_Db_Expr('DATE_ADD(CURRENT_TIMESTAMP, INTERVAL ' . $this->failureIgnoreTime . ' SECOND)');
                    }
                }

                // Always record the last fail
                $values['gula_last_failed']     = new \MUtil_Db_Expr_CurrentTimestamp();
                $values['gula_failed_logins']   = max(1, $values['gula_failed_logins']);

                // Response gets slowly slower
                $sleepTime = min($values['gula_failed_logins'] - 1, 10) * 2;
                sleep($sleepTime);
                // \MUtil_Echo::track($sleepTime, $values, $result->getMessages());
            }

            // Value not saveable
            unset($values['since_last']);

            if (isset($values['gula_login'])) {
                $this->db->insert('gems__user_login_attempts', $values);
            } else {
                $where = $this->db->quoteInto('gula_login = ? AND ', $this->getLoginName());
                $where .= $this->db->quoteInto('gula_id_organization = ?', $this->getCurrentOrganizationId());
                $this->db->update('gems__user_login_attempts', $values, $where);
            }

        } catch (\Zend_Db_Exception $e) {
            // Fall through as this does not work if the database upgrade did not yet run
            // \MUtil_Echo::r($e);
        }

    }
protected function afterAuthorization(Result $result, $lastAuthorizer = null)
    {
        try {
            $select = $this->db->select();
            $select->from('gems__user_login_attempts', array('gula_failed_logins', 'gula_last_failed', 'gula_block_until', new \Zend_Db_Expr('UNIX_TIMESTAMP() - UNIX_TIMESTAMP(gula_last_failed) AS since_last')))
                    ->where('gula_login = ?', $this->getLoginName())
                    ->where('gula_id_organization = ?', $this->getCurrentOrganizationId())
                    ->limit(1);

            $values = $this->db->fetchRow($select);

            // The first login attempt
            if (! $values) {
                $values['gula_login']           = $this->getLoginName();
                $values['gula_id_organization'] = $this->getCurrentOrganizationId();
                $values['gula_failed_logins']   = 0;
                $values['gula_last_failed']     = null;
                $values['gula_block_until']     = null;
                $values['since_last']           = $this->failureIgnoreTime + 1;
            }

            if ($result->isValid()) {
                // Reset login failures
                $values['gula_failed_logins']   = 0;
                $values['gula_last_failed']     = null;
                $values['gula_block_until']     = null;

            } else {

                // Reset the counters when the last login was longer ago than the delay factor
                if ($values['since_last'] > $this->failureIgnoreTime) {
                    $values['gula_failed_logins'] = 1;
                } elseif ($lastAuthorizer === 'pwd') {
                    // Only increment failed login when password failed
                    $values['gula_failed_logins'] += 1;
                }

                // If block is already set
                if ($values['gula_block_until']) {
                    // Do not change it anymore
                    unset($values['gula_block_until']);

                } else {
                    // Only set the block when needed
                    if ($this->failureBlockCount <= $values['gula_failed_logins']) {
                        $values['gula_block_until'] = new \Zend_Db_Expr('DATE_ADD(CURRENT_TIMESTAMP, INTERVAL ' . $this->failureIgnoreTime . ' SECOND)');
                    }
                }

                // Always record the last fail
                $values['gula_last_failed']     = new \MUtil_Db_Expr_CurrentTimestamp();
                $values['gula_failed_logins']   = max(1, $values['gula_failed_logins']);

                // Response gets slowly slower
                $sleepTime = min($values['gula_failed_logins'] - 1, 10) * 2;
                sleep($sleepTime);
                // \MUtil_Echo::track($sleepTime, $values, $result->getMessages());
            }

            // Value not saveable
            unset($values['since_last']);

            if (isset($values['gula_login'])) {
                $this->db->insert('gems__user_login_attempts', $values);
            } else {
                $where = $this->db->quoteInto('gula_login = ? AND ', $this->getLoginName());
                $where .= $this->db->quoteInto('gula_id_organization = ?', $this->getCurrentOrganizationId());
                $this->db->update('gems__user_login_attempts', $values, $where);
            }

        } catch (\Zend_Db_Exception $e) {
            // Fall through as this does not work if the database upgrade did not yet run
            // \MUtil_Echo::r($e);
        }

    }
protected function afterAuthorization ( Result $ result , $ lastAuthorizer = null ) { try { $ select = $ this -> db -> select ( ) ; $ select -> from ( 'gems__user_login_attempts' , array ( 'gula_failed_logins' , 'gula_last_failed' , 'gula_block_until' , new \ Zend_Db_Expr ( 'UNIX_TIMESTAMP() - UNIX_TIMESTAMP(gula_last_failed) AS since_last' ) ) ) -> where ( 'gula_login = ?' , $ this -> getLoginName ( ) ) -> where ( 'gula_id_organization = ?' , $ this -> getCurrentOrganizationId ( ) ) -> limit ( 1 ) ; $ values = $ this -> db -> fetchRow ( $ select ) ; // The first login attempt if ( ! $ values ) { $ values [ 'gula_login' ] = $ this -> getLoginName ( ) ; $ values [ 'gula_id_organization' ] = $ this -> getCurrentOrganizationId ( ) ; $ values [ 'gula_failed_logins' ] = 0 ; $ values [ 'gula_last_failed' ] = null ; $ values [ 'gula_block_until' ] = null ; $ values [ 'since_last' ] = $ this -> failureIgnoreTime + 1 ; } if ( $ result -> isValid ( ) ) { // Reset login failures $ values [ 'gula_failed_logins' ] = 0 ; $ values [ 'gula_last_failed' ] = null ; $ values [ 'gula_block_until' ] = null ; } else { // Reset the counters when the last login was longer ago than the delay factor if ( $ values [ 'since_last' ] > $ this -> failureIgnoreTime ) { $ values [ 'gula_failed_logins' ] = 1 ; } elseif ( $ lastAuthorizer === 'pwd' ) { // Only increment failed login when password failed $ values [ 'gula_failed_logins' ] += 1 ; } // If block is already set if ( $ values [ 'gula_block_until' ] ) { // Do not change it anymore unset ( $ values [ 'gula_block_until' ] ) ; } else { // Only set the block when needed if ( $ this -> failureBlockCount <= $ values [ 'gula_failed_logins' ] ) { $ values [ 'gula_block_until' ] = new \ Zend_Db_Expr ( 'DATE_ADD(CURRENT_TIMESTAMP, INTERVAL ' . $ this -> failureIgnoreTime . ' SECOND)' ) ; } } // Always record the last fail $ values [ 'gula_last_failed' ] = new \ MUtil_Db_Expr_CurrentTimestamp ( ) ; $ values [ 'gula_failed_logins' ] = max ( 1 , $ values [ 'gula_failed_logins' ] ) ; // Response gets slowly slower $ sleepTime = min ( $ values [ 'gula_failed_logins' ] - 1 , 10 ) * 2 ; sleep ( $ sleepTime ) ; // \MUtil_Echo::track($sleepTime, $values, $result->getMessages()); } // Value not saveable unset ( $ values [ 'since_last' ] ) ; if ( isset ( $ values [ 'gula_login' ] ) ) { $ this -> db -> insert ( 'gems__user_login_attempts' , $ values ) ; } else { $ where = $ this -> db -> quoteInto ( 'gula_login = ? AND ' , $ this -> getLoginName ( ) ) ; $ where .= $ this -> db -> quoteInto ( 'gula_id_organization = ?' , $ this -> getCurrentOrganizationId ( ) ) ; $ this -> db -> update ( 'gems__user_login_attempts' , $ values , $ where ) ; } } catch ( \ Zend_Db_Exception $ e ) { // Fall through as this does not work if the database upgrade did not yet run // \MUtil_Echo::r($e); } }
Process everything after authentication.

@param Zend\Authentication\Result $result
Process everything after authentication .