Commit graph

3444 commits

Author SHA1 Message Date
Timo Tijhof
2459925e4a MimeMagic: Set mime-type for .js to application/javascript
The previous "application/x-javascript" was non-standard. It was used as
unregistered mime type by various vendors after stakeholders agreed it
shouldn't be text/javascript anymore, but "application/javascript" was
still pending approval. That was settled in 2006 with RFC 4329.
http://www.iana.org/assignments/media-types/media-types.xhtml
https://tools.ietf.org/html/rfc4329

It also previously inconsistently returned "application/x-javascript" or
"text/javascript" depending on whether you call MimeMagic with or without
the flag that asks for "improved" mime magic (in the latter mode, it picks
the first one from the mime-info list as override).

This makes MimeMagic match the behaviour of HHVM-static server, NGINX,
and Apache 2.4; with regards to Content-Type for .js files.

Change-Id: Idfe0a80c60c548fe28283c62ee9803bff7bdb2d6
2016-01-26 01:52:36 +00:00
jenkins-bot
df0b1deaec Merge "Handle static access in TestingAccessWrapper" 2016-01-25 20:26:00 +00:00
Brad Jorsch
4eeff5b559 Use $wgSecureCookie to decide whether to actually mark secure cookies as 'secure'
The pre-SessionManager code did this, and the change in combination with
the API not honoring forceHTTPS led to T124252.

Bug: T124252
Change-Id: Ic6a79fbb30491040facd7c200b1f47d6b99ce637
2016-01-25 14:25:09 -05:00
jenkins-bot
ed5e9a27d9 Merge "Improve wording and tense in some "page language" strings" 2016-01-25 15:12:47 +00:00
Gergő Tisza
c4273e28e2 Handle static access in TestingAccessWrapper
Change-Id: Ia8ec6ee0a364807e78fc182c4ce99d782b921eda
2016-01-24 22:24:10 -06:00
Brad Jorsch
2c34aeea72 SessionManager: Abstract forceHTTPS cookie setting
This allows CentralAuthSessionProvider to avoid doing craziness like
this all the time:

  Set-Cookie: forceHTTPS=true; path=/; httponly
  Set-Cookie: forceHTTPS=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/; httponly
  Set-Cookie: forceHTTPS=true; path=/; domain=.wikipedia.org; httponly
  Set-Cookie: forceHTTPS=true; path=/; httponly
  Set-Cookie: forceHTTPS=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/; httponly
  Set-Cookie: forceHTTPS=true; path=/; domain=.wikipedia.org; httponly

Bug: T124421
Change-Id: I7e02afd032a246df6850208c26d3447798bc0fc2
2016-01-25 03:53:06 +00:00
Brad Jorsch
4d6d06253b Move avoidance of setting deleted cookies into WebResponse
There's no reason this should be only in CookieSessionProvider when
we're already handling deduplication in WebResponse.

Further, this fixes the bug in the existing CookieSessionProvider
implementation that a setCookie() followed by a clearCookie() wouldn't
actually clear the cookie.

This reverts commit 1ce684fcef.

Bug: T124252
Change-Id: I1098d054facacd59f03ebed7c747ec9ff6bf66e7
Depends-On: I61d14bf80fa7c857dec9cffb366dc3f84dbb4faf
2016-01-25 03:34:11 +00:00
Gergő Tisza
1ce684fcef Only delete cookies which are actually set
Some API clients seem to be confused by cookie deletion.
Prevent cookie deletion on the first leg of the API login sequence
(for a client with an empty cookie jar) by only emitting deletion
headers for cookies which are set in the current request.

Bug: T124252
Change-Id: I180e094ea32f951e22adab2ec87d16e5de7cef97
2016-01-22 16:27:32 -07:00
jenkins-bot
324b956d80 Merge "SessionManager: Kill getPersistedSessionId()" 2016-01-22 21:40:52 +00:00
Brad Jorsch
43f904b51a SessionManager: Kill getPersistedSessionId()
It's not guaranteed that loadSessionFromStore() will succeed after
whatever alterations the SessionProvider might have made later in the
request.

So instead, let's make a new global object that stores the SessionId
of the persistent session that was loaded during Setup.php, if any. Then
we can check that when we need to know whether the session was
persisted.

Bug: T124468
Change-Id: I1e8e616c83b16aadd86b0a0a40826d40f6e8abe4
2016-01-22 14:47:33 -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
Anomie
f7eed53ff8 Revert "Revert "API: Add a unit test to check all modules' i18n""
This reverts commit 7076a79e86.

Change-Id: I21a606a810cecf2cf13a893dd92c15e5e026e2dc
Depends-On: Ieb790c466847dc06c9a73334ad020ab2c54b2976
Depends-On: I727458c5bf54cebd4bf684fc3f3c5ea31c1ebeeb
2016-01-21 08:09:28 +00:00
Bartosz Dziewoński
f51d0d9a81 Preprocessor: Don't allow unclosed extension tags (matching until end of input)
I think it's saner to treat this as invalid syntax, and output the
mismatched tag code verbatim. The current behavior is particularly
annoying for <ref> tags, which often swallow everything afterwards.

This does not affect HTML tags, though. Assuming Tidy is enabled, they
are still auto-closed at the end of the page content.

Related to T17712 and T58306. I think this brings the PHP parser closer
to Parsoid's interpretation.

It reduces performance somewhat in the worst case, though. Testing with
https://phabricator.wikimedia.org/F3245989 (a 1 MB page starting with
3000 opening tags of 15 different types), parsing time rises from
~0.2 seconds to ~1.1 seconds on my setup. We go from O(N) to O(kN),
where N is bytes of input and k is the number of types of tags present
on the page. Maximum k shouldn't exceed 30 or so in reasonable setups
(depends on installed extensions, it's 20 on English Wikipedia).

To consider:
* Should we keep previous behavior for unclosed <includeonly> /
  <noinclude>? This would be particularly disruptive for these if
  someone relied on the old behavior, and they're already
  special-cased in places.
* Unclosed <pre> tags are now treated as HTML tags, and are still
  displayed as preformatted text, but without suppressing wikitext
  formatting.

Change-Id: Ia2f24dbfb3567c4b0778761585e6c0303d11ddd0
2016-01-21 04:22:34 +00:00
Brad Jorsch
4f5057b84b SessionManager: Change behavior of getSessionById()
It's easily possible for SessionManager::getSessionById() to not be
able to load the specified session and to not be able to create an empty
one by that ID, for example if the user's token changed. So change this
from an exceptional condition to an expected one, and adjust callers to
deal with it appropriately.

Let's also make the checks for invalid data structure when loading the
session from the store delete the bogus data entirely.

At the same time, let's change the silly "$noEmpty" parameter to
"$create" and make the default behavior be not to create an empty
session.

Bug: T124126
Change-Id: I085d2026d1b366b1af9fd0e8ca3d815fd8288030
2016-01-20 12:45:26 -05:00
This, that and the other
46287536cf Improve wording and tense in some "page language" strings
The titles of "action" special pages are normally expressed as actions
("Move page", "Reset password", "Upload file"), and the names of
log types are normally nouns ("Deletion log", "Content model change log").

In any case, "Change language log" and "$1 changed page language for $3"
are not good English.

Log entries also do not end in full stops.

Change-Id: I1d2fed64549ce584418bb3b72d33bf5657c2681f
2016-01-17 12:54:56 +11:00
jenkins-bot
7954e8b372 Merge "API: Work around PHP bug 45959" 2016-01-16 04:49:40 +00:00
Thiemo Mättig
793dbbb870 More complete, more straightforward JobQueueMemoryTest
I created a basic test yesterday to cover two bugs. Now the test covers
all public methods. I was also able to get rid of the test double.

Change-Id: I53110280e3ef7b7a72d175b11b7fc4ccf1d648b3
2016-01-15 10:28:30 +01:00
Cindy Cicalese
e48030a7ae Add page_props table access class
Bug:T115331
Change-Id: I022b9e3ca47dc63650b8a62260603b0893a80e69
2016-01-15 03:51:57 +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
Thiemo Mättig
1910da184e Do not return null reference in JobQueueMemory
See Ia5b7a96 and the unrelated error raised there.
https://integration.wikimedia.org/ci/job/mwext-testextension-zend/19682/consoleFull

By writing this simple test I not only found one but two issues.

Bug: T123539
Change-Id: I17ed5b69992aa98ab2384b7a6aafc96b0fcba1ce
2016-01-14 19:19:55 +01:00
Aaron Schulz
3592f8cea3 Add simple JobQueueMemory class for testing
Change-Id: I1acce43dbab3b12393d6dc4675850695c619d88a
2016-01-14 00:23:05 +00:00
Florian
0acebab76c Remove WikiPage::getRawText()
Bug: T122754
Depends-On: I29ec61c482057c5b3b1048c834aedac182174929
Depends-On: I74e57d8e76149b452a9635ad8a6eca91c3df96a9
Depends-On: Ia624ffeb2d9b1862f943f7c3103df417d90001c5
Depends-On: I4a5a0d34156f9aae09a3edbe736fd924bc74773f
Depends-On: I2355b7d4a1b831cd752cbaa88bf1878e0d5554fb
Depends-On: I02051f0c74b4db93093f171f1250c03b99f6cec6
Depends-On: Ie88d05a6534ac1d02fb79494603cea17108e6bb9
Change-Id: Ie3247a7143859bf10580e67cd5383d152540a25b
2016-01-13 20:45:23 +00:00
Aaron Schulz
95ebc3d956 Fix undeclared global $wgMainStash
Change-Id: I95d4194199a064221a56e0b10b236dd2564d1855
2016-01-12 21:56:26 -08: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
ef5bd7347b Move grant and IP restriction logic from OAuth to core
This also adds code to User to allow SessionProviders to apply the grant
restrictions without needing to hook UserGetRights.

Change-Id: Ida2b686157aab7c8240d6a7a5a5046374ef86d52
2016-01-12 22:37:33 +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
Timo Tijhof
f3df65e630 Remove redundant test teardown in UploadFromUrlTestSuite
Looks like this was copied from the Parser upload test suite
but never used.

Change-Id: I41dd384d0cf996fdf459bc544d1430fc46d41025
2016-01-11 17:59:05 -08:00
Derk-Jan Hartman
175e95a909 ParserTests: Add a video file to parser test suite
Introduce an ogv video file to the parser file testsuite, so that we
can use it later in TimedMediaHandler parsertests.

Change-Id: I6a3b307ad9c82e9df0aeec025934d736eec8375f
2016-01-07 13:24:43 -08:00
jenkins-bot
1470d68c4c Merge "GitInfo: Allow cache to be in the extension directory itself" 2016-01-07 03:13:09 +00:00
Kunal Mehta
a5ed38dc54 GitInfo: Allow cache to be in the extension directory itself
For ExtensionDistributor to provide git metadata, we need to be able to
store the cache file inside the extension directory itself. The GitInfo
class will now first check if the $wgGitInfoCacheDirectory is populated,
otherwise it will fallback to "$extensionDir/gitinfo.json".

Bug: T122769
Change-Id: Ib3457589ca6899925ae4610cfcdae22af8eaaaeb
2016-01-06 14:41:36 -08:00
jenkins-bot
b4082a9350 Merge "PHPUnit: Added test for unknown tags" 2016-01-05 14:23:10 +00:00
jenkins-bot
b2e57e2e99 Merge "Tests: Reflect recent changes to MediaWiki import structure" 2016-01-05 14:23:06 +00:00
georggi
c11667a4ca PHPUnit: Added test for unknown tags
Bug: T43938
Change-Id: Idcb1576db39cc1d925207a37b4f22b40d76fea8b
2016-01-05 16:12:02 +02:00
georggi
bf9f4141b7 Tests: Reflect recent changes to MediaWiki import structure
Bug: T43938
Change-Id: Id8d40d8fa0de59ac07749b3cefdd627b98fe175e
2016-01-05 14:08:31 +02:00
Marius Hoch
4c574daa45 Factor page name normalization out of MediaWikiSite
Into a new MediaWikiPageNameNormalizer.

The code has been copied over almost 1:1, I only
left the phpunit test special handling in MediaWiki site.

Change-Id: I008cadd29a2aa1f21098339b895c35a100959b04
2016-01-04 17:32:22 -08:00
Reedy
48db568102 WikiPage::testPreSaveTransform() was removed
Change-Id: Ibce32556b8213a36876dcb4c6f385afa6e6875aa
2016-01-02 20:56:43 +00:00
jenkins-bot
3eacca5ab8 Merge "Add more cases to MediaWikiTestCaseTest" 2016-01-02 09:44:06 +00:00
jenkins-bot
ba3cac4023 Merge "registration: Prevent loading the same thing twice" 2015-12-31 18:15:54 +00:00
This, that and the other
4abb459392 Refactor dumpBackup.php and dumpTextPass.php to be Maintenance subclasses
Use the Maintenance class's new $orderedOptions and support for
passing options multiple times. This allows for option "chaining".

The BackupDumper and TextPassDumper class now extend Maintenance, but
should continue to function as before. The public function processArgs()
has been removed and replaced by processOptions(), which takes no
parameters. It is unlikely that users of these classes were calling
processArgs.

Inheritors of these classes that overrode processOption() will now need to
override processOptions() and use Maintenance::getOption() and friends.

The maintenance/backupTextPass.inc file has been deleted. Users should
include maintenance/dumpTextPass.php instead.

Bug: T122587
Change-Id: I2473ee119c185d1b2b00ac4b1e70ee8a6cafe4a3
2015-12-31 20:46:54 +11:00
Andrew H
1ae06b4f3e Add loadWithArgv() to Maintenance class
Very useful for passing in arguments to test Maintenance scripts.
Also, add a comment clarifying when $orderedOptions is available.

Change-Id: Ib25b3b36816bdf566c427b67646554a31a9fef0f
2015-12-31 01:18:48 +00:00
Andrew H
0a0b02b56c Add support for specifying options multiple times in Maintenance scripts.
Bug: T122588
Change-Id: I847d45684ccd4054f4a159394266dc3e5506bbdb
2015-12-30 04:33:29 +00:00
Kunal Mehta
8e61ed3507 registration: Prevent loading the same thing twice
Normally the registry load queue should filter out duplicates, but if
people do weird things with symlinks, throw a useful error message if
the double-loading makes it all the way to the processor.

Bug: T121493
Change-Id: I47f5cd754e5f3c91e6b83a6d0ab542404347a421
2015-12-29 17:52:11 -08:00
jenkins-bot
c6e300e9f8 Merge "registration: Allow loading composer's autoloader if it exists" 2015-12-30 00:16:43 +00:00
victorbarbu
7489cdfc05 registration: Allow loading composer's autoloader if it exists
Extensions that have composer dependencies can set
 "load_composer_autoloader": true
to load "$dir/vendor/autoload.php" if it exists.

While it is recommended to use composer-merge-plugin to manage
composer dependencies for extensions, using a local autoloader
can be easier for development and is used by ExtensionDistributor.

Bug: T119766
Change-Id: Ib031bef17c8a7d708a5c7878e74967d19217bbc8
2015-12-29 23:20:17 +00:00
addshore
202438503c Add more cases to MediaWikiTestCaseTest
Bug: T122598
Change-Id: I19a661ab3b2b96980b9b87ca0813c616e27ab82c
2015-12-29 20:13:58 +00:00
mhutti1
437d48ab68 Added a simple smoke test for export
Added ExportTest.php to check that exported xml is valid.

Bug: T116883
Change-Id: I76151a6ab4f88ab1904627ad1d00ed487d0ab606
2015-12-27 22:22:06 +00:00
Florian
be60ba4cb4 Use wikimedia/at-ease insteaad of @
Change-Id: Icba412dd5db11b596ad1cf740b8408823297bc86
2015-12-27 21:51:16 +01:00
Reedy
cc7fca0c14 Support phpunit-old.phar
Bug: T122485
Change-Id: Ic21c6c1ca5afaac0e298cf0259f5dc273dfec128
2015-12-27 20:26:05 +00:00
umherirrender
54c1e18eec Remove various double empty newlines
The double empty newline is not needed between functions, variable or at
end of file

Change-Id: Ib866a95084c4601ac150a2b402cfa184ebc18afa
2015-12-27 18:55:12 +00:00
jenkins-bot
7028f7e31c Merge "Make getLagFromPtHeartbeat() always use the LB cluster master entry" 2015-12-23 23:27:30 +00:00