ApiFeedContributions: Throw if the username is invalid
[lhc/web/wiklou.git] / includes / api / ApiFeedContributions.php
index 08be8e0..28b0a4b 100644 (file)
@@ -34,6 +34,9 @@ class ApiFeedContributions extends ApiBase {
        /** @var RevisionStore */
        private $revisionStore;
 
+       /** @var TitleParser */
+       private $titleParser;
+
        /**
         * This module uses a custom feed wrapper printer.
         *
@@ -45,6 +48,7 @@ class ApiFeedContributions extends ApiBase {
 
        public function execute() {
                $this->revisionStore = MediaWikiServices::getInstance()->getRevisionStore();
+               $this->titleParser = MediaWikiServices::getInstance()->getTitleParser();
 
                $params = $this->extractRequestParams();
 
@@ -67,9 +71,19 @@ class ApiFeedContributions extends ApiBase {
                        ' [' . $config->get( 'LanguageCode' ) . ']';
                $feedUrl = SpecialPage::getTitleFor( 'Contributions', $params['user'] )->getFullURL();
 
-               $target = $params['user'] == 'newbies'
-                       ? 'newbies'
-                       : Title::makeTitleSafe( NS_USER, $params['user'] )->getText();
+               $target = 'newbies';
+               if ( $params['user'] != 'newbies' ) {
+                       try {
+                               $target = $this->titleParser
+                                       ->parseTitle( $params['user'], NS_USER )
+                                       ->getText();
+                       } catch ( MalformedTitleException $e ) {
+                               $this->dieWithError(
+                                       [ 'apierror-baduser', 'user', wfEscapeWikiText( $params['user'] ) ],
+                                       'baduser_' . $this->encodeParamName( 'user' )
+                               );
+                       }
+               }
 
                $feed = new $feedClasses[$params['feedformat']] (
                        $feedTitle,