Commit graph

326 commits

Author SHA1 Message Date
Gergő Tisza
d850025e60 Reject authentication data change when there are warnings
AuthManager uses a status which is OK but not good for authentication
data which is discouraged but still accepted for authentication.
Users should not be allowed to change credentials into such invalid state.
This change brings the web logic and the AuthPlugin fallback in sync with
the API which already used the stricter check.

Change-Id: I4ff54fcc901f6fe11f15ed60fc1a3d8753de9f6c
2016-06-07 17:24:18 +00:00
Gergő Tisza
3617c982c9 Use AuthManager on special pages
Rewrite authentication-related special pages to use AuthManager.
All the changes mentioned below only take effect when
$wgDisableAuthManager is false.

LoginForm is rewritten to use HTMLForm and split into UserLogin
and CreateAccount; ChangePassword and PasswordReset are rewritten;
ChangeEmail and Preferences are updated. Four new special pages
are added to handle the new capabilities of AuthManager (linked
accounts, secondary authentication providers): LinkAccounts,
UnlinkAccounts, ChangeCredentials, RemoveCredentials.

The old form-based hooks (ChangePasswordForm, UserCreateForm,
UserLoginForm) are deprecated. A new, more generic hook is
available to alter the forms (AuthChangeFormFields);
form changes that involve new fields should be done via
$wgAuthManagerConfig.

UserLoginComplete is limited to web-based login; for more
generic functionality UserLoggedIn can be used instead.

Hooks that assume password-based login (PrefsPasswordAudit,
AbortChangePassword) are removed; the first functionality
is replaced by ChangeAuthenticationDataAudit, the second is
handled by AuthManager. LoginPasswordResetMessage is removed,
the functionality can be recreated via authentication providers.

There are several smaller backwards incompatible changes:
* Adding fields to the login/signup forms by manipulating the
  template via the extraInput/extrafields parameters is not
  supported anymore. Depending on the authn configuration the
  login/signup process might be multistep and it would be
  complicated to ensure that extensions can access the data
  at the right moment. Instead, you can create an
  AuthenticationProvider which can define its own fields and
  process them when the authentication is over.
  (There is B/C support for a transitional period that  works with
  the default login form, but might break with configurations that
  require multiple steps or redirects.)
* Removed cookie redirect check. This was added in 2003 in 9ead07fe9
  for the benefit of bots, but with MediaWiki having an API these days
  there is little reason to keep it. Same for the wpSkipCookieCheck
  flag (added in 2008 in 29c73e8265).
* Instead of embedding a password field on sensitive special pages
  such as ChangeEmail, such pages rely on AuthManager for elevated
  security (which typically involves requiring the user to log in again
  unless their last login was more than a few minutes ago).
  Accordingly, wgRequirePasswordforEmailChange is removed.
* Special:ChangePassword requires login now.
* Special:ResetPassword now sends a separate email to each user when called
  with a shared email address.
* the Reason field had a message with 'prefsectiontip' class
  which was sorta broken but used in extensions for formatting.
  HTMLForm does not support that, so this commit turns it into a help message
  which will break formatting. See https://gerrit.wikimedia.org/r/#/c/231884

Bug: T110277
Change-Id: I8b52ec8ddf494f23941807638f149f15b5e46b0c
Depends-On: If4e0dfb6ee6674f0dace80a01850e2d0cbbdb47a
2016-05-16 15:12:13 +00:00
Brad Jorsch
d245bd25ae Add AuthManager
This implements the AuthManager class and its needed interfaces and
subclasses, and integrates them into the backend portion of MediaWiki.
Integration with frontend portions of MediaWiki (e.g. ApiLogin,
Special:Login) is left for a followup.

Bug: T91699
Bug: T71589
Bug: T111299
Co-Authored-By: Gergő Tisza <gtisza@wikimedia.org>
Change-Id: If89d24838e326fe25fe867d02181eebcfbb0e196
2016-05-16 15:11:02 +00:00
jenkins-bot
4ce349cdbf Merge "Move disable of preference 'enotifminoredits'" 2016-04-18 07:43:32 +00:00
jenkins-bot
cc28eaeb09 Merge "Add preference for watching uploaded files" 2016-04-12 17:29:29 +00:00
Mark Holmquist
785d472559 Add preference for watching uploaded files
Adds a preference in the Watchlist section for watching uploaded files
for an account. Also works from API-based upload methods, so
UploadWizard and other tools should work fine.

Bug: T33313
Change-Id: If962e667de12b35904b2d1b2d9e99c26b588ec2a
2016-04-08 15:21:17 -05:00
umherirrender
d7de1f8c32 Move disable of preference 'enotifminoredits'
Instead of setting $wgHiddenPrefs in Setup.php when $wgEnotifMinorEdits
is false, it is better to check the config in Preferences.php.
This makes it easier to found the config, why the preference is not
shown.

$wgHiddenPrefs should not be used in core itself

Change-Id: I7e1afd65c8924f18fdfa6cb5c9a47481b036b74f
2016-04-08 22:19:27 +02:00
Fomafix
7489a3e8f1 Preferences: Add autocomplete="off" to preferences form
This change adds a new method setAutocomplete to the class HTMLForm.
This method allows to set the HTML attribute autocomplete for the form.
This change uses this method to set autocomplete="off" for the preferences form.

Without autocomplete="off" the selections in the preferences get cached in
the browser. This can lead to wrong selected options when the settings get
changed on an other way, for example via API.

Bug: T131047
Change-Id: I2920383b5b8cfca3f1d546315f202985edf417d8
2016-03-29 04:49:20 +00:00
Kunal Mehta
6e9b4f0e9c Convert all array() syntax to []
Per wikitech-l consensus:
 https://lists.wikimedia.org/pipermail/wikitech-l/2016-February/084821.html

Notes:
* Disabled CallTimePassByReference due to false positives (T127163)

Change-Id: I2c8ce713ce6600a0bb7bf67537c87044c7a45c4b
2016-02-17 01:33:00 -08:00
Fomafix
486bc2073a Preferences: Use session data instead of URL parameter for success
The session data gets set in the POST and gets deleted in the GET.

This change avoids changing the URL for the success message.
A reload of the page does not show the success message again.

The URL manipulation in mediawiki.special.preferences.js is superfluous.

Bug: T26700
Change-Id: I1c2b011e7a66b2b9379dd4a3fdcc6f978dd43b52
2016-01-09 22:41:46 +00:00
Aaron Schulz
b046b93d93 Avoid "CAS updated failed" errors on Special:Preferences double post
* This does the same thing ApiOptions does to avoid these errors.
  A new getInstanceForUpdate() method is now in the User class to
  simplify this pattern.
* Avoid overriding $user in ApiOptions for code readability.
* Fixed IDEA errors around Preferences::getFormObject() return type.

Bug: T95839
Change-Id: If2385b7486c043bd70d7031ff35e37dfb079a4d2
2015-12-15 02:50:16 +00:00
Krzysztof Zbudniewek
28c98539cd Special:Preferences Remove red box in email and changed confirm error to warning
As @matmarex suggested I used the same colors for warning as in shared.css for .warningbox

Bug: T58611
Change-Id: Icba7787db4cc77ee793b9637c60b5977d28dc8cf
2015-12-14 18:50:07 +01:00
Florian
5327e3db56 SpecialWatchlist: Add an option to automatically reload the page when a filter was changed
The biggest negative point (as far as I can tell) with the change mentioned in the follow-up
is, that a user needs at least 3 clicks to change an option, which before it required only
one click. This option adds a new preference for the watchlist (which can be enabled/disabled
using Special:Preferences) which, if enabled, loads a new, tiny module with a script, that
listens on all input and select fields in the header form of Special:Watchlist. Whenever one
of these elements get changed, the watchlist form will be submitted automatically.

The default for this option is false (disabled).

Follow up: I3bcd27596c21aa4

Bug: T50615
Bug: T119322
Change-Id: Icab1a5143df24a06f468165421d40db8fa57e73c
2015-12-04 16:48:22 +01:00
Derk-Jan Hartman
db7257ffd5 Rework the Preferences to prevent FOUC
New styles modules that is always added, so that all JS specific styling
is guaranteed to load before first paint. Reworked the HTML to generate
the preftoc (hidden when user has no JS).

Set htmlform nolabel class to use !important, so that it doesn't get
overriden by the 20% width rule of labels.

Also requires changes to the skinstyles of Vector preferences, which
is an a separate patch (I59f0f45), and other skins.

Bug: T115692
Change-Id: I24d9b16ed6729fdf0d59adcc2f0ba16f4f621b44
2015-11-08 19:42:56 +00:00
addshore
d40cd42b9f Enable users to watch category membership changes #2
This is part of a chain that reverts:
e412ff5ecc.

NOTE:
- The feature is disabled by default
- User settings default to hiding changes
- T109707 Touching a file on wikisource adds and
      removes it from a category... Even when page
      has no changes.... WTF? See linked issue,
      marked as stalled with a possible way forward
      for this patch.
      @see https://gerrit.wikimedia.org/r/#/c/235467/

Changes since version 1:
- T109604 - Page names in comment are no longer
      url encoded / have _'s
- T109638 & T110338 - Reserved username now used
      when we can't determine a username for the change
      (we could perhaps set the user and id to be blank
      in the RC table, but who knows what this might do)
- T109688 - History links are now disabled in RC....
      (could be fine for the introduction and worked
      on more in the future)
- Categorization changes are now always patrolled
- Touching on T109672 in this change emails will never
      be sent regarding categorization changes. (this
      can of course be changed in a followup)
- Added $wgRCWatchCategoryMembership defaulting to true
      for enabling / disabling the feature
- T109700 - for cases when no revision was retrieved
      for a category change set the bot flag to true.
      This means all changes caused by parser functions
      & Lua will be marked as bot, as will changes that
      cant find their revision due to slave lag..

Bug: T9148
Bug: T109604
Bug: T109638
Bug: T109688
Bug: T109700
Bug: T110338
Bug: T110340
Change-Id: I51c2c1254de862f24a26ef9dbbf027c6c83e9063
2015-10-20 14:23:48 -07:00
Vivek Ghaisas
c54766586a Fix issues identified by SpaceBeforeSingleLineComment sniff
Change-Id: I048ccb1fa260e4b7152ca5f09b053defdd72d8f9
2015-09-26 23:06:52 +00:00
Brad Jorsch
37062a0c0d Add new authentication-related hooks (and remove one) replacing some AuthPlugin methods
* LocalUserCreated: Replaces AuthPlugin::initUser()
* UserGroupsChanged: Replaces AuthPlugin::updateExternalDBGroups()
** The similar UserRights hook is deprecated, mainly to get rid of the
   passing of $user by reference.
* UserIsHidden: Replaces AuthPluginUser::isHidden()
* UserIsLocked: Replaces AuthPluginUser::isLocked()
* UserLoggedIn: Replaces AuthPlugin::updateUser()

Also, AuthPlugin::updateExternalDB() is deprecated in favor of the
existing UserSaveSettings hook.

Also, 'ResetSessionID' has been removed. Nothing uses it, I don't know
why I even added it in the first place.

Also, replacing the User object passed to AuthPlugin::initUser() and
AuthPlugin::updateUser() will now raise a warning.

Change-Id: If7474cfb26a29b11c2e78147069419ca3b1cba95
2015-09-18 10:46:13 -04:00
jenkins-bot
5a130b425c Merge "Reword 'stub-threshold' message in Special:Preferences advanced section" 2015-09-01 23:25:19 +00:00
This, that and the other
83f60a8ec9 Reword 'stub-threshold' message in Special:Preferences advanced section
Message changed from "Threshold for stub link formatting bytes" to
"Threshold in bytes for stub link rendering (sample)".

Also convert it to a wikitext message (not raw HTML) and improve the "qqq"
documentation.

Bug: T107732
Change-Id: I493679073b9881c98a068dede2db00b391ab8353
2015-08-30 17:28:44 +10:00
CSteipp
e412ff5ecc Revert "Enable users to watch category membership changes"
This reverts commit f6879ea16e.

Bug: T109638
Change-Id: I770d8d33a4cff3829bdea9a4df24de209cbe691b
2015-08-20 10:35:56 -07:00
jenkins-bot
0ea03a7f56 Merge "Enable users to watch category membership changes" 2015-08-14 06:58:48 +00:00
Kai_WMDE
f6879ea16e Enable users to watch category membership changes
Bug: T9148
Change-Id: I5a89d8f19804b1120f4c755d834e2da6ca12ceae
2015-08-13 17:58:06 +02:00
Alex Monk
c08e097fe4 Preferences: Don't load all default options for every default preference
Change-Id: Iaaebea56674dfaa48dbfedf6c7e5ad9eaa05759e
2015-08-12 23:29:21 +01:00
umherirrender
aba18a06fb Use localization for server default timezone on Special:Preferences
The timezone list on Special:Preferences contains all time zones with a
localized region and also an option to use the system default value.
The message for this option gets the current server timezone as
parameter, but that parameter is not localized.
Refactor the timezone list processing into a new function and call it at
the beginning to do a lookup for the localized name and use it, if it
exists in the array.

Also changed from procedural style to object oriented style for the
DateTime processing.

Bug: T33516
Change-Id: I00e81324d0d16fbe6c9811480210ab6513461823
2015-07-03 20:21:20 +00:00
Alex Monk
e7c9096ecc HTTPS-ify links to Wikimedia's sites in MW core source
See https://blog.wikimedia.org/2015/06/12/securing-wikimedia-sites-with-https/

Ignoring SVN stuff because svn.wikimedia.org's SSL certificate has expired, and
ignoring wgSharedUploadPath because T25122 wants to get rid of it.

Also a couple of BZ -> phab changes

Change-Id: I02fd23ac6c30a4a4c718e57d4dedbc693dd653c0
2015-06-13 19:23:23 +01:00
Bartosz Dziewoński
709e43aaf9 Preferences: Use case-insensitive comparison for skin names
They are treated case-insensitively everywhere else.

Change-Id: I2561150aca9d88ad67ef359143f06d0ee90ab52e
2015-04-30 16:01:29 +00:00
umherirrender
2c7fa0d7cd Use Language::userTime in Preferences::datetimePreferences
This avoids the indirect use of $wgUser

Change-Id: I951f5c4399dff6bb17c04e20dd9a7f763027b873
2015-04-10 19:34:44 +02:00
cenarium
2e73174639 Adjusting patrol checks for RC and watchlist prefs
This uses the NP patrol check instead of the RC patrol check for the
preference option that allows to hide unpatrolled new pages by default.
And this checks use of RC patrol for the user instead of the config for
the watchlist option (so that users who cannot patrol don't have it).

Bug: T89716
Change-Id: I2895a96f8c21ade83b0174d0d02d1b7e00625737
2015-02-18 20:17:16 +00:00
glaisher
7719ea4b3e Add links to Special:EditWatchlist in Preferences' Watchlist tab
This adds a new "Edit watchlist" section to Watchlist tab with links
to Special:EditWatchlist, EditWatchlist/raw and EditWatchlist/clear.

Bug: T26632
Change-Id: Id31fba4f7aadaa3e427becece3837a8d00b7718f
2015-01-24 20:52:24 +05:00
gladoscc
e0f77ade75 Escape unescaped messages in Special:Preferences
Bug: T85864
Change-Id: Ie516549bce72a0052570ab38bde4c03e2bc1b69b
2015-01-07 12:12:25 +11:00
Kunal Mehta
4603f28025 Avoid GlobalTitleFail in HTMLFormField::__construct
Pass the HTMLForm parent instance in the constructor so context
is available when parsing a message.

Change-Id: I532c0d95698cbcc57294b9bd2725f33838f393a9
2014-12-17 14:20:14 -08:00
Aaron Schulz
e369f66d00 Replace wfRunHooks calls with direct Hooks::run calls
* This avoids the overhead of an extra function call

Change-Id: I8ee996f237fd111873ab51965bded3d91e61e4dd
2014-12-10 12:26:59 -08:00
jenkins-bot
cb1f290d1e Merge "Revert "Add maxlength of 6 for time correction in preferences"" 2014-10-20 18:21:51 +00:00
Mattflaschen
b07b5af485 Revert "Add maxlength of 6 for time correction in preferences"
As noted by Bartosz, System|60 is also valid (apparently also 
ZoneInfo|something, but not sure what can go after ZoneInfo), and the 
maxlength interferes with this.

Maybe eventually we could revisit and use input#pattern 
(http://www.w3.org/TR/html51/forms.html#the-pattern-attribute).  That 
allows specifying a regex, which could have different length limits 
depending whether it started with a number (AFAICT, the 6 length is valid 
if it starts with a digit).

But for now, that is not urgent, and we need to fix the regression.

This reverts commit da470ce005.

Bug: 70405
Change-Id: Ib585c76688284dab78e85fb355785c06d0c3e353
2014-10-20 18:02:27 +00:00
jdlrobson
a155ac55ea Hygiene: Make construction of buttons easier
Stop littering MediaWiki with globals, provide a common
api for generating them similar to how we do text input
attributes before things get out of control.

Adds
* submitButton
* linkButton

Change-Id: I61bb3c358f755ed9f2153d94b744c1a9da02c456
2014-09-30 14:54:56 -07:00
umherirrender
d041222fae Remove Preferences::trySetUserEmail (deprecated 1.20)
Change-Id: I31b008c93eae54b2aecc18154d0c2e3df3fdb712
2014-09-26 14:38:01 -07:00
Matthew Flaschen
da470ce005 Add maxlength of 6 for time correction in preferences
* Supported formats (controlled by filterTimezoneInput) are:
** -12:34/01:23.  It says, "Max is +14:00 and min is -12:00", both
   of which fit in 6 (if someone uses -24:00/+24:00, it's the same width
   anyway).
** If it's not in that format, it's treated as a simple hour, which
   means it should be from -12 to +14 (max 3).

Bug: 70405
Change-Id: I47ec2c07929069cb5243c306a1c502751e57a31b
2014-09-22 17:37:49 +00:00
Brad Jorsch
9084a3a1aa Add "unsaved changes" warning to Special:Preferences
Much like the similar warning on the edit page, it has been requested
that we display a warning if the user has made changes on
Special:Preferences and attempts to leave without saving.

This adapts the code from
resources/mediawiki.action/mediawiki.action.edit.editWarning.js to do
so.

Bug: 55966
Change-Id: Idb00f50ad8148cd80bd0af81b4cd06a0eb217d96
2014-09-19 11:04:30 +10:00
jdlrobson
274978205c Correct button colours of preference page when $wgUseMediaWikiUIEverywhere is enabled
* Apply mw-ui-destructive to Special:Preferences/Reset
  when $wgUseMediaWikiUIEverywhere is enabled

Introduces HTMLForm->setSubmitDestructive()

Bug: 65317
Change-Id: I1d6691dce3e7dab662bda9a718e16c5caee6c041
2014-09-17 00:00:38 +00:00
Kunal Mehta
d931c974f1 Preferences: Use Config instead of globals
Change-Id: Iab8725ded4da532a3072fb68e3060bd8f8ddf30a
2014-09-12 22:54:11 -07:00
Bartosz Dziewoński
8a6428a3f5 Preferences: Disable the 'skin' preference if there are no skins
Having a radio field with no valid values makes MediaWiki sad and
causes exceptions.

Also make double-sure that the global default value is not invalid.
That causes exceptions too.

Change-Id: I90cc9e6f40303aa5771c265948a0be4a4ce2e42c
2014-08-02 12:07:11 +00:00
Étienne Beaulé
b230bdce16 Create preference to watchlist pages after rollbacking
This change adds a  preference in the 'watchlist' section to
automatically watchlist a page after rollbacking.

The setting is only visible, if the user has the 'rollback'-right.
I have removed the watch reverts function per advice by Vogone.

Bug: 4488
Change-Id: I3aa831c9c04d627684641af0ca5a332795c87062
2014-07-30 21:51:41 +00:00
umherirrender
1c68a1ee86 Cleanup some docs (includes/*.php)
- Swap "$variable type" to "type $variable"
- Added missing types
- Fixed spacing inside docs
- Makes beginning of @param/@return/@var/@throws in capital
- Changed some types to match the more common spelling

Change-Id: I783e4dbfe5f6f98b32b9a03ccf6439e13e132bcc
2014-07-24 19:42:24 +02:00
umherirrender
4ee680a8b3 Fixed spacing
- Removed spaces after not operator (!)
- Removed spaces inside array index
- use tab as indent instead of spaces
- Add newline at end of file
- Removed spaces after casts

Change-Id: I9ba17c4385fcb43d38998d45f89cf42952bc791b
2014-07-24 11:53:04 +02:00
This, that and the other
588880c5f0 Preferences: Turn stubthreshold back into a combo box
Currently it's an insanely tall list box. All the other settings on this
page use combo boxes, so we should be consistent.

After it was changed from 'selectorother' to 'select' in I88212703
and support for 'size' in HTMLSelectField was enabled in I7ac345e1,
the size defines the height of the select box instead of the width of
the text input field.

Bug: 68313
Change-Id: Id42a62e78fc2fee741bb02b88dc14cbb1b63635a
2014-07-22 15:50:24 +00:00
umherirrender
301a7f3d1d Remove unused global declarations
Change-Id: I05a9bc5c0c0447c045714a445b0ed44f001db1dc
2014-07-19 22:44:54 +02:00
jdlrobson
a8871cff14 Refactor Preferences code to allow better reuse.
Break up getPreferences into smaller subfunctions to
allow for reuse.

Change-Id: Idd33bab61b3ef5a262fee9361105f1c5d8024044
2014-07-09 14:26:51 -07:00
umherirrender
77782f1eaf Remove Preferences::loadOldSearchNs() (deprecated since 1.19)
Change-Id: Ia9bfafddd9a861b1ca78fc1a642981dc9535ab27
2014-07-09 01:41:18 +02:00
Federico Leva
480ce1e732 Remove redundant filter for negative namespace ids in search preferences
Follows-up 5dc4dc099. MWNamespace::getValidNamespaces() filters these
out already.

Change-Id: Icad951fb9a4c4cb368cd994d1861dc2eff1f4ae0
2014-06-03 16:10:04 +00:00
Nemo bis
5dc4dc099d Save advanced search namespace prefs on Special:Search itself
* Checkbox on own row below power search checkboxes per MatmaRex;
  avoiding a mw-search-ns* id leaves it untouched by All/None JS.
* The option searcheverything is removed: a "shortcut" which is no
  longer necessary now that options can be (un)selected at once
  with All/None buttons on search page itself.
* Require a token for saving: no accidental preferences changes.
* Keep the searchoptions/advancedsearchoptions prefs section in case
  something is using it (no known extension does though); options
  are converted to "api" type so it's empty and hidden by default.
* Add minimal documentation for saveSettings() and friends
  (@todo since 155ddf6de, 2009!).

Bug: 52817
Change-Id: I514cee835988600cc013658049e88a10b670e64a
2014-05-30 14:33:47 -07:00