mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/LoginNotify
synced 2024-12-21 02:52:44 +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
15 lines
540 B
SQL
15 lines
540 B
SQL
-- This file is automatically generated using maintenance/generateSchemaSql.php.
|
|
-- Source: sql/tables.json
|
|
-- Do not modify this file directly.
|
|
-- See https://www.mediawiki.org/wiki/Manual:Schema_changes
|
|
CREATE TABLE /*_*/loginnotify_seen_net (
|
|
lsn_id INT UNSIGNED AUTO_INCREMENT NOT NULL,
|
|
lsn_time_bucket SMALLINT UNSIGNED NOT NULL,
|
|
lsn_user INT UNSIGNED NOT NULL,
|
|
lsn_subnet BIGINT NOT NULL,
|
|
UNIQUE INDEX loginnotify_seen_net_user (
|
|
lsn_user, lsn_subnet, lsn_time_bucket
|
|
),
|
|
PRIMARY KEY(lsn_id)
|
|
) /*$wgDBTableOptions*/;
|