Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
use OC\AppFramework\Http\Output;
use OC\AppFramework\Middleware\MiddlewareDispatcher;
use OC\AppFramework\Middleware\Security\CORSMiddleware;
use OC\AppFramework\Middleware\OCSMiddleware;
use OC\AppFramework\Middleware\Security\SecurityMiddleware;
use OC\AppFramework\Middleware\SessionMiddleware;
use OC\AppFramework\Utility\SimpleContainer;
Expand Down Expand Up @@ -373,6 +374,12 @@ public function __construct($appName, $urlParams = array()){
return new TwoFactorMiddleware($twoFactorManager, $userSession, $session, $urlGenerator, $reflector, $request);
});

$this->registerService('OCSMiddleware', function (SimpleContainer $c) {
return new OCSMiddleware(
$c['Request']
);
});

$middleWares = &$this->middleWares;
$this->registerService('MiddlewareDispatcher', function($c) use (&$middleWares) {
$dispatcher = new MiddlewareDispatcher();
Expand All @@ -385,6 +392,7 @@ public function __construct($appName, $urlParams = array()){
}

$dispatcher->registerMiddleware($c['SessionMiddleware']);
$dispatcher->registerMiddleware($c['OCSMiddleware']);
return $dispatcher;
});

Expand Down
80 changes: 80 additions & 0 deletions lib/private/AppFramework/Middleware/OCSMiddleware.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
<?php
/**
*
* @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OC\AppFramework\Middleware;

use OC\AppFramework\Http;
use OCP\AppFramework\Http\OCSResponse;
use OCP\AppFramework\OCS\OCSException;
use OCP\AppFramework\OCSController;
use OCP\IRequest;
use OCP\AppFramework\Middleware;

class OCSMiddleware extends Middleware {

/** @var IRequest */
private $request;

/**
* @param IRequest $request
*/
public function __construct(IRequest $request) {
$this->request = $request;
}

/**
* @param \OCP\AppFramework\Controller $controller
* @param string $methodName
* @param \Exception $exception
* @throws \Exception
* @return OCSResponse
*/
public function afterException($controller, $methodName, \Exception $exception) {
if ($controller instanceof OCSController && $exception instanceof OCSException) {
$format = $this->getFormat($controller);

$code = $exception->getCode();
if ($code === 0) {
$code = Http::STATUS_INTERNAL_SERVER_ERROR;
}
return new OCSResponse($format, $code, $exception->getMessage());
}

throw $exception;
}

/**
* @param \OCP\AppFramework\Controller $controller
* @return string
*/
private function getFormat($controller) {
// get format from the url format or request format parameter
$format = $this->request->getParam('format');

// if none is given try the first Accept header
if($format === null) {
$headers = $this->request->getHeader('Accept');
$format = $controller->getResponderByHTTPHeader($headers);
}

return $format;
}
}
2 changes: 2 additions & 0 deletions lib/public/API.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
/**
* This class provides functions to manage apps in ownCloud
* @since 5.0.0
* @deprecated 9.1.0 Use the AppFramework
*/
class API {

Expand Down Expand Up @@ -66,6 +67,7 @@ class API {
* @param array $defaults
* @param array $requirements
* @since 5.0.0
* @deprecated 9.1.0 Use the AppFramework
*/
public static function register($method, $url, $action, $app, $authLevel = self::USER_AUTH,
$defaults = array(), $requirements = array()){
Expand Down
45 changes: 45 additions & 0 deletions lib/public/AppFramework/OCS/OCSBadRequestException.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<?php
/**
*
* @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCP\AppFramework\OCS;

use Exception;
use OCP\AppFramework\Http;

/**
* Class OCSBadRequestException
*
* @package OCP\AppFramework
* @since 9.1.0
*/
class OCSBadRequestException extends OCSException {
/**
* OCSBadRequestException constructor.
*
* @param string $message
* @param Exception|null $previous
* @since 9.1.0
*/
public function __construct($message = '', Exception $previous = null) {
parent::__construct($message, Http::STATUS_BAD_REQUEST, $previous);
}

}
32 changes: 32 additions & 0 deletions lib/public/AppFramework/OCS/OCSException.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php
/**
*
* @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCP\AppFramework\OCS;

use Exception;

/**
* Class OCSException
*
* @package OCP\AppFramework
* @since 9.1.0
*/
class OCSException extends Exception {}
44 changes: 44 additions & 0 deletions lib/public/AppFramework/OCS/OCSForbiddenException.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<?php
/**
*
* @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCP\AppFramework\OCS;

use Exception;
use OCP\AppFramework\Http;

/**
* Class OCSForbiddenException
*
* @package OCP\AppFramework
* @since 9.1.0
*/
class OCSForbiddenException extends OCSException {
/**
* OCSForbiddenException constructor.
*
* @param string $message
* @param Exception|null $previous
* @since 9.1.0
*/
public function __construct($message = '', Exception $previous = null) {
parent::__construct($message, Http::STATUS_FORBIDDEN, $previous);
}
}
44 changes: 44 additions & 0 deletions lib/public/AppFramework/OCS/OCSNotFoundException.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<?php
/**
*
* @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCP\AppFramework\OCS;

use Exception;
use OCP\AppFramework\Http;

/**
* Class OCSNotFoundException
*
* @package OCP\AppFramework
* @since 9.1.0
*/
class OCSNotFoundException extends OCSException {
/**
* OCSNotFoundException constructor.
*
* @param string $message
* @param Exception|null $previous
* @since 9.1.0
*/
public function __construct($message = '', Exception $previous = null) {
parent::__construct($message, Http::STATUS_NOT_FOUND, $previous);
}
}
Loading