diff options
Diffstat (limited to 'www/wiki/extensions/OATHAuth/includes/special/SpecialOATHDisable.php')
-rw-r--r-- | www/wiki/extensions/OATHAuth/includes/special/SpecialOATHDisable.php | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/www/wiki/extensions/OATHAuth/includes/special/SpecialOATHDisable.php b/www/wiki/extensions/OATHAuth/includes/special/SpecialOATHDisable.php new file mode 100644 index 00000000..7e5758b9 --- /dev/null +++ b/www/wiki/extensions/OATHAuth/includes/special/SpecialOATHDisable.php @@ -0,0 +1,136 @@ +<?php +/** + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + */ + +/** + * Special page to display key information to the user + * + * @ingroup Extensions + */ +class SpecialOATHDisable extends FormSpecialPage { + /** @var OATHUserRepository */ + private $OATHRepository; + + /** @var OATHUser */ + private $OATHUser; + + /** + * Initialize the OATH user based on the current local User object in the context + * + * @param OATHUserRepository $repository + * @param OATHUser $user + */ + public function __construct( OATHUserRepository $repository, OATHUser $user ) { + parent::__construct( 'OATH', '', false ); + $this->OATHRepository = $repository; + $this->OATHUser = $user; + } + + public function doesWrites() { + return true; + } + + /** + * Set the page title and add JavaScript RL modules + * + * @param HTMLForm $form + */ + public function alterForm( HTMLForm $form ) { + $form->setMessagePrefix( 'oathauth' ); + $form->setWrapperLegend( false ); + $form->getOutput()->setPageTitle( $this->msg( 'oathauth-disable' ) ); + } + + /** + * @return string + */ + protected function getDisplayFormat() { + return 'ooui'; + } + + /** + * @return bool + */ + public function requiresUnblock() { + return false; + } + + /** + * Require users to be logged in + * + * @param User $user + * + * @return bool|void + */ + protected function checkExecutePermissions( User $user ) { + parent::checkExecutePermissions( $user ); + + $this->requireLogin(); + } + + /** + * @return array[] + */ + protected function getFormFields() { + return [ + 'token' => [ + 'type' => 'text', + 'label-message' => 'oathauth-entertoken', + 'name' => 'token', + 'required' => true, + 'autofocus' => true, + ], + 'returnto' => [ + 'type' => 'hidden', + 'default' => $this->getRequest()->getVal( 'returnto' ), + 'name' => 'returnto', + ], + 'returntoquery' => [ + 'type' => 'hidden', + 'default' => $this->getRequest()->getVal( 'returntoquery' ), + 'name' => 'returntoquery', + ] + ]; + } + + /** + * @param array $formData + * + * @return array|bool + */ + public function onSubmit( array $formData ) { + // Don't increase pingLimiter, just check for limit exceeded. + if ( $this->OATHUser->getUser()->pingLimiter( 'badoath', 0 ) ) { + // Arbitrary duration given here + return [ 'oathauth-throttled', Message::durationParam( 60 ) ]; + } + + if ( !$this->OATHUser->getKey()->verifyToken( $formData['token'], $this->OATHUser ) ) { + return [ 'oathauth-failedtovalidateoath' ]; + } + + $this->OATHUser->setKey( null ); + $this->OATHRepository->remove( $this->OATHUser ); + + return true; + } + + public function onSuccess() { + $this->getOutput()->addWikiMsg( 'oathauth-disabledoath' ); + $this->getOutput()->returnToMain(); + } +} |