Commit graph

918 commits

Author SHA1 Message Date
umherirrender
bcea44e64a Add some missing readonly checks:
* Do not allow working on Special:EditWatchlist
* Do not reset all notification markers
* Do not delete expired restrictions

Change-Id: I7a990c0a80b9c7a6340465dd082a110dafea8f14
2013-02-09 18:58:56 +01:00
MatmaRex
1b71bc5256 (bug 29472) kill $wgUseDynamicDates
Remove $wgUseDynamicDates and everything related to it.

I left DateFormatter::reformat() alone, since it might possibly be
used elsewhere, and to be honest I'm afraid to touch it.

Change-Id: I609db8471c14e5e5946916f085d2ee5b96204d81
2013-02-06 17:38:05 +01:00
umherirrender
1044b0b8df fix some spacing
Change-Id: I8f976013f33c5818e4402604fe8610aa3f43b0c6
2013-02-04 20:18:33 +00:00
umherirrender
6fbbbd17ca fix some spacing
Change-Id: Ie7bb35871cc99237f3a655f7db22ca1f0646df5e
2013-01-27 14:21:50 +01:00
jenkins-bot
36320a7f1e Merge "$wgContLang global unused in addNewUserLogEntry since b65893755" 2013-01-26 00:00:05 +00:00
Platonides
dbc953fab7 $wgContLang global unused in addNewUserLogEntry since b65893755
Change-Id: Ie59aba0b6805484b57bfee917778b7dd97f86754
2013-01-25 22:35:29 +01:00
jenkins-bot
0ba1eec7aa Merge "Added new "byemail" action to the new users log" 2013-01-25 16:57:45 +00:00
Tyler Anthony Romeo
be04062547 (bug 44346) Fixed call signature for PingLimiter hook.
Changed third parameter of PingLimiter hook to a
reference since that's what all the docs say and because
extensions need to be able to override the result of
the ping limiting.

Change-Id: Ia8e9d3c4de9a6f298a00949007cad53021ab782c
2013-01-25 11:06:08 -05:00
Alexandre Emsenhuber
b65893755f Added new "byemail" action to the new users log
This allows to display the "password sent by e-mail." string in the user's language
since it's now in the action text rather than always in content language due to the
fact it was hardcoded in the log's comment.

Insertion of log entries for the new users log is now acomplished using the
ManualLogEntry class rather than the old LogPage one.

Removed 'newuserlog-byemail' message since it's no longer used (also checked
extensions in Wikimedia's Git repo).

IRC notifications will use the same message for 'create2' and 'byemail' for backward
compatibility. The only difference is that 'byemail' entries will no longer have
"password sent by email." in the comment.

Change-Id: Icdf1d714259d054cf8c256faf894c533be0dc73c
2013-01-25 16:15:33 +01:00
Alexandre Emsenhuber
a9775ae572 (bug 44202) Account creation through API no longer leaks IP address of account creator
This happens when an anonymous user wants to create an account for himself through
the API. This is due to the fact that User::addNewUserLogEntry() was always using
$wgUser as performer, but the API does not replace $wgUser by the newly created user
object when the peformer is an anonymous user.

Changed User::addNewUserLogEntry() to directly take the log action as first parameter,
rather than a boolean value saying whether the password was sent by e-mail or not,
and force the performer to be the user itself in the log action is "create". This
avoids such problems in that case, no matter the value of $wgUser, and it makes this
parameter much more readable that the old one. Backward compatibility is maintained.

Creating an user and sending its password by e-mail will still log the performer's
IP address in the log if this is made by an anonymous user.

Finally the second parameter of the AddNewAccount is now correct when creating an
account from the API, it was always false previously.

Change-Id: I188ecf420b85e9d1dab6fb933ed50d5f58532109
2013-01-21 22:00:25 +01:00
Tyler Anthony Romeo
e521f0680e (bug 43959) Add ability to reset certain option kinds in API.
Added the "resetkinds" option to action=options, so that when the
"reset" option is set, the user can control which kinds of options
are reset, rather than having to do all or none.

Also added documentation to the "change" parameter, since passing
it option keys without any "=value" after it will result in resetting
that specific option to its default value.

Change-Id: Id5bc1fffa0d487c0f152b79115205d2722f380d3
2013-01-18 13:41:44 -05:00
jenkins-bot
159dc210f7 Merge "Don't apply IP blocks to users with "ipblock-exempt" rights when creating an account" 2013-01-13 20:31:47 +00:00
MatmaRex
733d19d0d0 (bug 40124) allow arbitrary user preferences prefixed with 'userjs-'
Before change I98df55f2 it was possible to set arbitrary preferences (ie.
with anything as the key) using the action=options API. That change
removed this ability by enforcing full validation of the preferences, also
introducing several regressions which were fixed by follow-ups.

Per the discussion on bug 40124, this changeset aims to restore this
ability, but in a slightly restricted way: arbitrary preferences' names
must start with userjs- prefix, to avoid any possibility of conflicting
with new MediaWiki versions or extensions.

The contents of these preferences is not escaped, sanitized nor validated
in any way; script authors are expected to sanitize them themselves to
prevent XSS attacks and other security vulnerabilities.

This commit also adds the User::getOptionsKinds() method (to determine
whether given preference keys are used by MediaWiki itself or an extension,
intended to be used via the API, or entirely unknown) and enhances the
User::resetOptions() method to allow for resetting only preferences of
chosen kinds.

These changes allow for fixing of Special:Preferences not to clear those
additional fields when saving user settings.

Change-Id: I5f9ba5b0dfe7c2ea5458d836f03429cf6d93969d
2013-01-13 19:08:56 +01:00
Alexandre Emsenhuber
9055e91f22 Don't apply IP blocks to users with "ipblock-exempt" rights when creating an account
So that this check is consistent with the one in User::getBlockedStatus().

Change-Id: Ibcadb15b87794cfe59fc42d862728e5fd46c3413
2013-01-12 19:21:04 +01:00
Platonides
fb0966908b Miscellaneous profiling fixes
Change-Id: I8d8ce0bc0383e4feb4ed38fd96b2dd516dcb742e
2013-01-06 22:35:11 +01:00
Alexandre Emsenhuber
7cbf3b6363 Set $mLoadedItems to true in User::loadFromId()
CentralAuth calls User::loadFromId() directly after calling setId().
This avoid having to load the object two times in this case.

Change-Id: Iade37631a9346dff45e18acfa078af37c1fbbfab
2013-01-01 18:44:10 +01:00
Timo Tijhof
2549c49562 (bug 40340) Fix cache issues with changing user groups
* migrateUserGroup.php: Call User::invalidateCache

* While at it, also fix the issue where User::clearInstanceCache
  did not clear cache for User::getGroups.

  Although it does clear the caches of methods used to calculate
  other group-related lists (such as User::getEffectiveGroups),
  the one for the query from user_groups was still cached in
  $this->mGroups.

  Presumably this was forgotten when this pattern was introduced
  as the instance cache precedes the user_group table.

Change-Id: I22abdba00f8ccf587a3d7696e57970ed4653afc8
2012-12-28 14:35:49 +00:00
Antoine Musso
cb60d72be1 misc style fix
* makes booleans lower case
* add spaces before open braces

Change-Id: Id88884e08bc23d7730361ee91646f54f5e16920b
2012-12-20 16:09:25 +01:00
Reedy
d537d96868 Add numerous missing @throws to method documentation
Change-Id: Iba868e82a75fef7c7d011bc5be192bf059d037c0
2012-12-09 03:09:48 +00:00
jeroendedauw
a91a5c741a Improve type hint
Eclipse and phpstorm where showing 'User' as return type before, which causes me to not check for false somewhere and thus fatals happening :)

Change-Id: Ibd5b5598f05e6b08481ad65060c7cae18762dc4e
2012-11-28 20:37:14 +01:00
Platonides
5e309c21b4 Move around User::getEditCount() code.
It's simpler to do an early return and catch almost everything
in the profiling.

Change-Id: I2306c7b39d9808989f11d7d9d34db06c39d51820
2012-11-26 22:56:42 +01:00
Marius Hoch
76eb53053e Minor fixes to User and ApiQueryUsers
I've fixed several PHP notices and the problem that rights returned
by User::getRights() might have duplicates if altered by a hook
(same for User::getEffectiveGroups).

Change-Id: Id92af387d8c09414076bac40e83052cd6f913f42
2012-11-09 22:23:14 +01:00
Marius Hoch
070d5ca071 (bug 41793) Make contribs. link on Special:ListUsers red for users with 0 edits
The link to the user contributions on Special:ListUsers weren't red
as the needed parameter for this wasn't set in the call to
Linker::userToolLinks and User::getEditCount returned strings while
it was supposed to return integers.

Change-Id: I8d5faaedefec02d309e3e9c2da80f135b44fa5f1
2012-11-07 20:38:32 +01:00
Nikerabbit
31069e3989 Merge "Use LogFormatter to format rights log." 2012-11-01 18:51:09 +00:00
parent5446
edf5632f6a (bug 37963) Fixed loading process for user options.
The bug has actually already been fixed, so this
patch just removes extraneous function calls and code in
User::getOption() and User::setOption(). It also adds
unit tests for user options (including a test for the
case provided in the bug report).

Change-Id: Idd8af9cf1a26a4adbde3ca71dde64539ecd0a207
2012-10-30 20:28:39 +01:00
Marius Hoch
adf6e8fcdd Cache the result of User::getDefaultOptions
Caching the result of User::getDefaultOptions as it always returns
the same data, despite for unit tests, which can't use the cached
values as they do evil things with variables being constant in normal
operation.

Change-Id: I02d557006d2f879e7ce510a5e47fa1543baab8a6
2012-10-29 01:47:17 +01:00
Hoo man
d05ddf6e06 Make action=query&list=users use User::getRights()
Made action=query&list=users use User::getRights() if
usprop rights given. This not only removes redundant
code, but makes it execute the UserGetRights hook, so
that this now includes rights given by Extensions (eg.
CentralAuth does that).

Patch Set 2: Modified the User class to be able to
inject further data into User::newFromRow() and using
that to inject the groups taken out of one SQL query
(for performance reasons). Furthermore I've split up
the query in ApiQueryUsers.php into one for user data
and one for the groups, to only have one row for each
user.
After all the perfomance of this should now be ok, not
extremly good, but bearable (though I couldn't test it
deeply, as I don't have much data in my CentralAuth
environment).

Change-Id: Ie5b2924abb82ac254c77e1d04cc4d5b308962dad
2012-10-24 20:16:06 -07:00
Alexandre Emsenhuber
4c69cd3ad6 Use LogFormatter to format rights log.
* Has to keep actual messages for IRC notification
* Catch really old log entries with no parameters and use an
  appropriate message in that case to not always display erroneous
  "X changed group membership for Y from (none) to (none)".

Change-Id: Ie188bc6fcdf672fe31f0f389a158aab6256031fa
2012-10-22 19:28:32 +02:00
IAlex
4728e61383 Merge "(bug 41171) Refactor User::edits() and User::incEditCount()" 2012-10-20 16:13:42 +00:00
umherirrender
9d19d7342a Remove a bunch of trailing spaces and unneeded newlines
Change-Id: I7db616db8c969567d420c0161fa207b366e292b6
2012-10-19 22:03:05 +02:00
Tim Starling
b7b606b3a2 Clear $this->mOptionsLoaded in User::clearInstanceCache()
(bug 41198) If clearInstanceCache() is to clear cached user data apart
from the data from the user table, as addToDatabase() expects, then
$this->mOptionsLoaded needs to be set to false. Clearing $this->mOptions
may reduce memory usage a bit, but is not sufficient.

Change-Id: I6912415dc154d06f62839a1ee777c2c3747253d6
2012-10-19 14:12:33 +11:00
Marius Hoch
d0520bef02 (bug 41171) Refactor User::edits() and User::incEditCount()
User::edits() lets you fetch a cached number of edits from a slave database.
in case the field is not yet filed, we initialize if by hitting the `revision`
table and saving the result in user_editcount.

User::incEditCount() updates the edit countr and also does a lazy
initialization, if needed.

As both methods use the same $dbw->update() statement for this, I've
created a new, protected initEditCount() function which can take care of that.

Change-Id: If111270a84d4278bc4ea14d32ae602069f7c276f
2012-10-18 17:14:24 +02:00
Siebrand
7d4c391e25 Merge "Deprecate static User::edits() in favour of User::getEditCount()" 2012-10-18 00:00:11 +00:00
Marius Hoch
63ed4ac0e4 Deprecate static User::edits() in favour of User::getEditCount()
Moved the logic from the old static User::edits() into
User::getEditCount() and deprecated User::edits() as it's
not following the class hierarchy.

Change-Id: Id2b939ffb903accb8f4dc132a6ac6b6576f81beb
2012-10-18 01:41:00 +02:00
Jakub Vrana
e9ac745555 (bug 40899) Cache resources for anonymous users
Changes mTouched for anonymous users to '1' because '0' is treated as 'now' by wfTimestamp()

Change-Id: If0d77f72dc776c4709a1e5da360fbd6273178b29
2012-10-10 18:38:23 -07:00
Aaron Schulz
20e2e1e835 Merge "(bug 16020) Fix race condition in User::addToDatabase()" 2012-10-10 18:08:53 +00:00
Liangent
e4bae8bca4 Check headers for default variant when initializing default user options.
Currently, if a user with Accept-Language: zh-tw header accesses a zh site,
the page contents are served in zh-tw variant, but the interface language
is zh (falling back to zh-hans) so the user is seeing interface messages
in zh(-hans) unless a &variant= is manually set (originally variant set in
URL is checked by getDefaultVariant).

There were debates that serving different languages based on headers from
the same URL breaks cache, but currently contents are served in different
variants based on headers and it works. So I assume this is not an issue.

PS2-4: HTTP header settings shouldn't affect user preference settings of
logged-in users.

PS5-6: Move code loading variant settings for anonymous requests from
User::getDefaultOptions() to User::loadOptions() to avoid pollution of
defaults. A visual bug of this is that if I have variant set to zh and
load index.php?title=Special:Preferences&variant=zh-cn, the dropdown is
shown as zh-cn because I was using the default value and now it thinks the
default value is zh-cn instead of zh.

PS7-8: Rebase to add dependency and tweak commit summary etc.

PS9: Remove the argument added to getDefaultVariant, which was intended to
keep B/C of getDefaultVariant (not to check headers by default).

Change-Id: Ie600ab24294a1add804875e921c32febe6ed645f
2012-10-10 04:31:59 +00:00
Siebrand Mazeland
d4b046a893 Update docs for return and exception info
* Removed some inline tabs in the process.
* IDE fixed some incorrect leading spaces, too.

Change-Id: Ic9303eff6db4424ac3f1fa2816839692b43e6190
2012-10-09 09:41:58 +00:00
umherirrender
22dd67ea3c Avoid direct access to $wgGroupPermissions
Created a new method User::groupHasPermission and check also
$wgRevokePermissions for the given right

Change-Id: I41edb091fa35c8c68b6f95cc5fd208ea99418cdb
2012-10-09 06:41:23 +00:00
Tim Starling
a9f02d4022 (bug 16020) Fix race condition in User::addToDatabase()
Fix the DB error which comes from User::addToDatabase() if it is called
when the user already exists. This is the most common DB error we log at
WMF in normal operation, perhaps because of double clicks on the "create
account" button, or perhaps due to CentralAuth autocreation when
multiple pages on another wiki are opened in the browser simultaneously,
as the bug reporter suggests.

See the doc comment for the interface rationale. Patched
Special:Userlogin to be aware of the new return value. Most extension
callers will continue to work, I will patch a couple that need it in
subsequent commits.

Change-Id: I1f6ef5e6319bfe692fb82a3fa50dc66c9fde8f15
2012-10-09 10:20:45 +11:00
Marius Hoch
6ec9df30cd Clear the cached edit count within User::clearInstanceCache
(After a question in r26457): Let User::clearInstanceCache
clear out the cached edit count as well, as a user session
can be open for a long time.

Change-Id: I4444f352e3b5df7b24f37668a5f1fbf9d64d6978
2012-10-05 18:52:57 +02:00
Catrope
ab8f2c37d5 Merge "(bug 40541) Fixed $wgSecureLogin functionality." 2012-09-28 20:30:15 +00:00
Catrope
a274321310 Merge "(bug 29898) Set cookie to force HTTPS from HTTP" 2012-09-28 17:34:26 +00:00
Tyler Anthony Romeo
60c596812b (bug 39674) Fixed loading User from session when hook aborts.
Rather than have separate calls to User::loadDefaults()
every time User::loadFromSession() fails, there is now just
one call in User::load() if loadFromSession() returns false.
This fixes the case where a UserLoadFromSession hook aborts
loading from session, leaving the User object uninitialized.

Change-Id: I8d1a114d7ec361b27b260791f742c473a1497f26
Signed-off-by: Tyler Anthony Romeo <tylerromeo@gmail.com>
2012-09-28 06:12:31 +00:00
Tyler Anthony Romeo
565014a8cb (bug 40541) Fixed $wgSecureLogin functionality.
* Added parameter to login link so that wpStickHTTPS
  is set to true by default when the user is coming
  from HTTPS.
* Added redirect in Special:Userlogin so that when
  $wgSecureLogin is enabled it automatically redirects
  to HTTPS.
* Adjusted User::setCookies() to add a parameter for
  forcing secure/insecure cookies, and then added the
  appropriate argument to Special:Userlogin so that
  cookies are set appropriately.

Change-Id: I17ac68014840daa47bfd4768e978e9ff2edb00db
2012-09-27 14:34:11 -04:00
csteipp
5801da5f86 (bug 29898) Set cookie to force HTTPS from HTTP
Sets a cookie on user login (removed on logout) if wpStickHTTPS
was checked, which causes the browser to get a redirect if they
visit the HTTP version of the site.

Change-Id: I60f44a1062a93d15198edae6674bb3310a148b2d
2012-09-21 15:47:59 -07:00
csteipp
ed5b575667 (bug 39184) LDAP password leakage
Allow AuthPlugin to determine if user passwords should be stored
locally.

* Released as part of 1.20wmf10, 1.19.2, 1.18.5

Change-Id: Ie41bed7ecf5390f8815128c227bae371880a6058
2012-08-31 14:39:31 -07:00
Siebrand Mazeland
01788cddd3 Replace deprecated wfMsg* calls with Message class calls.
Last round of easy replacements. About 30 uses in core remain (outside of HISTORY
and GlobalFunctions::wfMsg*). I'll work with IAlex and Nikerabbit to work towards
getting rid of those, too.

Updated method documentation in a few places.

Change-Id: I2491c006b62a9cc183230e31a0bd96c91e5b6142
2012-08-27 20:44:47 +02:00
Demon
f3b2af3911 Merge "(bug 36776) Changing User::getNewtalk to use $wgDisableAnonTalk." 2012-08-14 23:14:20 +00:00
Aaron Schulz
1b7045e341 Added UserCache class for doing name/title batch lookups.
* Made Special:ListFiles be the first user of this class.

Change-Id: I2ea068d4765fe6ae12445786c38217119e79f823
2012-08-14 14:59:03 -07:00