Version 4.7.23

This commit is contained in:
Neo committed 2025-12-19 16:21:27 -08:00
1 parent 7124a02564
commit 25ddeb65d6
1791 files changed
+76990 -44452

No files matched your search

+17 -20
View File
@@ -293,10 +293,7 @@ class _Login
{
if ( !$success or $success->member->member_id != $failedMember->member_id )
{
$failedLogins = \is_array( $failedMember->failed_logins ) ? $failedMember->failed_logins : array();
$failedLogins[ \IPS\Request::i()->ipAddress() ][] = time();
$failedMember->failed_logins = $failedLogins;
$failedMember->save();
$failedMember->failedLogin();
}
}
@@ -304,17 +301,7 @@ class _Login
{
if ( !$success or $success->member->email != $failedMember->email )
{
try
{
$failedLogins = \is_array( \IPS\Data\Store::i()->failedLogins ) ? \IPS\Data\Store::i()->failedLogins : array();
}
catch( \OutOfRangeException $e )
{
$failedLogins = array();
}
$failedLogins[ $failedMember->email ][ \IPS\Request::i()->ipAddress() ][] = time();
\IPS\Data\Store::i()->failedLogins = $failedLogins;
$failedMember->failedLogin();
}
}
@@ -396,6 +383,19 @@ class _Login
*/
public static function checkIfAccountIsLocked( $member, $success = FALSE )
{
/* Global attempts */
if( \IPS\Settings::i()->bruteforce_global_attempts )
{
$fromTimestamp = ( new \IPS\DateTime )->sub( new \DateInterval( 'PT' . \IPS\Settings::i()->bruteforce_global_period .'M' ) )->getTimestamp();
$globalFailures = \IPS\Db::i()->select( 'count(*) as total', 'core_login_failures', [ 'login_date>? AND login_ip_address=?', $fromTimestamp, \IPS\Request::i()->ipAddress() ] )->first();
/* Potential password-spraying activity */
if( $globalFailures >= (int) \IPS\Settings::i()->bruteforce_global_attempts )
{
throw new \IPS\Login\Exception( 'login_err_locked_nounlock', \IPS\Login\Exception::ACCOUNT_LOCKED );
}
}
$unlockTime = $member->unlockTime();
if ( $unlockTime !== FALSE )
{
@@ -415,7 +415,7 @@ class _Login
if( $member->member_id )
{
\IPS\Email::buildFromTemplate( 'core', 'account_locked', array( $member, $location, isset( $unlockTime ) ? $unlockTime : NULL ), \IPS\Email::TYPE_TRANSACTIONAL )->send( $member );
$member->logHistory( 'core', 'login', array( 'type' => 'lock', 'count' => \count( $member->failed_logins[ \IPS\Request::i()->ipAddress() ] ), 'unlockTime' => isset( $unlockTime ) ? $unlockTime->getTimestamp() : NULL ) );
$member->logHistory( 'core', 'login', array( 'type' => 'lock', 'count' => $member->failedLoginCount( \IPS\Request::i()->ipAddress() ), 'unlockTime' => isset( $unlockTime ) ? $unlockTime->getTimestamp() : NULL ) );
}
}
@@ -432,10 +432,7 @@ class _Login
}
elseif ( $success )
{
$failedLogins = \is_array( $member->failed_logins ) ? $member->failed_logins : array();
unset( $failedLogins[ \IPS\Request::i()->ipAddress() ] );
$member->failed_logins = $failedLogins;
$member->save();
\IPS\Db::i()->delete( 'core_login_failures', [ 'login_member_id=? AND login_ip_address=?', $member->member_id, \IPS\Request::i()->ipAddress() ] );
}
}