2010-04-14 18:58:52 +04:00
< ? php
/**
2016-07-21 18:07:57 +03:00
* @ copyright Copyright ( c ) 2016 , ownCloud , Inc .
*
2015-03-26 13:44:34 +03:00
* @ author Bart Visscher < bartv @ thisnet . nl >
2019-12-03 21:57:53 +03:00
* @ author Christoph Wurst < christoph @ winzerhof - wurst . at >
2016-07-21 18:07:57 +03:00
* @ author Joas Schilling < coding @ schilljs . com >
2019-12-03 21:57:53 +03:00
* @ author Julius Härtl < jus @ bitgrid . net >
2016-05-26 20:56:05 +03:00
* @ author Lukas Reschke < lukas @ statuscode . ch >
2015-03-26 13:44:34 +03:00
* @ author Morris Jobke < hey @ morrisjobke . de >
2016-07-21 19:13:36 +03:00
* @ author Robin Appelman < robin @ icewind . nl >
2016-07-21 18:07:57 +03:00
* @ author Roeland Jago Douma < roeland @ famdouma . nl >
2015-03-26 13:44:34 +03:00
* @ author Thomas Müller < thomas . mueller @ tmit . eu >
* @ author Vincent Petry < pvince81 @ owncloud . com >
*
* @ license AGPL - 3.0
*
* This code is free software : you can redistribute it and / or modify
* it under the terms of the GNU Affero General Public License , version 3 ,
* as published by the Free Software Foundation .
*
* 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 , version 3 ,
2019-12-03 21:57:53 +03:00
* along with this program . If not , see < http :// www . gnu . org / licenses />
2015-03-26 13:44:34 +03:00
*
*/
2015-02-26 13:37:37 +03:00
2017-10-13 22:30:29 +03:00
require_once __DIR__ . '/../lib/versioncheck.php' ;
2016-10-06 13:13:02 +03:00
require_once __DIR__ . '/../lib/base.php' ;
2014-02-18 17:51:59 +04:00
2015-04-09 16:57:27 +03:00
if ( \OCP\Util :: needUpgrade ()
2019-02-06 19:08:41 +03:00
|| \OC :: $server -> getConfig () -> getSystemValueBool ( 'maintenance' )) {
2014-06-30 16:48:03 +04:00
// since the behavior of apps or remotes are unpredictable during
// an upgrade, return a 503 directly
2018-06-26 11:32:50 +03:00
http_response_code ( 503 );
2018-07-26 23:56:17 +03:00
$response = new \OC\OCS\Result ( null , 503 , 'Service unavailable' );
2014-06-30 17:37:38 +04:00
OC_API :: respond ( $response , OC_API :: requestedFormat ());
2014-06-30 16:48:03 +04:00
exit ;
}
2012-07-30 23:03:41 +04:00
use Symfony\Component\Routing\Exception\ResourceNotFoundException ;
2012-08-01 00:33:53 +04:00
use Symfony\Component\Routing\Exception\MethodNotAllowedException ;
2012-07-30 23:03:41 +04:00
2016-05-17 11:13:02 +03:00
/*
* Try old routes first
* We first try the old routes since the appframework triggers more login stuff .
*/
2012-07-30 23:03:41 +04:00
try {
2016-06-16 12:32:28 +03:00
OC_App :: loadApps ([ 'session' ]);
OC_App :: loadApps ([ 'authentication' ]);
2014-02-18 17:51:59 +04:00
// load all apps to get all api routes properly setup
OC_App :: loadApps ();
2015-02-10 15:02:48 +03:00
OC :: $server -> getRouter () -> match ( '/ocs' . \OC :: $server -> getRequest () -> getRawPathInfo ());
2018-01-17 17:18:22 +03:00
sleep ( 1 );
OC :: $server -> getLogger () -> info ( 'This uses an old OCP\API::register construct. This will be removed in a future version of Nextcloud. Please migrate to the OCSController' );
2016-05-17 11:13:02 +03:00
return ;
} catch ( ResourceNotFoundException $e ) {
// Fall through the not found
} catch ( MethodNotAllowedException $e ) {
OC_API :: setContentType ();
2018-06-26 11:32:50 +03:00
http_response_code ( 405 );
2016-11-18 12:29:51 +03:00
exit ();
2020-06-16 16:37:20 +03:00
} catch ( \OC\OCS\Exception $ex ) {
2016-05-17 11:13:02 +03:00
OC_API :: respond ( $ex -> getResult (), OC_API :: requestedFormat ());
2016-11-18 12:29:51 +03:00
exit ();
2020-06-16 16:37:20 +03:00
} catch ( Throwable $ex ) {
OC :: $server -> getLogger () -> logException ( $ex );
OC_API :: setContentType ();
http_response_code ( 500 );
exit ();
2016-05-17 11:13:02 +03:00
}
/*
* Try the appframework routes
*/
try {
2020-04-10 15:19:56 +03:00
if ( ! \OC :: $server -> getUserSession () -> isLoggedIn ()) {
2016-07-15 01:13:13 +03:00
OC :: handleLogin ( \OC :: $server -> getRequest ());
}
2016-05-17 11:13:02 +03:00
OC :: $server -> getRouter () -> match ( '/ocsapp' . \OC :: $server -> getRequest () -> getRawPathInfo ());
2012-07-30 23:03:41 +04:00
} catch ( ResourceNotFoundException $e ) {
2014-03-12 03:35:19 +04:00
OC_API :: setContentType ();
2017-03-03 09:41:21 +03:00
$format = \OC :: $server -> getRequest () -> getParam ( 'format' , 'xml' );
$txt = 'Invalid query, please check the syntax. API specifications are here:'
2018-01-09 20:34:25 +03:00
. ' http://www.freedesktop.org/wiki/Specifications/open-collaboration-services.' . " \n " ;
2017-09-21 18:56:00 +03:00
OC_API :: respond ( new \OC\OCS\Result ( null , \OCP\API :: RESPOND_NOT_FOUND , $txt ), $format );
2012-08-01 00:33:53 +04:00
} catch ( MethodNotAllowedException $e ) {
2014-03-12 03:35:19 +04:00
OC_API :: setContentType ();
2018-06-26 11:32:50 +03:00
http_response_code ( 405 );
2015-08-03 19:06:07 +03:00
} catch ( \OC\OCS\Exception $ex ) {
OC_API :: respond ( $ex -> getResult (), OC_API :: requestedFormat ());
2016-07-21 23:47:20 +03:00
} catch ( \OC\User\LoginException $e ) {
2017-09-21 18:56:00 +03:00
OC_API :: respond ( new \OC\OCS\Result ( null , \OCP\API :: RESPOND_UNAUTHORISED , 'Unauthorised' ));
2016-05-17 11:13:02 +03:00
} catch ( \Exception $e ) {
2017-02-06 16:46:52 +03:00
\OC :: $server -> getLogger () -> logException ( $e );
2016-05-17 11:13:02 +03:00
OC_API :: setContentType ();
2017-03-03 09:41:21 +03:00
$format = \OC :: $server -> getRequest () -> getParam ( 'format' , 'xml' );
$txt = 'Invalid query, please check the syntax. API specifications are here:'
2018-01-09 20:34:25 +03:00
. ' http://www.freedesktop.org/wiki/Specifications/open-collaboration-services.' . " \n " ;
2017-09-21 18:56:00 +03:00
OC_API :: respond ( new \OC\OCS\Result ( null , \OCP\API :: RESPOND_NOT_FOUND , $txt ), $format );
2012-07-30 23:03:41 +04:00
}