Very basic conversion of ocs to Symfony Routing Component

This commit is contained in:
Bart Visscher 2012-07-21 19:43:50 +02:00
parent 687c87bc5b
commit d0cae6a99a
4 changed files with 97 additions and 56 deletions

3
.gitmodules vendored Normal file
View File

@ -0,0 +1,3 @@
[submodule "3rdparty/Symfony/Component/Routing"]
path = 3rdparty/Symfony/Component/Routing
url = git://github.com/symfony/Routing.git

1
3rdparty/Symfony/Component/Routing vendored Submodule

@ -0,0 +1 @@
Subproject commit d72483890880a987afa679503af096d2aaf7d2ee

View File

@ -86,6 +86,9 @@ class OC{
elseif(strpos($className,'Sabre_')===0) { elseif(strpos($className,'Sabre_')===0) {
require_once str_replace('_','/',$className) . '.php'; require_once str_replace('_','/',$className) . '.php';
} }
elseif(strpos($className,'Symfony\\')===0){
require_once str_replace('\\','/',$className) . '.php';
}
elseif(strpos($className,'Test_')===0){ elseif(strpos($className,'Test_')===0){
require_once 'tests/lib/'.strtolower(str_replace('_','/',substr($className,5)) . '.php'); require_once 'tests/lib/'.strtolower(str_replace('_','/',substr($className,5)) . '.php');
} }

View File

@ -21,7 +21,11 @@
* *
*/ */
use Symfony\Component\Routing\Matcher\UrlMatcher;
use Symfony\Component\Routing\RequestContext;
use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\Route;
use Symfony\Component\Routing\Exception\ResourceNotFoundException;
/** /**
* Class to handle open collaboration services API requests * Class to handle open collaboration services API requests
@ -95,73 +99,103 @@ class OC_OCS {
exit(); exit();
} }
// preprocess url $routes = new RouteCollection();
$url=$_SERVER['REQUEST_URI'];
if(substr($url,(strlen($url)-1))<>'/') $url.='/';
$ex=explode('/',$url);
$paracount=count($ex);
// eventhandler
// CONFIG // CONFIG
// apiconfig - GET - CONFIG $routes->add('config',
if(($method=='get') and (strtolower($ex[$paracount-3])=='v1.php') and (strtolower($ex[$paracount-2])=='config')){ new Route('/config.{format}',
$format=OC_OCS::readdata('format','text'); array('format'=>'',
OC_OCS::apiconfig($format); 'action' => function ($parameters) {
OC_OCS::apiconfig($parameters['format'] ? $parameters['format'] : OC_OCS::readdata('format','text'));
}),
array('format'=>'xml|json')));
// PERSON // PERSON
// personcheck - POST - PERSON/CHECK $routes->add('person_check',
}elseif(($method=='post') and (strtolower($ex[$paracount-4])=='v1.php') and (strtolower($ex[$paracount-3])=='person') and (strtolower($ex[$paracount-2])=='check')){ new Route('/person/check.{format}',
$format=OC_OCS::readdata('format','text'); array('format'=>'',
$login=OC_OCS::readdata('login','text'); 'action' => function ($parameters) {
$passwd=OC_OCS::readdata('password','text'); $format = $parameters['format'] ? $parameters['format'] : OC_OCS::readdata('format','text');
OC_OCS::personcheck($format,$login,$passwd); $login=OC_OCS::readdata('login','text');
$passwd=OC_OCS::readdata('password','text');
OC_OCS::personcheck($format,$login,$passwd);
}),
array('_method'=>'post',
'format'=>'xml|json')));
// ACTIVITY // ACTIVITY
// activityget - GET ACTIVITY page,pagesize als urlparameter // activityget - GET ACTIVITY page,pagesize als urlparameter
}elseif(($method=='get') and (strtolower($ex[$paracount-3])=='v1.php')and (strtolower($ex[$paracount-2])=='activity')){ $routes->add('activity_get',
$format=OC_OCS::readdata('format','text'); new Route('/activity.{format}',
$page=OC_OCS::readdata('page','int'); array('format'=>'',
$pagesize=OC_OCS::readdata('pagesize','int'); 'action' => function ($parameters) {
if($pagesize<1 or $pagesize>100) $pagesize=10; $format = $parameters['format'] ? $parameters['format'] : OC_OCS::readdata('format','text');
OC_OCS::activityget($format,$page,$pagesize); $page=OC_OCS::readdata('page','int');
$pagesize=OC_OCS::readdata('pagesize','int');
if($pagesize<1 or $pagesize>100) $pagesize=10;
OC_OCS::activityget($format,$page,$pagesize);
}),
array('format'=>'xml|json')));
// activityput - POST ACTIVITY // activityput - POST ACTIVITY
}elseif(($method=='post') and (strtolower($ex[$paracount-3])=='v1.php')and (strtolower($ex[$paracount-2])=='activity')){ $routes->add('activity_put',
$format=OC_OCS::readdata('format','text'); new Route('/activity.{format}',
$message=OC_OCS::readdata('message','text'); array('format'=>'',
OC_OCS::activityput($format,$message); 'action' => function ($parameters) {
$format = $parameters['format'] ? $parameters['format'] : OC_OCS::readdata('format','text');
$message=OC_OCS::readdata('message','text');
OC_OCS::activityput($format,$message);
}),
array('_method'=>'post',
'format'=>'xml|json')));
// PRIVATEDATA // PRIVATEDATA
// get - GET DATA // get - GET DATA
}elseif(($method=='get') and (strtolower($ex[$paracount-4])=='v1.php')and (strtolower($ex[$paracount-2])=='getattribute')){ $routes->add('privatedata_get',
$format=OC_OCS::readdata('format','text'); new Route('/privatedata/getattribute/{app}/{key}.{format}',
OC_OCS::privateDataGet($format); array('app' => '',
'key' => '',
}elseif(($method=='get') and (strtolower($ex[$paracount-5])=='v1.php')and (strtolower($ex[$paracount-3])=='getattribute')){ 'format' => '',
$format=OC_OCS::readdata('format','text'); 'action' => function ($parameters) {
$app=$ex[$paracount-2]; $format = $parameters['format'] ? $parameters['format'] : OC_OCS::readdata('format','text');
OC_OCS::privateDataGet($format, $app); $app = addslashes(strip_tags($parameters['app']));
}elseif(($method=='get') and (strtolower($ex[$paracount-6])=='v1.php')and (strtolower($ex[$paracount-4])=='getattribute')){ $key = addslashes(strip_tags($parameters['key']));
$format=OC_OCS::readdata('format','text'); OC_OCS::privateDataGet($format, $app, $key);
$key=$ex[$paracount-2]; }),
$app=$ex[$paracount-3]; array('format'=>'xml|json')));
OC_OCS::privateDataGet($format, $app,$key);
// set - POST DATA // set - POST DATA
}elseif(($method=='post') and (strtolower($ex[$paracount-6])=='v1.php')and (strtolower($ex[$paracount-4])=='setattribute')){ $routes->add('privatedata_set',
$format=OC_OCS::readdata('format','text'); new Route('/privatedata/setattribute/{app}/{key}.{format}',
$key=$ex[$paracount-2]; array('format'=>'',
$app=$ex[$paracount-3]; 'action' => function ($parameters) {
$value=OC_OCS::readdata('value','text'); $format = $parameters['format'] ? $parameters['format'] : OC_OCS::readdata('format','text');
OC_OCS::privatedataset($format, $app, $key, $value); $app = addslashes(strip_tags($parameters['app']));
$key = addslashes(strip_tags($parameters['key']));
$value=OC_OCS::readdata('value','text');
OC_OCS::privateDataSet($format, $app, $key, $value);
}),
array('_method'=>'post',
'format'=>'xml|json')));
// delete - POST DATA // delete - POST DATA
}elseif(($method=='post') and (strtolower($ex[$paracount-6])=='v1.php')and (strtolower($ex[$paracount-4])=='deleteattribute')){ $routes->add('privatedata_delete',
$format=OC_OCS::readdata('format','text'); new Route('/privatedata/deleteattribute/{app}/{key}.{format}',
$key=$ex[$paracount-2]; array('format'=>'',
$app=$ex[$paracount-3]; 'action' => function ($parameters) {
OC_OCS::privatedatadelete($format, $app, $key); $format = $parameters['format'] ? $parameters['format'] : OC_OCS::readdata('format','text');
$app = addslashes(strip_tags($parameters['app']));
$key = addslashes(strip_tags($parameters['key']));
OC_OCS::privateDataDelete($format, $app, $key);
}),
array('_method'=>'post',
'format'=>'xml|json')));
}else{ $context = new RequestContext($_SERVER['REQUEST_URI'], $method);
$matcher = new UrlMatcher($routes, $context);
try {
$parameters = $matcher->match($_SERVER['PATH_INFO']);
$action = $parameters['action'];
unset($parameters['action']);
call_user_func($action, $parameters);
} catch (ResourceNotFoundException $e) {
$format=OC_OCS::readdata('format','text'); $format=OC_OCS::readdata('format','text');
$txt='Invalid query, please check the syntax. API specifications are here: http://www.freedesktop.org/wiki/Specifications/open-collaboration-services. DEBUG OUTPUT:'."\n"; $txt='Invalid query, please check the syntax. API specifications are here: http://www.freedesktop.org/wiki/Specifications/open-collaboration-services. DEBUG OUTPUT:'."\n";
$txt.=OC_OCS::getdebugoutput(); $txt.=OC_OCS::getdebugoutput();