Browse Source

added instantburnafterreading option to address #174

El RIDO 9 năm trước cách đây
mục cha
commit
f54036976a
5 tập tin đã thay đổi với 42 bổ sung1 xóa
  1. 4 0
      cfg/conf.ini.sample
  2. 1 0
      lib/Configuration.php
  3. 5 0
      lib/Model/Paste.php
  4. 31 0
      tst/PrivateBinTest.php
  5. 1 1
      tst/README.md

+ 4 - 0
cfg/conf.ini.sample

@@ -21,6 +21,10 @@ fileupload = false
 ; preselect the burn-after-reading feature, defaults to false
 burnafterreadingselected = false
 
+; delete a burn after reading paste immediatly after it is first accessed from
+; the server and do not wait for a successful decryption
+instantburnafterreading = false
+
 ; which display mode to preselect by default, defaults to "plaintext"
 ; make sure the value exists in [formatter_options]
 defaultformatter = "plaintext"

+ 1 - 0
lib/Configuration.php

@@ -42,6 +42,7 @@ class Configuration
             'password'                 => true,
             'fileupload'               => false,
             'burnafterreadingselected' => false,
+            'instantburnafterreading'  => false,
             'defaultformatter'         => 'plaintext',
             'syntaxhighlightingtheme'  => null,
             'sizelimit'                => 2097152,

+ 5 - 0
lib/Model/Paste.php

@@ -48,6 +48,11 @@ class Paste extends AbstractModel
             $data->meta->remaining_time = $data->meta->expire_date - time();
         }
 
+        // check if non-expired burn after reading paste needs to be deleted
+        if (property_exists($data->meta, 'burnafterreading') && $data->meta->burnafterreading && $this->_conf->getKey('instantburnafterreading')) {
+            $this->delete();
+        }
+
         // set formatter for for the view.
         if (!property_exists($data->meta, 'formatter')) {
             // support < 0.21 syntax highlighting

+ 31 - 0
tst/PrivateBinTest.php

@@ -822,6 +822,37 @@ class PrivateBinTest extends PHPUnit_Framework_TestCase
             $content,
             'outputs data correctly'
         );
+        // by default it will be deleted after encryption by the JS
+        $this->assertTrue($this->_model->exists(Helper::getPasteId()), 'paste exists after reading');
+    }
+
+    /**
+     * @runInSeparateProcess
+     */
+    public function testReadInstantBurn()
+    {
+        $this->reset();
+        $options                                    = parse_ini_file(CONF, true);
+        $options['main']['instantburnafterreading'] = 1;
+        Helper::confBackup();
+        Helper::createIniFile(CONF, $options);
+        $burnPaste = Helper::getPaste(array('burnafterreading' => true));
+        $this->_model->create(Helper::getPasteId(), $burnPaste);
+        $_SERVER['QUERY_STRING'] = Helper::getPasteId();
+        ob_start();
+        new PrivateBin;
+        $content = ob_get_contents();
+        ob_end_clean();
+        unset($burnPaste['meta']['salt']);
+        $this->assertRegExp(
+            '#<div id="cipherdata"[^>]*>' .
+            preg_quote(htmlspecialchars(Helper::getPasteAsJson($burnPaste['meta']), ENT_NOQUOTES)) .
+            '</div>#',
+            $content,
+            'outputs data correctly'
+        );
+        // in this case the changed configuration deletes it instantly
+        $this->assertFalse($this->_model->exists(Helper::getPasteId()), 'paste exists after reading');
     }
 
     /**

+ 1 - 1
tst/README.md

@@ -10,7 +10,7 @@ and their dependencies:
 
 Example for Debian and Ubuntu:
 ```console
-$ sudo apt install phpunit php-gd php-sqlite php-xdebug
+$ sudo apt install phpunit php-gd php-sqlite3 php-xdebug
 ```
 
 To run the tests, change into the `tst` directory and run phpunit: