| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- <?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 1.6.0
- */
- namespace PrivateBin\Model;
- use Exception;
- use PrivateBin\Configuration;
- use PrivateBin\Data\AbstractData;
- /**
- * AbstractModel
- *
- * Abstract model for PrivateBin objects.
- */
- abstract class AbstractModel
- {
- /**
- * Instance ID.
- *
- * @access protected
- * @var string
- */
- protected $_id = '';
- /**
- * Instance data.
- *
- * @access protected
- * @var array
- */
- protected $_data = array('meta' => array());
- /**
- * Configuration.
- *
- * @access protected
- * @var Configuration
- */
- protected $_conf;
- /**
- * Data storage.
- *
- * @access protected
- * @var AbstractData
- */
- protected $_store;
- /**
- * Instance constructor.
- *
- * @access public
- * @param Configuration $configuration
- * @param AbstractData $storage
- */
- public function __construct(Configuration $configuration, AbstractData $storage)
- {
- $this->_conf = $configuration;
- $this->_store = $storage;
- }
- /**
- * Get ID.
- *
- * @access public
- * @return string
- */
- public function getId()
- {
- return $this->_id;
- }
- /**
- * Set ID.
- *
- * @access public
- * @param string $id
- * @throws Exception
- */
- 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 array $data
- * @throws Exception
- */
- public function setData(array $data)
- {
- $data = $this->_sanitize($data);
- $this->_validate($data);
- $this->_data = $data;
- // calculate a 64 bit checksum to avoid collisions
- $this->setId(hash(version_compare(PHP_VERSION, '5.6', '<') ? 'fnv164' : 'fnv1a64', $data['ct']));
- }
- /**
- * Get instance data.
- *
- * @access public
- * @return array
- */
- public function get()
- {
- return $this->_data;
- }
- /**
- * Store the instance's data.
- *
- * @access public
- * @throws Exception
- */
- abstract public function store();
- /**
- * Delete the current instance.
- *
- * @access public
- * @throws Exception
- */
- 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);
- }
- /**
- * Sanitizes data to conform with current configuration.
- *
- * @access protected
- * @param array $data
- * @return array
- */
- abstract protected function _sanitize(array $data);
- /**
- * Validate data.
- *
- * @access protected
- * @param array $data
- * @throws Exception
- */
- protected function _validate(array $data)
- {
- }
- }
|