Commit graph

532 commits

Author SHA1 Message Date
Fomafix
b8f97035ce API: Allow to pass whitespaces in MultiValue
This allows to response with an invalidreason instead silently ignore
the parameter.

Example request: api.php?format=json&action=query&titles=%20

Response before this change:
{
  "batchcomplete": ""
}

Response with this change:
{
  "batchcomplete": "",
  "query": {
    "pages": {
      "-1": {
        "title": " ",
        "invalidreason": "The requested page title is empty or contains only the name of a namespace.",
        "invalid": ""
      }
    }
  }
}

Bug: T185846
Change-Id: I6fdaf32792a0e6e37b08176f975c10607093351b
2018-01-28 19:05:07 +01:00
Umherirrender
c9d303d39e Remove "Created on" from file header comments
It is the job of git and svn to provide this information/metadata.
The form was different, some with short, some with long month name
some with leading zero at the day, some without.
The year is also present in the Copyright clause

Change-Id: If006907b82b9e45f13cfa2e45d41107a95570e1a
2018-01-26 23:12:40 +00:00
Umherirrender
45da581551 Use ::class to resolve class names in tests
This helps to find renamed or misspelled classes earlier.
Phan will check the class names

Change-Id: Ie541a7baae10ab6f5c13f95ac2ff6598b8f8950c
2018-01-26 22:49:13 +01:00
Yifei He
1891a1e972 Add PHPUnit tests for ApiDelete
This covers deleting non-file pages.

Bug: T183886
Change-Id: I31c27786b16b55f8bf4cf528bf4c1ea49075e02e
2018-01-18 18:09:46 +05:30
jenkins-bot
afe317e26d Merge "Add tests for ApiFormatRaw" 2018-01-04 21:05:29 +00:00
jenkins-bot
dcf3a3be60 Merge "Add tests for ApiFormatBase" 2018-01-04 21:01:12 +00:00
Phantom42
92e249c4dc Add tests for ApiFormatRaw
Bug: T183767
Change-Id: I63ce42dd61f6e47f7278c436cad1e4f05e287b04
2018-01-04 19:28:27 +02:00
jenkins-bot
ba00b23a1d Merge "ApiComparePages: Add 'fromsection' and 'tosection' parameters" 2018-01-04 07:01:31 +00:00
Brad Jorsch
a8f5964cfe Add tests for ApiFormatBase
Ensuring proper behavior of the base class lets comprehensive tests of
subclasses be simpler.

This also adjusts ApiFormatTestBase to be a bit more usable, passing an
array of options through to encodeData() instead of just a class name.
And removes the unused 'SKIP' from testGeneralEncoding, but allows
expecting an exception (for use in I63ce42dd).

Change-Id: Ib2a1fa0b04860b09105376881ff8411f9534c453
2018-01-03 16:08:12 -05:00
Phantom42
55a12fcfa7 Add message to the assert of ApiClearHasMsgTest
This adds 'sanity check' message for one of asserts so it is more
clear that it is asserting a precondition.

Change-Id: I10d36c1bf69effd7bd83f4a2259144e9f6e114fc
2018-01-03 04:29:23 +02:00
jenkins-bot
08324f14b4 Merge "build: Updating mediawiki/mediawiki-codesniffer to 15.0.0" 2018-01-02 10:12:27 +00:00
Phantom42
a6dad54007 Add test for ApiClearHasMsg
Bug: T183769
Change-Id: I60c66a7cddaf03a83afd29e536281916ef3eb6d5
2018-01-01 21:19:52 -08:00
Umherirrender
255d76f2a1 build: Updating mediawiki/mediawiki-codesniffer to 15.0.0
Clean up use of @codingStandardsIgnore
- @codingStandardsIgnoreFile -> phpcs:ignoreFile
- @codingStandardsIgnoreLine -> phpcs:ignore
- @codingStandardsIgnoreStart -> phpcs:disable
- @codingStandardsIgnoreEnd -> phpcs:enable

For phpcs:disable always the necessary sniffs are provided.
Some start/end pairs are changed to line ignore

Change-Id: I92ef235849bcc349c69e53504e664a155dd162c8
2018-01-01 14:10:16 +01:00
Phantom42
1cdcef8a32 Add tests for ApiCheckToken
Bug: T183768
Change-Id: I63ab0413252c7333f73b881995869454c4881a57
2018-01-01 02:06:59 +02:00
Brad Jorsch
b7f75836ee ApiComparePages: Add 'fromsection' and 'tosection' parameters
The deprecated diffing in prop=revisions and such used a 'rvsection'
parameter. To enable migration of things using that, action=compare
needs corresponding section parameters.

Bug: T183823
Change-Id: If1a0e2df614c083b37640418c69cca367ce0e895
2017-12-30 12:59:26 -05:00
jenkins-bot
1a0474fa7b Merge "Add @covers tags API tests without them" 2017-12-28 16:53:39 +00:00
Kunal Mehta
92ee198c66 Add @coversNothing in places where @covers does not apply
These tests apply to things that are not relevant to PHP code coverage,
such as testing presence of messages, JSON files, or the PHPUnit tests
themselves.

Using @coversNothing indicates that there is no code here to be covered,
and prevents warnings when using --strict-coverage mode (T152923).

Change-Id: Id89ee2c15a3ce3f10e34b13fb677cd1af75af9e6
2017-12-28 08:53:40 +00:00
Kunal Mehta
2c2dc593d2 Add @covers tags API tests without them
Change-Id: Ida0f954cb0a44719af3a3d0c6bda4587c9ca42b6
2017-12-27 17:50:06 +00:00
jenkins-bot
8eaee6fd06 Merge "Simplify ApiQueryRecentChangesIntegrationTest" 2017-12-27 12:51:54 +00:00
jenkins-bot
0ed9e8b554 Merge "Integration tests for ApiQueryRecentChanges" 2017-12-27 12:33:27 +00:00
Thiemo Mättig
e02e140e2d Simplify ApiQueryRecentChangesIntegrationTest
This patch does two major things to the newly introduced
ApiQueryRecentChangesIntegrationTest:

* It rips the confusingly complicated assertArraySubsetsEqual appart.

* It removes all wikitext content. Note that no assertion is done on this
content (not even in the test that is about adding a category). The tests
run just fine with automatically generated content. I had to introduce the
$i counter to make sure consecutive edits are done with different content.
Otherwise the later edit is not stored.

Change-Id: Iae585be86f3fd9bff7d2b4b7b218d5b0b4258603
2017-12-27 13:23:17 +01:00
Thiemo Mättig
72fa7b9dfc Fix inconsistent capitalization of different method calls
Change-Id: I9f5b9e59e8cdadf65e80077fe2d3a9822b4592fe
2017-12-27 12:35:13 +01:00
Amir Sarabadani
b29d4e2789 Integration tests for ApiQueryRecentChanges
It looks big but it's mostly copy from ApiQueryWatchlistIntegrationTest

Change-Id: I96ccd3e2813e77f47a4432ca434c1c6a212d90ea
2017-12-25 14:13:47 +01:00
Bartosz Dziewoński
f1ca6b8ca9 ApiOptionsTest: Do not use ->at()
Quoting PHPUnit docs:

  The $index parameter for the at() matcher refers to the index,
  starting at zero, in all method invocations for a given mock object.
  Exercise caution when using this matcher as it can lead to brittle
  tests which are too closely tied to specific implementation details.

Indeed these test cases would break horribly with unintuitive error
messages ("Mocked method does not exist") if anything in preferences
or API code called any additional methods on the mocked user. For
example, it relied on the caching in Preferences::getPreferences(),
which is being removed in I92390120a16448383a25e9ba2dd35a434a2f21bf.

I'm pretty sure all that matters here is that all the setOption()
calls with different arguments happen, so let's test just that.

Change-Id: I30a814151a006e5f147eebb918344049807b2b97
2017-11-15 11:04:09 +00:00
Timo Tijhof
d5ed2785fb API: Include setupSkinUserCss in prop=modules for useskin mode
Follows-up 90c95fc7f2, which included result of Skin::getDefaultModules
in the prop=modules list. All hardcoded modules in OutputPage and Parser
were also subsequently moved into Skin::getDefaultModules.

However, a number of modules cannot be moved there because fundamentally
Skin::getDefaultModules can only load modules via OutputPage::addModules().

For style modules, addModuleStyles() must be used.

Fortunately, there is already a centralised place for that, namely
Skin::setupSkinUserCss(). Include that in the ApiParse return as well.
That should resolve the last bit of inconsistency between ApiParse
and OutputPage when it comes to the module queue.

Bug: T140664
Change-Id: I35e2e3bbdccdd1aa2a259b8e624daa80c609ba8c
2017-10-25 02:16:01 +01:00
Timo Tijhof
e8619ba749 API: Add tests for useskin parameter of ApiParse
Change-Id: If3dff7be5ccb6791f95d37c06998fcbadf1f469f
2017-10-25 02:07:59 +01:00
jenkins-bot
6f4eda1fd3 Merge "Fix inability of fetching message object" 2017-10-05 13:57:29 +00:00
Aleksey Bekh-Ivanov (WMDE)
42f822a949 Fix inability of fetching message object
Fatal error was happening due to the fact that ApiUsageException was
trying to call `getMessage()` on StatusValue which doesn't have this
method.

Change-Id: Idd9c7d47d9e24a6a32db6daf75a827bf958c9b76
2017-10-04 15:24:42 +02:00
jenkins-bot
6d3641b7a7 Merge "Improve namespace handling in tests" 2017-09-29 05:33:26 +00:00
Brad Jorsch
2d9f29a846 Improve namespace handling in tests
MWNamespace has three internal caches, only one of which can be cleared
(and that somewhat oddly by passing a boolean to
MWNamespace::getCanonicalNamespaces()).

This change introduces a MWNamespace::clearCaches() method to clear all
three caches. It also adds some resetting in tests that seemed to be
missing it.

Change-Id: I1dcfcd8713888b3ff8fc75e95329ba72bd95d0c9
2017-09-29 05:21:47 +00:00
Aleksey Bekh-Ivanov (WMDE)
cc3c0d2cdf Make ApiUploadTest up to date so it passes
Although the test is still might fail from time to time
and needs refactoring.

Bug: T28169
Change-Id: Ib27a36e0d76495a133eb8941300e4940e5eb670e
2017-09-22 20:49:08 +02:00
Brad Jorsch
11cf01dd9a Add comment table and code to start using it
A subsequent patch will remove the old columns.

Bug: T166732
Change-Id: Ic3a434c061ed6e443ea072bc62dda09acbeeed7f
2017-08-30 15:05:00 +10:00
jenkins-bot
f4a53c5406 Merge "API: Add deprecation warnings for Iae0e2ce3" 2017-07-21 21:12:10 +00:00
Umherirrender
b5cddfb27b Remove empty lines at begin of function, if, foreach, switch
Organize phpcs.xml a bit

Change-Id: Ifb767729b481b4b686e6d6444cf48b1f580cc478
2017-07-01 11:34:16 +00:00
Umherirrender
be42e09aa8 build: Prepare for mediawiki/mediawiki-codesniffer to 0.9.0
The used phpcs has a bug, so the version 0.9.0 could not be enforced at the moment.
Will be fixed in next version, see T167168

Changed:
- Remove duplicate newline at end of file
- Add space between function and ( for closures
- and -> &&, or -> ||

Change-Id: I4172fb08861729bccd55aecbd07e029e2638d311
2017-06-26 17:14:31 +00:00
Brad Jorsch
efaaa2c1d6 API: Add deprecation warnings for Iae0e2ce3
Change-Id: Ib0c9d5a18803b406a1266eb24238536d122ff6e7
2017-06-22 13:21:08 -04:00
jenkins-bot
80f6b8c048 Merge "API: Restore ability for dieStatus() to be passed a non-fatal Status" 2017-06-13 23:25:35 +00:00
Brad Jorsch
e5006ce0f0 API: Restore ability for dieStatus() to be passed a non-fatal Status
This ability was accidentally removed in Iae0e2ce3.

Bug: T167690
Change-Id: I79cc9f2f8e75c3cf4e0942d17faafa84955aa020
2017-06-13 10:30:24 -04:00
Brad Jorsch
1e2b3fb37f ApiParse: Clean up parsing code
Now that ParserOptions->isSafeToCache() exists, use it where necessary.
This also moves the use inside the makeParserOptions() method so other
callers can pick it up as well.

Then pass the flag as $forceParse into WikiPage::getParserOutput()
instead of duplicating the logic in several cases, and generally clean
up the logic in the module to let WikiPage decide when to use the cache
in more cases.

Change-Id: I0079e10a40997e4a3b59ac21ef6c92246a147736
2017-06-12 12:34:17 -04:00
Brad Jorsch
c671ee1622 API: Rewrite ApiComparePages
Support diffing deleted revisions, user-supplied text, and additional
properties about the diffed revisions such as the user and edit summary.

Bug: T20189
Bug: T30047
Bug: T164529
Change-Id: I5565d717d9c2fd19da7cae02890a15e244cc238b
2017-06-05 12:23:32 -07:00
jenkins-bot
a244391c0d Merge "Fix some postgres test failures" 2017-05-10 17:25:45 +00:00
Aaron Schulz
b8340df640 Avoid assuming a user with ID 0 exists in ApiMainTest::testAssert
If the load() triggered by User method calls fails, then mId becomes 0
which means there is no "user" right set in getAutomaticGroups().

Bug: T75174
Change-Id: I2d719e4b96c0142e9d408aa2d4f7c5e7a767a754
2017-05-09 19:25:56 -07:00
Aaron Schulz
6793b60eca Fix some postgres test failures
Bug: T75174
Change-Id: If9812ae301f0af84fa012e2e980b92036c1b29b2
2017-05-10 01:59:47 +00:00
Gergő Tisza
525bfbc8df Switch to librarized version of TestingAccessWrapper
Replaces \TestingAccessWrapper (defined in core) with
\Wikimedia\TestingAccessWrapper (defined in the composer package
wikimedia/testing-access-wrapper).

See https://gerrit.wikimedia.org/r/#/q/topic:librarize-testing-access-wrapper
for downstream patches.

The core version of the class is kept around for a while to avoid
circular dependency problems.

Bug: T163434
Change-Id: I52cc257e593da3d6c3b01a909e554a950225aec8
2017-04-20 14:15:57 +00:00
jenkins-bot
4d609f015d Merge "ApiPageSet: Follow RedirectSpecialArticle redirects" 2017-04-08 09:36:21 +00:00
Timo Tijhof
447ce7e39a phpunit: Avoid use of deprecated getMock for PHPUnit 5 compat
The default will remain PHPUnit 4.x due to PHP 5.5 support.

But, we should allow developers to run tests with newer PHPUnit
versions which are noticably faster (especially for code coverage
reports).

* <https://github.com/sebastianbergmann/phpunit/wiki/Release-Announcement-for-PHPUnit-5.4.0>
  PHPUnit 5 deprecates the getMock() shortcut for getMockBuilder()->getMock().
  It instead introduces the shortcut createMock() which has better defaults
  than getMockBuilder(). For example, it sets 'disableArgumentCloning' and
  other things by default.

  Going forward, code should either use getMockBuilder directly and configure
  it using the setter methods (instead of the confusing variadic arguments
  of getMock) or simply use the new minimalistic createMock method. This patch
  backports the createMock method to MediaWikiTestCase so that we can start
  using it.

Change-Id: I091c0289b21d2b1c876adba89529dc3e72b99af2
2017-04-06 00:44:32 +00:00
Brad Jorsch
ca61e20e3d Fix ApiMainTest::testApiErrorFormatterCreation
API tests are all subclasses of MediaWikiLangTestCase, which overrides
the content language when the tests are actually running. So we need to
always use 'en' to match that.

Bug: T162007
Change-Id: Ie001576fb62ae88c9141e471fd8fcbc49592be32
2017-04-03 09:44:13 -04:00
aude
8443339411 Add missing @group Database tags in tests
Change-Id: Id92aab0b1f8cde6657d6558d0d82605109daa588
2017-03-18 19:13:18 -04:00
Brad Jorsch
2338fe08c1 ApiPageSet: Follow RedirectSpecialArticle redirects
For example Special:MyPage, Special:MyTalk, and Special:MyLanguage.

Don't follow other redirect special pages like Special:MyContributions,
though, because the following only really makes sense when the redirect
is to an article.

Bug: T145541
Change-Id: I8c8065552ed128017887e48285e359def8bd3cd3
2017-03-08 16:54:01 -05:00
Timo Tijhof
3a2a707546 Clean up remaining get_class() uses
* get_class()        -> __CLASS__ (same as self::class)
* get_called_class() -> static::class
* get_class($this)   -> static::class

Change-Id: I1888a1897ecf4548a2e5a67a942e5c080dd7e3d3
2017-03-07 22:03:47 +00:00
Brad Jorsch
b18c6bcaee API: Fix ApiMainTest::testExceptionErrors and use $wgShowDBErrorBacktrace
Apparently Jenkins sets $wgShowExceptionDetails to true but travis
doesn't. The test should make sure it's set since it depends on it.

And apparently no one ever added $wgShowDBErrorBacktrace to the API.
Let's do that too.

Change-Id: I0793eda349426b265a47900cdeb87bb920b5c291
2017-02-21 20:29:06 -05:00
James D. Forrester
1e9c361960 tests: Replace implicit Bugzilla bug numbers with Phab ones
It's unreasonable to expect newbies to know that "bug 12345" means "Task T14345"
except where it doesn't, so let's just standardise on the real numbers.

Change-Id: I46261416f7603558dceb76ebe695a5cac274e417
2017-02-21 02:14:34 +00:00
jenkins-bot
cf3221a3d5 Merge "API: Add reference to the mailing list in errors and deprecation warnings" 2017-01-30 03:26:00 +00:00
Brad Jorsch
382450573d ApiErrorFormatter_BackCompat: Use first error, not last
Before Iae0e2ce3b, the only place in the API that had to deal with
choosing from multiple errors was ApiBase::dieStatus(), which chose the
first one in the Status object. Iae0e2ce3b changed this to choose the
last one instead, which is an unnecessary backwards compatibility break.

While we could make the change in ApiBase::dieStatus(), it's cleaner to
change ApiErrorFormatter_BackCompat's behavior instead since it seems
unlikely anything else was using that code path.

Bug: T155268
Change-Id: Ia06527f8480c3d4a689792ceb8671b0d399ffbe3
2017-01-17 11:00:55 -05:00
Brad Jorsch
f70c7a06de API: Add reference to the mailing list in errors and deprecation warnings
This was suggested at a Developer Summit session as a way to get people
to know about the mailing list.

This also adds a hook so ApiFeatureUsage can mention itself in
deprecation warnings too.

Bug: T148855
Change-Id: I04a7cf89e87e48f6504803dd173e779017a205d0
2017-01-11 13:37:25 -08:00
Thiemo Mättig
3e83a50213 Remove unused imports from test classes
Validating this should be as simple as it can be: if the tests run,
this change should be fine. :-)

Change-Id: I8e4a3dfc83fdc9b8c8d7f5bbd067e088ebd2133d
2017-01-10 11:49:58 +01:00
jenkins-bot
e61f2aee41 Merge "Fix tests that don't check composer's autoloader" 2016-12-22 18:20:14 +00:00
Aleksey Bekh-Ivanov (WMDE)
5df18797e4 Fix tests that don't check composer's autoloader
Tests were failing if class cannot be loaded using `\AutoLoader` but can be loaded by composer's autoloader.

Change-Id: I005c9d99245f4733a9666c4bfe9e39baeaad3960
2016-12-22 10:46:11 +00:00
Brad Jorsch
0402b23040 Fixes and tests for ApiErrorFormatter ILocalizedException handling
Change-Id: I9449ea5886e27dfb9e54b91cdb50a6a6a2c9a4ed
2016-12-20 14:30:06 -05:00
Brad Jorsch
96b60ded77 Fix RevDel API output for formatversion=2
Use booleans, not the old empty-string-or-undefined.

This bugfix is a breaking change, but chances are it won't affect many
clients.

Bug: T153518
Change-Id: If5fa2cdcb973b186349307b29e4266daceef0a9d
2016-12-19 11:48:49 -05:00
Brad Jorsch
01a3b2b0bf Add the concept of "system blocks"
Blocks made for configured proxies, dnsbls, or the configured range
soft-blocks being added in I6c11a6b9 aren't real blocks stored in the
database. Let's actually flag these blocks as such and use a more
appropriate message when displaying them to the user.

Change-Id: I697e3eec2520792e98c193200c2b1c28c35bf382
2016-12-16 12:30:03 -05:00
Subin Siby
395fe60176 Block API: Allow blocking/unblocking by user's ID
Add feature to block/unblock users by their ID. For this,a new
parameter `userid` is added to block & unblock API request.

Bug: T34496
Change-Id: I084a4e275cd937053c505cd388a365b316990ece
2016-12-13 18:16:24 +05:30
Thiemo Mättig
00c3f09566 Remove empty lines from PHP and JavaScript comment blocks
This is a pure documentation change. It mostly removes empty lines from
comments (and entirely empty comments), as well as adds a few missing
documentation blocks and fixes a minor mistake. I hope it's ok to have
this in one patch. I can split it, please tell me.

Change-Id: I9668338602ac77b903ab6b02ff56bd52743c37c4
2016-12-09 09:01:06 +00:00
Brad Jorsch
4e6810e4a2 API: i18n for warnings and errors
API warnings and error messages are currently hard-coded English
strings. This patch changes that.

With a few exceptions, this patch should be compatible with non-updated
extensions:
* The change to ApiBase::$messageMap will blow up anything trying to
  mess with it.
* The changes to the 'ApiCheckCanExecute' hook will cause a wrong
  (probably unparsed) error message to be emitted for extensions not
  already using an ApiMessage. Unless they're currently broken like
  Wikibase.

Bug: T37074
Bug: T47843
Depends-On: Ia2b66b57cd4eaddc30b3ffdd7b97d6ca3e02d898
Depends-On: I2e1bb975bb0045476c03ebe6cdec00259bae22ec
Depends-On: I53987bf87c48f6c00deec17a8e957d24fcc3eaa6
Depends-On: Ibf93a459eb62d30f7c70d20e91ec9faeb80d10ed
Depends-On: I3cf889811f44a15935e454dd42f081164d4a098c
Depends-On: Ieae527de86735ddcba34724730e8730fb277b99b
Depends-On: I535344c29d51521147c2a26c341dae38cec3e931
Change-Id: Iae0e2ce3bd42dd4776a9779664086119ac188412
2016-12-06 10:20:48 -05:00
jenkins-bot
c99b37bdc0 Merge "Deprecate Message::$format (mostly)" 2016-11-10 18:47:45 +00:00
Gergő Tisza
b0784a8e96 Deprecate Message::$format (mostly)
Message::__toString() used the same formatting mode that the last
explicit transformation used:

    $msg = new Message( 'foo' );
    echo $msg; // escaped
    echo $msg->plain();
    echo $msg; // not escaped

This is not particularly useful and makes code review hard, so let's
get rid of it.

The same behavior with $msg->toString() is left intact (and logged)
for now.

Bug: T146416
Change-Id: Ia9b2a1dcf09d52348b2c6d8299fd849b809f6e74
2016-11-10 09:06:26 +00:00
umherirrender
34fe90ac52 Remove empty lines at end of functions
It looks like there is something missing after the last statement
Also remove some other empty lines at begin of functions, ifs or loops
while at these files

Change-Id: Ib00b5cfd31ca4dcd0c32ce33754d3c80bae70641
2016-11-05 11:55:10 +01:00
jenkins-bot
59e7337ea6 Merge "API: Remove deprecated response values from action=login" 2016-10-11 16:27:54 +00:00
Gergő Tisza
4930b32e37 API: Remove deprecated response values from action=login
Re-apply 23e5cdb after temporarily reverting in fda4d48 due to bot breakage.

Bug: T121527
Change-Id: Ia89719d8bbebb7446b9c41cc9f29ecf26c75839b
2016-10-07 04:38:24 +00:00
Brad Jorsch
fec31a8b9d API: Add assertuser parameter
This was requested for the use of scripts that are concerned about the
possibility that the user might log in with a different account in
another browser window, thereby changing the expected user out from
underneath the script.

Bug: T146770
Change-Id: I94e0421cb263a418e86649f0d22ece4cfec6a395
2016-10-05 16:32:39 -04:00
Aaron Schulz
b8bc83c91d Fix "Incorrect watchlist token provided" unit test errors
Change-Id: Ib133ffe9b9ef438ff5716ad25a897e2c5a4f7d58
2016-09-27 21:18:34 -07:00
Amir Sarabadani
9850c542c6 Clean up array() syntax in docs, part VII
Last part

Change-Id: I38f015e2122ef4fd2d2141718bd889794c29f06c
2016-09-27 06:53:25 +03:30
Brad Jorsch
892c31ebaf API: Remove deprecated methods
All deprecated ApiResult methods are removed. These have been deprecated
since 1.24 or 1.25, and the only users remaining in Gerrit are wrapped
in backwards-compatibility checks and so should not be being called.

ApiBase, ApiFormatBase, ApiMain, and ApiQuery methods for generating the
pre-Ib14c00df help text are removed. Nothing has called these for a long
time, and only Flow implemented them in any way. Deprecated methods for
providing the text for such help, such as getDescription(), haven't been
removed yet, though, since some extensions still call some of them.

Change-Id: I3ca7c98174b4a3f6f67f2b023e0f4446637e7a84
2016-09-20 17:21:00 -04:00
dcausse
16e2491a73 Pass User to SearchEngine::getProfiles
Useful for search engines that allow users to customize search profiles.

Depends-On: Icd577c8ebc6e162befe30bde4fe276e633d2e434
Change-Id: I471cd090730d2a25cb70d622ec3bebbe9583118c
2016-09-20 20:22:23 +00:00
Reedy
3c27ff94fa Replace WikiPage::doEdit() usages
Update/add some comments

Bug: T145737
Change-Id: Ib3b2b69906074cbb51917dc57204c989fd6c58b2
2016-09-15 21:25:32 +01:00
Gergő Tisza
af37a4c77d Fix login API for users with @ in their usernames
An @ in the username caused the password to be treated as a bot password,
but apparently some real usernames still contain it. Try both logins
instead. Security considerations are the same as for the other bot
password syntax: the length check makes sure we do not provide any
information on a timing side channel about the password unless it is
extremely long.

Change-Id: I58f42544a08c3208c41f54cfae932632d9c5affa
2016-09-14 01:47:52 +00:00
Brian Wolff
99485235b0 API: When undoing an edit, allow overriding content model.
This brings the API in line with web UI changes from Ic528f65d.

Bug: T145044
Change-Id: Ib97eef38d228c4da4b062ee96ddbbbb926ee665b
2016-09-08 20:19:45 -07:00
Brad Jorsch
087e25021b API: Warn when input parameters are normalized
If a client submits data that is not NFC-normalized Unicode or that
contains C0 controls other than HT, LF, and CR, it gets normalized before
the API ever sees it. Which can lead to difficult-to-handle bugs when,
for example, a title is subject to normalization so the client can't
find the specific title it submitted anywhere in the response (T139130).

This patch does two things:
* Detects when normalization was applied to an input value (at the
  MediaWiki level, anyway; if PHP or earlier does it we're just out of
  luck) and add a warning to that effect.
* For ApiPageSet's 'titles' parameter, split into the individual titles
  and add them to the 'normalized' list in the response. This requires
  encoding the pre-normalized strings to avoid ApiResult's own
  normalization.

Bug: T29849
Bug: T144071
Change-Id: I215fd3edd7a5e1b45292e60768bf6dd5ad7f34de
2016-08-29 15:00:45 +00:00
Brad Jorsch
75a85b412c API: Use U+001F (Unit Separator) for separating multi-valued parameters
When a multi-valued parameter's value begins with U+001F, the values
will be split on that character instead of pipes. This will be useful
for things such as action=options&change= or meta=allmessages&amargs=.
Since MediaWiki doesn't otherwise accept C0 control characters
(WebRequest::getVal() replaces them with �), there's no possibility that
this will conflict with a literal use of U+001F.

Special:ApiSandbox and mw.Api are updated to make use of this, with the
latter having an option to disable the behavior in case something is
depending on [ 'foo', 'bar|baz' ] turning into 'foo|bar|baz'.

Pipe is still used as the separator when the value doesn't begin with
U+001F, and will be forever since it's generally more human-friendly and
is needed for backwards compatibility with basically every API client in
existence. The requirement that the value begin with U+001F, rather than
simply contain U+001F, is to avoid clients having to somehow
special-case "param=foo|bar" where that's intended to be a single value
"foo|bar" rather than two values "foo" and "bar".

Bug: T141960
Change-Id: I45f69997667b48887a2b67e93906364a652ace5a
2016-08-29 11:00:25 -04:00
Brad Jorsch
a6d6f2ee38 API: Some raw message cleanup
* Set an indexed tag name in ApiParamInfo and ApiAuthManagerHelper.
* Use 'key' instead of 'message' for the (not yet used) non-BC
  ApiErrorFormatter.

Change-Id: I07f0a690e263b34e09210673241af8bf750cbd1b
2016-08-24 13:19:52 -04:00
Gergő Tisza
854a462dc0 Remove $wgDisableAuthManager
Change-Id: I2b2c9693a275fcc026916bd97f303e7a5c8df341
2016-08-09 23:00:27 +00:00
jenkins-bot
09e7b78330 Merge "Revert "API: Remove deprecated response values from action=login"" 2016-08-07 02:43:45 +00:00
Gergő Tisza
fda4d48e84 Revert "API: Remove deprecated response values from action=login"
Revert commit 23e5cdb503
temporarily so Pywikibot users can catch up with API changes

Bug: T121527
Bug: T142155
Change-Id: I3879a5d76a1727dd653daeebc79d4d9cabd0332e
2016-08-05 22:50:51 +00:00
jenkins-bot
0981840ee3 Merge "API: Remove deprecated response values from action=login" 2016-07-29 09:57:51 +00:00
Erik Bernhardson
1b13cc1236 Rename OpenSearch qiprofile parameter back to profile
In I6f987db this parameter was inadvertantly renamed to qiprofile. The
qiprofile is something different, and is also a BC break. The BC break is
pretty minor, for a randomly chosen day this looks to be used 157 times
out of 28.7M requests, but since this really isn't a qiprofile rename
it back to what it was.

Change-Id: I1cc07945888c15ea4b4c9596eea447b706606fae
2016-07-28 10:25:33 -07:00
Brad Jorsch
23e5cdb503 API: Remove deprecated response values from action=login
Bug: T121527
Change-Id: Ie370d6dc5a922ad9c50758ba81b98aa8492f83cb
2016-07-27 12:15:34 -04:00
jenkins-bot
d1ac58cd85 Merge "Push common search api parameters into SearchApi class" 2016-07-27 09:18:33 +00:00
Erik Bernhardson
5da2c4197d Push common search api parameters into SearchApi class
We have a number of parameters that are pretty much the same between
these different search api's. Lets make them actually the same by
sharing the definitions, and then letting individual classes tweak them
as needed by removing the offset, or adjusting the max limits as
necessary.

Change-Id: I6f987db8ecb63dc943b4d2518bfe3703c677448e
2016-07-26 08:56:00 -07:00
Leszek Manicki
c1b4b19de3 Refactor database-related code in ApiQueryWatchlistRaw
Database queries used to get user's watchlist items in API are quite
complex due to number of options oferred by the API.
Generating the query is moved to WatchedItemQueryService.
ApiQueryWatchlistRaw no longer contains database-related code.

Simple user watchlist item lookups should use WatchedItemStore.

ApiQueryWatchlistRaw tests have been introduced in
I9c07aa237607143985f0efe20ed0065d2bde27e4

Bug: T132566
Change-Id: I875a92074b52c00ac11db1fa05615abbf5262ab1
2016-07-06 12:57:39 +00:00
jenkins-bot
a27da1deb5 Merge "Refactor database-related code in ApiQueryWatchlist" 2016-06-29 09:07:44 +00:00
Leszek Manicki
1a9460308e Refactor database-related code in ApiQueryWatchlist
This moves generating of a complex Watchlist and RecentChanges
related query to a WatchedItemQueryService class.
ApiQueryWatchlist class no longer contains any database-related
code.

Bug: T132565
Change-Id: I5a5cda13f8091baa430ac1a8e2176e0efd1ae192
2016-06-29 10:21:17 +02:00
addshore
ea5e92ba47 Make deprecated TestUser properties private
Change-Id: I18d6299bad773d16c04b6ea79331c81af8f538bc
Depends-On: I5317616f99f1344557fd818d0b00073a82197d05
Depends-On: I15be3de63b2ce13e0ea07b235efd7756c97cebfc
Depends-On: I80a50e50493ad04f20cab3a1e094a5c3ecb1c19f
2016-06-22 15:43:54 +00:00
addshore
f48f94dfcc Remove uses of deprecated TestUser properties
Change-Id: Ib44c66492e27516dfe205a5e428ebfd6b0fcdfd9
2016-06-22 16:40:31 +01:00
jenkins-bot
c13d8c8255 Merge "Use GenderCache service in ApiQueryWatchlistIntegrationTest" 2016-06-20 15:41:12 +00:00
Leszek Manicki
90f378c2bc Add tests for ApiQueryWatchlistRaw
This includes tests that originally were part of
I875a92074b52c00ac11db1fa05615abbf5262ab1

Change-Id: I9c07aa237607143985f0efe20ed0065d2bde27e4
2016-06-20 15:26:05 +00:00
Antoine Musso
6fe1e2e248 test: basic test for ApiStashEdit
At least execute the main entry point.

Change-Id: I0788c9a7bf93b5365f4e510dff4e11fe6ffa3558
2016-06-16 22:26:24 +02:00
Leszek Manicki
e4e4236dbe Use GenderCache service in ApiQueryWatchlistIntegrationTest
Change-Id: I5190c8c91fa4994fcce850067fa7d2a01ccc4424
2016-06-15 11:04:33 +02:00
Ori Livneh
e638075936 Whenever possible, reuse User objects in unit tests
The unit tests spend nearly half of their run time resetting the user table for
each test. But the majority of tests do not depend on the user table having the
exact value that the setup code resets it to, and do not need to modify the
user objects they require to run.

Fix that by providing an API for tests to get User objects, and to indicate
whether the User object will be subject to destructive modification or not.
This allows User objects to be reused across multiple unit tests.

Change-Id: I17ef1f519759c5e7796c259282afe730ef722e96
2016-05-26 20:42:31 +00:00
umherirrender
72632115d6 Fix various phpcs error from last security patches
Found by tests:
https://integration.wikimedia.org/ci/job/mediawiki-core-phpcs-trusty/1069/console

Breaking merges

Change-Id: If01b94705cd7b939ac380053730b1b602c838a8e
2016-05-20 20:20:36 +02:00
Brad Jorsch
f459c1aeca SECURITY: Improve cross-domain-policy mangling
Take into account that the tag might have parameters.

Bug: T123653
Change-Id: Ie9799f5ea45badfb4e7b4be7e7fbc1c35cc86f26

Signed-off-by: Chad Horohoe <chadh@wikimedia.org>
2016-05-20 09:48:11 -07:00
Brad Jorsch
9ec1ef7308 API: Add "standard" header and hook for lacksSameOriginSecurity()
The header is intended for use with XMLHttpRequest when the request
might be part of an XSS. The hook is for extensions that might need to
add additional checks of some sort.

Bug: T98313
Change-Id: I0e5f2d3b29a79a12461dc33c90c812a56810f536

Signed-off-by: Chad Horohoe <chadh@wikimedia.org>
2016-05-20 09:25:14 -07:00
jenkins-bot
8a21d628d7 Merge "Add ApiSetNotificationTimestampIntegrationTest" 2016-05-18 18:40:13 +00:00
jenkins-bot
94117ad9c1 Merge "Speed up password-handling in the unit tests" 2016-05-18 12:46:28 +00:00
addshore
5660bc91af Add ApiSetNotificationTimestampIntegrationTest
Change-Id: If0bc1f56533102f54c0031eea548c20d8abe1818
2016-05-18 12:08:47 +01:00
Brad Jorsch
54d58ef506 API changes for AuthManager
Changes here are:
* action=login is deprecated for use other than bot passwords
* list=users will indicate if a missing user name is creatable.
* Added action=query&meta=authmanagerinfo
* Added action=clientlogin is to be used to log into the main account
* action=createaccount is changed in a non-BC manner
* Added action=linkaccount
* Added action=unlinkaccount
* Added action=changeauthenticationdata
* Added action=removeauthenticationdata
* Added action=resetpassword

Bug: T110276
Bug: T110747
Bug: T110751
Bug: T32788
Bug: T67857
Bug: T28597
Bug: T76103
Change-Id: I244fa9b1e0623247d6d9fa30990411c6df94a496
2016-05-16 15:12:52 +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
Ori Livneh
61096dd7ac Speed up password-handling in the unit tests
* Speed up password generation and verification by setting MWOldPassword as the
  default password type. Do this once, in MediaWikiTestCase::makeTestConfig(),
  rather than in five different places.
* Rename '$pwhash' to '$passwordHash', for consistency. It's ugly to have both
  '$passwordFactory' and '$pwhash' in the same scope.
* Make TestUser::setPasswordForUser() check first whether the desired password
  is already set. This is actually the common case, since the password is reset
  in the setup code for every test, but only a few tests actually change the
  password.

Change-Id: I423f09ff7472b6cbde21cb709ea7c7ef9e298f18
2016-05-13 16:13:12 -07:00
Leszek Manicki
6b7f5a8ce3 Add tests for ApiQueryWatchlist
Note: This change does not add tests for deleted revision/log data
(comment, action, user). These should be added in a follow up.

Change-Id: Ia76c39134564c477aa46ccb7b6595173410b0251
2016-05-09 15:27:27 +02:00
Brad Jorsch
a754d43c06 Fix core DB data in unit testing
Iec4ed4c8 made it so addCoreDBData() only gets called once. Which is
nice, except for the fact that it means any test that puts
'user_groups' into $this->tablesUsed is going to cause UTSysop to no
longer be a sysop, so any later test that expects it to be one is going
to mysteriously fail.

The fix is to make resetDB() actually clear out the 'user' table when
requested, but then to re-call addCoreDBData() so UTSysop is still
there.

This might break extension tests if they're relying on the 'user' table
never being cleared even if it's specified in $this->tablesUsed, but
hopefully that's not often the case.

Bug: T132411
Change-Id: If251739fd486544f54a0c07edcc24aeef0998342
Depends-On: I0546a4f18e0751d209b6b7c6cd42973f25828313
Depends-On: I4924ae941b3844b39dd3f44c6986c3bf29b0d62a
2016-04-12 16:58:44 +00:00
Reedy
83fb19cb13 Swap the rest of array() -> []
Change-Id: I76a7259ed952a0673a1941f08b39b545211fba07
2016-03-30 22:04:58 +00:00
Brad Jorsch
6c0abf937a Use ::class in place of string constants
This takes advantage of namespacing, and avoids having
double-backslashes all over the place.

Change-Id: I450fe4e9b1c4cf4e24fced3932fe796cbbadf3a3
2016-03-28 14:53:45 -04:00
Reedy
b5656b6953 Many more function case mismatches
Change-Id: I5d3a5eb8adea1ecbf136415bb9fd7a162633ccca
2016-03-19 00:20:58 +00:00
Reedy
1834ee3d8e Fix numerous class/function casing
Change-Id: I23982bfa0548c9ea3bdb432be7982f1563930715
2016-03-18 23:14:49 +00:00
daniel
a8995619c1 Avoid rebuilding database fixtures for every test run
This reduces the runtime of database-bound tests by about 40%
(on my system, from 4:55 to 2:47; results from Jenkins are
inconclusive).

The basic idea is to call addCoreDBData() only once, and have
a addDBDataOnce() that is called once per test class, not for
every test method lie addDBData() is. Most tests could be
trivially be changed to implement addDBDataOnce() instead of
addDBData(). The ones for which this did not work immediately
were left out for now. A closer look at the tests that still
implement addDBData() may reveal additional potential for
improvement.

TODO: Once this is merged, try to change addDBData() to
addDBDataOnce() where possible in extensions.

Change-Id: Iec4ed4c8419fb4ad87e6710de808863ede9998b7
2016-03-10 23:44:34 +00:00
Siebrand Mazeland
5b119a0e44 Replace uses of join() by implode()
All of core uses implode() consistently now.

Change-Id: Iba50898c64c43f356d1caf8869f484e90d9ff651
2016-03-08 18:24:16 +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
Brad Jorsch
c5be121442 ApiMessage: Use a trait to avoid code duplication
Change-Id: I19eb63bdc4c4cbd137f4d2101d37c81ce91aa6b3
2016-02-10 10:40:15 -05:00
Brad Jorsch
2257fe4228 Revert "Remove SessionManager, temporarily"
This reverts commit 823db5d63dd5200d04c63da50ba6bf16f928e70b.

Change-Id: Ibb3e023e4eb6715295586dea87d0725c344a8271
2016-02-03 21:44:59 +00:00
Brad Jorsch
5083e810eb Remove SessionManager, temporarily
The plan here is to take it out of 1.27.0-wmf.12 and put it back in
1.27.0-wmf.13.

Since BotPasswords depends on SessionManager, that's getting temporarily
removed too.

This reverts the following commits:
* 6acd424e0d SessionManager: Notify AuthPlugin before calling hooks
* 4d1ad32d8a Close a loophole in CookieSessionProvider
* fcdd643a46 SessionManager: Don't save non-persisted sessions to backend storage
* 058aec4c76 MessageCache: Don't get a ParserOptions for $wgUser before the end of Setup.php
* b5c0c03bb7 SessionManager: Save user name to metadata even if the user doesn't exist locally
* 13f2f09a19 SECURITY: Fix User::setToken() call on User::newSystemUser
* 305bc75b27 SessionManager: Don't generate user tokens when checking the tokens
* 7c4bd85d21 RequestContext::exportSession() should only export persisted session IDs
* 296ccfd4a9 SessionManager: Save 'persisted' flag in session metadata
* 94ba53f677 Move CSRF token handling into MediaWiki\Session\Session
* 46a565d6b0 Avoid false "added in both Session and $_SESSION" when value is null
* c00d0b5d94 Log backtrace for "User::loadFromSession called before the end of Setup.php"
* 4eeff5b559 Use $wgSecureCookie to decide whether to actually mark secure cookies as 'secure'
* 7491b52f70 Call session_cache_limiter() before starting a session
* 2c34aeea72 SessionManager: Abstract forceHTTPS cookie setting
* 9aa53627a5 Ignore auth cookies with value 'deleted'
* 43f904b51a SessionManager: Kill getPersistedSessionId()
* 50c5256352 SessionManager: Add SessionBackend::setProviderMetadata()
* f640d40315 SessionManager: Notify AuthPlugin when auto-creating accounts
* 70b05d1ac1 Add checks of $wgEnableBotPasswords in more places
* bfed32eb78 Do not raise a PHP warning when session write fails
* 722a7331ad Only check LoggedOut timestamp on the user loaded from session
* 4f5057b84b SessionManager: Change behavior of getSessionById()
* 66e82e614e Fix typo in [[MediaWiki:Botpasswords-editexisting/en]]
* f9fd9516d9 Add "bot passwords"
* d7716f1df0 Add missing argument for wfDebugLog
* a73c5b7395 Add SessionManager

Change-Id: I2389a8133e25ab929e9f27f41fa9a05df8147a50
2016-02-01 22:06:49 +00:00
Brad Jorsch
94ba53f677 Move CSRF token handling into MediaWiki\Session\Session
User keeps most of its token-related methods because anon edit tokens
are special. Login and createaccount tokens are completely moved.

Change-Id: I524218fab7e2d78fd24482ad364428e98dc48bdf
2016-01-27 15:27:20 -05:00
Bartosz Dziewoński
1ebc9128d0 Remove putrid remains of $wgAllowAsyncCopyUploads
None of this works and it's been long begging for a mercy kill.
All it does is waste contributor time on updating deprecations
in the dead code. I imagine we wouldn't reuse much of this
code if we're ever going to reimplement it.

Bug: T119336
Change-Id: Ibd26a4bea621857aac77823017e9be9b7dc52cca
2016-01-22 00:18:25 +00:00
Brad Jorsch
8deb49f534 API: Work around PHP bug 45959
Sigh, PHP. You allow for an array to have string "1" as a key (e.g. when
casting from object to array), but then you do everything wrong when
trying to deal with it.

Bug: T123663
Change-Id: I49f09901a69aab39ca1519bbe9e41267bf9a1216
2016-01-14 16:13:04 -05:00
Brad Jorsch
f9fd9516d9 Add "bot passwords"
Bot passwords are something like OAuth-lite, or Google's application
passwords: the bot can use API action=login to log in with the special
username and password, and will then be allowed to use the API with a
restricted set of rights.

This is intended to provide an easy migration path for legacy bots and
for bots on wikis without OAuth, since AuthManager is going to greatly
complicate non-interactive authentication. If OAuth is available, an
owner-only consumer would be a better choice.

Bug: T121113
Change-Id: Iaa4015e00edbfbfaedcc8b2d27a2d3fd25009159
Depends-On: I7e15331efb162275c4116bcae61f19d6b884cbe3
2016-01-12 22:37:44 +00:00
Brad Jorsch
a73c5b7395 Add SessionManager
SessionManager is a general-purpose session management framework, rather
than the cookie-based sessions that PHP wants to provide us.

While fallback is provided for using $_SESSION and other PHP session
management functions, they should be avoided in favor of using
SessionManager directly.

For proof-of-concept extensions, see OAuth change Ib40b221 and
CentralAuth change I27ccabdb.

Bug: T111296
Change-Id: Ic1ffea74f3ccc8f93c8a23b795ecab6f06abca72
2016-01-12 21:57:01 +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
Yuri Astrakhan
393378d2cb Fixed incorrect size for api result
Added a unit test to highlight the problem

Change-Id: I5d4bcb755bd3686a92e7b111946a49892699729f
2015-12-12 15:59:32 +00:00
jenkins-bot
1e8f67cbb3 Merge "Fix some language depending phpunit tests by using MediaWikiLangTestCase" 2015-12-08 19:22:45 +00:00
jenkins-bot
9499586028 Merge "tests: Remove unused $wgMemc resets" 2015-12-07 19:24:17 +00:00
umherirrender
e386a46eb3 Fix some language depending phpunit tests by using MediaWikiLangTestCase
Some tests fails on wikis with $wgLanguageCode not = 'en', fix this by
setting the correct language context.

Change-Id: Ia72017df59d8beb5c508832584b2431ffab0f77f
2015-12-07 17:26:16 +01:00
Timo Tijhof
3b35719e74 tests: Remove unused $wgMemc resets
If we really need this we can do it in MediaWikiTestCase, next
to the setting of wgMainCacheType. But from what I can see the
code being tested here already doesn't use the old $wgMemc.

Change-Id: I9e4b2109b2f3c18d8d5551bbadae5711c1d4c0a6
2015-12-06 18:06:08 +00:00
Timo Tijhof
fbab4fecef tests: Clean up use of mt_rand()
* ApiQueryTest: One random is enough.

* FileBackendTest: More consistent and idiomatic via wfRandomString()

* MigrateFileRepoLayoutTest: Use getNewTempDirectory(). Similar to
  what FileBackendTest used already.
* UploadFromUrlTestSuite: Use getNewTempDirectory().

Change-Id: I772de2134be41506d8ed08367be8c18f354bfc72
2015-12-03 13:45:55 +00:00
Brad Jorsch
42e257a1a2 API: Remove dbg, txt, and yaml formats
Per RFC: https://www.mediawiki.org/wiki/Requests_for_comment/Ditch_crappy_API_formats

Bug: T95715
Change-Id: I8e4e9ad3c96504cf4587cb4632504eff21b5ff75
2015-11-18 09:19:51 -05:00
umherirrender
493f4222cb phpcs: Assignment expression not allowed
Fix some "Assignment expression not allowed"

Found by tests:
https://integration.wikimedia.org/ci/job/mediawiki-core-phpcs/2736/consoleFull

Change-Id: I9bc2eff20a317a74671acd49749bb336a0fd9f67
2015-11-16 20:56:32 +00:00
Brad Jorsch
3d0b4fea3d User: Mostly remove password handling
AuthManager is coming, which will make it easier to add alternative
methods of authentication. But in order to do that, we need to finally
get around to ripping the password-related bits out of the User class.

The password expiration handling isn't used anywhere in core or
extensions in Gerrit beyond testing for expired passwords on login and
resetting the expiry date on password change. Those bits have been
inlined and the functions removed; AuthManager will allow each
"authentication provider" to handle its own password expiration.

The methods for fetching passwords, including the fact that mPassword
and other fields are public, has also been removed. This is already
broken in combination with basically any extension that messes with
authentication, and the major use outside of that was in creating
system users like MassMessage's "MediaWiki message delivery" user.

Password setting methods are silently deprecated, since most of the
replacements won't be available until AuthManager. But uses in unit
testing can be replaced with TestUser::setPasswordForUser() immediately.

User::randomPassword() and User::getPasswordFactory() don't really
belong in User either. For the former a new PasswordFactory method has
been created, while the latter should just be replaced by the two lines
to create a PasswordFactory via its constructor.

Bug: T47716
Change-Id: I2c736ad72d946fa9b859e6cd335fa58aececc0d5
2015-10-13 16:10:41 -06:00
Erik Bernhardson
1ded833de1 Implement ApiPageSet::setRedirectMergePolicy()
This allows generator implementations to define how generator data
about a redirect gets merged into the redirect destination.  This
does not change any defaults, only modules that explicitly set a
merge policy will have a change in their results.

This functionality is initially used for the search api modules to
retain search positions within the final result set.

Bug: T92796
Change-Id: If2f49e0fc3176288c95e870240754ee320a6bf91
2015-10-08 11:36:02 -07:00
Amir E. Aharoni
c50cbe48ab Fix remaining Generic.Files.LineLength failures
Except the ones for which there is no clear way to fix
because of T114213.

Bug: T102614
Change-Id: I94a1fc7c890c82a36f0b51e42d311585c275775c
2015-10-03 17:23:07 +00:00
Amir E. Aharoni
94068c3e81 Fix Generic.Files.LineLength phpcs check under phpunit/includes/api
Bug: T102614
Change-Id: Ic0b3d9b58fee8dc20a976ae65dcb7072a3afc3b1
2015-10-03 17:18:05 +00:00
Brad Jorsch
847f92ca23 API: Remove warning about continuation change
Change-Id: I2a69e8ae7dc7df915ceaaeed740b74d55f9207ce
2015-09-30 19:48:52 +00:00
Vivek Ghaisas
c54766586a Fix issues identified by SpaceBeforeSingleLineComment sniff
Change-Id: I048ccb1fa260e4b7152ca5f09b053defdd72d8f9
2015-09-26 23:06:52 +00:00
C. Scott Ananian
fad704814e Typo fix to phab reference in comment
This got inadvertently corrupted in the bugzilla->phab cleanup done
in 271da88127.

Change-Id: Ic70a9bd167e76800466a00521f5564d9d13c7c2b
2015-09-24 17:06:40 +00:00
umherirrender
271da88127 Some bugzilla.wikimedia.org -> phabricator.wikimedia.org changes
Changed some old bugzilla links to new phabricator links in comments,
test data and error message. This reduces the need for redirects from
old bugzilla to new phabricator from our source code.

Change-Id: Id98278e26ce31656295a23f3cadb536859c4caa5
2015-09-24 17:17:25 +02:00
Brad Jorsch
f9c1bfa594 API: Finish killing "raw mode"
It was kept around in the ApiResult rewrite because Wikibase was
(mis)using it as an "XML mode" flag.

Bug: T96596
Change-Id: Ic8259649c8cb0cce0444c907607c36d96fb2eb7e
2015-09-17 13:51:45 +00:00
Brad Jorsch
eb6bea8b54 API: Add support for selected HTTP precondition headers
Specifically, GET requests can now return ETag and Last-Modified
headers, and If-None-Match and If-Modified-Since headers on such GET
requests will be honored. This doesn't change any API modules to
actually return these values, it just provides the infrastructure.

For reasoning on why only GET requests and why only these two of the
five precondition headers defined by RFC 7232, see the doc comment on
ApiMain::checkConditionalRequestHeaders().

Change-Id: Ia18874c9360fcffdad323b341ca867ba773788fd
2015-09-10 10:19:25 -04:00
Brad Jorsch
46322fff07 ApiResult: Fix size checking
Two bugs here:
* Setting NO_SIZE_CHECK also bypassed validation
* ApiResult::valueSize() didn't handle ApiSerializable, which is fixed
  by defining that the value needs to be passed through
  ApiResult::validateValue() first.

Bug: T111796
Change-Id: I7c00d8ee53364a26f8f63f82a4d83b92baf5383e
2015-09-08 11:40:23 -04:00
Brad Jorsch
0ec057e73c API: Add ApiResult::META_KVP_MERGE
This allows for merging the KVP key into the value for the alternative
output format. Specifically,

 { "key": { "foo": "bar" } }

can now be turned into

 [{ "name": "key", "foo": "bar" }]

instead of

 [{ "name": "key", "value": { "foo": "bar" } }]

Change-Id: Ie1f9235893dbbcd2948c46e0356360b5635a3ddd
2015-08-28 11:10:20 -04:00
addshore
0273f2d498 Remove use of deprecated TestUser->user
Change-Id: Iec47ea2609b4d407e827cec5bf2a834b75727005
2015-08-07 17:10:26 +01:00
Brad Jorsch
7782819d64 Improve serialization of Message, Title
This allows them to be stored in the session, for example.

Note that properly serializing a Message requires that all its
parameters be serializable as well; we don't attempt to account for that
here.

Change-Id: I3a42a2a883e8eef900eeb02355fc3b064411f642
2015-07-07 15:56:47 -04:00
Max Semenik
b1876e3dd7 API: Remove WDDX and dump formats
Per RFC: https://www.mediawiki.org/wiki/Requests_for_comment/Ditch_crappy_API_formats

Change-Id: I4c9e64875be509906021255d70b90688f2e5ddf3
2015-07-01 11:43:39 -04:00
Erik Bernhardson
6aeca3e923 Better error message via api when content model does not allow editing
Change-Id: I699b4f5fd2eac8dfc4c54922474f939262bc803d
2015-07-01 06:13:37 +00:00
Brad Jorsch
9c7385b8ad API: Change default continuation format for action=query
The new format is much easier to use correctly, and should therefore be
the default. The old format is maintained for clients that need the
additional flexibility.

Bug: T96858
Change-Id: I984e63581f4ef23ccada916b6d45131d1fb5e001
2015-06-19 15:13:21 -04:00