diff options
Diffstat (limited to 'lib/SimpleSAML/Store.php')
-rw-r--r-- | lib/SimpleSAML/Store.php | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/lib/SimpleSAML/Store.php b/lib/SimpleSAML/Store.php new file mode 100644 index 0000000..db20465 --- /dev/null +++ b/lib/SimpleSAML/Store.php @@ -0,0 +1,84 @@ +<?php + +/** + * Base class for datastores. + * + * @package simpleSAMLphp + * @version $Id$ + */ +abstract class SimpleSAML_Store { + + /** + * Our singleton instance. + * + * This is FALSE if the datastore isn't enabled, and NULL + * if we haven't attempted to initialize it. + * + * @var SimpleSAML_Store|FALSE|NULL + */ + private static $instance; + + + /** + * Retrieve our singleton instance. + * + * @return SimpleSAML_Store|FALSE The datastore, or FALSE if it isn't enabled. + */ + public static function getInstance() { + + if (self::$instance !== NULL) { + return self::$instance; + } + + $config = SimpleSAML_Configuration::getInstance(); + $storeType = $config->getString('store.type', NULL); + if ($storeType === NULL) { + $storeType = $config->getString('session.handler', 'phpsession'); + } + + switch ($storeType) { + case 'phpsession': + /* We cannot support advanced features with the PHP session store. */ + self::$instance = FALSE; + break; + case 'memcache': + self::$instance = new SimpleSAML_Store_Memcache(); + break; + default: + throw new SimpleSAML_Error_Exception('Unknown datastore type: ' . var_export($storeType, TRUE)); + } + + return self::$instance; + } + + + /** + * Retrieve a value from the datastore. + * + * @param string $type The datatype. + * @param string $key The key. + * @return mixed|NULL The value. + */ + abstract public function get($type, $key); + + + /** + * Save a value to the datastore. + * + * @param string $type The datatype. + * @param string $key The key. + * @param mixed $value The value. + * @param int|NULL $expire The expiration time (unix timestamp), or NULL if it never expires. + */ + abstract public function set($type, $key, $value, $expire = NULL); + + + /** + * Delete a value from the datastore. + * + * @param string $type The datatype. + * @param string $key The key. + */ + abstract public function delete($type, $key); + +} |