<?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
+ *
+ * @file
+ */
use Wikimedia\Http\HttpAcceptParser;
use Wikimedia\Http\HttpAcceptNegotiator;
/**
* Request handler implementing a data interface for mediawiki pages.
*
- * @license GPL-2.0+
* @author Daniel Kinzler
* @author Amir Sarabadanai
*/
-
class PageDataRequestHandler {
/**
* This does not check whether the request is valid and will actually produce a successful
* response.
*
- * @param string|null $title Page title
+ * @param string|null $subPage
* @param WebRequest $request
*
* @return bool
* @throws HttpError
*/
- public function canHandleRequest( $title, WebRequest $request ) {
- if ( $title === '' || $title === null ) {
+ public function canHandleRequest( $subPage, WebRequest $request ) {
+ if ( $subPage === '' || $subPage === null ) {
if ( $request->getText( 'target', '' ) === '' ) {
return false;
+ } else {
+ return true;
+ }
+ }
+
+ $parts = explode( '/', $subPage, 2 );
+ if ( $parts !== 2 ) {
+ $slot = $parts[0];
+ if ( $slot === 'main' || $slot === '' ) {
+ return true;
}
}
- return true;
+ return false;
}
/**
* Main method for handling requests.
*
- * @param string $title Page title
+ * @param string $subPage
* @param WebRequest $request The request parameters. Known parameters are:
* - title: the page title
* - format: the format
*
* @throws HttpError
*/
- public function handleRequest( $title, WebRequest $request, OutputPage $output ) {
+ public function handleRequest( $subPage, WebRequest $request, OutputPage $output ) {
// No matter what: The response is always public
$output->getRequest()->response()->header( 'Access-Control-Allow-Origin: *' );
+ if ( !$this->canHandleRequest( $subPage, $request ) ) {
+ throw new HttpError( 400, wfMessage( 'pagedata-bad-title', $subPage ) );
+ }
+
$revision = 0;
- $title = $request->getText( 'target', $title );
+ $parts = explode( '/', $subPage, 2 );
+ if ( $subPage !== '' ) {
+ $title = $parts[1];
+ } else {
+ $title = $request->getText( 'target', '' );
+ }
+
$revision = $request->getInt( 'oldid', $revision );
$revision = $request->getInt( 'revision', $revision );