Skip to content

Add OCS sharing info to capabilities - take 2 #13964

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
Mar 30, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions apps/files_sharing/appinfo/routes.php
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,9 @@ function() {
'/apps/files_sharing/api/v1/shares/{id}',
array('\OCA\Files_Sharing\API\Local', 'deleteShare'),
'files_sharing');

// Register with the capabilities API
\OC_API::register('get',
'/cloud/capabilities',
array('OCA\Files_Sharing\Capabilities', 'getCapabilities'),
'files_sharing', \OC_API::USER_AUTH);
87 changes: 87 additions & 0 deletions apps/files_sharing/lib/capabilities.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
<?php
/**
* @author Roeland Jago Douma <[email protected]>
*
* @copyright Copyright (c) 2015, ownCloud, Inc.
* @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,
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
namespace OCA\Files_Sharing;

use \OCP\IConfig;

/**
* Class Capabilities
*
* @package OCA\Files_Sharing
*/
class Capabilities {

/** @var IConfig */
private $config;

/**
* @param IConfig $config
*/
public function __construct(IConfig $config) {
$this->config = $config;
}

/**
* @return \OC_OCS_Result
*/
public static function getCapabilities() {
$config = \OC::$server->getConfig();
$cap = new Capabilities($config);
return $cap->getCaps();
}


/**
* @return \OC_OCS_Result
*/
public function getCaps() {
$res = [];

$public = [];
$public['enabled'] = $this->config->getAppValue('core', 'shareapi_allow_links', 'yes') === 'yes';
if ($public['enabled']) {
$public['password'] = [];
$public['password']['enforced'] = ($this->config->getAppValue('core', 'shareapi_enforce_links_password', 'yes') === 'yes');

$public['expire_date'] = [];
$public['expire_date']['enabled'] = $this->config->getAppValue('core', 'shareapi_default_expire_date', 'yes') === 'yes';
if ($public['expire_date']['enabled']) {
$public['expire_date']['days'] = $this->config->getAppValue('core', 'shareapi_expire_after_n_days', '7');
$public['expire_date']['enforced'] = $this->config->getAppValue('core', 'shareapi_enforce_expire_date', 'yes') === 'yes';
}

$public['send_mail'] = $this->config->getAppValue('core', 'shareapi_allow_public_notification', 'yes') === 'yes';
}
$res["public"] = $public;

$res['user']['send_mail'] = $this->config->getAppValue('core', 'shareapi_allow_mail_notification', 'yes') === 'yes';

$res['resharing'] = $this->config->getAppValue('core', 'shareapi_allow_resharing', 'yes') === 'yes';


return new \OC_OCS_Result([
'capabilities' => [
'files_sharing' => $res
],
]);
}

}
187 changes: 187 additions & 0 deletions apps/files_sharing/tests/capabilities.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,187 @@
<?php
/**
* @author Roeland Jago Douma <[email protected]>
*
* @copyright Copyright (c) 2015, ownCloud, Inc.
* @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,
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
namespace OCA\Files_Sharing\Tests;

use OCA\Files_Sharing\Capabilities;
use OCA\Files_Sharing\Tests\TestCase;

/**
* Class FilesSharingCapabilitiesTest
*/
class FilesSharingCapabilitiesTest extends \Test\TestCase {

/**
* Test for the general part in each return statement and assert.
* Strip of the general part on the way.
*
* @param string[] $data Capabilities
* @return string[]
*/
private function getFilesSharingPart(array $data) {
$this->assertArrayHasKey('capabilities', $data);
$this->assertArrayHasKey('files_sharing', $data['capabilities']);
return $data['capabilities']['files_sharing'];
}

/**
* Create a mock config object and insert the values in $map tot the getAppValue
* function. Then obtain the capabilities and extract the first few
* levels in the array
*
* @param (string[])[] $map Map of arguments to return types for the getAppValue function in the mock
* @return string[]
*/
private function getResults(array $map) {
$stub = $this->getMockBuilder('\OCP\IConfig')->disableOriginalConstructor()->getMock();
$stub->method('getAppValue')->will($this->returnValueMap($map));
$cap = new Capabilities($stub);
$result = $this->getFilesSharingPart($cap->getCaps()->getData());
return $result;
}

public function testNoLinkSharing() {
$map = [
['core', 'shareapi_allow_links', 'yes', 'no'],
];
$result = $this->getResults($map);
$this->assertInternalType('array', $result['public']);
$this->assertFalse($result['public']['enabled']);
}

public function testOnlyLinkSharing() {
$map = [
['core', 'shareapi_allow_links', 'yes', 'yes'],
];
$result = $this->getResults($map);
$this->assertInternalType('array', $result['public']);
$this->assertTrue($result['public']['enabled']);
}

public function testLinkPassword() {
$map = [
['core', 'shareapi_allow_links', 'yes', 'yes'],
['core', 'shareapi_enforce_links_password', 'yes', 'yes'],
];
$result = $this->getResults($map);
$this->assertArrayHasKey('password', $result['public']);
$this->assertArrayHasKey('enforced', $result['public']['password']);
$this->assertTrue($result['public']['password']['enforced']);
}

public function testLinkNoPassword() {
$map = [
['core', 'shareapi_allow_links', 'yes', 'yes'],
['core', 'shareapi_enforce_links_password', 'yes', 'no'],
];
$result = $this->getResults($map);
$this->assertArrayHasKey('password', $result['public']);
$this->assertArrayHasKey('enforced', $result['public']['password']);
$this->assertFalse($result['public']['password']['enforced']);
}

public function testLinkNoExpireDate() {
$map = [
['core', 'shareapi_allow_links', 'yes', 'yes'],
['core', 'shareapi_default_expire_date', 'yes', 'no'],
];
$result = $this->getResults($map);
$this->assertArrayHasKey('expire_date', $result['public']);
$this->assertInternalType('array', $result['public']['expire_date']);
$this->assertFalse($result['public']['expire_date']['enabled']);
}

public function testLinkExpireDate() {
$map = [
['core', 'shareapi_allow_links', 'yes', 'yes'],
['core', 'shareapi_default_expire_date', 'yes', 'yes'],
['core', 'shareapi_expire_after_n_days', '7', '7'],
['core', 'shareapi_enforce_expire_date', 'yes', 'no'],
];
$result = $this->getResults($map);
$this->assertArrayHasKey('expire_date', $result['public']);
$this->assertInternalType('array', $result['public']['expire_date']);
$this->assertTrue($result['public']['expire_date']['enabled']);
$this->assertArrayHasKey('days', $result['public']['expire_date']);
$this->assertFalse($result['public']['expire_date']['enforced']);
}

public function testLinkExpireDateEnforced() {
$map = [
['core', 'shareapi_allow_links', 'yes', 'yes'],
['core', 'shareapi_default_expire_date', 'yes', 'yes'],
['core', 'shareapi_enforce_expire_date', 'yes', 'yes'],
];
$result = $this->getResults($map);
$this->assertArrayHasKey('expire_date', $result['public']);
$this->assertInternalType('array', $result['public']['expire_date']);
$this->assertTrue($result['public']['expire_date']['enforced']);
}

public function testLinkSendMail() {
$map = [
['core', 'shareapi_allow_links', 'yes', 'yes'],
['core', 'shareapi_allow_public_notification', 'yes', 'yes'],
];
$result = $this->getResults($map);
$this->assertTrue($result['public']['send_mail']);
}

public function testLinkNoSendMail() {
$map = [
['core', 'shareapi_allow_links', 'yes', 'yes'],
['core', 'shareapi_allow_public_notification', 'yes', 'no'],
];
$result = $this->getResults($map);
$this->assertFalse($result['public']['send_mail']);
}

public function testUserSendMail() {
$map = [
['core', 'shareapi_allow_mail_notification', 'yes', 'yes'],
];
$result = $this->getResults($map);
$this->assertTrue($result['user']['send_mail']);
}

public function testUserNoSendMail() {
$map = [
['core', 'shareapi_allow_mail_notification', 'yes', 'no'],
];
$result = $this->getResults($map);
$this->assertFalse($result['user']['send_mail']);
}

public function testResharing() {
$map = [
['core', 'shareapi_allow_resharing', 'yes', 'yes'],
];
$result = $this->getResults($map);
$this->assertTrue($result['resharing']);
}

public function testNoResharing() {
$map = [
['core', 'shareapi_allow_resharing', 'yes', 'no'],
];
$result = $this->getResults($map);
$this->assertFalse($result['resharing']);
}
}