commit
7ebfcab49b
@ -0,0 +1,67 @@ |
||||
<?php |
||||
set_time_limit(0); |
||||
$RUNTIME_NOAPPS = true; |
||||
require_once '../../lib/base.php'; |
||||
|
||||
if (OC::checkUpgrade(false)) { |
||||
$updateEventSource = new OC_EventSource(); |
||||
$watcher = new UpdateWatcher($updateEventSource); |
||||
OC_Hook::connect('update', 'success', $watcher, 'success'); |
||||
OC_Hook::connect('update', 'error', $watcher, 'error'); |
||||
OC_Hook::connect('update', 'error', $watcher, 'failure'); |
||||
$watcher->success('Turned on maintenance mode'); |
||||
try { |
||||
$result = OC_DB::updateDbFromStructure(OC::$SERVERROOT.'/db_structure.xml'); |
||||
$watcher->success('Updated database'); |
||||
} catch (Exception $exception) { |
||||
$watcher->failure($exception->getMessage()); |
||||
} |
||||
$minimizerCSS = new OC_Minimizer_CSS(); |
||||
$minimizerCSS->clearCache(); |
||||
$minimizerJS = new OC_Minimizer_JS(); |
||||
$minimizerJS->clearCache(); |
||||
OC_Config::setValue('version', implode('.', OC_Util::getVersion())); |
||||
OC_App::checkAppsRequirements(); |
||||
// load all apps to also upgrade enabled apps |
||||
OC_App::loadApps(); |
||||
OC_Config::setValue('maintenance', false); |
||||
$watcher->success('Turned off maintenance mode'); |
||||
$watcher->done(); |
||||
} |
||||
|
||||
class UpdateWatcher { |
||||
/** |
||||
* @var \OC_EventSource $eventSource; |
||||
*/ |
||||
private $eventSource; |
||||
|
||||
public function __construct($eventSource) { |
||||
$this->eventSource = $eventSource; |
||||
} |
||||
|
||||
public function success($message) { |
||||
OC_Util::obEnd(); |
||||
$this->eventSource->send('success', $message); |
||||
ob_start(); |
||||
} |
||||
|
||||
public function error($message) { |
||||
OC_Util::obEnd(); |
||||
$this->eventSource->send('error', $message); |
||||
ob_start(); |
||||
} |
||||
|
||||
public function failure($message) { |
||||
OC_Util::obEnd(); |
||||
$this->eventSource->send('failure', $message); |
||||
$this->eventSource->close(); |
||||
die(); |
||||
} |
||||
|
||||
public function done() { |
||||
OC_Util::obEnd(); |
||||
$this->eventSource->send('done', ''); |
||||
$this->eventSource->close(); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,31 @@ |
||||
<ul> |
||||
<li class='update'> |
||||
<?php echo $l->t('Updating ownCloud to version %s, this may take a while.', array($_['version'])); ?><br /><br />
|
||||
</li> |
||||
</ul> |
||||
<script> |
||||
$(document).ready(function () { |
||||
OC.EventSource.requesttoken = oc_requesttoken; |
||||
var updateEventSource = new OC.EventSource(OC.webroot+'/core/ajax/update.php'); |
||||
updateEventSource.listen('success', function(message) { |
||||
$('<span>').append(message).append('<br />').appendTo($('.update')); |
||||
}); |
||||
updateEventSource.listen('error', function(message) { |
||||
$('<span>').addClass('error').append(message).append('<br />').appendTo($('.update')); |
||||
}); |
||||
updateEventSource.listen('failure', function(message) { |
||||
$('<span>').addClass('error').append(message).append('<br />').appendTo($('.update')); |
||||
$('<span>') |
||||
.addClass('error bold') |
||||
.append('<br />') |
||||
.append(t('core', 'The update was unsuccessful. Please report this issue to the <a href="https://github.com/owncloud/core/issues" target="_blank">ownCloud community</a>.')) |
||||
.appendTo($('.update')); |
||||
}); |
||||
updateEventSource.listen('done', function(message) { |
||||
$('<span>').addClass('bold').append('<br />').append(t('core', 'The update was successful. Redirecting you to ownCloud now.')).appendTo($('.update')); |
||||
setTimeout(function () { |
||||
window.location.href = OC.webroot; |
||||
}, 3000); |
||||
}); |
||||
}); |
||||
</script> |
||||
@ -0,0 +1,200 @@ |
||||
<?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()); |
||||
} |
||||
|
||||
/** |
||||
* api actions |
||||
*/ |
||||
protected static $actions = array(); |
||||
|
||||
/** |
||||
* 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, |
||||
$authLevel = OC_API::USER_AUTH, |
||||
$defaults = array(), |
||||
$requirements = array()) { |
||||
$name = strtolower($method).$url; |
||||
$name = str_replace(array('/', '{', '}'), '_', $name); |
||||
if(!isset(self::$actions[$name])) { |
||||
OC::getRouter()->useCollection('ocs'); |
||||
OC::getRouter()->create($name, $url) |
||||
->method($method) |
||||
->action('OC_API', 'call'); |
||||
self::$actions[$name] = array(); |
||||
} |
||||
self::$actions[$name] = array('app' => $app, 'action' => $action, 'authlevel' => $authLevel); |
||||
} |
||||
|
||||
/** |
||||
* handles an api call |
||||
* @param array $parameters |
||||
*/ |
||||
public static function call($parameters) { |
||||
// Prepare the request variables |
||||
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 |
||||
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 |
||||
*/ |
||||
private static function isAuthorised($action) { |
||||
$level = $action['authlevel']; |
||||
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(); |
||||
if(!$user) { |
||||
return false; |
||||
} else { |
||||
$subAdmin = OC_SubAdmin::isSubAdmin($user); |
||||
$admin = OC_Group::inGroup($user, 'admin'); |
||||
if($subAdmin || $admin) { |
||||
return true; |
||||
} else { |
||||
return false; |
||||
} |
||||
} |
||||
break; |
||||
case OC_API::ADMIN_AUTH: |
||||
// Check for admin |
||||
$user = self::loginUser(); |
||||
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) |
||||
*/ |
||||
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; |
||||
} |
||||
|
||||
/** |
||||
* 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) { |
||||
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); |
||||
} |
||||
} |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,28 @@ |
||||
<?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 |
||||
} |
||||
} |
||||
@ -0,0 +1,98 @@ |
||||
<?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 { |
||||
|
||||
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'])) { |
||||
$newValue = array('name'=>$info['name'],'url'=>OC_Helper::linkToAbsolute($app,''),'icon'=>''); |
||||
$values[] = $newValue; |
||||
} |
||||
} |
||||
return new OC_OCS_Result($values); |
||||
} |
||||
|
||||
public static function getUserQuota($parameters) { |
||||
$user = OC_User::getUser(); |
||||
if(OC_Group::inGroup($user, 'admin') or ($user==$parameters['user'])) { |
||||
|
||||
if(OC_User::userExists($parameters['user'])) { |
||||
// calculate the disc space |
||||
$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; |
||||
|
||||
$xml = array(); |
||||
$xml['quota'] = $total; |
||||
$xml['free'] = $free; |
||||
$xml['used'] = $used; |
||||
$xml['relative'] = $relative; |
||||
|
||||
return new OC_OCS_Result($xml); |
||||
} else { |
||||
return new OC_OCS_Result(null, 300); |
||||
} |
||||
} else { |
||||
return new OC_OCS_Result(null, 300); |
||||
} |
||||
} |
||||
|
||||
public static function getUserPublickey($parameters) { |
||||
|
||||
if(OC_User::userExists($parameters['user'])) { |
||||
// calculate the disc space |
||||
// TODO |
||||
return new OC_OCS_Result(array()); |
||||
} else { |
||||
return new OC_OCS_Result(null, 300); |
||||
} |
||||
} |
||||
|
||||
public static function getUserPrivatekey($parameters) { |
||||
$user = OC_User::getUser(); |
||||
if(OC_Group::inGroup($user, 'admin') or ($user==$parameters['user'])) { |
||||
|
||||
if(OC_User::userExists($user)) { |
||||
// calculate the disc space |
||||
$txt = 'this is the private key of '.$parameters['user']; |
||||
echo($txt); |
||||
} 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.'); |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,36 @@ |
||||
<?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_Config { |
||||
|
||||
public static function apiConfig($parameters) { |
||||
$xml['version'] = '1.7'; |
||||
$xml['website'] = 'ownCloud'; |
||||
$xml['host'] = OCP\Util::getServerHost(); |
||||
$xml['contact'] = ''; |
||||
$xml['ssl'] = 'false'; |
||||
return new OC_OCS_Result($xml); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,42 @@ |
||||
<?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 { |
||||
|
||||
public static function check($parameters) { |
||||
$login = isset($_POST['login']) ? $_POST['login'] : false; |
||||
$password = isset($_POST['password']) ? $_POST['password'] : false; |
||||
if($login && $password) { |
||||
if(OC_User::checkPassword($login, $password)) { |
||||
$xml['person']['personid'] = $login; |
||||
return new OC_OCS_Result($xml); |
||||
} else { |
||||
return new OC_OCS_Result(null, 102); |
||||
} |
||||
} else { |
||||
return new OC_OCS_Result(null, 101); |
||||
} |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,66 @@ |
||||
<?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 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 |
||||
} |
||||
|
||||
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'); |
||||
if(OC_Preferences::setValue($user, $app, $key, $value)){ |
||||
return new OC_OCS_Result(null, 100); |
||||
} |
||||
} |
||||
|
||||
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($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); |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,75 @@ |
||||
<?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{ |
||||
|
||||
private $data, $message, $statusCode, $items, $perPage; |
||||
|
||||
/** |
||||
* create the OCS_Result object |
||||
* @param $data mixed the data to return |
||||
*/ |
||||
public function __construct($data=null, $code=100, $message=null) { |
||||
$this->data = $data; |
||||
$this->statusCode = $code; |
||||
$this->message = $message; |
||||
} |
||||
|
||||
/** |
||||
* optionally set the total number of items available |
||||
* @param $items int |
||||
*/ |
||||
public function setTotalItems(int $items) { |
||||
$this->items = $items; |
||||
} |
||||
|
||||
/** |
||||
* optionally set the the number of items per page |
||||
* @param $items int |
||||
*/ |
||||
public function setItemsPerPage(int $items) { |
||||
$this->perPage = $items; |
||||
} |
||||
|
||||
/** |
||||
* returns the data associated with the api result |
||||
* @return array |
||||
*/ |
||||
public function getResult() { |
||||
$return = array(); |
||||
$return['meta'] = array(); |
||||
$return['meta']['status'] = ($this->statusCode === 100) ? 'ok' : 'failure'; |
||||
$return['meta']['statuscode'] = $this->statusCode; |
||||
$return['meta']['message'] = $this->message; |
||||
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; |
||||
} |
||||
|
||||
|
||||
} |
||||
@ -0,0 +1,44 @@ |
||||
<?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); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,20 @@ |
||||
<?php |
||||
/** |
||||
* Copyright (c) 2012, Tom Needham <tom@owncloud.com> |
||||
* This file is licensed under the Affero General Public License version 3 or later. |
||||
* See the COPYING-README file. |
||||
*/ |
||||
|
||||
// Config |
||||
OC_API::register('get', '/config', array('OC_OCS_Config', 'apiConfig'), 'ocs', OC_API::GUEST_AUTH); |
||||
// Person |
||||
OC_API::register('post', '/person/check', array('OC_OCS_Person', 'check'), 'ocs', OC_API::GUEST_AUTH); |
||||
// Activity |
||||
OC_API::register('get', '/activity', array('OC_OCS_Activity', 'activityGet'), 'ocs', OC_API::USER_AUTH); |
||||
// Privatedata |
||||
OC_API::register('get', '/privatedata/getattribute', array('OC_OCS_Privatedata', 'get'), 'ocs', OC_API::USER_AUTH, array('app' => '', 'key' => '')); |
||||
OC_API::register('get', '/privatedata/getattribute/{app}', array('OC_OCS_Privatedata', 'get'), 'ocs', OC_API::USER_AUTH, array('key' => '')); |
||||
OC_API::register('get', '/privatedata/getattribute/{app}/{key}', array('OC_OCS_Privatedata', 'get'), 'ocs', OC_API::USER_AUTH); |
||||
OC_API::register('post', '/privatedata/setattribute/{app}/{key}', array('OC_OCS_Privatedata', 'set'), 'ocs', OC_API::USER_AUTH); |
||||
OC_API::register('post', '/privatedata/deleteattribute/{app}/{key}', array('OC_OCS_Privatedata', 'delete'), 'ocs', OC_API::USER_AUTH); |
||||
?> |
||||
@ -0,0 +1,4 @@ |
||||
.guest-container{ width:35%; margin: 2em auto 0 auto; } |
||||
#oauth-request a.button{ float: right; } |
||||
#oauth-request ul li{ list-style: disc; } |
||||
#oauth-request ul { margin-left: 2em; margin-top: 1em; } |
||||
@ -0,0 +1,98 @@ |
||||
<?php |
||||
/** |
||||
* Copyright (c) 2012, Tom Needham <tom@owncloud.com> |
||||
* This file is licensed under the Affero General Public License version 3 or later. |
||||
* See the COPYING-README file. |
||||
*/ |
||||
|
||||
require_once('../lib/base.php'); |
||||
// Logic |
||||
$operation = isset($_GET['operation']) ? $_GET['operation'] : ''; |
||||
$server = OC_OAuth_server::init(); |
||||
|
||||
switch($operation){ |
||||
|
||||
case 'register': |
||||
|
||||
// Here external apps can register with an ownCloud |
||||
if(empty($_GET['name']) || empty($_GET['url'])){ |
||||
// Invalid request |
||||
echo 401; |
||||
} else { |
||||
$callbacksuccess = empty($_GET['callback_success']) ? null : $_GET['callback_success']; |
||||
$callbackfail = empty($_GET['callback_fail']) ? null : $_GET['callback_fail']; |
||||
$consumer = OC_OAuth_Server::register_consumer($_GET['name'], $_GET['url'], $callbacksuccess, $callbackfail); |
||||
|
||||
echo 'Registered consumer successfully! </br></br>Key: ' . $consumer->key . '</br>Secret: ' . $consumer->secret; |
||||
} |
||||
break; |
||||
|
||||
case 'request_token': |
||||
|
||||
try { |
||||
$request = OAuthRequest::from_request(); |
||||
$token = $server->get_request_token($request); |
||||
echo $token; |
||||
} catch (OAuthException $exception) { |
||||
OC_Log::write('OC_OAuth_Server', $exception->getMessage(), OC_LOG::ERROR); |
||||
echo $exception->getMessage(); |
||||
} |
||||
|
||||
break; |
||||
case 'authorise'; |
||||
|
||||
OC_API::checkLoggedIn(); |
||||
// Example |
||||
$consumer = array( |
||||
'name' => 'Firefox Bookmark Sync', |
||||
'scopes' => array('ookmarks'), |
||||
); |
||||
|
||||
// Check that the scopes are real and installed |
||||
$apps = OC_App::getEnabledApps(); |
||||
$notfound = array(); |
||||
foreach($consumer['scopes'] as $requiredapp){ |
||||
// App scopes are in this format: app_$appname |
||||
$requiredapp = end(explode('_', $requiredapp)); |
||||
if(!in_array($requiredapp, $apps)){ |
||||
$notfound[] = $requiredapp; |
||||
} |
||||
} |
||||
if(!empty($notfound)){ |
||||
// We need more apps :( Show error |
||||
if(count($notfound)==1){ |
||||
$message = 'requires that you have an extra app installed on your ownCloud. Please contact your ownCloud administrator and ask them to install the app below.'; |
||||
} else { |
||||
$message = 'requires that you have some extra apps installed on your ownCloud. Please contract your ownCloud administrator and ask them to install the apps below.'; |
||||
} |
||||
$t = new OC_Template('settings', 'oauth-required-apps', 'guest'); |
||||
OC_Util::addStyle('settings', 'oauth'); |
||||
$t->assign('requiredapps', $notfound); |
||||
$t->assign('consumer', $consumer); |
||||
$t->assign('message', $message); |
||||
$t->printPage(); |
||||
} else { |
||||
$t = new OC_Template('settings', 'oauth', 'guest'); |
||||
OC_Util::addStyle('settings', 'oauth'); |
||||
$t->assign('consumer', $consumer); |
||||
$t->printPage(); |
||||
} |
||||
break; |
||||
|
||||
case 'access_token'; |
||||
try { |
||||
$request = OAuthRequest::from_request(); |
||||
$token = $server->fetch_access_token($request); |
||||
echo $token; |
||||
} catch (OAuthException $exception) { |
||||
OC_Log::write('OC_OAuth_Server', $exception->getMessage(), OC_LOG::ERROR); |
||||
echo $exception->getMessage(); |
||||
} |
||||
|
||||
break; |
||||
default: |
||||
// Something went wrong, we need an operation! |
||||
OC_Response::setStatus(400); |
||||
break; |
||||
|
||||
} |
||||
@ -0,0 +1,19 @@ |
||||
<?php |
||||
/** |
||||
* Copyright (c) 2012, Tom Needham <tom@owncloud.com> |
||||
* This file is licensed under the Affero General Public License version 3 or later. |
||||
* See the COPYING-README file. |
||||
*/ |
||||
?> |
||||
<div id="oauth-request" class="guest-container"> |
||||
<p><strong><?php echo $_['consumer']['name'].'</strong> '.$_['message']; ?></p>
|
||||
<ul> |
||||
<?php |
||||
// Foreach requested scope |
||||
foreach($_['requiredapps'] as $requiredapp){ |
||||
echo '<li>'.$requiredapp.'</li>'; |
||||
} |
||||
?> |
||||
</ul> |
||||
<a href="<?php echo OC::$WEBROOT; ?>" id="back-home" class="button">Back to ownCloud</a>
|
||||
</div> |
||||
@ -0,0 +1,20 @@ |
||||
<?php |
||||
/** |
||||
* Copyright (c) 2012, Tom Needham <tom@owncloud.com> |
||||
* This file is licensed under the Affero General Public License version 3 or later. |
||||
* See the COPYING-README file. |
||||
*/ |
||||
?> |
||||
<div id="oauth-request" class="guest-container"> |
||||
<p><strong><?php echo $_['consumer']['name']; ?></strong> is requesting your permission to read, write, modify and delete data from the following apps:</p>
|
||||
<ul> |
||||
<?php |
||||
// Foreach requested scope |
||||
foreach($_['consumer']['scopes'] as $app){ |
||||
echo '<li>'.$app.'</li>'; |
||||
} |
||||
?> |
||||
</ul> |
||||
<a href="#" class="button">Allow</a> |
||||
<a href="#" class="button">Disallow</a> |
||||
</div> |
||||
Loading…
Reference in new issue