mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/LoginNotify
synced 2024-11-14 10:44:38 +00:00
534e3ce4b3
Add a table which stores a summary of each user's IP address subnet in each time bucket, defaulting to 15 days. On edit (and other changes causing a recentchanges row) and successful login update the table. On attempted login, check whether the subnet is in the table in any time bucket back to the expiry time. Add a job and a maintenance script for purging expired rows. Disabled by default for now. The idea is to enable it by default after we have some experience with using it in WMF production. If CheckUser integration is disabled (the future intended state), the cache and LoginNotifyChecks job are suppressed since they are unnecessary. Details: * Rename setCurrentAddressAsKnown() to recordKnownWithCookie() and split off recordKnown() which does the same thing except without sending the cookie. We use recordKnown() to store the IP address without sending the cookie, on non-login changes. * Reorganise isKnownSystemFast() for clarity, and return emphatic USER_NOT_KNOWN if the user is not in the table, cache or cookie and CheckUser integration is disabled. * Replace time() calls with a mockable method. Bug: T345052 Change-Id: Iea716e660353f16c47f873fe42edc2aeec1b4346
31 lines
712 B
PHP
31 lines
712 B
PHP
<?php
|
|
|
|
namespace LoginNotify\Maintenance;
|
|
|
|
use LoginNotify\LoginNotify;
|
|
|
|
$IP = getenv( 'MW_INSTALL_PATH' );
|
|
if ( $IP === false ) {
|
|
$IP = __DIR__ . '/../../..';
|
|
}
|
|
|
|
require_once "$IP/maintenance/Maintenance.php";
|
|
|
|
class PurgeSeen extends \Maintenance {
|
|
public function __construct() {
|
|
parent::__construct();
|
|
$this->addDescription( 'Purge expired user IP address information stored by LoginNotify' );
|
|
}
|
|
|
|
public function execute() {
|
|
$loginNotify = LoginNotify::getInstance();
|
|
$minId = $loginNotify->getMinExpiredId();
|
|
for ( ; $minId !== null; $this->waitForReplication() ) {
|
|
$minId = $loginNotify->purgeSeen( $minId );
|
|
}
|
|
}
|
|
}
|
|
|
|
$maintClass = PurgeSeen::class;
|
|
require_once RUN_MAINTENANCE_IF_MAIN;
|