--- /dev/null
- * api actions
- */
+<?php
+/**
+* ownCloud
+*
+* @author Tom Needham
+* @author Michael Gapczynski
+* @author Bart Visscher
+* @copyright 2012 Tom Needham tom@owncloud.com
+* @copyright 2012 Michael Gapczynski mtgap@owncloud.com
+* @copyright 2012 Bart Visscher bartv@thisnet.nl
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either
+* version 3 of the License, or any later version.
+*
+* This library 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 library. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+class OC_API {
+
+ /**
+ * API authentication levels
+ */
+ const GUEST_AUTH = 0;
+ const USER_AUTH = 1;
+ const SUBADMIN_AUTH = 2;
+ const ADMIN_AUTH = 3;
+
+ private static $server;
+
+ /**
+ * initialises the OAuth store and server
+ */
+ private static function init() {
+ self::$server = new OC_OAuth_Server(new OC_OAuth_Store());
+ }
+
+ /**
- * registers an api call
- * @param string $method the http method
- * @param string $url the url to match
- * @param callable $action the function to run
- * @param string $app the id of the app registering the call
- * @param int $authlevel the level of authentication required for the call
- * @param array $defaults
- * @param array $requirements
- */
++ * api actions
++ */
+ protected static $actions = array();
+
+ /**
- $authlevel = OC_API::USER_AUTH,
++ * registers an api call
++ * @param string $method the http method
++ * @param string $url the url to match
++ * @param callable $action the function to run
++ * @param string $app the id of the app registering the call
++ * @param int $authLevel the level of authentication required for the call
++ * @param array $defaults
++ * @param array $requirements
++ */
+ public static function register($method, $url, $action, $app,
- $requirements = array()){
++ $authLevel = OC_API::USER_AUTH,
+ $defaults = array(),
- if(!isset(self::$actions[$name])){
++ $requirements = array()) {
+ $name = strtolower($method).$url;
+ $name = str_replace(array('/', '{', '}'), '_', $name);
- self::$actions[$name] = array('app' => $app, 'action' => $action, 'authlevel' => $authlevel);
++ if(!isset(self::$actions[$name])) {
+ OC::getRouter()->useCollection('ocs');
+ OC::getRouter()->create($name, $url)
+ ->method($method)
+ ->action('OC_API', 'call');
+ self::$actions[$name] = array();
+ }
- * handles an api call
- * @param array $parameters
- */
- public static function call($parameters){
++ self::$actions[$name] = array('app' => $app, 'action' => $action, 'authlevel' => $authLevel);
+ }
+
+ /**
- if($_SERVER['REQUEST_METHOD'] == 'PUT'){
++ * handles an api call
++ * @param array $parameters
++ */
++ public static function call($parameters) {
+ // Prepare the request variables
- if(self::isAuthorised(self::$actions[$name])){
- if(is_callable(self::$actions[$name]['action'])){
++ if($_SERVER['REQUEST_METHOD'] == 'PUT') {
+ parse_str(file_get_contents("php://input"), $parameters['_put']);
+ } else if($_SERVER['REQUEST_METHOD'] == 'DELETE'){
+ parse_str(file_get_contents("php://input"), $parameters['_delete']);
+ }
+ $name = $parameters['_route'];
+ // Check authentication and availability
- private static function isAuthorised($action){
++ if(self::isAuthorised(self::$actions[$name])) {
++ if(is_callable(self::$actions[$name]['action'])) {
+ $response = call_user_func(self::$actions[$name]['action'], $parameters);
+ } else {
+ $response = new OC_OCS_Result(null, 998, 'Api method not found');
+ }
+ } else {
+ $response = new OC_OCS_Result(null, 997, 'Unauthorised');
+ }
+ // Send the response
+ $formats = array('json', 'xml');
+ $format = !empty($_GET['format']) && in_array($_GET['format'], $formats) ? $_GET['format'] : 'xml';
+ self::respond($response, $format);
+ // logout the user to be stateless
+ OC_User::logout();
+ }
+
+ /**
+ * authenticate the api call
+ * @param array $action the action details as supplied to OC_API::register()
+ * @return bool
+ */
- switch($level){
++ private static function isAuthorised($action) {
+ $level = $action['authlevel'];
- if(!$user){
++ switch($level) {
+ case OC_API::GUEST_AUTH:
+ // Anyone can access
+ return true;
+ break;
+ case OC_API::USER_AUTH:
+ // User required
+ return self::loginUser();
+ break;
+ case OC_API::SUBADMIN_AUTH:
+ // Check for subadmin
+ $user = self::loginUser();
- $subadmin = OC_SubAdmin::isSubAdmin($user);
++ if(!$user) {
+ return false;
+ } else {
- if($subadmin || $admin){
++ $subAdmin = OC_SubAdmin::isSubAdmin($user);
+ $admin = OC_Group::inGroup($user, 'admin');
- if(!$user){
++ if($subAdmin || $admin) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ break;
+ case OC_API::ADMIN_AUTH:
+ // Check for admin
+ $user = self::loginUser();
- private static function loginUser(){
- $authuser = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : '';
- $authpw = isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : '';
- return OC_User::login($authuser, $authpw) ? $authuser : false;
++ if(!$user) {
+ return false;
+ } else {
+ return OC_Group::inGroup($user, 'admin');
+ }
+ break;
+ default:
+ // oops looks like invalid level supplied
+ return false;
+ break;
+ }
+ }
+
+ /**
+ * http basic auth
+ * @return string|false (username, or false on failure)
+ */
- * respond to a call
- * @param int|array $result the result from the api method
- * @param string $format the format xml|json
- */
- private static function respond($result, $format='xml'){
++ private static function loginUser(){
++ $authUser = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : '';
++ $authPw = isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : '';
++ return OC_User::login($authUser, $authPw) ? $authUser : false;
+ }
+
+ /**
- } else {
- var_dump($format, $response);
++ * respond to a call
++ * @param int|array $result the result from the api method
++ * @param string $format the format xml|json
++ */
++ private static function respond($result, $format='xml') {
+ $response = array('ocs' => $result->getResult());
+ if ($format == 'json') {
+ OC_JSON::encodedPrint($response);
+ } else if ($format == 'xml') {
+ header('Content-type: text/xml; charset=UTF-8');
+ $writer = new XMLWriter();
+ $writer->openMemory();
+ $writer->setIndent( true );
+ $writer->startDocument();
+ self::toXML($response, $writer);
+ $writer->endDocument();
+ echo $writer->outputMemory(true);
- private static function toXML($array, $writer){
+ }
+ }
+
++ private static function toXML($array, $writer) {
+ foreach($array as $k => $v) {
+ if (is_numeric($k)) {
+ $k = 'element';
+ }
+ if (is_array($v)) {
+ $writer->startElement($k);
+ self::toXML($v, $writer);
+ $writer->endElement();
+ } else {
+ $writer->writeElement($k, $v);
+ }
+ }
+ }
+
+}
--- /dev/null
+<?php
++/**
++* ownCloud
++*
++* @author Frank Karlitschek
++* @copyright 2012 Frank Karlitschek frank@owncloud.org
++*
++* This library is free software; you can redistribute it and/or
++* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
++* License as published by the Free Software Foundation; either
++* version 3 of the License, or any later version.
++*
++* This library 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 library. If not, see <http://www.gnu.org/licenses/>.
++*
++*/
+
+class OC_OCS_Activity {
+
+ public static function activityGet($parameters){
+ // TODO
+ }
+}
--- /dev/null
- public static function getSystemWebApps($parameters){
+<?php
++/**
++* ownCloud
++*
++* @author Frank Karlitschek
++* @author Tom Needham
++* @copyright 2012 Frank Karlitschek frank@owncloud.org
++* @copyright 2012 Tom Needham tom@owncloud.com
++*
++* This library is free software; you can redistribute it and/or
++* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
++* License as published by the Free Software Foundation; either
++* version 3 of the License, or any later version.
++*
++* This library 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 library. If not, see <http://www.gnu.org/licenses/>.
++*
++*/
+
+class OC_OCS_Cloud {
+
- $newvalue = array('name'=>$info['name'],'url'=>OC_Helper::linkToAbsolute($app,''),'icon'=>'');
- $values[] = $newvalue;
++ public static function getSystemWebApps($parameters) {
+ OC_Util::checkLoggedIn();
+ $apps = OC_App::getEnabledApps();
+ $values = array();
+ foreach($apps as $app) {
+ $info = OC_App::getAppInfo($app);
+ if(isset($info['standalone'])) {
- public static function getUserQuota($parameters){
++ $newValue = array('name'=>$info['name'],'url'=>OC_Helper::linkToAbsolute($app,''),'icon'=>'');
++ $values[] = $newValue;
+ }
+ }
+ return new OC_OCS_Result($values);
+ }
+
- if(OC_User::userExists($parameters['user'])){
++ public static function getUserQuota($parameters) {
+ $user = OC_User::getUser();
+ if(OC_Group::inGroup($user, 'admin') or ($user==$parameters['user'])) {
+
- $user_dir = '/'.$parameters['user'].'/files';
- OC_Filesystem::init($user_dir);
- $rootInfo=OC_FileCache::get('');
- $sharedInfo=OC_FileCache::get('/Shared');
- $used=$rootInfo['size']-$sharedInfo['size'];
- $free=OC_Filesystem::free_space();
- $total=$free+$used;
- if($total==0) $total=1; // prevent division by zero
- $relative=round(($used/$total)*10000)/100;
++ if(OC_User::userExists($parameters['user'])) {
+ // calculate the disc space
- $xml=array();
- $xml['quota']=$total;
- $xml['free']=$free;
- $xml['used']=$used;
- $xml['relative']=$relative;
++ $userDir = '/'.$parameters['user'].'/files';
++ OC_Filesystem::init($useDir);
++ $rootInfo = OC_FileCache::get('');
++ $sharedInfo = OC_FileCache::get('/Shared');
++ $used = $rootInfo['size'] - $sharedInfo['size'];
++ $free = OC_Filesystem::free_space();
++ $total = $free + $used;
++ if($total===0) $total = 1; // prevent division by zero
++ $relative = round(($used/$total)*10000)/100;
+
- }else{
++ $xml = array();
++ $xml['quota'] = $total;
++ $xml['free'] = $free;
++ $xml['used'] = $used;
++ $xml['relative'] = $relative;
+
+ return new OC_OCS_Result($xml);
- }else{
++ } else {
+ return new OC_OCS_Result(null, 300);
+ }
- public static function getUserPublickey($parameters){
++ } else {
+ return new OC_OCS_Result(null, 300);
+ }
+ }
+
- if(OC_User::userExists($parameters['user'])){
++ public static function getUserPublickey($parameters) {
+
- }else{
++ if(OC_User::userExists($parameters['user'])) {
+ // calculate the disc space
+ // TODO
+ return new OC_OCS_Result(array());
- public static function getUserPrivatekey($parameters){
++ } else {
+ return new OC_OCS_Result(null, 300);
+ }
+ }
+
- if(OC_User::userExists($user)){
++ public static function getUserPrivatekey($parameters) {
+ $user = OC_User::getUser();
+ if(OC_Group::inGroup($user, 'admin') or ($user==$parameters['user'])) {
+
- $txt='this is the private key of '.$parameters['user'];
++ if(OC_User::userExists($user)) {
+ // calculate the disc space
- }else{
++ $txt = 'this is the private key of '.$parameters['user'];
+ echo($txt);
- }else{
++ } else {
+ return new OC_OCS_Result(null, 300, 'User does not exist');
+ }
++ } else {
+ return new OC_OCS_Result('null', 300, 'You donĀ“t have permission to access this ressource.');
+ }
+ }
+}
--- /dev/null
- public static function check($parameters){
+<?php
++/**
++* ownCloud
++*
++* @author Frank Karlitschek
++* @author Tom Needham
++* @copyright 2012 Frank Karlitschek frank@owncloud.org
++* @copyright 2012 Tom Needham tom@owncloud.com
++*
++* This library is free software; you can redistribute it and/or
++* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
++* License as published by the Free Software Foundation; either
++* version 3 of the License, or any later version.
++*
++* This library 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 library. If not, see <http://www.gnu.org/licenses/>.
++*
++*/
+
+class OC_OCS_Person {
+
- if($login && $password){
- if(OC_User::checkPassword($login,$password)){
++ public static function check($parameters) {
+ $login = isset($_POST['login']) ? $_POST['login'] : false;
+ $password = isset($_POST['password']) ? $_POST['password'] : false;
- }else{
++ if($login && $password) {
++ if(OC_User::checkPassword($login, $password)) {
+ $xml['person']['personid'] = $login;
+ return new OC_OCS_Result($xml);
- }else{
++ } else {
+ return new OC_OCS_Result(null, 102);
+ }
++ } else {
+ return new OC_OCS_Result(null, 101);
+ }
+ }
+
+}
--- /dev/null
- public static function get($parameters){
+<?php
++/**
++* ownCloud
++*
++* @author Frank Karlitschek
++* @author Tom Needham
++* @copyright 2012 Frank Karlitschek frank@owncloud.org
++* @copyright 2012 Tom Needham tom@owncloud.com
++*
++* This library is free software; you can redistribute it and/or
++* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
++* License as published by the Free Software Foundation; either
++* version 3 of the License, or any later version.
++*
++* This library 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 library. If not, see <http://www.gnu.org/licenses/>.
++*
++*/
+
+class OC_OCS_Privatedata {
+
- public static function set($parameters){
++ public static function get($parameters) {
+ OC_Util::checkLoggedIn();
+ $user = OC_User::getUser();
+ $app = addslashes(strip_tags($parameters['app']));
+ $key = addslashes(strip_tags($parameters['key']));
+ $result = OC_OCS::getData($user,$app,$key);
+ $xml = array();
+ foreach($result as $i=>$log) {
+ $xml[$i]['key']=$log['key'];
+ $xml[$i]['app']=$log['app'];
+ $xml[$i]['value']=$log['value'];
+ }
+ return new OC_OCS_Result($xml);
+ //TODO: replace 'privatedata' with 'attribute' once a new libattice has been released that works with it
+ }
+
- if(OC_Preferences::setValue($user,$app,$key,$value)){
++ public static function set($parameters) {
+ OC_Util::checkLoggedIn();
+ $user = OC_User::getUser();
+ $app = addslashes(strip_tags($parameters['app']));
+ $key = addslashes(strip_tags($parameters['key']));
+ $value = OC_OCS::readData('post', 'value', 'text');
- public static function delete($parameters){
++ if(OC_Preferences::setValue($user, $app, $key, $value)){
+ return new OC_OCS_Result(null, 100);
+ }
+ }
+
- if($key=="" or $app==""){
++ public static function delete($parameters) {
+ OC_Util::checkLoggedIn();
+ $user = OC_User::getUser();
+ $app = addslashes(strip_tags($parameters['app']));
+ $key = addslashes(strip_tags($parameters['key']));
- if(OC_Preferences::deleteKey($user,$app,$key)){
++ if($key==="" or $app==="") {
+ return new OC_OCS_Result(null, 101); //key and app are NOT optional here
+ }
++ if(OC_Preferences::deleteKey($user, $app, $key)) {
+ return new OC_OCS_Result(null, 100);
+ }
+ }
+}
--- /dev/null
- private $data, $message, $statuscode, $items, $perpage;
+<?php
++/**
++* ownCloud
++*
++* @author Tom Needham
++* @copyright 2012 Tom Needham tom@owncloud.com
++*
++* This library is free software; you can redistribute it and/or
++* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
++* License as published by the Free Software Foundation; either
++* version 3 of the License, or any later version.
++*
++* This library 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 library. If not, see <http://www.gnu.org/licenses/>.
++*
++*/
+
+class OC_OCS_Result{
+
- public function __construct($data=null, $code=100, $message=null){
++ private $data, $message, $statusCode, $items, $perPage;
+
+ /**
+ * create the OCS_Result object
+ * @param $data mixed the data to return
+ */
- $this->statuscode = $code;
++ public function __construct($data=null, $code=100, $message=null) {
+ $this->data = $data;
- public function setTotalItems(int $items){
++ $this->statusCode = $code;
+ $this->message = $message;
+ }
+
+ /**
+ * optionally set the total number of items available
+ * @param $items int
+ */
- public function setItemsPerPage(int $items){
- $this->perpage = $items;
++ public function setTotalItems(int $items) {
+ $this->items = $items;
+ }
+
+ /**
+ * optionally set the the number of items per page
+ * @param $items int
+ */
- public function getResult(){
++ public function setItemsPerPage(int $items) {
++ $this->perPage = $items;
+ }
+
+ /**
+ * returns the data associated with the api result
+ * @return array
+ */
- $return['meta']['status'] = ($this->statuscode === 100) ? 'ok' : 'failure';
- $return['meta']['statuscode'] = $this->statuscode;
++ public function getResult() {
+ $return = array();
+ $return['meta'] = array();
- if(isset($this->items)){
++ $return['meta']['status'] = ($this->statusCode === 100) ? 'ok' : 'failure';
++ $return['meta']['statuscode'] = $this->statusCode;
+ $return['meta']['message'] = $this->message;
- if(isset($this->perpage)){
- $return['meta']['itemsperpage'] = $this->perpage;
++ if(isset($this->items)) {
+ $return['meta']['totalitems'] = $this->items;
+ }
++ if(isset($this->perPage)) {
++ $return['meta']['itemsperpage'] = $this->perPage;
+ }
+ $return['data'] = $this->data;
+ // Return the result data.
+ return $return;
+ }
+
+
+}
--- /dev/null
- * registers an api call
- * @param string $method the http method
- * @param string $url the url to match
- * @param callable $action the function to run
- * @param string $app the id of the app registering the call
- * @param int $authlevel the level of authentication required for the call (See OC_API constants)
- * @param array $defaults
- * @param array $requirements
- */
- public static function register($method, $url, $action, $app, $authlevel = OC_API::USER_AUTH, $defaults = array(), $requirements = array()){
- \OC_API::register($method, $url, $action, $app, $authlevel, $defaults, $requirements);
+<?php
+/**
+* ownCloud
+*
+* @author Tom Needham
+* @copyright 2012 Tom Needham tom@owncloud.com
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either
+* version 3 of the License, or any later version.
+*
+* This library 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 library. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+namespace OCP;
+
+/**
+ * This class provides functions to manage apps in ownCloud
+ */
+class API {
+
+ /**
++ * registers an api call
++ * @param string $method the http method
++ * @param string $url the url to match
++ * @param callable $action the function to run
++ * @param string $app the id of the app registering the call
++ * @param int $authLevel the level of authentication required for the call (See OC_API constants)
++ * @param array $defaults
++ * @param array $requirements
++ */
++ public static function register($method, $url, $action, $app, $authLevel = OC_API::USER_AUTH, $defaults = array(), $requirements = array()){
++ \OC_API::register($method, $url, $action, $app, $authLevel, $defaults, $requirements);
+ }
+
+}