Validate the quota value to be a correct value

This commit is contained in:
Thomas Müller 2015-05-07 17:56:13 +02:00
parent 9f2f282191
commit 15d134124b
4 changed files with 43 additions and 17 deletions

View File

@ -155,7 +155,14 @@ class Users {
case 'quota':
$quota = $parameters['_put']['value'];
if($quota !== 'none' and $quota !== 'default') {
$quota = OC_Helper::computerFileSize($quota);
if (is_numeric($quota)) {
$quota = floatval($quota);
} else {
$quota = OC_Helper::computerFileSize($quota);
}
if ($quota === false) {
return new OC_OCS_Result(null, 103, "Invalid quota value {$parameters['_put']['value']}");
}
if($quota == 0) {
$quota = 'default';
}else if($quota == -1){

View File

@ -187,20 +187,36 @@ class UsersTest extends TestCase {
}
public function testEditOwnQuota() {
/**
* @dataProvider providesQuotas
* @param $expected
* @param $quota
*/
public function testEditOwnQuota($expected, $quota) {
$user = $this->generateUsers();
\OC_Group::addToGroup($user, 'admin');
\OC_User::setUserId($user);
$result = \OCA\provisioning_API\Users::editUser(
array(
[
'userid' => $user,
'_put' => array(
'_put' => [
'key' => 'quota',
'value' => '20G',
),
)
'value' => $quota,
],
]
);
$this->assertInstanceOf('OC_OCS_Result', $result);
$this->assertFalse($result->succeeded());
$this->assertEquals($expected, $result->succeeded());
}
public function providesQuotas() {
return [
[true, '20G'],
[true, '1234567'],
[true, 'none'],
[true, 'default'],
[false, 'qwertzu'],
];
}
public function testAdminEditOwnQuota() {

View File

@ -413,6 +413,8 @@ class OC_Helper {
if (preg_match('#([kmgtp]?b?)$#si', $str, $matches) && !empty($bytes_array[$matches[1]])) {
$bytes *= $bytes_array[$matches[1]];
} else {
return false;
}
$bytes = round($bytes);

View File

@ -53,21 +53,22 @@ class Test_Helper extends \Test\TestCase {
}
/**
* @dataProvider computerFileSizeProvider
* @dataProvider providesComputerFileSize
*/
function testComputerFileSize($expected, $input) {
$result = OC_Helper::computerFileSize($input);
$this->assertEquals($expected, $result);
}
function computerFileSizeProvider(){
return array(
array(0.0, "0 B"),
array(1024.0, "1 kB"),
array(1395864371.0, '1.3 GB'),
array(9961472.0, "9.5 MB"),
array(500041567437.0, "465.7 GB"),
);
function providesComputerFileSize(){
return [
[0.0, "0 B"],
[1024.0, "1 kB"],
[1395864371.0, '1.3 GB'],
[9961472.0, "9.5 MB"],
[500041567437.0, "465.7 GB"],
[false, "12 GB etfrhzui"]
];
}
function testGetMimeType() {