CheckUser Protect
CheckUser Protect — модификация расширения MediaWiki для проверки IP-адресов и личных данных участников CheckUser, добавляющая право, защищающее участников от проверки чекюзерами (IP-адреса такого участника получить нельзя; при проверке диапазонов и IP-адресов его данные не отображаются).
Авторы модификации — Edward Chernenko и Oversighted484.
Содержание |
[править] История
Введение права checkuser-protect
, защищающего от проверок, впервые было предложено 1 апреля 2011 года в Викиреальности для Нового движка Абсурдопедии в рамках проводимого Edward’ом Chernenko опроса. Edward Chernenko написал, что если расширение CheckUser будет реализовано в новом движке, то и такое право тоже обязательно будет.
В тот же день неким пользователем Aqquzf был открыт запрос «Allow per-user or per-group exemptions from the use of CheckUser» на Багзилле Викимедиа. В ходе обсуждения некоторые разработчики выразили сомнение в необходимости введения защиты от проверок и пометили запрос как «WONTFIX».
16 апреля 2011 года участником Викиреальности Змей была открыта тема, в которой он предложил заняться написанием патча участникам Викиреальности. 17 апреля 2011 года Edward Chernenko сообщил, что займется этим через два дня.
20 апреля 2011 года модификация была написана и размещена в Викиреальности.
[править] Установка
- Загрузить и установить расширение CheckUser (проверено на версии для MediaWiki 1.16.x и trunk).
- Модифицировать файл
extensions/CheckUser/CheckUser.php
:- изменить строку 29 на
'author' => array( 'Tim Starling', 'Aaron Schulz', 'Edward Chernenko' ),
. - изменить строку 31 на
'version' => '2.3_EC',
. - добавить после строки 42:
$wgAvailableRights[] = 'checkuser-protect';
- изменить строку 29 на
- Модифицировать файл
extensions/CheckUser/CheckUser_body.php
:- В функциях
doUserIPsRequest
иdoUserEditsRequest
после строчки$user_id = User::idFromName( $user );
добавить код:
- В функциях
$user_object = User::newFromName($user); if ( $user_object && $user_object->isAllowed( 'checkuser-protect' ) ) { if ( !$this->addLogEntry( 'userips-protected', 'user', $user, $reason, $user_id ) ) { $wgOut->addHTML( '<p>' . wfMsgHtml( 'checkuser-log-fail' ) . '</p>' ); } $wgOut->addWikiMsg( 'checkuser-protecteduser' ); return; }
- В функции
doIPEditsRequest
найти строчку$s .= $this->CUChangesLine( $row, $reason );
и заменить ее на:
- В функции
$user_object = User::newFromName($row->cuc_user_text); if ( $user_object && $user_object->isAllowed( 'checkuser-protect' ) ) { # protected } else { $s .= $this->CUChangesLine( $row, $reason ); }
- В функции
doIPUsersRequest
найти код:
- В функции
while ( ( $row = $dbr->fetchObject( $ret ) ) != false ) { if ( !array_key_exists( $row->cuc_user_text, $users_edits ) ) { $users_last[$row->cuc_user_text] = $row->cuc_timestamp; $users_edits[$row->cuc_user_text] = 0; $users_ids[$row->cuc_user_text] = $row->cuc_user; $users_infosets[$row->cuc_user_text] = array(); $users_agentsets[$row->cuc_user_text] = array(); } $users_edits[$row->cuc_user_text] += 1; $users_first[$row->cuc_user_text] = $row->cuc_timestamp; # Treat blank or NULL xffs as empty strings $xff = empty( $row->cuc_xff ) ? null : $row->cuc_xff; $xff_ip_combo = array( $row->cuc_ip, $xff ); # Add this IP/XFF combo for this username if it's not already there if ( !in_array( $xff_ip_combo, $users_infosets[$row->cuc_user_text] ) ) { $users_infosets[$row->cuc_user_text][] = $xff_ip_combo; } # Add this agent string if it's not already there; 10 max. if ( count( $users_agentsets[$row->cuc_user_text] ) < 10 ) { if ( !in_array( $row->cuc_agent, $users_agentsets[$row->cuc_user_text] ) ) { $users_agentsets[$row->cuc_user_text][] = $row->cuc_agent; } } }
И заменить его на следующий код:
while( ( $row = $dbr->fetchObject( $ret ) ) != false ) { $user_object = User::newFromName($row->cuc_user_text); if ( $user_object && $user_object->isAllowed( 'checkuser-protect' ) ) { # protected } else { if( !array_key_exists( $row->cuc_user_text, $users_edits ) ) { $users_last[$row->cuc_user_text] = $row->cuc_timestamp; $users_edits[$row->cuc_user_text] = 0; $users_ids[$row->cuc_user_text] = $row->cuc_user; $users_infosets[$row->cuc_user_text] = array(); $users_agentsets[$row->cuc_user_text] = array(); } $users_edits[$row->cuc_user_text] += 1; $users_first[$row->cuc_user_text] = $row->cuc_timestamp; # Treat blank or NULL xffs as empty strings $xff = empty( $row->cuc_xff ) ? null : $row->cuc_xff; $xff_ip_combo = array( $row->cuc_ip, $xff ); # Add this IP/XFF combo for this username if it's not already there if( !in_array( $xff_ip_combo, $users_infosets[$row->cuc_user_text] ) ) { $users_infosets[$row->cuc_user_text][] = $xff_ip_combo; } # Add this agent string if it's not already there; 10 max. if( count( $users_agentsets[$row->cuc_user_text] ) < 10 ) { if( !in_array( $row->cuc_agent, $users_agentsets[$row->cuc_user_text] ) ) { $users_agentsets[$row->cuc_user_text][] = $row->cuc_agent; } } } }
- Определить в LocalSettings.php право
checkuser-protect
для необходимых групп участников при помощи $wgGroupPermissions.
[править] Системные сообщения
Для корректной работы модификации необходимо создать следующие системные сообщения:
- MediaWiki:Right-checkuser-protect — описание права
checkuser-protect
для Special:ListGroupRights:
не может быть проверен средствами CheckUser
- MediaWiki:Checkuser-protecteduser — ошибка, появляющаяся на странице проверки при попытке проверить участника с правом
checkuser-protect
:
Этот участник защищён и не может быть проверен средствами CheckUser.
- MediaWiki:Checkuser-log-userips-protected — запись в журнале проверок при попытке проверить участника с правом
checkuser-protect
:
$1 запросил IP-адреса для защищённого участника $2
- MediaWiki:Checkuser-log-useredits-protected — запись в журнале проверок при попытке получить правки участника с правом
checkuser-protect
:
$1 запросил правки для защищённого участника $2
[править] Примеры использования
- Двухуровневый чекюзинг: чекюзеры разделяются на бюрократов, которые могут проверять всех без исключения участников, и обычных проверяющих, которые могут проверять только анонимов и новичков. Для его использования добавьте в LocalSettings.php:
# Защита от проверок для автоподтвержденных $wgGroupPermissions['autoconfirmed']['checkuser-protect'] = true; # Добавление группы 'demoted', члены которой перестают быть автоподтвержденными # Группа может присваиваться и сниматься участниками с правом 'userrights' $wgGroupPermissions['demoted']['demoted'] = true; $wgAutopromote = array( 'autoconfirmed' => array( '&', array( APCOND_EDITCOUNT, &$wgAutoConfirmCount ), array( APCOND_AGE, &$wgAutoConfirmAge ), array( '!', array( APCOND_INGROUPS, 'demoted' ) ), ), );
- Публичный факт совершения проверки: все участники по умолчанию имеют правок защиты от проверки, лишать его могут проверяющие посредством публичного действия: снятия флага, после проведения проверки они обязаны его возвращать. Таким образом, ведется публичный лог проверяемых участников. Недостаток метода: невозможно получить участников, работающих с IP-диапазона, необходимо проверять каждого в отдельности. Для его использования добавьте в LocalSettings.php:
# Защита от проверок для группы 'protected' $wgGroupPermissions['protected']['checkuser-protect'] = true; # Добавление группы 'demoted', члены которой перестают быть автоподтвержденными # Автополучение группы 'protected' после совершения первой правки # Группа 'demoted' может присваиваться и сниматься участниками с правом 'userrights' $wgGroupPermissions['demoted']['demoted'] = true; $wgAutopromote = array( 'autoconfirmed' => array( '&', array( APCOND_EDITCOUNT, &$wgAutoConfirmCount ), array( APCOND_AGE, &$wgAutoConfirmAge ), ), 'protected' => array( '&', array( APCOND_EDITCOUNT, '1' ), array( '!', array( APCOND_INGROUPS, 'demoted' ) ), ), );
CheckUser Protect относится к теме «Чекюзинг» |