summaryrefslogtreecommitdiff
path: root/hauth/Hybrid/Storage.php
blob: b9fa36696b7972c3805c4e91223b36baa7a28000 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
<?php

/**
 * HybridAuth
 * http://hybridauth.sourceforge.net | http://github.com/hybridauth/hybridauth
 * (c) 2009-2015, HybridAuth authors | http://hybridauth.sourceforge.net/licenses.html 
 */
require_once realpath(dirname(__FILE__)) . "/StorageInterface.php";

/**
 * HybridAuth storage manager
 */
class Hybrid_Storage implements Hybrid_Storage_Interface {

	/**
	 * Constructor
	 */
	function __construct() {
		if (!session_id()) {
			if (!session_start()) {
				throw new Exception("Hybridauth requires the use of 'session_start()' at the start of your script, which appears to be disabled.", 1);
			}
		}

		$this->config("php_session_id", session_id());
		$this->config("version", Hybrid_Auth::$version);
	}

	/**
	 * Saves a value in the config storage, or returns config if value is null
	 *
	 * @param string $key   Config name
	 * @param string $value Config value
	 * @return array|null
	 */
	public function config($key, $value = null) {
		$key = strtolower($key);

		if ($value) {
			$_SESSION["HA::CONFIG"][$key] = serialize($value);
		} elseif (isset($_SESSION["HA::CONFIG"][$key])) {
			return unserialize($_SESSION["HA::CONFIG"][$key]);
		}

		return null;
	}

	/**
	 * Returns value from session storage
	 *
	 * @param string $key Key
	 * @return string|null
	 */
	public function get($key) {
		$key = strtolower($key);

		if (isset($_SESSION["HA::STORE"], $_SESSION["HA::STORE"][$key])) {
			return unserialize($_SESSION["HA::STORE"][$key]);
		}

		return null;
	}

	/**
	 * Saves a key value pair to the session storage
	 *
	 * @param string $key   Key
	 * @param string $value Value
	 * @return void
	 */
	public function set($key, $value) {
		$key = strtolower($key);
		$_SESSION["HA::STORE"][$key] = serialize($value);
	}

	/**
	 * Clear session storage
	 * @return void
	 */
	function clear() {
		$_SESSION["HA::STORE"] = [];
	}

	/**
	 * Delete a specific key from session storage
	 *
	 * @param string $key Key
	 * @return void
	 */
	function delete($key) {
		$key = strtolower($key);

		if (isset($_SESSION["HA::STORE"], $_SESSION["HA::STORE"][$key])) {
			$f = $_SESSION['HA::STORE'];
			unset($f[$key]);
			$_SESSION["HA::STORE"] = $f;
		}
	}

	/**
	 * Delete all keys recursively from session storage
	 *
	 * @param string $key Key
	 * @retun void
	 */
	function deleteMatch($key) {
		$key = strtolower($key);

		if (isset($_SESSION["HA::STORE"]) && count($_SESSION["HA::STORE"])) {
			$f = $_SESSION['HA::STORE'];
			foreach ($f as $k => $v) {
				if (strstr($k, $key)) {
					unset($f[$k]);
				}
			}
			$_SESSION["HA::STORE"] = $f;
		}
	}

	/**
	 * Returns session storage as a serialized string
	 * @return string|null
	 */
	function getSessionData() {
		if (isset($_SESSION["HA::STORE"])) {
			return serialize($_SESSION["HA::STORE"]);
		}
		return null;
	}

	/**
	 * Restores the session from serialized session data
	 * 
	 * @param string $sessiondata Serialized session data
	 * @return void
	 */
	function restoreSessionData($sessiondata = null) {
		$_SESSION["HA::STORE"] = unserialize($sessiondata);
	}

}