mirror of
https://github.com/PrivateBin/PrivateBin.git
synced 2024-03-22 13:10:41 +08:00
refactoring how attachments are stored
This commit is contained in:
parent
22b4c89227
commit
d04eab52c9
|
@ -407,8 +407,8 @@ class zerobin
|
||||||
) return $this->_return_message(1, 'You are unlucky. Try again.');
|
) return $this->_return_message(1, 'You are unlucky. Try again.');
|
||||||
|
|
||||||
// Add attachment and its name, if one was sent
|
// Add attachment and its name, if one was sent
|
||||||
if ($has_attachment) $storage['attachment'] = $attachment;
|
if ($has_attachment) $storage['meta']['attachment'] = $attachment;
|
||||||
if ($has_attachmentname) $storage['attachmentname'] = $attachmentname;
|
if ($has_attachmentname) $storage['meta']['attachmentname'] = $attachmentname;
|
||||||
|
|
||||||
// New paste
|
// New paste
|
||||||
if (
|
if (
|
||||||
|
|
|
@ -75,9 +75,20 @@ class zerobin_data extends zerobin_abstract
|
||||||
public function read($pasteid)
|
public function read($pasteid)
|
||||||
{
|
{
|
||||||
if(!$this->exists($pasteid)) return false;
|
if(!$this->exists($pasteid)) return false;
|
||||||
return json_decode(
|
$paste = json_decode(
|
||||||
file_get_contents(self::_dataid2path($pasteid) . $pasteid)
|
file_get_contents(self::_dataid2path($pasteid) . $pasteid)
|
||||||
);
|
);
|
||||||
|
if (property_exists($paste->meta, 'attachment'))
|
||||||
|
{
|
||||||
|
$paste->attachment = $paste->meta->attachment;
|
||||||
|
unset($paste->meta->attachment);
|
||||||
|
if (property_exists($paste->meta, 'attachmentname'))
|
||||||
|
{
|
||||||
|
$paste->attachmentname = $paste->meta->attachmentname;
|
||||||
|
unset($paste->meta->attachmentname);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $paste;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -90,7 +101,7 @@ class zerobin_data extends zerobin_abstract
|
||||||
public function delete($pasteid)
|
public function delete($pasteid)
|
||||||
{
|
{
|
||||||
// Delete the paste itself.
|
// Delete the paste itself.
|
||||||
unlink(self::_dataid2path($pasteid) . $pasteid);
|
@unlink(self::_dataid2path($pasteid) . $pasteid);
|
||||||
|
|
||||||
// Delete discussion if it exists.
|
// Delete discussion if it exists.
|
||||||
$discdir = self::_dataid2discussionpath($pasteid);
|
$discdir = self::_dataid2discussionpath($pasteid);
|
||||||
|
@ -100,7 +111,7 @@ class zerobin_data extends zerobin_abstract
|
||||||
$dir = dir($discdir);
|
$dir = dir($discdir);
|
||||||
while (false !== ($filename = $dir->read()))
|
while (false !== ($filename = $dir->read()))
|
||||||
{
|
{
|
||||||
if (is_file($discdir.$filename)) unlink($discdir.$filename);
|
if (is_file($discdir.$filename)) @unlink($discdir.$filename);
|
||||||
}
|
}
|
||||||
$dir->close();
|
$dir->close();
|
||||||
|
|
||||||
|
|
|
@ -264,6 +264,24 @@ class zerobin_db extends zerobin_abstract
|
||||||
if (
|
if (
|
||||||
$paste['burnafterreading']
|
$paste['burnafterreading']
|
||||||
) self::$_cache[$pasteid]->meta->burnafterreading = true;
|
) self::$_cache[$pasteid]->meta->burnafterreading = true;
|
||||||
|
if (property_exists(self::$_cache[$pasteid]->meta, 'attachment'))
|
||||||
|
{
|
||||||
|
self::$_cache[$pasteid]->attachment = self::$_cache[$pasteid]->meta->attachment;
|
||||||
|
unset(self::$_cache[$pasteid]->meta->attachment);
|
||||||
|
if (property_exists(self::$_cache[$pasteid]->meta, 'attachmentname'))
|
||||||
|
{
|
||||||
|
self::$_cache[$pasteid]->attachmentname = self::$_cache[$pasteid]->meta->attachmentname;
|
||||||
|
unset(self::$_cache[$pasteid]->meta->attachmentname);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
elseif (array_key_exists('attachment', $paste))
|
||||||
|
{
|
||||||
|
self::$_cache[$pasteid]->attachment = $paste['attachment'];
|
||||||
|
if (array_key_exists('attachmentname', $paste))
|
||||||
|
{
|
||||||
|
self::$_cache[$pasteid]->attachmentname = $paste['attachmentname'];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,12 +24,12 @@ class helper
|
||||||
*/
|
*/
|
||||||
private static $paste = array(
|
private static $paste = array(
|
||||||
'data' => '{"iv":"EN39/wd5Nk8HAiSG2K5AsQ","v":1,"iter":1000,"ks":128,"ts":64,"mode":"ccm","adata":"","cipher":"aes","salt":"QKN1DBXe5PI","ct":"8hA83xDdXjD7K2qfmw5NdA"}',
|
'data' => '{"iv":"EN39/wd5Nk8HAiSG2K5AsQ","v":1,"iter":1000,"ks":128,"ts":64,"mode":"ccm","adata":"","cipher":"aes","salt":"QKN1DBXe5PI","ct":"8hA83xDdXjD7K2qfmw5NdA"}',
|
||||||
|
'attachment' => '{"iv":"Pd4pOKWkmDTT9uPwVwd5Ag","v":1,"iter":1000,"ks":128,"ts":64,"mode":"ccm","adata":"","cipher":"aes","salt":"ZIUhFTliVz4","ct":"6nOCU3peNDclDDpFtJEBKA"}',
|
||||||
|
'attachmentname' => '{"iv":"76MkAtOGC4oFogX/aSMxRA","v":1,"iter":1000,"ks":128,"ts":64,"mode":"ccm","adata":"","cipher":"aes","salt":"ZIUhFTliVz4","ct":"b6Ae/U1xJdsX/+lATud4sQ"}',
|
||||||
'meta' => array(
|
'meta' => array(
|
||||||
'postdate' => 1344803344,
|
'postdate' => 1344803344,
|
||||||
'opendiscussion' => true,
|
'opendiscussion' => true,
|
||||||
'formatter' => 'plaintext',
|
'formatter' => 'plaintext',
|
||||||
'attachment' => '{"iv":"Pd4pOKWkmDTT9uPwVwd5Ag","v":1,"iter":1000,"ks":128,"ts":64,"mode":"ccm","adata":"","cipher":"aes","salt":"ZIUhFTliVz4","ct":"6nOCU3peNDclDDpFtJEBKA"}',
|
|
||||||
'attachmentname' => '{"iv":"76MkAtOGC4oFogX/aSMxRA","v":1,"iter":1000,"ks":128,"ts":64,"mode":"ccm","adata":"","cipher":"aes","salt":"ZIUhFTliVz4","ct":"b6Ae/U1xJdsX/+lATud4sQ"}',
|
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -70,6 +70,18 @@ class helper
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public static function getPaste($meta = array())
|
public static function getPaste($meta = array())
|
||||||
|
{
|
||||||
|
$example = self::getPasteWithAttachment($meta);
|
||||||
|
unset($example['attachment'], $example['attachmentname']);
|
||||||
|
return $example;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get example paste
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function getPasteWithAttachment($meta = array())
|
||||||
{
|
{
|
||||||
$example = self::$paste;
|
$example = self::$paste;
|
||||||
$example['meta'] = array_merge($example['meta'], $meta);
|
$example['meta'] = array_merge($example['meta'], $meta);
|
||||||
|
|
|
@ -3,10 +3,10 @@ class sjclTest extends PHPUnit_Framework_TestCase
|
||||||
{
|
{
|
||||||
public function testSjclValidatorValidatesCorrectly()
|
public function testSjclValidatorValidatesCorrectly()
|
||||||
{
|
{
|
||||||
$paste = helper::getPaste();
|
$paste = helper::getPasteWithAttachment();
|
||||||
$this->assertTrue(sjcl::isValid($paste['data']), 'valid sjcl');
|
$this->assertTrue(sjcl::isValid($paste['data']), 'valid sjcl');
|
||||||
$this->assertTrue(sjcl::isValid($paste['meta']['attachment']), 'valid sjcl');
|
$this->assertTrue(sjcl::isValid($paste['attachment']), 'valid sjcl');
|
||||||
$this->assertTrue(sjcl::isValid($paste['meta']['attachmentname']), 'valid sjcl');
|
$this->assertTrue(sjcl::isValid($paste['attachmentname']), 'valid sjcl');
|
||||||
$this->assertTrue(sjcl::isValid(helper::getComment()['data']), 'valid sjcl');
|
$this->assertTrue(sjcl::isValid(helper::getComment()['data']), 'valid sjcl');
|
||||||
|
|
||||||
$this->assertTrue(sjcl::isValid('{"iv":"83Ax/OdUav3SanDW9dcQPg","v":1,"iter":1000,"ks":128,"ts":64,"mode":"ccm","adata":"","cipher":"aes","salt":"Gx1vA2/gQ3U","ct":"j7ImByuE5xCqD2YXm6aSyA"}'), 'valid sjcl');
|
$this->assertTrue(sjcl::isValid('{"iv":"83Ax/OdUav3SanDW9dcQPg","v":1,"iter":1000,"ks":128,"ts":64,"mode":"ccm","adata":"","cipher":"aes","salt":"Gx1vA2/gQ3U","ct":"j7ImByuE5xCqD2YXm6aSyA"}'), 'valid sjcl');
|
||||||
|
|
|
@ -311,10 +311,9 @@ class zerobinTest extends PHPUnit_Framework_TestCase
|
||||||
$options['main']['fileupload'] = true;
|
$options['main']['fileupload'] = true;
|
||||||
helper::confBackup();
|
helper::confBackup();
|
||||||
helper::createIniFile(CONF, $options);
|
helper::createIniFile(CONF, $options);
|
||||||
$_POST = helper::getPaste();
|
$_POST = helper::getPasteWithAttachment();
|
||||||
$_POST['attachment'] = $_POST['meta']['attachment'];
|
|
||||||
$_POST['attachmentname'] = $_POST['meta']['attachmentname'];
|
|
||||||
$_SERVER['REMOTE_ADDR'] = '::1';
|
$_SERVER['REMOTE_ADDR'] = '::1';
|
||||||
|
$this->assertFalse($this->_model->exists(helper::getPasteId()), 'paste does not exists before posting data');
|
||||||
ob_start();
|
ob_start();
|
||||||
new zerobin;
|
new zerobin;
|
||||||
$content = ob_get_contents();
|
$content = ob_get_contents();
|
||||||
|
@ -326,6 +325,11 @@ class zerobinTest extends PHPUnit_Framework_TestCase
|
||||||
'outputs valid delete token'
|
'outputs valid delete token'
|
||||||
);
|
);
|
||||||
$this->assertTrue($this->_model->exists($response['id']), 'paste exists after posting data');
|
$this->assertTrue($this->_model->exists($response['id']), 'paste exists after posting data');
|
||||||
|
$original = json_decode(json_encode($_POST));
|
||||||
|
$stored = $this->_model->read($response['id']);
|
||||||
|
foreach (array('data', 'attachment', 'attachmentname') as $key) {
|
||||||
|
$this->assertEquals($original->$key, $stored->$key);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -20,6 +20,8 @@ class zerobin_dataTest extends PHPUnit_Framework_TestCase
|
||||||
|
|
||||||
public function testFileBasedDataStoreWorks()
|
public function testFileBasedDataStoreWorks()
|
||||||
{
|
{
|
||||||
|
$this->_model->delete(helper::getPasteId());
|
||||||
|
|
||||||
// storing pastes
|
// storing pastes
|
||||||
$paste = helper::getPaste(array('expire_date' => 1344803344));
|
$paste = helper::getPaste(array('expire_date' => 1344803344));
|
||||||
$this->assertFalse($this->_model->exists(helper::getPasteId()), 'paste does not yet exist');
|
$this->assertFalse($this->_model->exists(helper::getPasteId()), 'paste does not yet exist');
|
||||||
|
@ -46,4 +48,19 @@ class zerobin_dataTest extends PHPUnit_Framework_TestCase
|
||||||
$this->assertFalse($this->_model->existsComment(helper::getPasteId(), helper::getPasteId(), helper::getCommentId()), 'comment was deleted with paste');
|
$this->assertFalse($this->_model->existsComment(helper::getPasteId(), helper::getPasteId(), helper::getCommentId()), 'comment was deleted with paste');
|
||||||
$this->assertFalse($this->_model->read(helper::getPasteId()), 'paste can no longer be found');
|
$this->assertFalse($this->_model->read(helper::getPasteId()), 'paste can no longer be found');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testFileBasedAttachmentStoreWorks()
|
||||||
|
{
|
||||||
|
$this->_model->delete(helper::getPasteId());
|
||||||
|
$original = $paste = helper::getPasteWithAttachment(array('expire_date' => 1344803344));
|
||||||
|
$paste['meta']['attachment'] = $paste['attachment'];
|
||||||
|
$paste['meta']['attachmentname'] = $paste['attachmentname'];
|
||||||
|
unset($paste['attachment'], $paste['attachmentname']);
|
||||||
|
$this->assertFalse($this->_model->exists(helper::getPasteId()), 'paste does not yet exist');
|
||||||
|
$this->assertTrue($this->_model->create(helper::getPasteId(), $paste), 'store new paste');
|
||||||
|
$this->assertTrue($this->_model->exists(helper::getPasteId()), 'paste exists after storing it');
|
||||||
|
$this->assertFalse($this->_model->create(helper::getPasteId(), $paste), 'unable to store the same paste twice');
|
||||||
|
$this->assertEquals(json_decode(json_encode($original)), $this->_model->read(helper::getPasteId()));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,9 @@ class zerobin_dbTest extends PHPUnit_Framework_TestCase
|
||||||
|
|
||||||
public function testDatabaseBasedDataStoreWorks()
|
public function testDatabaseBasedDataStoreWorks()
|
||||||
{
|
{
|
||||||
|
$this->_model->delete(helper::getPasteId());
|
||||||
|
|
||||||
|
// storing pastes
|
||||||
$paste = helper::getPaste(array('expire_date' => 1344803344));
|
$paste = helper::getPaste(array('expire_date' => 1344803344));
|
||||||
$this->assertFalse($this->_model->exists(helper::getPasteId()), 'paste does not yet exist');
|
$this->assertFalse($this->_model->exists(helper::getPasteId()), 'paste does not yet exist');
|
||||||
$this->assertTrue($this->_model->create(helper::getPasteId(), $paste), 'store new paste');
|
$this->assertTrue($this->_model->create(helper::getPasteId(), $paste), 'store new paste');
|
||||||
|
@ -44,6 +47,20 @@ class zerobin_dbTest extends PHPUnit_Framework_TestCase
|
||||||
$this->assertFalse($this->_model->read(helper::getPasteId()), 'paste can no longer be found');
|
$this->assertFalse($this->_model->read(helper::getPasteId()), 'paste can no longer be found');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testDatabaseBasedAttachmentStoreWorks()
|
||||||
|
{
|
||||||
|
$this->_model->delete(helper::getPasteId());
|
||||||
|
$original = $paste = helper::getPasteWithAttachment(array('expire_date' => 1344803344));
|
||||||
|
$paste['meta']['attachment'] = $paste['attachment'];
|
||||||
|
$paste['meta']['attachmentname'] = $paste['attachmentname'];
|
||||||
|
unset($paste['attachment'], $paste['attachmentname']);
|
||||||
|
$this->assertFalse($this->_model->exists(helper::getPasteId()), 'paste does not yet exist');
|
||||||
|
$this->assertTrue($this->_model->create(helper::getPasteId(), $paste), 'store new paste');
|
||||||
|
$this->assertTrue($this->_model->exists(helper::getPasteId()), 'paste exists after storing it');
|
||||||
|
$this->assertFalse($this->_model->create(helper::getPasteId(), $paste), 'unable to store the same paste twice');
|
||||||
|
$this->assertEquals(json_decode(json_encode($original)), $this->_model->read(helper::getPasteId()));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @expectedException PDOException
|
* @expectedException PDOException
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue
Block a user