Commit graph

313 commits

Author SHA1 Message Date
Brad Jorsch
ee6afa8b4e (bug 41494) Honor $wgLogExceptionBacktrace in APIMain
When the API catches a non-API exception, it logs the message but does
not record the backtrace. It should honor $wgLogExceptionBacktrace
(added in 1.20) to decide whether to log the backtrace or just the
message.

Change-Id: I33fcbebd0e41dc2fda0cd00f8779e013300c0494
2012-10-29 16:52:44 -04:00
umherirrender
82375631c2 Fix tabs inside/between statements/text
This tabs are strange and a space there is better

Change-Id: I0885dff575ee2fcd0668d08fef3226e132c5b319
2012-10-26 18:18:59 +02:00
umherirrender
85d8ee1f87 Remove a bunch of trailing spaces and unneeded newlines
Change-Id: I00f369641320acd7f087427ef031f3ee7efa0997
2012-10-10 20:14:40 +02:00
daniel
c546fae8ed merge latest master into Wikidata branch
Change-Id: Id4e0f40c03679c13d8934a6add99b5cd86d0437d
2012-10-08 13:58:54 +02:00
umherirrender
f53780d1a4 Add warning for unused params inside api
Now MediaWiki knows all used params, it can be helpful to get a list of
unused params. This can be spelling issues or the missing 'g' for
generator modules. When the client knows about this, he can correct
them.

Change-Id: I221b7cd02bed4a38aba161dc3f85eb8fd2aad52c
2012-10-03 00:06:13 +00:00
Tim Starling
343cbf7463 Add an API log
During incident response, it was not possible to tell what API modules
were being requested and by whom, since the action parameter is often
posted. This change logs the API parameters whether they are posted or
sent in the query string.

I did try to get the API parameters from the module, but that turns out
to be difficult. Modules create submodules (generators, page sets) as
local variables, which are created in a procedural style and destroyed
before logging is done, so there is no easy way to query them for
parameter lists after execution completes.

In ApiOptionsTest, use a real ApiMain object like all the other API test
cases, rather than a mock object. Otherwise the test fails.

Change-Id: Idc786007fe61811d1874f29b5ce4762dd97b1847
2012-09-24 21:22:09 +00:00
daniel
12166f46b4 merged master (2012-09-11)
Change-Id: I8e953eaa22f9d331b0af5e780fbeff6d702b23e3
2012-09-11 11:43:02 +02:00
Daniel Kinzler
a1a296ac84 Merge "New hook ApiCheckCanExecute." 2012-09-05 19:06:48 +00:00
Tyler Romeo
780b6878f7 New hook ApiCheckCanExecute.
Added new hook in ApiMain::checkCanExecute
so that extensions can authenticate and
authorize API clients before the module is
execute. (Necessary for extensions like
OAuth that externally authnz clients.)

Change-Id: I1b059fd9a4aa717928af8b09f5edebe899ab3ce1
Signed-off-by: Tyler Romeo <tylerromeo@gmail.com>
2012-09-05 14:33:14 -04:00
daniel
b6fe213226 merge latest master.
some tests fail due to logical changes, will fix that in a follow-up

Change-Id: I8a5e4087ecf674fbcf6327c5d168cd401be12400
2012-09-05 17:50:13 +02:00
Max Semenik
a1cedee3c4 New hook ApiMain::onException
Allows custom logging of API errors

Change-Id: If8841c33998dff96448a7eb8dbe95d68119e068f
2012-08-29 20:42:48 +04:00
daniel
29719f846b merging latest master
Change-Id: I36b7f2f63ab8c08f8412d521dc68ea45c8b67711
2012-08-20 16:55:28 +02:00
Siebrand Mazeland
9ff9aaae63 Fix typo: occured -> occurred.
Change-Id: I5e66fdd52791487f81796ae1965ac31c94b36182
2012-08-10 10:59:55 +02:00
Reedy
3d0215c357 Merge "Use WebRequest instead of $_SERVER in ApiMain." 2012-08-03 20:59:04 +00:00
Brad Jorsch
fdad41156c Allow manipulation of wl_notificationtimestamp via the API
It should be possible to query the notificationtimestamp as a page info
property, rather than only by querying the recent changes for the
watchlist. It should also be possible to clear or adjust the
notificationtimestamp via the API.

This patch does just that.

Change-Id: I8e2c0769e93802a6a09936899a41c07f9c4c9f25
2012-08-02 13:01:10 -07:00
daniel
d87135d706 merged master
Change-Id: Iad12ee382d6aeb1fab6fefb611d290b74865ea4b
2012-07-23 22:07:18 +02:00
Alexandre Emsenhuber
7429d512b7 Use WebRequest instead of $_SERVER in ApiMain.
Change-Id: I964534089e85ec1e9ccf567efa66b05a1a3a7462
2012-07-23 15:01:24 +02:00
Aaron Schulz
e6faa2fd76 Merge "escape HTML elements in docblock with double quotes" 2012-07-18 19:17:46 +00:00
Antoine Musso
4f5d2386f3 escape HTML elements in docblock with double quotes
Doxygen choke on text enclosed by '<' and '>' since it tries to
interpret them as HTML or XML elements. This patch adds double quotes
in includes/api/*.php files around the two following strings:

 <Firstname>.<Lastname>@gmail.com
 <Firstname><Lastname>@gmail.com

Which becomes:

 "<Firstname>.<Lastname>@gmail.com"
 "<Firstname><Lastname>@gmail.com"

Tested locally, it prevents doxygen 1.8.0 related warnings.

Change-Id: I36d82eb3fd4989ee3ffc65b0b527b83711d1ba69
2012-07-15 22:15:45 +02:00
Reedy
002d871048 Api method documentation tweaks
Change-Id: I43398b6016f64accf86921c72a6dac5e71e11c34
2012-07-12 16:53:00 +01:00
Reedy
c154160ee0 Merge "Reimplement CORS properly, addressing Tim's concerns" 2012-07-05 20:31:39 +00:00
Catrope
29625efc2b Reimplement CORS properly, addressing Tim's concerns
Tim's concerns (listed at
https://bugzilla.wikimedia.org/show_bug.cgi?id=20814#c6) were:
* Lack of Vary: Origin breaks Squid caching
* Vary: Origin on everything would be disastrous, so add an origin param
* Origin header is space-separated list, wasn't treated as such

This commit:
* Remove CORS code from api.php and reimplement it in ApiMain.php
* Add 'origin' parameter to ApiMain
* If 'origin' parameter doesn't match Origin header, send a 403
* If origin is whitelisted, set CORS headers and set Vary: Origin
* Add https?:// to wildcard matching logic, wasn't there but is needed

CORS now works :) you can test it locally as follows:
Set $wgCrossSiteAJAXdomains[] = '*.wikipedia.org';
Log into MediaWiki on localhost
Go to Wikipedia, open a JS console, and run:
$.ajax( {
	'url': 'http://localhost/w/api.php',
	'data': {
		'action': 'query',
		'meta': 'userinfo',
		'format': 'json',
		'origin': 'https://en.wikipedia.org'
		// or whichever domain you're on; must be correct!
	},
	'xhrFields': {
		'withCredentials': true
	},
	'success': function( data ) {
		alert( 'Foreign user ' + data.query.userinfo.name +
			' (ID ' + data.query.userinfo.id + ')' );
	}
} );

Change-Id: I725ce176866d7c81dd9ad6d7bc4a86b7160f2458
2012-07-05 21:31:11 +01:00
Catrope
7da3bb81f7 In ApiMain, gather Vary headers in OutputPage
Using OutputPage for this rather than something like WebResponse
probably isn't optimal, but it's a lot nicer than the mess we had
before.

Change-Id: I9dce06d3eb69dd7952eafc6c94ead2ad5ad88792
2012-07-05 21:29:31 +01:00
daniel
b0fd13578e merged master
Change-Id: I0028e0ae01c7d025e60691cb4ad9d04869b9778c
2012-06-25 13:39:29 +02:00
daniel
7d3d38748a Fix session handling in API test cases.
* Use the API module's own context to check edit tokens.
* Use the global session if none is provided to doApiRequest.
* Fix ApiFlockTest to not pass an empty session, so the tokens from
  the global request can be used.

Change-Id: I2bff2390f43beb984b1b451bcf4e41271b2f054f
2012-06-21 22:29:19 +02:00
daniel
250da851d1 merged master 2012-05-29 17:01:13 +02:00
daniel
01f36b721f merged latest master 2012-05-14 23:24:18 +02:00
umherirrender
0a5e1bf76a Add DebugInfos to api result
This allow to get the queries of the api due the same api request,
when setting $wgDebugToolbar = true, that acts like the inline script
added to index.php

Change-Id: I7c121822827137ba098d95a54ec90f824e0ddf01
2012-05-13 11:20:04 +02:00
Tim Starling
f8e0327656 Fix for r113993: don't log UsageException instances
Change-Id: I205252534fcf7a0ee486938123c1e15cd036f4f1
2012-05-08 11:05:09 +10:00
daniel
a990fd78ff merged from master 2012-04-25 19:49:09 +02:00
Szymon Świerkosz
a6cd69d83a (bug 18195) Allow changing preferences via API
I have created an API module for changing the preferences.
It allows resetting preferences (reset argument) and bulk changes
of preferences (change argument) in a format:
name1=value1|name2=value2

The change argument has a limitation imposed by the current API
implementation as it cannot accept | in values. There is
available a pair of arguments optionname and optionvalue, the
latter accepts values with |.

I have created optionstoken parameter in meta=userinfo to provide
a token. There is already preferencestoken there, but I would
like to have a consistent naming.

Change-Id: I0d6c654a7354ba77e65e338423952a6a78c1150f
2012-04-20 16:56:27 +10:00
Nikola Smolenski
b69da9ad53 New API format 'none', used to minimize the response size when the output is not needed.
Change-Id: I0308d16ea04735bc27ac4a3526baec44ccd426f1
2012-04-16 17:45:51 +02:00
Szymon Świerkosz
d66a00d8f3 Fix gettoken loophole from https://gerrit.wikimedia.org/r/#change,4220
Reported and patch by Szymon Świerkosz/Beau

Change-Id: I3b5a001ad60e7e637b351331794cb275a7cf021a
2012-04-15 18:40:20 +01:00
Brion VIBBER
179704bb20 Merge "(bug 27757) API method for retrieving tokens" 2012-04-05 18:34:50 +00:00
Reedy
d1e90b650d Bug 35671 - PHP Notice: Undefined index: gettoken in includes/api/ApiMain.php on line 598
Change-Id: I220dfcd964ceb4254b310140b916a7c63a3044ef
2012-04-03 19:07:33 +01:00
Reedy
df3e3943bd Bug 35646 - ApiBlockTest::testMakeNormalBlock() broken
Change-Id: I964cde249ce7193cb1ba8c3430645c36067876fb
2012-04-02 19:12:20 +01:00
Kaldari
9ec8e3525b (bug 27757) API method for retrieving tokens
Change-Id: I58bc5847b996d100712781052f20150f76786ed1
2012-04-02 18:06:03 +01:00
Reedy
13169c88c1 * (bug 34212) ApiBlock/ApiUnblock allow action to take place without a token parameter present
* (bug 35317) CSRF in Special:Upload
Revert r56793, which removed the CSRF check for Special:Upload for normal file
uploads. Cross-site posting of file uploads without user interaction has been
possible since at least as early as Chrome 8 (late 2010) and Firefox 6 (mid
2011).

Commonist has used api.php since version 0.4.0 (April 2010), and the API
already requires an edit token, so Commonist 0.4.0+ is not affected by this
change.

* (bug 34907) Fix for CSRF vulnerability due to mw.user.tokens. Patch by Roan
Kattouw and Tim Starling.
* Filter out private modules early in ResourceLoader::makeResponse() and just
pretend they weren't specified. This means these modules cannot be loaded
through load.php . This filtering must not happen in makeModuleResponse(),
because that would break inlining.
* Force inlining of private modules in OutputPage::makeResourceLoaderLink(),
disregarding $wgResourceLoaderInlinePrivateModules
* Remove $wgResourceLoaderInlinePrivateModules
* Remove special treatment of private modules ($private) in
ResourceLoader::makeResponse() and sendResponseHeaders(), because we're not
allowing private modules to be loaded through here any more
* Remove identity checks in ResourceLoaderUserOptionsModule and
ResourceLoaderUserCSSPrefsModule, they didn't make a lot of sense before but
they're certainly useless now.
* Factored out error comment construction in ResourceLoader.php and stripped
comment terminations from exception messages. I didn't find an XSS
vulnerability but it looked scary.

Patchset2:
 Removes whitespace error that prevented automatic merge by Gerrit:
 includes/resourceloader/ResourceLoaderUserOptionsModule.php

Change-Id: I2dec8b8caf9db3c64919763865cc10cccdd6a1a3
2012-03-26 11:46:46 +02:00
Sam Reed
9a4b6317f3 Make UsageException extend MWException 2012-03-16 02:02:41 +00:00
Sam Reed
cfef03d281 Bug 34032 - API help header not aligned
$ocd++;
2012-01-30 10:15:20 +00:00
Antoine Musso
44b06f908e reverts Concurrency works
trunk is frozen pending stabilisation so we can release MediaWiki 1.19.
Those changes introduces API changes and new SQL tables, so that sounds like
new feature we do not have time to review right now.

Please reapply changes in branches/concurrency and have code review handled
there. Once the branch has been reviewed, please hold. Once trunk is stable
enough and 1.19 got branched, you are welcome to merge the branch in trunk.

Note: we can have a Jenkins jobs setup to run the branch tests if you need.

Reverts:
r108595 r108591 r108585 r108584 108572 r108564 108560 r108559
2012-01-11 09:05:56 +00:00
Ian Baker
b3c84ce261 MERGE branches/concurrency 108301:108557 into trunk 2012-01-10 23:03:03 +00:00
Sam Reed
219b06f28f * (bug 33483) One space to much in header of auto-generated documentation 2012-01-03 15:49:10 +00:00
Jeroen De Dauw
49cdca93be add missing deprecation notices and added deprecation version to existing ones 2011-12-13 05:19:05 +00:00
Sam Reed
53000baecf Oh noes, moar http:// -> https:// 2011-11-28 15:43:11 +00:00
Sam Reed
af5d190302 Https for all!
(omg, this hadn't been reported)
2011-11-28 15:17:46 +00:00
John Du Hart
2e7d867478 Removed the 'eclipse helper' bit on top of every API module
It's a parctice that dates back to 2006 when the API was first written, and frankly isn't covered by the coding conventions. Same thing with the docblocks, they're all copypasted with some bits changed and don't even make sense if you look at them in the genereated code docs.
I don't feel that any of us depend on this anymore (get a better IDE), so in the inerest of consistancy it's time we said goodbye to it.
2011-11-16 00:17:26 +00:00
Roan Kattouw
2ff455acb7 Remove commented-out variable ApiMain::$mRequest 2011-11-14 19:44:13 +00:00
Alexandre Emsenhuber
dff6f25d5d Use the local context instead of $wgOut, now that we have one 2011-11-08 16:06:59 +00:00
John Du Hart
148180719d Followup r100927 and r100905, when setting a FauxRequest use the NEW context 2011-10-29 16:14:11 +00:00