Why: * Naming conflicts may arise on autocreation. * For example, when generating temporary user names, the config wgAutoCreateTempUser['serialMapping']['type'] determines how the unique, numerical part of the name is generated, and naming conflicts may arise when changing types. * Specifically we encountered the case of changing the $wgAutoCreateTempUser['serialMapping']['type'] from 'scramble' to 'plain-numeric'. * In general conflict could be avoided in 'plain-numeric' mode if the highest number used in an existing username is known, by adding an offset. What: * Handle an 'offset' config option in PlainNumericSerialMapping to allow avoiding conflicts. Bug: T353545 Change-Id: Id2f9a5b5cc808ce859b93b597cf7ea0efcd9e269
24 lines
449 B
PHP
24 lines
449 B
PHP
<?php
|
|
|
|
namespace MediaWiki\User\TempUser;
|
|
|
|
/**
|
|
* Simple serial mapping for ASCII decimal numbers
|
|
*
|
|
* @since 1.39
|
|
*/
|
|
class PlainNumericSerialMapping implements SerialMapping {
|
|
/** @var int */
|
|
private $offset;
|
|
|
|
/**
|
|
* @param array $config
|
|
*/
|
|
public function __construct( $config ) {
|
|
$this->offset = $config['offset'] ?? 0;
|
|
}
|
|
|
|
public function getSerialIdForIndex( int $index ): string {
|
|
return (string)( $index + $this->offset );
|
|
}
|
|
}
|