| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- <?php
- /**
- * PrivateBin
- *
- * a zero-knowledge paste bin
- *
- * @link https://github.com/PrivateBin/PrivateBin
- * @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
- * @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
- * @version 0.22
- */
- namespace PrivateBin\Model;
- use PrivateBin\Configuration;
- use PrivateBin\Data\AbstractData;
- use PrivateBin\Sjcl;
- use Exception;
- use stdClass;
- /**
- * AbstractModel
- *
- * Abstract model for PrivateBin objects.
- */
- abstract class AbstractModel
- {
- /**
- * Instance ID.
- *
- * @access protected
- * @var string
- */
- protected $_id = '';
- /**
- * Instance data.
- *
- * @access protected
- * @var stdClass
- */
- protected $_data;
- /**
- * Configuration.
- *
- * @access protected
- * @var configuration
- */
- protected $_conf;
- /**
- * Data storage.
- *
- * @access protected
- * @var privatebin_abstract
- */
- protected $_store;
- /**
- * Instance constructor.
- *
- * @access public
- * @param configuration $configuration
- * @param privatebin_abstract $storage
- * @return void
- */
- public function __construct(configuration $configuration, AbstractData $storage)
- {
- $this->_conf = $configuration;
- $this->_store = $storage;
- $this->_data = new stdClass;
- $this->_data->meta = new stdClass;
- }
- /**
- * Get ID.
- *
- * @access public
- * @return string
- */
- public function getId()
- {
- return $this->_id;
- }
- /**
- * Set ID.
- *
- * @access public
- * @param string $id
- * @throws Exception
- * @return void
- */
- public function setId($id)
- {
- if (!self::isValidId($id)) {
- throw new Exception('Invalid paste ID.', 60);
- }
- $this->_id = $id;
- }
- /**
- * Set data and recalculate ID.
- *
- * @access public
- * @param string $data
- * @throws Exception
- * @return void
- */
- public function setData($data)
- {
- if (!sjcl::isValid($data)) {
- throw new Exception('Invalid data.', 61);
- }
- $this->_data->data = $data;
- // We just want a small hash to avoid collisions:
- // Half-MD5 (64 bits) will do the trick
- $this->setId(substr(hash('md5', $data), 0, 16));
- }
- /**
- * Get instance data.
- *
- * @access public
- * @return stdClass
- */
- abstract public function get();
- /**
- * Store the instance's data.
- *
- * @access public
- * @throws Exception
- * @return void
- */
- abstract public function store();
- /**
- * Delete the current instance.
- *
- * @access public
- * @throws Exception
- * @return void
- */
- abstract public function delete();
- /**
- * Test if current instance exists in store.
- *
- * @access public
- * @return bool
- */
- abstract public function exists();
- /**
- * Validate ID.
- *
- * @access public
- * @static
- * @param string $id
- * @return bool
- */
- public static function isValidId($id)
- {
- return (bool) preg_match('#\A[a-f\d]{16}\z#', (string) $id);
- }
- }
|