X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;ds=sidebyside;f=includes%2Fblock%2FBlockManager.php;h=c58537e38848a040c934db0ff06c12c70e6c0984;hb=dfec83932fd38a9086eb5a2e212889ad00f35b0e;hp=abd2db24af2de43d47923db4e47c884989170d7b;hpb=67d01c452da591faced0a4be7940acf4f3292928;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/block/BlockManager.php b/includes/block/BlockManager.php index abd2db24af..c58537e388 100644 --- a/includes/block/BlockManager.php +++ b/includes/block/BlockManager.php @@ -21,6 +21,7 @@ namespace MediaWiki\Block; use DateTime; +use DeferredUpdates; use IP; use MediaWiki\User\UserIdentity; use MWCryptHash; @@ -76,23 +77,23 @@ class BlockManager { * @param bool $applyIpBlocksToXff * @param bool $cookieSetOnAutoblock * @param bool $cookieSetOnIpBlock - * @param array $dnsBlacklistUrls + * @param string[] $dnsBlacklistUrls * @param bool $enableDnsBlacklist - * @param array $proxyList - * @param array $proxyWhitelist + * @param string[] $proxyList + * @param string[] $proxyWhitelist * @param string $secretKey * @param array $softBlockRanges */ public function __construct( - $currentUser, - $currentRequest, + User $currentUser, + WebRequest $currentRequest, $applyIpBlocksToXff, $cookieSetOnAutoblock, $cookieSetOnIpBlock, - $dnsBlacklistUrls, + array $dnsBlacklistUrls, $enableDnsBlacklist, - $proxyList, - $proxyWhitelist, + array $proxyList, + array $proxyWhitelist, $secretKey, $softBlockRanges ) { @@ -232,7 +233,7 @@ class BlockManager { * @param AbstractBlock[] $blocks * @return AbstractBlock[] */ - private function getUniqueBlocks( $blocks ) { + private function getUniqueBlocks( array $blocks ) { $systemBlocks = []; $databaseBlocks = []; @@ -431,26 +432,38 @@ class BlockManager { * @param User $user */ public function trackBlockWithCookie( User $user ) { - $block = $user->getBlock(); $request = $user->getRequest(); - $response = $request->response(); - $isAnon = $user->isAnon(); - - if ( $block && $request->getCookie( 'BlockID' ) === null ) { - if ( $block instanceof CompositeBlock ) { - // TODO: Improve on simply tracking the first trackable block (T225654) - foreach ( $block->getOriginalBlocks() as $originalBlock ) { - if ( $this->shouldTrackBlockWithCookie( $originalBlock, $isAnon ) ) { - $this->setBlockCookie( $originalBlock, $response ); - return; + if ( $request->getCookie( 'BlockID' ) !== null ) { + // User already has a block cookie + return; + } + + // Defer checks until the user has been fully loaded to avoid circular dependency + // of User on itself (T180050 and T226777) + DeferredUpdates::addCallableUpdate( + function () use ( $user, $request ) { + $block = $user->getBlock(); + $response = $request->response(); + $isAnon = $user->isAnon(); + + if ( $block ) { + if ( $block instanceof CompositeBlock ) { + // TODO: Improve on simply tracking the first trackable block (T225654) + foreach ( $block->getOriginalBlocks() as $originalBlock ) { + if ( $this->shouldTrackBlockWithCookie( $originalBlock, $isAnon ) ) { + $this->setBlockCookie( $originalBlock, $response ); + return; + } + } + } else { + if ( $this->shouldTrackBlockWithCookie( $block, $isAnon ) ) { + $this->setBlockCookie( $block, $response ); + } } } - } else { - if ( $this->shouldTrackBlockWithCookie( $block, $isAnon ) ) { - $this->setBlockCookie( $block, $response ); - } - } - } + }, + DeferredUpdates::PRESEND + ); } /**