wiki.techinc.nl/includes/user/TempUser/TempUserConfig.php
Thalia 2c3b456ffc
[temp accounts] Introduce 'known' config flag
Why:

- We want to distinguish temp account creation being enabled from a
  configuration state where MediaWiki knows about temp accounts
  existing (and can identify and manage them accordingly) while temp
  account creation is disabled

What:

- Introduce a 'known' configuration flag to TempUserConfig
- If 'enabled' is set to true, then 'known' is automatically overridden
  to true
- If an administrator wishes to disable temp account creation after
  temporary accounts have been created, the administrator should set
  'enabled=false' and 'known=true'

Co-authored-by: Tchanders <thalia.e.chan@googlemail.com>
Co-authored-by: Kosta Harlan <kharlan@wikimedia.org>
Bug: T356524
Change-Id: I4ce534a847461230f7fa276a565bdc1d6c9857e1
2024-06-13 22:11:27 +02:00

129 lines
3.3 KiB
PHP

<?php
namespace MediaWiki\User\TempUser;
use MediaWiki\Permissions\Authority;
use Wikimedia\Rdbms\IExpression;
use Wikimedia\Rdbms\IReadableDatabase;
/**
* Interface for temporary user creation config and name matching.
*
* This is separate from TempUserCreator to avoid dependency loops during
* service construction, since TempUserCreator needs UserNameUtils which
* needs TempUserConfig.
*
* @since 1.39
*/
interface TempUserConfig {
/**
* Is temp user creation enabled?
*
* @return bool
*/
public function isEnabled();
/**
* Are temporary accounts a known concept on the wiki?
* This should return true if any temporary accounts exist.
*
* @return bool
*/
public function isKnown();
/**
* Is the action valid for user auto-creation?
*
* @param string $action
* @return bool
*/
public function isAutoCreateAction( string $action );
/**
* Should/would auto-create be performed if the user attempts to perform
* the given action?
*
* @since 1.41
* @param Authority $authority
* @param string $action
* @return bool
*/
public function shouldAutoCreate( Authority $authority, string $action );
/**
* Does the name match the configured pattern indicating that it is a
* temporary auto-created user?
*
* @param string $name
* @return bool
*/
public function isTempName( string $name );
/**
* Does the name match a configured pattern which indicates that it
* conflicts with temporary user names? Should manual user creation
* be denied?
*
* @param string $name
* @return mixed
*/
public function isReservedName( string $name );
/**
* Get a placeholder name which matches the reserved prefix
*
* @return string
*/
public function getPlaceholderName(): string;
/**
* Get a Pattern indicating how temporary account can be detected
*
* Used to avoid selecting a temp account via select queries.
*
* @deprecated since 1.42. Use ::getMatchPatterns as multiple patterns may be defined.
* @return Pattern
*/
public function getMatchPattern(): Pattern;
/**
* Get Patterns indicating how temporary account can be detected
*
* Used to avoid selecting a temp account via select queries.
*
* @since 1.42
* @return Pattern[]
*/
public function getMatchPatterns(): array;
/**
* Get a SQL query condition that will match (or not match) temporary accounts.
*
* @since 1.42
* @param IReadableDatabase $db
* @param string $field Database field to match against
* @param string $op Operator: IExpression::LIKE or IExpression::NOT_LIKE
* @return IExpression
*/
public function getMatchCondition( IReadableDatabase $db, string $field, string $op ): IExpression;
/**
* After how many days do temporary users expire?
*
* @note expireTemporaryAccounts.php maintenance script needs to be periodically executed for
* temp account expiry to work.
* @since 1.42
* @return int|null Null if temp accounts should never expire
*/
public function getExpireAfterDays(): ?int;
/**
* How many days before expiration should temporary users be notified?
*
* @note expireTemporaryAccounts.php maintenance script needs to be periodically executed for
* temp account expiry to work.
* @since 1.42
* @return int|null Null if temp accounts should never be notified before expiration
*/
public function getNotifyBeforeExpirationDays(): ?int;
}