From 6c8a028a9812f84a740e27a18e915e331de8fd2d Mon Sep 17 00:00:00 2001 From: Nemo bis Date: Tue, 25 Nov 2014 07:20:12 +0000 Subject: [PATCH] Revert "mediawiki.api: Use action=query&meta=tokens instead of action=tokens" This reverts commit aacdb664a10d5eca2b55891e5a75ca8c0368a11b, which unintentionally broke backwards-compatibility, affecting at least four extensions of which two deployed in Wikimedia projects. Change-Id: I2e7e761281dae6a22fc520c9153734b55403b120 --- .../ResourceLoaderUserTokensModule.php | 1 - resources/src/mediawiki.api/mediawiki.api.js | 30 ++++++------------- .../mediawiki.api/mediawiki.api.test.js | 14 ++++----- 3 files changed, 16 insertions(+), 29 deletions(-) diff --git a/includes/resourceloader/ResourceLoaderUserTokensModule.php b/includes/resourceloader/ResourceLoaderUserTokensModule.php index 9eb6ee9eb9..ccd1dfd0b6 100644 --- a/includes/resourceloader/ResourceLoaderUserTokensModule.php +++ b/includes/resourceloader/ResourceLoaderUserTokensModule.php @@ -47,7 +47,6 @@ class ResourceLoaderUserTokensModule extends ResourceLoaderModule { 'editToken' => $user->getEditToken(), 'patrolToken' => $user->getEditToken( 'patrol' ), 'watchToken' => $user->getEditToken( 'watch' ), - 'csrfToken' => $user->getEditToken() ); } diff --git a/resources/src/mediawiki.api/mediawiki.api.js b/resources/src/mediawiki.api/mediawiki.api.js index 1a9c1b555a..3a19e021b0 100644 --- a/resources/src/mediawiki.api/mediawiki.api.js +++ b/resources/src/mediawiki.api/mediawiki.api.js @@ -1,11 +1,5 @@ ( function ( mw, $ ) { - function getTokenType( action ) { - // Token types from `action=tokens` that need to be mapped to the 'csrf' token type for backward-compatibility. - var csrfActions = [ 'block', 'delete', 'edit', 'email', 'import', 'move', 'options', 'protect', 'unblock' ]; - return $.inArray( action, csrfActions ) === -1 ? action : 'csrf'; - } - // We allow people to omit these default parameters from API requests // there is very customizable error handling here, on a per-call basis // wondering, would it be simpler to make it easy to clone the api object, @@ -277,32 +271,26 @@ * @return {string} return.done.token Received token. * @since 1.22 */ - getToken: function ( action, assert ) { + getToken: function ( type, assert ) { var apiPromise, - type = getTokenType( action ), promiseGroup = promises[ this.defaults.ajax.url ], - d = promiseGroup && promiseGroup[ action + 'Token' ]; + d = promiseGroup && promiseGroup[ type + 'Token' ]; if ( !d ) { - apiPromise = this.get( { - action: 'query', - meta: 'tokens', - type: type, - assert: assert - } ); + apiPromise = this.get( { action: 'tokens', type: type, assert: assert } ); d = apiPromise - .then( function ( res ) { + .then( function ( data ) { // If token type is not available for this user, // key '...token' is either missing or set to boolean false - if ( res.query && res.query.tokens && res.query.tokens[type + 'token'] ) { - return res.query.tokens[type + 'token']; + if ( data.tokens && data.tokens[type + 'token'] ) { + return data.tokens[type + 'token']; } - return $.Deferred().reject( 'token-missing', res ); + return $.Deferred().reject( 'token-missing', data ); }, function () { // Clear promise. Do not cache errors. - delete promiseGroup[ action + 'Token' ]; + delete promiseGroup[ type + 'Token' ]; // Pass on to allow the caller to handle the error return this; @@ -314,7 +302,7 @@ if ( !promiseGroup ) { promiseGroup = promises[ this.defaults.ajax.url ] = {}; } - promiseGroup[ action + 'Token' ] = d; + promiseGroup[ type + 'Token' ] = d; } return d; diff --git a/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js b/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js index 61c9772519..b89526fb84 100644 --- a/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js +++ b/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js @@ -136,12 +136,12 @@ assert.equal( test.server.requests.length, 3, 'Requests made' ); test.server.requests[2].respond( 200, { 'Content-Type': 'application/json' }, - '{ "query": { "tokens": { "testaction2token": "0123abc" } } }' + '{ "tokens": { "testaction2token": "0123abc" } }' ); } ); this.server.requests[0].respond( 200, { 'Content-Type': 'application/json' }, - '{ "query": { "tokens": { "testactiontoken": "0123abc" } } }' + '{ "tokens": { "testactiontoken": "0123abc" } }' ); this.server.requests[1].respond( 200, { 'Content-Type': 'application/json' }, @@ -162,7 +162,7 @@ } ); this.server.requests[0].respond( 200, { 'Content-Type': 'application/json' }, - '{ "query": { "tokens": { "testsimpletokentoken": "a-bad-token" } } }' + '{ "tokens": { "testsimpletokentoken": "a-bad-token" } }' ); this.server.requests[1].respond( 200, { 'Content-Type': 'application/json' }, @@ -245,7 +245,7 @@ } ); this.server.requests[0].respond( 200, { 'Content-Type': 'application/json' }, - '{ "query": { "tokens": { "testbadtokentoken": "a-bad-token" } } }' + '{ "tokens": { "testbadtokentoken": "a-bad-token" } }' ); this.server.requests[1].respond( 200, { 'Content-Type': 'application/json' }, @@ -253,7 +253,7 @@ ); this.server.requests[2].respond( 200, { 'Content-Type': 'application/json' }, - '{ "query": { "tokens": { "testbadtokentoken": "a-good-token" } } }' + '{ "tokens": { "testbadtokentoken": "a-good-token" } }' ); this.server.requests[3].respond( 200, { 'Content-Type': 'application/json' }, @@ -284,7 +284,7 @@ } ); this.server.requests[0].respond( 200, { 'Content-Type': 'application/json' }, - '{ "query": { "tokens": { "testbadtokencachetoken": "a-good-token-once" } } }' + '{ "tokens": { "testbadtokencachetoken": "a-good-token-once" } }' ); this.server.requests[1].respond( 200, { 'Content-Type': 'application/json' }, @@ -296,7 +296,7 @@ ); this.server.requests[3].respond( 200, { 'Content-Type': 'application/json' }, - '{ "query": { "tokens": { "testbadtokencachetoken": "a-good-new-token" } } }' + '{ "tokens": { "testbadtokencachetoken": "a-good-new-token" } }' ); this.server.requests[4].respond( 200, { 'Content-Type': 'application/json' }, -- 2.20.1