Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 42
LoginAttempt
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 2
30
0.00% covered (danger)
0.00%
0 / 35
 __construct
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 9
 execute
0.00% covered (danger)
0.00%
0 / 1
20
0.00% covered (danger)
0.00%
0 / 26
<?php
namespace LoginNotify\Maintenance;
use FauxRequest;
use Hooks;
use Maintenance;
use MediaWiki\Auth\AuthenticationResponse;
use RawMessage;
use User;
$IP = getenv( 'MW_INSTALL_PATH' );
if ( $IP === false ) {
    $IP = __DIR__ . '/../../..';
}
require_once "$IP/maintenance/Maintenance.php";
/**
 * A maintenance script to programatically generate successful or failed login attempts for any
 * user, from any given IP address and with any given user-agent string. This script makes testing
 * LoginNotify and its interaction with other extensions (such as CheckUser) much easier for the
 * developers.
 */
class LoginAttempt extends Maintenance {
    /**
     * Constructor
     *
     * Retrieves the arguments from the command line
     */
    public function __construct() {
        parent::__construct();
        $this->addDescription( 'Registers a login attempt for a given user' );
        $this->addArg( 'user', 'Target user', true );
        $this->addArg( 'success', 'Whether login attempt was successful (true/false)', false );
        $this->addArg( 'ip', 'IP address of the login attempt', false );
        $this->addArg( 'ua', 'User-agent string of the login attempt', false );
        $this->addArg( 'repetitions', 'How many times the attempt should be made', false );
        $this->requireExtension( 'LoginNotify' );
    }
    /**
     * Main function
     *
     * Registers a failed or successful login attempt for a given user
     */
    public function execute() {
        global $wgRequest;
        $username = $this->getArg( 0 );
        $success = $this->getArg( 1, false ) === 'true';
        $ip = $this->getArg( 2, '127.0.0.1' );
        $ua = $this->getArg( 3, 'Login attempt by LoginNotify maintenance script' );
        $reps = intval( $this->getArg( 4, 1 ) );
        $wgRequest = new FauxRequest();
        $wgRequest->setIP( $ip );
        $wgRequest->setHeader( 'User-Agent', $ua );
        if ( !User::idFromName( $username ) ) {
            $this->output( "User {$username} does not exist!\n" );
            return;
        }
        $user = User::newFromName( $username, 'usable' );
        for ( $i = 0; $i < $reps; $i++ ) {
            if ( $success ) {
                $res = AuthenticationResponse::newPass( $username );
                Hooks::run( 'AuthManagerLoginAuthenticateAudit', [ $res, $user, $username, [] ] );
                $this->output( "A successful login attempt was registered!\n" );
            } else {
                $res = AuthenticationResponse::newFail( new RawMessage( 'Well, it failed' ) );
                Hooks::run( 'AuthManagerLoginAuthenticateAudit', [ $res, null, $username, [] ] );
                $this->output( "A failed login attempt was registered!\n" );
            }
        }
    }
}
$maintClass = LoginAttempt::class;
require_once RUN_MAINTENANCE_IF_MAIN;