From 8387be94f8e2ae3c689f5e865af74f28775a4d0e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Niklas=20Laxstr=C3=B6m?= Date: Sun, 12 May 2013 15:26:49 +0000 Subject: [PATCH] mediawiki.api: Implement login method Change-Id: I1113a076ff66e20ece1db9380969e7a7b5a68f1a --- resources/Resources.php | 6 +++ .../mediawiki.api/mediawiki.api.login.js | 54 +++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 resources/mediawiki.api/mediawiki.api.login.js diff --git a/resources/Resources.php b/resources/Resources.php index 90c6c95fba..078a38ecbe 100644 --- a/resources/Resources.php +++ b/resources/Resources.php @@ -585,6 +585,12 @@ return array( 'mediawiki.Title', ), ), + 'mediawiki.api.login' => array( + 'scripts' => 'resources/mediawiki.api/mediawiki.api.login.js', + 'dependencies' => array( + 'mediawiki.api', + ), + ), 'mediawiki.api.parse' => array( 'scripts' => 'resources/mediawiki.api/mediawiki.api.parse.js', 'dependencies' => 'mediawiki.api', diff --git a/resources/mediawiki.api/mediawiki.api.login.js b/resources/mediawiki.api/mediawiki.api.login.js new file mode 100644 index 0000000000..ccbae06c79 --- /dev/null +++ b/resources/mediawiki.api/mediawiki.api.login.js @@ -0,0 +1,54 @@ +/** + * Make the two-step login easier. + * @author Niklas Laxström + * @class mw.Api.plugin.login + * @since 1.22 + */ +( function ( mw, $ ) { + 'use strict'; + + $.extend( mw.Api.prototype, { + /** + * @param {string} username + * @param {string} password + * @return {jQuery.Promise} See mw.Api#post + */ + login: function ( username, password ) { + var params, request, + deferred = $.Deferred(), + api = this; + + params = { + action: 'login', + lgname: username, + lgpassword: password + }; + + request = api.post( params ); + request.fail( deferred.reject ); + request.done( function ( data ) { + params.lgtoken = data.login.token; + api.post( params ) + .fail( deferred.reject ) + .done( function ( data ) { + var code; + if ( data.login && data.login.result === 'Success' ) { + deferred.resolve( data ); + } else { + // Set proper error code whenever possible + code = data.error && data.error.code || 'unknown'; + deferred.reject( code, data ); + } + } ); + } ); + + return deferred.promise( { abort: request.abort } ); + } + } ); + + /** + * @class mw.Api + * @mixins mw.Api.plugin.login + */ + +}( mediaWiki, jQuery ) ); -- 2.20.1