Commit graph

607 commits

Author SHA1 Message Date
Alexander Vorwerk
0d48f7d25b Hard deprecate User::getIntOption()
deprecated since 1.35 and unused

Bug: T274211
Change-Id: If739492953ee53a39c81894c48f16be81c845542
2021-08-11 14:16:40 +02:00
jenkins-bot
dc20eda3b5 Merge "Hard deprecate User group methods" 2021-07-27 15:10:15 +00:00
Petr Pchelko
24ae5a6318 Use CentralIdLookup service instead of static factory
Change-Id: Ia0f263b4eff00cc6efee7a88c62d562dafd57950
2021-07-26 07:00:53 -07:00
vladshapik
c7e6c67dc5 Hard deprecate User group methods
1) The following methods were hard deprecated:
- User::addAutopromoteOnceGroups
- User::getEffectiveGroups
- User::getAutomaticGroups
- User::getFormerGroups

2) User ::getGroups, ::getGroupMemberships, ::addGroup,
::removeGroup were replaced in the production code,
but they were not hard deprecated because of conflict
with UserRightsProxy class.

Bug: T275148
Change-Id: Ia69598316f5dc5dd9511f6112b5b13e1aa07575a
2021-07-23 15:00:16 +03:00
libraryupgrader
5357695270 build: Updating dependencies
composer:
* mediawiki/mediawiki-codesniffer: 36.0.0 → 37.0.0
  The following sniffs now pass and were enabled:
  * Generic.ControlStructures.InlineControlStructure
  * MediaWiki.PHPUnit.AssertCount.NotUsed

npm:
* svgo: 2.3.0 → 2.3.1
  * https://npmjs.com/advisories/1754 (CVE-2021-33587)

Change-Id: I2a9bbee2fecbf7259876d335f565ece4b3622426
2021-07-22 03:36:05 +00:00
Alexander Vorwerk
0366284db5 Hard deprecate User::getOptionKinds and ::resetOptions
Both have been deprecated since 1.35, and are unused in codesearch.

Bug: T274211
Change-Id: I36b65bd7c9a6269cc7671d4334387159e2b69f40
2021-07-19 07:28:56 +01:00
jenkins-bot
ab6a632cf0 Merge "Revert "Move saving user options to onTransactionPreCommitOrIdle"" 2021-07-15 19:04:58 +00:00
James D. Forrester
719cf161f2 More master -> primary documentation and internal var renaming
Bug: T254646
Change-Id: I63cc8895033714bdfbf09aee933a8f0a43b387f3
2021-07-15 11:20:20 +01:00
Ppchelko
20f1480fc5 Revert "Move saving user options to onTransactionPreCommitOrIdle"
This reverts commit 16fd5aaeae.

Reason for revert: This didn't really help all that much, and I think it's not the root cause. Plus, Krinkle suggested there's issues with it. 

Change-Id: Ica835658c2e0aef41399743ac3deffb91fabab0a
2021-07-15 00:02:33 +00:00
Amir Sarabadani
16fd5aaeae Move saving user options to onTransactionPreCommitOrIdle
In race conditions between threads creating two simultaneous users, this is
creating deadlocks. Moving them to the end of transaction to avoid
this.

Bug: T286521
Change-Id: I995074babbcc65cf9bb23950dd4f9f82ed1d9495
2021-07-14 22:07:30 +02:00
jenkins-bot
8e20e195eb Merge "Authority: expose user block info" 2021-06-30 15:12:06 +00:00
daniel
b3b70624c9 Authority: expose user block info
Expose info about user blocks from Authority. This allows calling code
to provide more detailed information to the user about why they are
denied some action on the wiki.

Bug: T271494
Change-Id: Ia84e469888866d72752aad355292666c31e12bad
2021-06-30 13:42:21 +02:00
jenkins-bot
6eb8c5a6da Merge "Use IEC prefixes instead of SI prefixes for byte sizes (docs+backend)" 2021-06-29 10:34:41 +00:00
Umherirrender
1320f1c9b2 User: Improve doc of ::whoIs/whoIsReal and ::resetOptions
Change-Id: I1bf2588d70ee85d62aad184f48c8ef1c6e6e375d
2021-06-28 22:03:47 +02:00
Fomafix
356f1b72ef Use IEC prefixes instead of SI prefixes for byte sizes (docs+backend)
This change doesn't change any UI messages.

Bug: T54687
Change-Id: Ia62899a2a6fe8910618c35cd667291e397ddb055
2021-06-28 11:59:09 +01:00
jenkins-bot
f009c79eb7 Merge "Improvements to user preferences fetching/saving" 2021-06-24 00:15:21 +00:00
Petr Pchelko
73bcc40836 Improvements to user preferences fetching/saving
== Status quo ==

When saving user preferences, we want to lock the rows to avoid
accidentally overriding a concurrent options update. So usually
what extensions do is:

$value = $mngr->getOption( 'option', ..., READ_LOCKING );
if ( $value !== 'new_value' ) {
  $mngr->setOption( 'option', 'new_value' );
  $mngr->saveOptions()
}

Previously for extra caution we've ignored all caches in options
manager if >= READ_LOCKING flags were passed. This resulted in
re-reading all the options multiple times. At worst, 3 times:
1. If READ_NORMAL read was made for update - that's once,
2. On setOption, one more read, forcefully from primary
3. On saveOptions, one more read from primary, non-locking,
to figure out which option keys need to be deleted.

Also, READ_LOCKING was not used where it clearly had to be used,
for example right before the update. This was trying to fix any
kind of error on part of the manager clients, unsuccessfully so.

== New approach ==

1. Cache modified user options separately from originals and merge
them on demand. This means when refetching originals with LOCKING
we don't wipe out all modifications made to the cache with setOption.
Extra bonus - we no longer need to load all options to set an option.
2. Split the originals cache into 2 layers - one for stuff that
comes from DB directly, and one with applied normalizations and
whatever hooks modify. This let's us avoid refetching DB options
after we save them, but still let's the hooks execute on newly set
options after they're saved.
3. Cache options with all query flags. This is a bit controversial, but
ideally LOCKING flags will be applied on options fetch right before
they are saved. We have to re-read options with LOCKING in saveOptions
to avoid races, but if the caller did 'getOption( ..., LOCKING),
setOption(), save()' we will not need to re-select with LOCKING again.

Bug: T280220
Change-Id: Ibed2789f5260b725fd806b4470631aa30d814ce6
2021-06-23 23:56:52 +00:00
ZabeMath
4020306bf7 Hard deprecate User::listOptionKinds()
deprecated since 1.35 and unused.

Bug: T274211
Change-Id: I139ef1de149c94148ad07c62a8c024e4cb0ee053
2021-06-22 15:56:25 +02:00
jenkins-bot
970fc15f95 Merge "Move CRSF token generation to CsrfTokenSet" 2021-06-21 15:03:30 +00:00
Thiemo Kreuz
2ba01c7ee7 Remove some more comments that literally repeat the code
… including PHPDoc tags like `@return <type> $variableName`.
A return value doesn't have a variable name. I can see that
some people do this intentionally, repeating the variable
name that was used in the final `return $var;` at the end
of a method. This can indeed be helpful. I leave a lot of
these untouched and removed them only when it's obviously
wrong, or does not provide any additional information in
addition to what the code already says.

Change-Id: Ia18cd9f25ef658b08ad25b97a744897e2a8deffc
2021-06-18 21:23:56 +00:00
Petr Pchelko
6260074a8c Move CRSF token generation to CsrfTokenSet
Change-Id: Idf68f1cc63fb2e01e004ff353fcda026fa4ec10f
2021-06-18 12:24:19 -07:00
jenkins-bot
5028fe175d Merge "Remove User::$mEditCount and internal caching" 2021-06-18 17:57:35 +00:00
Petr Pchelko
eccd347da9 Hard-deprecate User::matchEditTokenNoSuffix
This feature was added to provide a custom error message
if the edit token was present, but trailing slashes were
stripped from it by some ASCII mangling proxy. According
to metrics this has happened 5 times last month, which
IMHO doesn't justify having special handling. Giving a
regular token mismatch error message should be good enough.

Depends-On: Ieb4f6e25a74ecaa1110c59a8d8eed3ca792f2d41
Change-Id: I85759e315581f891721dfac246daaafe956ab201
2021-06-18 09:42:24 -07:00
DannyS712
b82cf00983 Remove User::$mEditCount and internal caching
UserEditTracker now returns null for anonymous users
instead of throwing an exception.

Added new UserEditTracker::setCachedUserEditCount()
method (internal) to handle the user_editcount field
in User::loadFromRow()'s row. This now means that
the creation of one User object can set the cached
value for any other object for the same underlying user
- the alternative (just ignoring the value) would mean
that an extra database read might be needed. This is
only used for users created with a row that includes
the user id - we silently discard the value if
the row doesn't have a user id (or the user id is 0)
to avoid issues with UserEditTracker trying to fetch
the user id and potentially triggering another load.

A follow-up will simplify the UserEditCountUpdate class
to remove storing full UserIdentity objects now that
only the id is needed.

Follow-up: Ibf1482bcbcbf4d56fc06531bb3e17e2a6e3e2e6f
Change-Id: Ie3fb4887d9f2d96b32598865030351bf3bf20ce5
2021-06-18 00:25:47 +00:00
DannyS712
f0620f4297 Remove unused User::initEditCountInternal
Method was marked as @internal and doesn't need to go through
deprecation.

Change-Id: Ibfe3677d1fbeedb89482d10cf74ebf3775c7673e
2021-06-15 07:51:50 +00:00
DannyS712
5a229f691f Accept UserIdentity in code to manage edit counts
- UserEditCountUpdate: accept UserIdentity instead of User
- Move User::incEditCount() to UserEditTracker

Change-Id: Ibf1482bcbcbf4d56fc06531bb3e17e2a6e3e2e6f
2021-06-08 05:41:03 +00:00
Petr Pchelko
0dfa846653 Use null coalecing operators everywhere consistenctly.
Auto-generated with rector.

Change-Id: I4f27e10cf029bb067b7bc57d82f7a64e21ea8d42
2021-06-03 21:42:06 -07:00
Petr Pchelko
5455e58967 Deprecate File::getUser in favor of File::getUploader
Change-Id: I8a45a8fdfa827f203e6bc123cb685d02c3612bb0
2021-06-02 09:06:09 -07:00
Vlad.shapik
9763c48d17 Reapply "Hard Deprecate User ::getCanonicalName, ::isUsableName, ::isCreatableName""
This reverts commit ecf826a2ee.

Reason for revert: need to edit the patch and then it will be GTG in order to finish hard deprecating of User ::getCanonicalName, ::isUsableName, ::isCreatableName

Change-Id: I2f57f56728fcbeada96dc2228f07dc8bcaa5d4f6
2021-05-31 16:01:36 +03:00
jenkins-bot
392b9e4926 Merge "Remove usages and hard deprecate User::changeable(By)Group" 2021-05-27 17:23:19 +00:00
jenkins-bot
93fd347463 Merge "Move User::changeable(By)Groups methods to UserGroupManager" 2021-05-27 17:17:34 +00:00
Ppchelko
5596e5784a Remove usages and hard deprecate User::changeable(By)Group
This commit was reverted before cause it has changed the initialization order
and broke FlaggedRevs. Now FlaggedRevs issue was addressed, so we can apply
it back.

Bug: T254838
Change-Id: Id29024caf06fcd0d7d4e039aea8142e8131d47a7
2021-05-27 13:54:29 +00:00
DannyS712
f057d2253c Replace deprecated uses of PermissionManager with GroupPermissionsLookup
In a few places where a PermissionManager is used
but only GroupPermissionsLookup is needed

Also update references to the class in PermissionManager
that referred to it as GroupPermissionLookup

Change-Id: I5d7a13900852a38768a106aeee1ce012c3a04ea2
2021-05-26 05:47:21 +00:00
Ppchelko
1d3d790edb Move User::changeable(By)Groups methods to UserGroupManager
Bug: T254838
Change-Id: I5868ed76c7af2adb027bad0aab4bbc8adb6daeb2
2021-05-25 21:09:38 -07:00
Alexander Vorwerk
88a70e066c Hard deprecate User::getRights()
deprecated since 1.34 and unused in Wikimedia deployed repositories.

Bug: T274211
Change-Id: If00e52255b8f555f0e60584c44970c42afe0270e
2021-05-24 11:11:40 +02:00
jenkins-bot
38bf35e966 Merge "Make UserGetEmail hook more robust" 2021-05-12 09:27:00 +00:00
Thiemo Kreuz
f93efbbbee Make UserGetEmail hook more robust
When a hook handler returns something else, e.g. null, this
will be stored in $this->mEmail and cause unexpected errors
(most notably type mistatches) later. This was not a problem
as long as we didn't use strict `string` type hints. But now
we do.

Change-Id: Iae9806304d8c39496b6d8e49e700f3a2c55520db
2021-05-12 09:17:12 +02:00
Petr Pchelko
7136d671d2 Replace User::idFromName with ActorStore
Depends-On: I87fdac02a88aba52a2174949f8736a9a36d3edf7
Depends-On: I812c49009665515778cd354d6c62a17ee24f3625
Change-Id: I5369e9714a3ec653c19ad81f02402e4aa1b22553
2021-05-11 07:44:38 -07:00
jenkins-bot
334dfff732 Merge "User: Hard-deprecate the confusingly-named isLoggedIn() method" 2021-05-10 16:52:21 +00:00
James D. Forrester
6bbad15444 User: Hard-deprecate the confusingly-named isLoggedIn() method
This was soft-deprecated in 0171846c, since when all uses in Wikimedia
production code have been removed. As this is such a vital and widely-
used method, we'll want to deprecate it for at least two releases. and
so we should get this in at a time when we're willing to fix many such
uses. Why not now?

Bug: T270450
Change-Id: I8ac4a91d77c2bb748183b69b3e901cce93cbc940
2021-05-10 07:30:23 -07:00
Gergő Tisza
2e7856a67c User::getID: Be lazier when fetching UserNameUtils
Given that User::getID is a very common method, used very early
during setup (e.g. during session initialization), only load
its dependency when it's really needed.

Bug: T282320
Change-Id: I6565426e9bf7084b1a33d39b2882639a03210460
2021-05-10 15:26:24 +02:00
jenkins-bot
f13d26f2ec Merge "Use a constant for 'Maintenance script' username" 2021-05-07 01:36:16 +00:00
jenkins-bot
67d261449a Merge "Hard deprecate watchlist methods in User" 2021-05-05 17:25:02 +00:00
jenkins-bot
d7083856d9 Merge "Revert "Hard Deprecate User ::getCanonicalName, ::isUsableName, ::isCreatableName"" 2021-05-05 02:45:35 +00:00
Ppchelko
ecf826a2ee Revert "Hard Deprecate User ::getCanonicalName, ::isUsableName, ::isCreatableName"
This reverts commit b491279268.

Reason for revert: caused CentralAuth tests to fail.

Change-Id: Icb3ed094578df427622e0da2a7462645adcc3d6f
2021-05-05 02:14:47 +00:00
jenkins-bot
1ed7dcd022 Merge "Hard Deprecate User ::getCanonicalName, ::isUsableName, ::isCreatableName" 2021-05-04 23:35:53 +00:00
DannyS712
40eda16b0e Remove deprecated talk page message handling in User class
Most needed for moving forward with the removal of uses
of the Revision class, and remove User::getNewtalk at
the same time to be consistent. All of this code was
already hard deprecated in 1.35.

- User::getNewtalk
- User::getNewMessageLinks (could return Revision objects)
- UserRetrieveNewTalks hook (could return Revision objects)
- User::getNewMessageRevisionId (used ::getNewMessageLinks)
- User::setNewtalk (accepted Revision object parameters)

Bug: T247143
Bug: T277511
Change-Id: Ib4fd1e4cbc5ba1497658190b6c6ea3c6a5dc97f0
2021-05-04 19:21:06 +00:00
vladshapik
b491279268 Hard Deprecate User ::getCanonicalName, ::isUsableName, ::isCreatableName
Bug: T275030
Change-Id: I60689ee6519c2dbd6d000afa8ac05c3e6b7895d2
2021-05-04 21:20:50 +03:00
Gergő Tisza
926cfa3b3d Use a constant for 'Maintenance script' username
The user 'Maintenance script' is often used to perform various
automated tasks. Providing it everywhere as a string literal is
error-prone, and errors can be somewhat disruptive (e.g. with
User::newSystemUser with steal=true it can erase the credentials
of a legitimate account). Provide a constant instead.
Also replace existing uses for consistency.

Change-Id: I685a5bfe56bbf1a47f35072f7f7c8be320ee27db
2021-05-03 23:34:26 +02:00
jenkins-bot
028fa9659b Merge "Remove uses and hard deprecate wfCanIPUseHTTPS" 2021-05-03 03:18:24 +00:00