diff --git a/lib/base.php b/lib/base.php index 70fac6d707..c915282cc7 100644 --- a/lib/base.php +++ b/lib/base.php @@ -905,7 +905,7 @@ class OC { * @param OCP\IRequest $request * @return boolean */ - private static function handleLogin(OCP\IRequest $request) { + static function handleLogin(OCP\IRequest $request) { $userSession = self::$server->getUserSession(); if (OC_User::handleApacheAuth()) { return true; diff --git a/ocs/v1.php b/ocs/v1.php index bbc2adf39b..fe7c9a2441 100644 --- a/ocs/v1.php +++ b/ocs/v1.php @@ -42,6 +42,10 @@ if (\OCP\Util::needUpgrade() use Symfony\Component\Routing\Exception\ResourceNotFoundException; use Symfony\Component\Routing\Exception\MethodNotAllowedException; +/* + * Try old routes first + * We first try the old routes since the appframework triggers more login stuff. + */ try { OC_App::loadApps(['session']); OC_App::loadApps(['authentication']); @@ -52,6 +56,22 @@ try { \OC::$server->getL10NFactory()->setLanguageFromRequest(); OC::$server->getRouter()->match('/ocs'.\OC::$server->getRequest()->getRawPathInfo()); + return; +} catch (ResourceNotFoundException $e) { + // Fall through the not found +} catch (MethodNotAllowedException $e) { + OC_API::setContentType(); + OC_Response::setStatus(405); +} catch (\OC\OCS\Exception $ex) { + OC_API::respond($ex->getResult(), OC_API::requestedFormat()); +} + +/* + * Try the appframework routes + */ +try { + OC::handleLogin(\OC::$server->getRequest()); + OC::$server->getRouter()->match('/ocsapp'.\OC::$server->getRequest()->getRawPathInfo()); } catch (ResourceNotFoundException $e) { OC_API::setContentType(); OC_OCS::notFound(); @@ -60,5 +80,8 @@ try { OC_Response::setStatus(405); } catch (\OC\OCS\Exception $ex) { OC_API::respond($ex->getResult(), OC_API::requestedFormat()); +} catch (\Exception $e) { + OC_API::setContentType(); + OC_OCS::notFound(); }