* @return string
*/
protected function getCacheKey( WANObjectCache $cache ) {
- $cache = MediaWikiServices::getInstance()->getMainWANObjectCache();
$lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
return $cache->makeGlobalKey( 'user', 'id', $lbFactory->getLocalDomainID(), $this->mId );
* @since 1.25
*/
protected function loadFromCache() {
- $cache = ObjectCache::getMainWANInstance();
+ $cache = MediaWikiServices::getInstance()->getMainWANObjectCache();
$data = $cache->getWithSetCallback(
$this->getCacheKey( $cache ),
$cache::TTL_HOUR,
$name = self::getCanonicalName( $name, $validate );
if ( $name === false ) {
return false;
- } else {
- // Create unloaded user object
- $u = new User;
- $u->mName = $name;
- $u->mFrom = 'name';
- $u->setItemLoaded( 'name' );
- return $u;
}
+
+ // Create unloaded user object
+ $u = new User;
+ $u->mName = $name;
+ $u->mFrom = 'name';
+ $u->setItemLoaded( 'name' );
+
+ return $u;
}
/**
}
// Preg yells if you try to give it an empty string
- if ( $wgInvalidUsernameCharacters !== '' ) {
- if ( preg_match( '/[' . preg_quote( $wgInvalidUsernameCharacters, '/' ) . ']/', $name ) ) {
- wfDebugLog( 'username', __METHOD__ .
- ": '$name' invalid due to wgInvalidUsernameCharacters" );
- return false;
- }
+ if ( $wgInvalidUsernameCharacters !== '' &&
+ preg_match( '/[' . preg_quote( $wgInvalidUsernameCharacters, '/' ) . ']/', $name )
+ ) {
+ wfDebugLog( 'username', __METHOD__ .
+ ": '$name' invalid due to wgInvalidUsernameCharacters" );
+ return false;
}
return self::isUsableName( $name );
$result = $this->checkPasswordValidity( $password );
if ( $result->isGood() ) {
return true;
- } else {
- $messages = [];
- foreach ( $result->getErrorsByType( 'error' ) as $error ) {
- $messages[] = $error['message'];
- }
- foreach ( $result->getErrorsByType( 'warning' ) as $warning ) {
- $messages[] = $warning['message'];
- }
- if ( count( $messages ) === 1 ) {
- return $messages[0];
- }
- return $messages;
}
+
+ $messages = [];
+ foreach ( $result->getErrorsByType( 'error' ) as $error ) {
+ $messages[] = $error['message'];
+ }
+ foreach ( $result->getErrorsByType( 'warning' ) as $warning ) {
+ $messages[] = $warning['message'];
+ }
+ if ( count( $messages ) === 1 ) {
+ return $messages[0];
+ }
+
+ return $messages;
}
/**
* Check if this is a valid password for this user
*
- * Create a Status object based on the password's validity.
- * The Status should be set to fatal if the user should not
- * be allowed to log in, and should have any errors that
- * would block changing the password.
- *
- * If the return value of this is not OK, the password
- * should not be checked. If the return value is not Good,
- * the password can be checked, but the user should not be
- * able to set their password to this.
+ * Returns a Status object with a set of messages describing
+ * problems with the password. If the return status is fatal,
+ * the action should be refused and the password should not be
+ * checked at all (this is mainly meant for DoS mitigation).
+ * If the return value is OK but not good, the password can be checked,
+ * but the user should not be able to set their password to this.
+ * The value of the returned Status object will be an array which
+ * can have the following fields:
+ * - forceChange (bool): if set to true, the user should not be
+ * allowed to log with this password unless they change it during
+ * the login process (see ResetPasswordSecondaryAuthenticationProvider).
*
* @param string $password Desired password
* @return Status
$wgPasswordPolicy['checks']
);
- $status = Status::newGood();
+ $status = Status::newGood( [] );
$result = false; // init $result to false for the internal checks
if ( !Hooks::run( 'isValidPassword', [ $password, &$result, $this ] ) ) {
}
if ( $result === false ) {
- $status->merge( $upp->checkUserPassword( $this, $password ) );
+ $status->merge( $upp->checkUserPassword( $this, $password ), true );
return $status;
- } elseif ( $result === true ) {
+ }
+
+ if ( $result === true ) {
return $status;
- } else {
- $status->error( $result );
- return $status; // the isValidPassword hook set a string $result and returned true
}
+
+ $status->error( $result );
+ return $status; // the isValidPassword hook set a string $result and returned true
}
/**
$this->mGroupMemberships = null; // deferred
$this->getEditCount(); // revalidation for nulls
return true;
- } else {
- // Invalid user_id
- $this->mId = 0;
- $this->loadDefaults();
- return false;
}
+
+ // Invalid user_id
+ $this->mId = 0;
+ $this->loadDefaults();
+
+ return false;
}
/**
if ( is_array( $data ) ) {
if ( isset( $data['user_groups'] ) && is_array( $data['user_groups'] ) ) {
- if ( !count( $data['user_groups'] ) ) {
+ if ( $data['user_groups'] === [] ) {
$this->mGroupMemberships = [];
} else {
$firstGroup = reset( $data['user_groups'] );
}
$toPromote = Autopromote::getAutopromoteOnceGroups( $this, $event );
- if ( !count( $toPromote ) ) {
+ if ( $toPromote === [] ) {
return [];
}
$this->mBlockedby = $block->getByName();
$this->mBlockreason = $block->mReason;
$this->mHideName = $block->mHideName;
- $this->mAllowUsertalk = !$block->prevents( 'editownusertalk' );
+ $this->mAllowUsertalk = $block->isUsertalkEditAllowed();
} else {
$this->mBlock = null;
$this->mBlockedby = '';
if ( $blockIsValid && $useBlockCookie ) {
// Use the block.
return $tmpBlock;
- } else {
- // If the block is not valid, remove the cookie.
- Block::clearCookie( $this->getRequest()->response() );
}
+
+ // If the block is not valid, remove the cookie.
+ Block::clearCookie( $this->getRequest()->response() );
} else {
// If the block doesn't exist, remove the cookie.
Block::clearCookie( $this->getRequest()->response() );
public function isDnsBlacklisted( $ip, $checkWhitelist = false ) {
global $wgEnableDnsBlacklist, $wgDnsBlacklistUrls, $wgProxyWhitelist;
- if ( !$wgEnableDnsBlacklist ) {
- return false;
- }
-
- if ( $checkWhitelist && in_array( $ip, $wgProxyWhitelist ) ) {
+ if ( !$wgEnableDnsBlacklist ||
+ ( $checkWhitelist && in_array( $ip, $wgProxyWhitelist ) )
+ ) {
return false;
}
wfDebugLog( 'dnsblacklist', "Hostname $host is {$ipList[0]}, it's a proxy says $basename!" );
$found = true;
break;
- } else {
- wfDebugLog( 'dnsblacklist', "Requested $host, not found in $basename." );
}
+
+ wfDebugLog( 'dnsblacklist', "Requested $host, not found in $basename." );
}
}
if ( isset( $limits['anon'] ) ) {
$keys[$cache->makeKey( 'limiter', $action, 'anon' )] = $limits['anon'];
}
- } else {
+ } elseif ( isset( $limits['user'] ) ) {
// limits for logged-in users
- if ( isset( $limits['user'] ) ) {
- $userLimit = $limits['user'];
- }
+ $userLimit = $limits['user'];
}
// limits for anons and for newbie logged-in users
* @return bool True if blocked, false otherwise
*/
public function isBlocked( $bFromReplica = true ) {
- return $this->getBlock( $bFromReplica ) instanceof Block && $this->getBlock()->prevents( 'edit' );
+ return $this->getBlock( $bFromReplica ) instanceof Block &&
+ $this->getBlock()->appliesToRight( 'edit' );
}
/**
// Special handling for a user's own talk page. The block is not aware
// of the user, so this must be done here.
if ( $title->equals( $this->getTalkPage() ) ) {
- // If the block is sitewide, then whatever is set is what is honored.
- if ( $block->isSitewide() ) {
- $blocked = $block->prevents( 'editownusertalk' );
- } else {
- // If the block is partial, ignore 'editownusertalk' unless
- // there is a restriction on the user talk namespace.
- // TODO: To be implemented with Namespace restrictions
- $blocked = $block->appliesToTitle( $title );
- }
+ $blocked = $block->appliesToUsertalk( $title );
} else {
$blocked = $block->appliesToTitle( $title );
}
if ( $this->mId === null && $this->mName !== null && self::isIP( $this->mName ) ) {
// Special case, we know the user is anonymous
return 0;
- } elseif ( !$this->isItemLoaded( 'id' ) ) {
+ }
+
+ if ( !$this->isItemLoaded( 'id' ) ) {
// Don't load if this was initialized from an ID
$this->load();
}
if ( $this->isItemLoaded( 'name', 'only' ) ) {
// Special case optimisation
return $this->mName;
- } else {
- $this->load();
- if ( $this->mName === false ) {
- // Clean up IPs
- $this->mName = IP::sanitizeIP( $this->getRequest()->getIP() );
- }
- return $this->mName;
}
+
+ $this->load();
+ if ( $this->mName === false ) {
+ // Clean up IPs
+ $this->mName = IP::sanitizeIP( $this->getRequest()->getIP() );
+ }
+
+ return $this->mName;
}
/**
$talks = [];
if ( !Hooks::run( 'UserRetrieveNewTalks', [ &$user, &$talks ] ) ) {
return $talks;
- } elseif ( !$this->getNewtalk() ) {
+ }
+
+ if ( !$this->getNewtalk() ) {
return [];
}
$utp = $this->getTalkPage();
$rev = $timestamp ? Revision::loadFromTimestamp( $dbr, $utp, $timestamp ) : null;
return [
[
- 'wiki' => WikiMap::getWikiIdFromDomain( WikiMap::getCurrentWikiDomain() ),
+ 'wiki' => WikiMap::getWikiIdFromDbDomain( WikiMap::getCurrentWikiDbDomain() ),
'link' => $utp->getLocalURL(),
'rev' => $rev
]
public function getNewMessageRevisionId() {
$newMessageRevisionId = null;
$newMessageLinks = $this->getNewMessageLinks();
- if ( $newMessageLinks ) {
- // Note: getNewMessageLinks() never returns more than a single link
- // and it is always for the same wiki, but we double-check here in
- // case that changes some time in the future.
- if ( count( $newMessageLinks ) === 1
- && WikiMap::isCurrentWikiId( $newMessageLinks[0]['wiki'] )
- && $newMessageLinks[0]['rev']
- ) {
- /** @var Revision $newMessageRevision */
- $newMessageRevision = $newMessageLinks[0]['rev'];
- $newMessageRevisionId = $newMessageRevision->getId();
- }
+
+ // Note: getNewMessageLinks() never returns more than a single link
+ // and it is always for the same wiki, but we double-check here in
+ // case that changes some time in the future.
+ if ( $newMessageLinks && count( $newMessageLinks ) === 1
+ && WikiMap::isCurrentWikiId( $newMessageLinks[0]['wiki'] )
+ && $newMessageLinks[0]['rev']
+ ) {
+ /** @var Revision $newMessageRevision */
+ $newMessageRevision = $newMessageLinks[0]['rev'];
+ $newMessageRevisionId = $newMessageRevision->getId();
}
+
return $newMessageRevisionId;
}
if ( $dbw->affectedRows() ) {
wfDebug( __METHOD__ . ": set on ($field, $id)\n" );
return true;
- } else {
- wfDebug( __METHOD__ . " already set ($field, $id)\n" );
- return false;
}
+
+ wfDebug( __METHOD__ . " already set ($field, $id)\n" );
+ return false;
}
/**
if ( $dbw->affectedRows() ) {
wfDebug( __METHOD__ . ": killed on ($field, $id)\n" );
return true;
- } else {
- wfDebug( __METHOD__ . ": already gone ($field, $id)\n" );
- return false;
}
+
+ wfDebug( __METHOD__ . ": already gone ($field, $id)\n" );
+ return false;
}
/**
return;
}
- $cache = ObjectCache::getMainWANInstance();
+ $cache = MediaWikiServices::getInstance()->getMainWANObjectCache();
$key = $this->getCacheKey( $cache );
if ( $mode === 'refresh' ) {
$cache->delete( $key, 1 );
if ( !$this->mToken ) {
// The user doesn't have a token, return null to indicate that.
return null;
- } elseif ( $this->mToken === self::INVALID_TOKEN ) {
+ }
+
+ if ( $this->mToken === self::INVALID_TOKEN ) {
// We return a random value here so existing token checks are very
// likely to fail.
return MWCryptRand::generateHex( self::TOKEN_LENGTH );
- } elseif ( $wgAuthenticationTokenVersion === null ) {
+ }
+
+ if ( $wgAuthenticationTokenVersion === null ) {
// $wgAuthenticationTokenVersion not in use, so return the raw secret
return $this->mToken;
- } else {
- // $wgAuthenticationTokenVersion in use, so hmac it.
- $ret = MWCryptHash::hmac( $wgAuthenticationTokenVersion, $this->mToken, false );
-
- // The raw hash can be overly long. Shorten it up.
- $len = max( 32, self::TOKEN_LENGTH );
- if ( strlen( $ret ) < $len ) {
- // Should never happen, even md5 is 128 bits
- throw new \UnexpectedValueException( 'Hmac returned less than 128 bits' );
- }
- return substr( $ret, -$len );
}
+
+ // $wgAuthenticationTokenVersion in use, so hmac it.
+ $ret = MWCryptHash::hmac( $wgAuthenticationTokenVersion, $this->mToken, false );
+
+ // The raw hash can be overly long. Shorten it up.
+ $len = max( 32, self::TOKEN_LENGTH );
+ if ( strlen( $ret ) < $len ) {
+ // Should never happen, even md5 is 128 bits
+ throw new \UnexpectedValueException( 'Hmac returned less than 128 bits' );
+ }
+
+ return substr( $ret, -$len );
}
/**
$type = $oldaddr != '' ? 'changed' : 'set';
$notificationResult = null;
- if ( $wgEmailAuthentication ) {
+ if ( $wgEmailAuthentication && $type === 'changed' ) {
// Send the user an email notifying the user of the change in registered
// email address on their previous email address
- if ( $type == 'changed' ) {
- $change = $str != '' ? 'changed' : 'removed';
- $notificationResult = $this->sendMail(
- wfMessage( 'notificationemail_subject_' . $change )->text(),
- wfMessage( 'notificationemail_body_' . $change,
- $this->getRequest()->getIP(),
- $this->getName(),
- $str )->text()
- );
- }
+ $change = $str != '' ? 'changed' : 'removed';
+ $notificationResult = $this->sendMail(
+ wfMessage( 'notificationemail_subject_' . $change )->text(),
+ wfMessage( 'notificationemail_body_' . $change,
+ $this->getRequest()->getIP(),
+ $this->getName(),
+ $str )->text()
+ );
}
$this->setEmail( $str );
if ( array_key_exists( $oname, $this->mOptions ) ) {
return $this->mOptions[$oname];
- } else {
- return $defaultOverride;
}
+
+ return $defaultOverride;
}
/**
global $wgSecureLogin;
if ( !$wgSecureLogin ) {
return false;
- } else {
- $https = $this->getBoolOption( 'prefershttps' );
- Hooks::run( 'UserRequiresHTTPS', [ $this, &$https ] );
- if ( $https ) {
- $https = wfCanIPUseHTTPS( $this->getRequest()->getIP() );
- }
- return $https;
}
+
+ $https = $this->getBoolOption( 'prefershttps' );
+ Hooks::run( 'UserRequiresHTTPS', [ $this, &$https ] );
+ if ( $https ) {
+ $https = wfCanIPUseHTTPS( $this->getRequest()->getIP() );
+ }
+
+ return $https;
}
/**
public function getRequest() {
if ( $this->mRequest ) {
return $this->mRequest;
- } else {
- global $wgRequest;
- return $wgRequest;
}
+
+ global $wgRequest;
+ return $wgRequest;
}
/**
$learnerRegistration = wfTimestamp( TS_MW, $now - $wgLearnerMemberSince * 86400 );
$experiencedRegistration = wfTimestamp( TS_MW, $now - $wgExperiencedUserMemberSince * 86400 );
- if (
- $editCount < $wgLearnerEdits ||
- $registration > $learnerRegistration
- ) {
+ if ( $editCount < $wgLearnerEdits ||
+ $registration > $learnerRegistration ) {
return 'newcomer';
- } elseif (
- $editCount > $wgExperiencedUserEdits &&
+ }
+
+ if ( $editCount > $wgExperiencedUserEdits &&
$registration <= $experiencedRegistration
) {
return 'experienced';
- } else {
- return 'learner';
}
+
+ return 'learner';
}
/**
*/
public function isBlockedFromCreateAccount() {
$this->getBlockedStatus();
- if ( $this->mBlock && $this->mBlock->prevents( 'createaccount' ) ) {
+ if ( $this->mBlock && $this->mBlock->appliesToRight( 'createaccount' ) ) {
return $this->mBlock;
}
$this->mBlockedFromCreateAccount = Block::newFromTarget( null, $this->getRequest()->getIP() );
}
return $this->mBlockedFromCreateAccount instanceof Block
- && $this->mBlockedFromCreateAccount->prevents( 'createaccount' )
+ && $this->mBlockedFromCreateAccount->appliesToRight( 'createaccount' )
? $this->mBlockedFromCreateAccount
: false;
}
*/
public function isBlockedFromEmailuser() {
$this->getBlockedStatus();
- return $this->mBlock && $this->mBlock->prevents( 'sendemail' );
+ return $this->mBlock && $this->mBlock->appliesToRight( 'sendemail' );
}
/**
* Get whether the user is blocked from using Special:Upload
*
+ * @since 1.33
* @return bool
*/
public function isBlockedFromUpload() {
$this->getBlockedStatus();
- return $this->mBlock && $this->mBlock->prevents( 'upload' );
+ return $this->mBlock && $this->mBlock->appliesToRight( 'upload' );
}
/**
return false;
}
return true;
- } else {
- return $confirmed;
}
+
+ return $confirmed;
}
/**
return true;
}
- /**
- * Get the localized descriptive name for a group, if it exists
- * @deprecated since 1.29 Use UserGroupMembership::getGroupName instead
- *
- * @param string $group Internal group name
- * @return string Localized descriptive group name
- */
- public static function getGroupName( $group ) {
- wfDeprecated( __METHOD__, '1.29' );
- return UserGroupMembership::getGroupName( $group );
- }
-
- /**
- * Get the localized descriptive name for a member of a group, if it exists
- * @deprecated since 1.29 Use UserGroupMembership::getGroupMemberName instead
- *
- * @param string $group Internal group name
- * @param string $username Username for gender (since 1.19)
- * @return string Localized name for group member
- */
- public static function getGroupMember( $group, $username = '#' ) {
- wfDeprecated( __METHOD__, '1.29' );
- return UserGroupMembership::getGroupMemberName( $group, $username );
- }
-
/**
* Return the set of defined explicit groups.
* The implicit groups (by default *, 'user' and 'autoconfirmed')
if ( $title ) {
return MediaWikiServices::getInstance()
->getLinkRenderer()->makeLink( $title, $text );
- } else {
- return htmlspecialchars( $text );
}
+
+ return htmlspecialchars( $text );
}
/**
if ( $title ) {
$page = $title->getFullText();
return "[[$page|$text]]";
- } else {
- return $text;
}
+
+ return $text;
}
/**
if ( $groups ) {
return Status::newFatal( 'badaccess-groups', $wgLang->commaList( $groups ), count( $groups ) );
- } else {
- return Status::newFatal( 'badaccess-group0' );
}
+
+ return Status::newFatal( 'badaccess-group0' );
}
/**