PageRenderTime 26ms CodeModel.GetById 13ms RepoModel.GetById 1ms app.codeStats 0ms

/extensions/AjaxLogin/ApiAjaxLogin.php

https://github.com/ChuguluGames/mediawiki-svn
PHP | 171 lines | 151 code | 11 blank | 9 comment | 10 complexity | 22d22f013b2991b8865d3cbb462be5da MD5 | raw file
  1. <?php
  2. /**
  3. * API module for AjaxLogin extension
  4. *
  5. * @file
  6. * @ingroup API
  7. * @author Inez KorczyƄski <korczynski@gmail.com>
  8. */
  9. if ( !defined( 'MEDIAWIKI' ) ) {
  10. die( "This is not a valid entry point.\n" );
  11. }
  12. class ApiAjaxLogin extends ApiBase {
  13. public function __construct( $main, $action ) {
  14. parent::__construct( $main, $action, 'wp' );
  15. }
  16. public function execute() {
  17. wfSetupSession();
  18. $Name = $Password = $Remember = $Loginattempt = $Mailmypassword = $Token = null;
  19. extract( $this->extractRequestParams() );
  20. if ( !empty( $Loginattempt ) ) {
  21. // Login attempt
  22. $params = new FauxRequest(
  23. array(
  24. 'wpName' => $Name,
  25. 'wpPassword' => $Password,
  26. 'wpRemember' => $Remember,
  27. 'wpLoginattempt' => $Loginattempt,
  28. 'wpLoginToken' => $Token,
  29. )
  30. );
  31. $result = array();
  32. $loginForm = new LoginForm( $params );
  33. switch( $loginForm->authenticateUserData() ) {
  34. case LoginForm::RESET_PASS:
  35. $result['result'] = 'Reset';
  36. break;
  37. case LoginForm::SUCCESS:
  38. global $wgUser, $wgCookiePrefix;
  39. $wgUser->setOption( 'rememberpassword', $Remember ? 1 : 0 );
  40. $wgUser->setCookies();
  41. $result['result'] = 'Success';
  42. $result['lguserid'] = intval( $wgUser->getId() );
  43. $result['lgusername'] = $wgUser->getName();
  44. $result['lgtoken'] = $wgUser->getToken();
  45. $result['cookieprefix'] = $wgCookiePrefix;
  46. $result['sessionid'] = session_id();
  47. break;
  48. case LoginForm::NEED_TOKEN:
  49. $result['result'] = 'NeedToken';
  50. $result['token'] = $loginForm->getLoginToken();
  51. $result['cookieprefix'] = $wgCookiePrefix;
  52. $result['sessionid'] = session_id();
  53. break;
  54. case LoginForm::WRONG_TOKEN:
  55. $result['result'] = 'WrongToken';
  56. break;
  57. case LoginForm::NO_NAME:
  58. $result['result'] = 'NoName';
  59. $result['text'] = wfMsg( 'noname' );
  60. break;
  61. case LoginForm::ILLEGAL:
  62. $result['result'] = 'Illegal';
  63. $result['text'] = wfMsg( 'noname' );
  64. break;
  65. case LoginForm::WRONG_PLUGIN_PASS:
  66. $result['result'] = 'WrongPluginPass';
  67. $result['text'] = wfMsg( 'wrongpassword' );
  68. break;
  69. case LoginForm::NOT_EXISTS:
  70. $result['result'] = 'NotExists';
  71. $result['text'] = wfMsg( 'al-nosuchuser', htmlspecialchars( $Name ) );
  72. break;
  73. case LoginForm::RESET_PASS:
  74. case LoginForm::WRONG_PASS:
  75. $result['result'] = 'WrongPass';
  76. $result['text'] = wfMsg( 'wrongpassword' );
  77. break;
  78. case LoginForm::EMPTY_PASS:
  79. $result['result'] = 'EmptyPass';
  80. $result['text'] = wfMsg( 'wrongpasswordempty' );
  81. break;
  82. case LoginForm::CREATE_BLOCKED:
  83. $result['result'] = 'CreateBlocked';
  84. $result['text'] = wfMsg( 'al-createblocked' );
  85. break;
  86. case LoginForm::THROTTLED:
  87. global $wgPasswordAttemptThrottle, $wgLang;
  88. $result['result'] = 'Throttled';
  89. $result['text'] = wfMsgExt( 'al-throttled', 'parsemag', $wgLang->formatNum( intval( $wgPasswordAttemptThrottle['seconds'] ) ) );
  90. break;
  91. case LoginForm::USER_BLOCKED:
  92. $result['result'] = 'Blocked';
  93. break;
  94. default:
  95. ApiBase::dieDebug( __METHOD__, 'Unhandled case value' );
  96. }
  97. $dbw = wfGetDB( DB_MASTER );
  98. $dbw->commit();
  99. $this->getResult()->addValue( null, 'ajaxlogin', $result );
  100. } elseif ( !empty( $Mailmypassword ) ) {
  101. // Remind password attempt
  102. $params = new FauxRequest(
  103. array(
  104. 'wpName' => $Name
  105. )
  106. );
  107. $result = array();
  108. $loginForm = new LoginForm( $params );
  109. global $wgUser, $wgAuth;
  110. if ( !$wgAuth->allowPasswordChange() ) {
  111. $result['result'] = 'resetpass_forbidden';
  112. $result['text'] = wfMsg( 'resetpass_forbidden' );
  113. } elseif ( $wgUser->isBlocked() ) {
  114. $result['result'] = 'blocked-mailpassword';
  115. $result['text'] = wfMsg( 'blocked-mailpassword' );
  116. } elseif ( '' == $loginForm->mName ) {
  117. $result['result'] = 'noname';
  118. $result['text'] = wfMsg( 'noname' );
  119. } else {
  120. $u = User::newFromName( $loginForm->mName );
  121. if ( is_null( $u ) ) {
  122. $result['result'] = 'noname';
  123. $result['text'] = wfMsg( 'noname' );
  124. } elseif ( 0 == $u->getID() ) {
  125. $result['result'] = 'nosuchuser';
  126. $result['text'] = wfMsg( 'al-nosuchuser', $u->getName() );
  127. } elseif ( $u->isPasswordReminderThrottled() ) {
  128. global $wgPasswordReminderResendTime;
  129. $result['result'] = 'throttled-mailpassword';
  130. $result['text'] = wfMsg( 'throttled-mailpassword', round( $wgPasswordReminderResendTime, 3 ) );
  131. } else {
  132. $res = $loginForm->mailPasswordInternal( $u, true );
  133. if ( WikiError::isError( $res ) ) {
  134. $result['result'] = 'mailerror';
  135. $result['text'] = wfMsg( 'mailerror', $res->getMessage() );
  136. } else {
  137. $result['result'] = 'OK';
  138. $result['text'] = wfMsg( 'passwordsent', $u->getName() );
  139. }
  140. }
  141. }
  142. $dbw = wfGetDB( DB_MASTER );
  143. $dbw->commit();
  144. $this->getResult()->addValue( null, 'ajaxlogin', $result );
  145. }
  146. }
  147. public function getAllowedParams() {
  148. return array(
  149. 'Name' => null,
  150. 'Password' => null,
  151. 'Remember' => null,
  152. 'Loginattempt' => null,
  153. 'Mailmypassword' => null,
  154. 'Token' => null
  155. );
  156. }
  157. public function getVersion() {
  158. return __CLASS__ . ': $Id$';
  159. }
  160. }