Completed
Push — master ( 21ead3...4a99b8 )
by Robbie
10s
created
tests/CookieStoreTest.php 1 patch
Indentation   +55 added lines, -55 removed lines patch added patch discarded remove patch
@@ -10,69 +10,69 @@
 block discarded – undo
10 10
 
11 11
 class CookieStoreTest extends AbstractTest
12 12
 {
13
-    protected function getStore()
14
-    {
15
-        $store = Injector::inst()->get(CookieStore::class);
16
-        $store->setKey(uniqid());
17
-        $store->open(TempFolder::getTempFolder(BASE_PATH).'/'.__CLASS__, 'SESSIONCOOKIE');
13
+	protected function getStore()
14
+	{
15
+		$store = Injector::inst()->get(CookieStore::class);
16
+		$store->setKey(uniqid());
17
+		$store->open(TempFolder::getTempFolder(BASE_PATH).'/'.__CLASS__, 'SESSIONCOOKIE');
18 18
 
19
-        return $store;
20
-    }
19
+		return $store;
20
+	}
21 21
 
22
-    public function testStoreLargeData()
23
-    {
24
-        $session = uniqid();
25
-        $store = $this->getStore();
22
+	public function testStoreLargeData()
23
+	{
24
+		$session = uniqid();
25
+		$store = $this->getStore();
26 26
 
27
-        // Test new session is blank
28
-        $result = $store->read($session);
29
-        $this->assertEmpty($result);
27
+		// Test new session is blank
28
+		$result = $store->read($session);
29
+		$this->assertEmpty($result);
30 30
 
31
-        // Save data against session
32
-        $data1 = array(
33
-            'Large' => str_repeat('A', 600),
34
-            'Content' => str_repeat('B', 600)
35
-        );
36
-        $store->write($session, serialize($data1));
37
-        $result = $store->read($session);
31
+		// Save data against session
32
+		$data1 = array(
33
+			'Large' => str_repeat('A', 600),
34
+			'Content' => str_repeat('B', 600)
35
+		);
36
+		$store->write($session, serialize($data1));
37
+		$result = $store->read($session);
38 38
 
39
-        // Cookies should not try to store data that large
40
-        $this->assertEmpty($result);
41
-    }
39
+		// Cookies should not try to store data that large
40
+		$this->assertEmpty($result);
41
+	}
42 42
 
43
-    /**
44
-     * Ensure that subsequent reads without the necessary write do not report data
45
-     */
46
-    public function testReadInvalidatesData()
47
-    {
48
-        $session = uniqid();
49
-        $store = $this->getStore();
43
+	/**
44
+	 * Ensure that subsequent reads without the necessary write do not report data
45
+	 */
46
+	public function testReadInvalidatesData()
47
+	{
48
+		$session = uniqid();
49
+		$store = $this->getStore();
50 50
 
51
-        // Test new session is blank
52
-        $result = $store->read($session);
53
-        $this->assertEmpty($result);
51
+		// Test new session is blank
52
+		$result = $store->read($session);
53
+		$this->assertEmpty($result);
54 54
 
55
-        // Save data against session
56
-        $data1 = array(
57
-            'Color' => 'red',
58
-            'Animal' => 'elephant'
59
-        );
60
-        $store->write($session, serialize($data1));
61
-        $result = $store->read($session);
62
-        $this->assertEquals($data1, unserialize($result));
55
+		// Save data against session
56
+		$data1 = array(
57
+			'Color' => 'red',
58
+			'Animal' => 'elephant'
59
+		);
60
+		$store->write($session, serialize($data1));
61
+		$result = $store->read($session);
62
+		$this->assertEquals($data1, unserialize($result));
63 63
 
64
-        // Since we have read the data into the result, the application could modify this content
65
-        // and be unable to write it back due to headers being sent. We should thus assume
66
-        // that subsequent reads without a successful write do not purport to have valid data
67
-        $data1['Color'] = 'blue';
68
-        $result = $store->read($session);
69
-        $this->assertEmpty($result);
64
+		// Since we have read the data into the result, the application could modify this content
65
+		// and be unable to write it back due to headers being sent. We should thus assume
66
+		// that subsequent reads without a successful write do not purport to have valid data
67
+		$data1['Color'] = 'blue';
68
+		$result = $store->read($session);
69
+		$this->assertEmpty($result);
70 70
 
71
-        // Check that writing to cookie fails after headers are sent and these results remain
72
-        // invalidated
73
-        TestCookieStore::$override_headers_sent = true;
74
-        $store->write($session, serialize($data1));
75
-        $result = $store->read($session);
76
-        $this->assertEmpty($result);
77
-    }
71
+		// Check that writing to cookie fails after headers are sent and these results remain
72
+		// invalidated
73
+		TestCookieStore::$override_headers_sent = true;
74
+		$store->write($session, serialize($data1));
75
+		$result = $store->read($session);
76
+		$this->assertEmpty($result);
77
+	}
78 78
 }
Please login to merge, or discard this patch.
tests/DatabaseStoreTest.php 1 patch
Indentation   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -7,11 +7,11 @@
 block discarded – undo
7 7
 
8 8
 class DatabaseStoreTest extends AbstractTest
9 9
 {
10
-    protected function getStore()
11
-    {
12
-        $store = Injector::inst()->get(DatabaseStore::class);
13
-        $store->setKey(uniqid());
10
+	protected function getStore()
11
+	{
12
+		$store = Injector::inst()->get(DatabaseStore::class);
13
+		$store->setKey(uniqid());
14 14
 
15
-        return $store;
16
-    }
15
+		return $store;
16
+	}
17 17
 }
Please login to merge, or discard this patch.
tests/Store/TestCookieStore.php 1 patch
Indentation   +15 added lines, -15 removed lines patch added patch discarded remove patch
@@ -9,21 +9,21 @@
 block discarded – undo
9 9
 {
10 10
 
11 11
 
12
-    /**
13
-     * Override value of 'headers_sent' but only if running tests.
14
-     *
15
-     * Set to true or false, or null to not override
16
-     *
17
-     * @var string
18
-     */
19
-    public static $override_headers_sent = null;
12
+	/**
13
+	 * Override value of 'headers_sent' but only if running tests.
14
+	 *
15
+	 * Set to true or false, or null to not override
16
+	 *
17
+	 * @var string
18
+	 */
19
+	public static $override_headers_sent = null;
20 20
 
21
-    protected function canWrite()
22
-    {
23
-        if (self::$override_headers_sent !== null) {
24
-            return !self::$override_headers_sent;
25
-        }
21
+	protected function canWrite()
22
+	{
23
+		if (self::$override_headers_sent !== null) {
24
+			return !self::$override_headers_sent;
25
+		}
26 26
 
27
-        parent::canWrite();
28
-    }
27
+		parent::canWrite();
28
+	}
29 29
 }
Please login to merge, or discard this patch.
tests/HybridSessionTest.php 1 patch
Indentation   +10 added lines, -10 removed lines patch added patch discarded remove patch
@@ -10,15 +10,15 @@
 block discarded – undo
10 10
 class HybridSessionTest extends AbstractTest
11 11
 {
12 12
 
13
-    /**
14
-     * @return HybridSessionStore_Cookie
15
-     */
16
-    protected function getStore()
17
-    {
18
-        $store = Injector::inst()->create(HybridSession::class);
19
-        $store->setKey(uniqid());
20
-        $store->open(TempFolder::getTempFolder(BASE_PATH).'/'.__CLASS__, 'SESSIONCOOKIE');
13
+	/**
14
+	 * @return HybridSessionStore_Cookie
15
+	 */
16
+	protected function getStore()
17
+	{
18
+		$store = Injector::inst()->create(HybridSession::class);
19
+		$store->setKey(uniqid());
20
+		$store->open(TempFolder::getTempFolder(BASE_PATH).'/'.__CLASS__, 'SESSIONCOOKIE');
21 21
 
22
-        return $store;
23
-    }
22
+		return $store;
23
+	}
24 24
 }
Please login to merge, or discard this patch.
src/Crypto/McryptCrypto.php 2 patches
Doc Comments   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -87,7 +87,7 @@
 block discarded – undo
87 87
      *
88 88
      * @param $data - The encrypted-and-signed message as base64 ASCII
89 89
      *
90
-     * @return bool|string - The decrypted cleartext or false if signature failed
90
+     * @return string|false - The decrypted cleartext or false if signature failed
91 91
      */
92 92
     public function decrypt($data)
93 93
     {
Please login to merge, or discard this patch.
Indentation   +105 added lines, -105 removed lines patch added patch discarded remove patch
@@ -8,109 +8,109 @@
 block discarded – undo
8 8
  */
9 9
 class McryptCrypto implements CryptoHandler
10 10
 {
11
-    protected $key;
12
-
13
-    protected $ivSize;
14
-
15
-    protected $keySize;
16
-
17
-    protected $salt;
18
-
19
-    protected $saltedKey;
20
-
21
-    /**
22
-     * @return string
23
-     */
24
-    public function getKey()
25
-    {
26
-        return $this->key;
27
-    }
28
-
29
-    /**
30
-     * @return string
31
-     */
32
-    public function getSalt()
33
-    {
34
-        return $this->salt;
35
-    }
36
-
37
-    /**
38
-     * @param $key a per-site secret string which is used as the base encryption key.
39
-     * @param $salt a per-session random string which is used as a salt to generate a per-session key
40
-     *
41
-     * The base encryption key needs to stay secret. If an attacker ever gets it, they can read their session,
42
-     * and even modify & re-sign it.
43
-     *
44
-     * The salt is a random per-session string that is used with the base encryption key to create a per-session key.
45
-     * This (amongst other things) makes sure an attacker can't use a known-plaintext attack to guess the key.
46
-     *
47
-     * Normally we could create a salt on encryption, send it to the client as part of the session (it doesn't
48
-     * need to remain secret), then use the returned salt to decrypt. But we already have the Session ID which makes
49
-     * a great salt, so no need to generate & handle another one.
50
-     */
51
-    public function __construct($key, $salt)
52
-    {
53
-        $this->ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
54
-        $this->keySize = mcrypt_get_key_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
55
-
56
-        $this->key = $key;
57
-        $this->salt = $salt;
58
-        $this->saltedKey = hash_pbkdf2('sha256', $this->key, $this->salt, 1000, $this->keySize, true);
59
-    }
60
-
61
-    /**
62
-     * Encrypt and then sign some cleartext
63
-     *
64
-     * @param $cleartext - The cleartext to encrypt and sign
65
-     * @return string - The encrypted-and-signed message as base64 ASCII.
66
-     */
67
-    public function encrypt($cleartext)
68
-    {
69
-        $iv = mcrypt_create_iv($this->ivSize, MCRYPT_DEV_URANDOM);
70
-
71
-        $enc = mcrypt_encrypt(
72
-            MCRYPT_RIJNDAEL_256,
73
-            $this->saltedKey,
74
-            $cleartext,
75
-            MCRYPT_MODE_CBC,
76
-            $iv
77
-        );
78
-
79
-        $hash = hash_hmac('sha256', $enc, $this->saltedKey);
80
-
81
-        return base64_encode($iv.$hash.$enc);
82
-    }
83
-
84
-    /**
85
-     * Check the signature on an encrypted-and-signed message, and if valid
86
-     * decrypt the content
87
-     *
88
-     * @param $data - The encrypted-and-signed message as base64 ASCII
89
-     *
90
-     * @return bool|string - The decrypted cleartext or false if signature failed
91
-     */
92
-    public function decrypt($data)
93
-    {
94
-        $data = base64_decode($data);
95
-
96
-        $iv   = substr($data, 0, $this->ivSize);
97
-        $hash = substr($data, $this->ivSize, 64);
98
-        $enc  = substr($data, $this->ivSize + 64);
99
-
100
-        $cleartext = rtrim(mcrypt_decrypt(
101
-            MCRYPT_RIJNDAEL_256,
102
-            $this->saltedKey,
103
-            $enc,
104
-            MCRYPT_MODE_CBC,
105
-            $iv
106
-        ), "\x00");
107
-
108
-        // Needs to be after decrypt so it always runs, to avoid timing attack
109
-        $gen_hash = hash_hmac('sha256', $enc, $this->saltedKey);
110
-
111
-        if ($gen_hash == $hash) {
112
-            return $cleartext;
113
-        }
114
-        return false;
115
-    }
11
+	protected $key;
12
+
13
+	protected $ivSize;
14
+
15
+	protected $keySize;
16
+
17
+	protected $salt;
18
+
19
+	protected $saltedKey;
20
+
21
+	/**
22
+	 * @return string
23
+	 */
24
+	public function getKey()
25
+	{
26
+		return $this->key;
27
+	}
28
+
29
+	/**
30
+	 * @return string
31
+	 */
32
+	public function getSalt()
33
+	{
34
+		return $this->salt;
35
+	}
36
+
37
+	/**
38
+	 * @param $key a per-site secret string which is used as the base encryption key.
39
+	 * @param $salt a per-session random string which is used as a salt to generate a per-session key
40
+	 *
41
+	 * The base encryption key needs to stay secret. If an attacker ever gets it, they can read their session,
42
+	 * and even modify & re-sign it.
43
+	 *
44
+	 * The salt is a random per-session string that is used with the base encryption key to create a per-session key.
45
+	 * This (amongst other things) makes sure an attacker can't use a known-plaintext attack to guess the key.
46
+	 *
47
+	 * Normally we could create a salt on encryption, send it to the client as part of the session (it doesn't
48
+	 * need to remain secret), then use the returned salt to decrypt. But we already have the Session ID which makes
49
+	 * a great salt, so no need to generate & handle another one.
50
+	 */
51
+	public function __construct($key, $salt)
52
+	{
53
+		$this->ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
54
+		$this->keySize = mcrypt_get_key_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
55
+
56
+		$this->key = $key;
57
+		$this->salt = $salt;
58
+		$this->saltedKey = hash_pbkdf2('sha256', $this->key, $this->salt, 1000, $this->keySize, true);
59
+	}
60
+
61
+	/**
62
+	 * Encrypt and then sign some cleartext
63
+	 *
64
+	 * @param $cleartext - The cleartext to encrypt and sign
65
+	 * @return string - The encrypted-and-signed message as base64 ASCII.
66
+	 */
67
+	public function encrypt($cleartext)
68
+	{
69
+		$iv = mcrypt_create_iv($this->ivSize, MCRYPT_DEV_URANDOM);
70
+
71
+		$enc = mcrypt_encrypt(
72
+			MCRYPT_RIJNDAEL_256,
73
+			$this->saltedKey,
74
+			$cleartext,
75
+			MCRYPT_MODE_CBC,
76
+			$iv
77
+		);
78
+
79
+		$hash = hash_hmac('sha256', $enc, $this->saltedKey);
80
+
81
+		return base64_encode($iv.$hash.$enc);
82
+	}
83
+
84
+	/**
85
+	 * Check the signature on an encrypted-and-signed message, and if valid
86
+	 * decrypt the content
87
+	 *
88
+	 * @param $data - The encrypted-and-signed message as base64 ASCII
89
+	 *
90
+	 * @return bool|string - The decrypted cleartext or false if signature failed
91
+	 */
92
+	public function decrypt($data)
93
+	{
94
+		$data = base64_decode($data);
95
+
96
+		$iv   = substr($data, 0, $this->ivSize);
97
+		$hash = substr($data, $this->ivSize, 64);
98
+		$enc  = substr($data, $this->ivSize + 64);
99
+
100
+		$cleartext = rtrim(mcrypt_decrypt(
101
+			MCRYPT_RIJNDAEL_256,
102
+			$this->saltedKey,
103
+			$enc,
104
+			MCRYPT_MODE_CBC,
105
+			$iv
106
+		), "\x00");
107
+
108
+		// Needs to be after decrypt so it always runs, to avoid timing attack
109
+		$gen_hash = hash_hmac('sha256', $enc, $this->saltedKey);
110
+
111
+		if ($gen_hash == $hash) {
112
+			return $cleartext;
113
+		}
114
+		return false;
115
+	}
116 116
 }
Please login to merge, or discard this patch.
src/Crypto/OpenSSLCrypto.php 2 patches
Doc Comments   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -75,7 +75,7 @@
 block discarded – undo
75 75
      *
76 76
      * @param string $data - The encrypted-and-signed message as base64 ASCII
77 77
      *
78
-     * @return bool|string - The decrypted cleartext or false if signature failed
78
+     * @return string|false - The decrypted cleartext or false if signature failed
79 79
      */
80 80
     public function decrypt($data)
81 81
     {
Please login to merge, or discard this patch.
Indentation   +76 added lines, -76 removed lines patch added patch discarded remove patch
@@ -8,90 +8,90 @@
 block discarded – undo
8 8
  */
9 9
 class OpenSSLCrypto implements CryptoHandler
10 10
 {
11
-    protected $key;
11
+	protected $key;
12 12
 
13
-    protected $salt;
13
+	protected $salt;
14 14
 
15
-    protected $saltedKey;
15
+	protected $saltedKey;
16 16
 
17
-    /**
18
-     * @return string
19
-     */
20
-    public function getKey()
21
-    {
22
-        return $this->key;
23
-    }
17
+	/**
18
+	 * @return string
19
+	 */
20
+	public function getKey()
21
+	{
22
+		return $this->key;
23
+	}
24 24
 
25
-    /**
26
-     * @return string
27
-     */
28
-    public function getSalt()
29
-    {
30
-        return $this->salt;
31
-    }
25
+	/**
26
+	 * @return string
27
+	 */
28
+	public function getSalt()
29
+	{
30
+		return $this->salt;
31
+	}
32 32
 
33
-    /**
34
-     * @param string $key a per-site secret string which is used as the base encryption key.
35
-     * @param string $salt a per-session random string which is used as a salt to generate a per-session key
36
-     *
37
-     * The base encryption key needs to stay secret. If an attacker ever gets it, they can read their session,
38
-     * and even modify & re-sign it.
39
-     *
40
-     * The salt is a random per-session string that is used with the base encryption key to create a per-session key.
41
-     * This (amongst other things) makes sure an attacker can't use a known-plaintext attack to guess the key.
42
-     *
43
-     * Normally we could create a salt on encryption, send it to the client as part of the session (it doesn't
44
-     * need to remain secret), then use the returned salt to decrypt. But we already have the Session ID which makes
45
-     * a great salt, so no need to generate & handle another one.
46
-     */
47
-    public function __construct($key, $salt)
48
-    {
49
-        $this->key = $key;
50
-        $this->salt = $salt;
51
-        $this->saltedKey = hash_pbkdf2('sha256', $this->key, $this->salt, 1000, 0, true);
52
-    }
33
+	/**
34
+	 * @param string $key a per-site secret string which is used as the base encryption key.
35
+	 * @param string $salt a per-session random string which is used as a salt to generate a per-session key
36
+	 *
37
+	 * The base encryption key needs to stay secret. If an attacker ever gets it, they can read their session,
38
+	 * and even modify & re-sign it.
39
+	 *
40
+	 * The salt is a random per-session string that is used with the base encryption key to create a per-session key.
41
+	 * This (amongst other things) makes sure an attacker can't use a known-plaintext attack to guess the key.
42
+	 *
43
+	 * Normally we could create a salt on encryption, send it to the client as part of the session (it doesn't
44
+	 * need to remain secret), then use the returned salt to decrypt. But we already have the Session ID which makes
45
+	 * a great salt, so no need to generate & handle another one.
46
+	 */
47
+	public function __construct($key, $salt)
48
+	{
49
+		$this->key = $key;
50
+		$this->salt = $salt;
51
+		$this->saltedKey = hash_pbkdf2('sha256', $this->key, $this->salt, 1000, 0, true);
52
+	}
53 53
 
54
-    /**
55
-     * Encrypt and then sign some cleartext
56
-     *
57
-     * @param string $cleartext - The cleartext to encrypt and sign
58
-     * @return string - The encrypted-and-signed message as base64 ASCII.
59
-     */
60
-    public function encrypt($cleartext)
61
-    {
62
-        $cipher = "AES-256-CBC";
63
-        $ivlen = openssl_cipher_iv_length($cipher);
64
-        $iv = openssl_random_pseudo_bytes($ivlen);
65
-        $ciphertext_raw = openssl_encrypt($cleartext, $cipher, $this->saltedKey, $options = OPENSSL_RAW_DATA, $iv);
66
-        $hmac = hash_hmac('sha256', $ciphertext_raw, $this->saltedKey, $as_binary = true);
67
-        $ciphertext = base64_encode($iv.$hmac.$ciphertext_raw);
54
+	/**
55
+	 * Encrypt and then sign some cleartext
56
+	 *
57
+	 * @param string $cleartext - The cleartext to encrypt and sign
58
+	 * @return string - The encrypted-and-signed message as base64 ASCII.
59
+	 */
60
+	public function encrypt($cleartext)
61
+	{
62
+		$cipher = "AES-256-CBC";
63
+		$ivlen = openssl_cipher_iv_length($cipher);
64
+		$iv = openssl_random_pseudo_bytes($ivlen);
65
+		$ciphertext_raw = openssl_encrypt($cleartext, $cipher, $this->saltedKey, $options = OPENSSL_RAW_DATA, $iv);
66
+		$hmac = hash_hmac('sha256', $ciphertext_raw, $this->saltedKey, $as_binary = true);
67
+		$ciphertext = base64_encode($iv.$hmac.$ciphertext_raw);
68 68
 
69
-        return base64_encode($iv.$hmac.$ciphertext_raw);
70
-    }
69
+		return base64_encode($iv.$hmac.$ciphertext_raw);
70
+	}
71 71
 
72
-    /**
73
-     * Check the signature on an encrypted-and-signed message, and if valid
74
-     * decrypt the content
75
-     *
76
-     * @param string $data - The encrypted-and-signed message as base64 ASCII
77
-     *
78
-     * @return bool|string - The decrypted cleartext or false if signature failed
79
-     */
80
-    public function decrypt($data)
81
-    {
82
-        $c = base64_decode($data);
83
-        $cipher = "AES-256-CBC";
84
-        $ivlen = openssl_cipher_iv_length($cipher);
85
-        $iv = substr($c, 0, $ivlen);
86
-        $hmac = substr($c, $ivlen, $sha2len = 32);
87
-        $ciphertext_raw = substr($c, $ivlen+$sha2len);
88
-        $cleartext = openssl_decrypt($ciphertext_raw, $cipher, $this->saltedKey, $options = OPENSSL_RAW_DATA, $iv);
89
-        $calcmac = hash_hmac('sha256', $ciphertext_raw, $this->saltedKey, $as_binary = true);
72
+	/**
73
+	 * Check the signature on an encrypted-and-signed message, and if valid
74
+	 * decrypt the content
75
+	 *
76
+	 * @param string $data - The encrypted-and-signed message as base64 ASCII
77
+	 *
78
+	 * @return bool|string - The decrypted cleartext or false if signature failed
79
+	 */
80
+	public function decrypt($data)
81
+	{
82
+		$c = base64_decode($data);
83
+		$cipher = "AES-256-CBC";
84
+		$ivlen = openssl_cipher_iv_length($cipher);
85
+		$iv = substr($c, 0, $ivlen);
86
+		$hmac = substr($c, $ivlen, $sha2len = 32);
87
+		$ciphertext_raw = substr($c, $ivlen+$sha2len);
88
+		$cleartext = openssl_decrypt($ciphertext_raw, $cipher, $this->saltedKey, $options = OPENSSL_RAW_DATA, $iv);
89
+		$calcmac = hash_hmac('sha256', $ciphertext_raw, $this->saltedKey, $as_binary = true);
90 90
 
91
-        if (hash_equals($hmac, $calcmac)) {
92
-            return $cleartext;
93
-        }
91
+		if (hash_equals($hmac, $calcmac)) {
92
+			return $cleartext;
93
+		}
94 94
 
95
-        return false;
96
-    }
95
+		return false;
96
+	}
97 97
 }
Please login to merge, or discard this patch.
src/HybridSession.php 2 patches
Doc Comments   +1 added lines patch added patch discarded remove patch
@@ -38,6 +38,7 @@
 block discarded – undo
38 38
 
39 39
     /**
40 40
      * @param string
41
+     * @param string $key
41 42
      *
42 43
      * @return $this
43 44
      */
Please login to merge, or discard this patch.
Indentation   +157 added lines, -157 removed lines patch added patch discarded remove patch
@@ -9,161 +9,161 @@
 block discarded – undo
9 9
 class HybridSession extends BaseStore
10 10
 {
11 11
 
12
-    /**
13
-     * List of session handlers
14
-     *
15
-     * @var array
16
-     */
17
-    protected $handlers = [];
18
-
19
-    /**
20
-     * True if this session store has been initialised
21
-     *
22
-     * @var bool
23
-     */
24
-    protected static $enabled = false;
25
-
26
-    /**
27
-     * @param SessionHandlerInterface[]
28
-     *
29
-     * @return $this
30
-     */
31
-    public function setHandlers($handlers)
32
-    {
33
-        $this->handlers = $handlers;
34
-        $this->setKey($this->getKey());
35
-
36
-        return $this;
37
-    }
38
-
39
-    /**
40
-     * @param string
41
-     *
42
-     * @return $this
43
-     */
44
-    public function setKey($key)
45
-    {
46
-        parent::setKey($key);
47
-
48
-        foreach ($this->handlers as $handler) {
49
-            $handler->setKey($key);
50
-        }
51
-
52
-        return $this;
53
-    }
54
-
55
-    /**
56
-     * @return SessionHandlerInterface[]
57
-     */
58
-    public function getHandlers()
59
-    {
60
-        return $this->handlers;
61
-    }
62
-
63
-    /**
64
-     * @param string $save_path
65
-     * @param string $name
66
-     *
67
-     * @return bool
68
-     */
69
-    public function open($save_path, $name)
70
-    {
71
-        if ($this->handlers) {
72
-            foreach ($this->handlers as $handler) {
73
-                $handler->open($save_path, $name);
74
-            }
75
-        }
76
-
77
-        return true;
78
-    }
79
-
80
-    /**
81
-     * @return bool
82
-     */
83
-    public function close()
84
-    {
85
-        if ($this->handlers) {
86
-            foreach ($this->handlers as $handler) {
87
-                $handler->close();
88
-            }
89
-        }
90
-
91
-        return true;
92
-    }
93
-
94
-    /**
95
-     * @param string $session_id
96
-     *
97
-     * @return string
98
-     */
99
-    public function read($session_id)
100
-    {
101
-        if ($this->handlers) {
102
-            foreach ($this->handlers as $handler) {
103
-                if ($data = $handler->read($session_id)) {
104
-                    return $data;
105
-                }
106
-            }
107
-        }
108
-
109
-        return '';
110
-    }
111
-
112
-
113
-    public function write($session_id, $session_data)
114
-    {
115
-        if ($this->handlers) {
116
-            foreach ($this->handlers as $handler) {
117
-                if ($handler->write($session_id, $session_data)) {
118
-                    return;
119
-                }
120
-            }
121
-        }
122
-    }
123
-
124
-    public function destroy($session_id)
125
-    {
126
-        if ($this->handlers) {
127
-            foreach ($this->handlers as $handler) {
128
-                $handler->destroy($session_id);
129
-            }
130
-        }
131
-    }
132
-
133
-    public function gc($maxlifetime)
134
-    {
135
-        if ($this->handlers) {
136
-            foreach ($this->handlers as $handler) {
137
-                $handler->gc($maxlifetime);
138
-            }
139
-        }
140
-    }
141
-
142
-    /**
143
-     * Register the session handler as the default
144
-     *
145
-     * @param string $key Desired session key
146
-     */
147
-    public static function init($key = null)
148
-    {
149
-        $instance = Injector::inst()->get(__CLASS__);
150
-
151
-        if (empty($key)) {
152
-            user_error(
153
-                'HybridSession::init() was not given a $key. Disabling cookie-based storage',
154
-                E_USER_WARNING
155
-            );
156
-        } else {
157
-            $instance->setKey($key);
158
-        }
159
-
160
-        session_set_save_handler($instance, true);
161
-
162
-        self::$enabled = true;
163
-    }
164
-
165
-    public static function is_enabled()
166
-    {
167
-        return self::$enabled;
168
-    }
12
+	/**
13
+	 * List of session handlers
14
+	 *
15
+	 * @var array
16
+	 */
17
+	protected $handlers = [];
18
+
19
+	/**
20
+	 * True if this session store has been initialised
21
+	 *
22
+	 * @var bool
23
+	 */
24
+	protected static $enabled = false;
25
+
26
+	/**
27
+	 * @param SessionHandlerInterface[]
28
+	 *
29
+	 * @return $this
30
+	 */
31
+	public function setHandlers($handlers)
32
+	{
33
+		$this->handlers = $handlers;
34
+		$this->setKey($this->getKey());
35
+
36
+		return $this;
37
+	}
38
+
39
+	/**
40
+	 * @param string
41
+	 *
42
+	 * @return $this
43
+	 */
44
+	public function setKey($key)
45
+	{
46
+		parent::setKey($key);
47
+
48
+		foreach ($this->handlers as $handler) {
49
+			$handler->setKey($key);
50
+		}
51
+
52
+		return $this;
53
+	}
54
+
55
+	/**
56
+	 * @return SessionHandlerInterface[]
57
+	 */
58
+	public function getHandlers()
59
+	{
60
+		return $this->handlers;
61
+	}
62
+
63
+	/**
64
+	 * @param string $save_path
65
+	 * @param string $name
66
+	 *
67
+	 * @return bool
68
+	 */
69
+	public function open($save_path, $name)
70
+	{
71
+		if ($this->handlers) {
72
+			foreach ($this->handlers as $handler) {
73
+				$handler->open($save_path, $name);
74
+			}
75
+		}
76
+
77
+		return true;
78
+	}
79
+
80
+	/**
81
+	 * @return bool
82
+	 */
83
+	public function close()
84
+	{
85
+		if ($this->handlers) {
86
+			foreach ($this->handlers as $handler) {
87
+				$handler->close();
88
+			}
89
+		}
90
+
91
+		return true;
92
+	}
93
+
94
+	/**
95
+	 * @param string $session_id
96
+	 *
97
+	 * @return string
98
+	 */
99
+	public function read($session_id)
100
+	{
101
+		if ($this->handlers) {
102
+			foreach ($this->handlers as $handler) {
103
+				if ($data = $handler->read($session_id)) {
104
+					return $data;
105
+				}
106
+			}
107
+		}
108
+
109
+		return '';
110
+	}
111
+
112
+
113
+	public function write($session_id, $session_data)
114
+	{
115
+		if ($this->handlers) {
116
+			foreach ($this->handlers as $handler) {
117
+				if ($handler->write($session_id, $session_data)) {
118
+					return;
119
+				}
120
+			}
121
+		}
122
+	}
123
+
124
+	public function destroy($session_id)
125
+	{
126
+		if ($this->handlers) {
127
+			foreach ($this->handlers as $handler) {
128
+				$handler->destroy($session_id);
129
+			}
130
+		}
131
+	}
132
+
133
+	public function gc($maxlifetime)
134
+	{
135
+		if ($this->handlers) {
136
+			foreach ($this->handlers as $handler) {
137
+				$handler->gc($maxlifetime);
138
+			}
139
+		}
140
+	}
141
+
142
+	/**
143
+	 * Register the session handler as the default
144
+	 *
145
+	 * @param string $key Desired session key
146
+	 */
147
+	public static function init($key = null)
148
+	{
149
+		$instance = Injector::inst()->get(__CLASS__);
150
+
151
+		if (empty($key)) {
152
+			user_error(
153
+				'HybridSession::init() was not given a $key. Disabling cookie-based storage',
154
+				E_USER_WARNING
155
+			);
156
+		} else {
157
+			$instance->setKey($key);
158
+		}
159
+
160
+		session_set_save_handler($instance, true);
161
+
162
+		self::$enabled = true;
163
+	}
164
+
165
+	public static function is_enabled()
166
+	{
167
+		return self::$enabled;
168
+	}
169 169
 }
Please login to merge, or discard this patch.
tests/AbstractTest.php 1 patch
Indentation   +105 added lines, -105 removed lines patch added patch discarded remove patch
@@ -10,109 +10,109 @@
 block discarded – undo
10 10
 
11 11
 abstract class AbstractTest extends SapphireTest
12 12
 {
13
-    protected $usesDatabase = true;
14
-
15
-    protected function setUp()
16
-    {
17
-        parent::setUp();
18
-
19
-        TestCookieStore::$override_headers_sent = false;
20
-
21
-        Injector::inst()->registerService(
22
-            new TestCookieStore(),
23
-            CookieStore::class
24
-        );
25
-
26
-        DBDatetime::set_mock_now('2010-03-15 12:00:00');
27
-
28
-        if (get_class() === get_class($this)) {
29
-            $this->markTestSkipped("Skipping abstract test");
30
-            $this->skipTest = true;
31
-        }
32
-    }
33
-
34
-    protected function tearDown()
35
-    {
36
-        DBDatetime::clear_mock_now();
37
-
38
-        parent::tearDown();
39
-    }
40
-
41
-    abstract protected function getStore();
42
-
43
-    /**
44
-     * Test how this store handles large volumes of data (>1000 characters)
45
-     */
46
-    public function testStoreLargeData()
47
-    {
48
-        $session = uniqid();
49
-        $store = $this->getStore();
50
-
51
-        // Test new session is blank
52
-        $result = $store->read($session);
53
-        $this->assertEmpty($result);
54
-
55
-        // Save data against session
56
-        $data1 = array(
57
-            'Large' => str_repeat('A', 600),
58
-            'Content' => str_repeat('B', 600)
59
-        );
60
-        $store->write($session, serialize($data1));
61
-        $result = $store->read($session);
62
-        $this->assertEquals($data1, unserialize($result));
63
-    }
64
-
65
-    /**
66
-     * Test storage of data
67
-     */
68
-    public function testStoreData()
69
-    {
70
-        $session = uniqid();
71
-        $store = $this->getStore();
72
-
73
-        // Test new session is blank
74
-        $result = $store->read($session);
75
-        $this->assertEmpty($result);
76
-
77
-        // Save data against session
78
-        $data1 = array(
79
-            'Color' => 'red',
80
-            'Animal' => 'elephant'
81
-        );
82
-        $store->write($session, serialize($data1));
83
-        $result = $store->read($session);
84
-        $this->assertEquals($data1, unserialize($result));
85
-
86
-        // Save larger data
87
-        $data2 = array(
88
-            'Color' => 'blue',
89
-            'Animal' => str_repeat('bat', 100)
90
-        );
91
-        $store->write($session, serialize($data2));
92
-        $result = $store->read($session);
93
-        $this->assertEquals($data2, unserialize($result));
94
-    }
95
-
96
-    /**
97
-     * Test expiry of data
98
-     */
99
-    public function testExpiry()
100
-    {
101
-        $session1 = uniqid();
102
-        $store = $this->getStore();
103
-
104
-        // Store data now
105
-        $data1 = array(
106
-            'Food' => 'Pizza'
107
-        );
108
-        $store->write($session1, serialize($data1));
109
-        $result1 = $store->read($session1);
110
-        $this->assertEquals($data1, unserialize($result1));
111
-
112
-        // Go to the future and test that the expiry is accurate
113
-        DBDatetime::set_mock_now('2040-03-16 12:00:00');
114
-        $result2 = $store->read($session1);
115
-
116
-        $this->assertEmpty($result2);
117
-    }
13
+	protected $usesDatabase = true;
14
+
15
+	protected function setUp()
16
+	{
17
+		parent::setUp();
18
+
19
+		TestCookieStore::$override_headers_sent = false;
20
+
21
+		Injector::inst()->registerService(
22
+			new TestCookieStore(),
23
+			CookieStore::class
24
+		);
25
+
26
+		DBDatetime::set_mock_now('2010-03-15 12:00:00');
27
+
28
+		if (get_class() === get_class($this)) {
29
+			$this->markTestSkipped("Skipping abstract test");
30
+			$this->skipTest = true;
31
+		}
32
+	}
33
+
34
+	protected function tearDown()
35
+	{
36
+		DBDatetime::clear_mock_now();
37
+
38
+		parent::tearDown();
39
+	}
40
+
41
+	abstract protected function getStore();
42
+
43
+	/**
44
+	 * Test how this store handles large volumes of data (>1000 characters)
45
+	 */
46
+	public function testStoreLargeData()
47
+	{
48
+		$session = uniqid();
49
+		$store = $this->getStore();
50
+
51
+		// Test new session is blank
52
+		$result = $store->read($session);
53
+		$this->assertEmpty($result);
54
+
55
+		// Save data against session
56
+		$data1 = array(
57
+			'Large' => str_repeat('A', 600),
58
+			'Content' => str_repeat('B', 600)
59
+		);
60
+		$store->write($session, serialize($data1));
61
+		$result = $store->read($session);
62
+		$this->assertEquals($data1, unserialize($result));
63
+	}
64
+
65
+	/**
66
+	 * Test storage of data
67
+	 */
68
+	public function testStoreData()
69
+	{
70
+		$session = uniqid();
71
+		$store = $this->getStore();
72
+
73
+		// Test new session is blank
74
+		$result = $store->read($session);
75
+		$this->assertEmpty($result);
76
+
77
+		// Save data against session
78
+		$data1 = array(
79
+			'Color' => 'red',
80
+			'Animal' => 'elephant'
81
+		);
82
+		$store->write($session, serialize($data1));
83
+		$result = $store->read($session);
84
+		$this->assertEquals($data1, unserialize($result));
85
+
86
+		// Save larger data
87
+		$data2 = array(
88
+			'Color' => 'blue',
89
+			'Animal' => str_repeat('bat', 100)
90
+		);
91
+		$store->write($session, serialize($data2));
92
+		$result = $store->read($session);
93
+		$this->assertEquals($data2, unserialize($result));
94
+	}
95
+
96
+	/**
97
+	 * Test expiry of data
98
+	 */
99
+	public function testExpiry()
100
+	{
101
+		$session1 = uniqid();
102
+		$store = $this->getStore();
103
+
104
+		// Store data now
105
+		$data1 = array(
106
+			'Food' => 'Pizza'
107
+		);
108
+		$store->write($session1, serialize($data1));
109
+		$result1 = $store->read($session1);
110
+		$this->assertEquals($data1, unserialize($result1));
111
+
112
+		// Go to the future and test that the expiry is accurate
113
+		DBDatetime::set_mock_now('2040-03-16 12:00:00');
114
+		$result2 = $store->read($session1);
115
+
116
+		$this->assertEmpty($result2);
117
+	}
118 118
 }
Please login to merge, or discard this patch.
src/Store/DatabaseStore.php 1 patch
Indentation   +81 added lines, -81 removed lines patch added patch discarded remove patch
@@ -12,93 +12,93 @@
 block discarded – undo
12 12
 class DatabaseStore extends BaseStore
13 13
 {
14 14
 
15
-    /**
16
-     * Determine if the DB is ready to use.
17
-     *
18
-     * @return bool
19
-     * @throws Exception
20
-     */
21
-    protected function isDatabaseReady()
22
-    {
23
-        // Such as during setup of testsession prior to DB connection.
24
-        if (!DB::is_active()) {
25
-            return false;
26
-        }
27
-
28
-        // If we have a DB of the wrong type then complain
29
-        if (!(DB::get_conn() instanceof MySQLDatabase)) {
30
-            throw new Exception('HybridSessions\Store\DatabaseStore currently only works with MySQL databases');
31
-        }
32
-
33
-        // Prevent freakout during dev/build
34
-        return ClassInfo::hasTable('HybridSessionDataObject');
35
-    }
36
-
37
-    public function open($save_path, $name)
38
-    {
39
-        // no-op
40
-    }
41
-
42
-    public function close()
43
-    {
44
-        // no-op
45
-    }
46
-
47
-    public function read($session_id)
48
-    {
49
-        if (!$this->isDatabaseReady()) {
50
-            return null;
51
-        }
52
-
53
-        $query = sprintf(
54
-            'SELECT "Data" FROM "HybridSessionDataObject"
15
+	/**
16
+	 * Determine if the DB is ready to use.
17
+	 *
18
+	 * @return bool
19
+	 * @throws Exception
20
+	 */
21
+	protected function isDatabaseReady()
22
+	{
23
+		// Such as during setup of testsession prior to DB connection.
24
+		if (!DB::is_active()) {
25
+			return false;
26
+		}
27
+
28
+		// If we have a DB of the wrong type then complain
29
+		if (!(DB::get_conn() instanceof MySQLDatabase)) {
30
+			throw new Exception('HybridSessions\Store\DatabaseStore currently only works with MySQL databases');
31
+		}
32
+
33
+		// Prevent freakout during dev/build
34
+		return ClassInfo::hasTable('HybridSessionDataObject');
35
+	}
36
+
37
+	public function open($save_path, $name)
38
+	{
39
+		// no-op
40
+	}
41
+
42
+	public function close()
43
+	{
44
+		// no-op
45
+	}
46
+
47
+	public function read($session_id)
48
+	{
49
+		if (!$this->isDatabaseReady()) {
50
+			return null;
51
+		}
52
+
53
+		$query = sprintf(
54
+			'SELECT "Data" FROM "HybridSessionDataObject"
55 55
             WHERE "SessionID" = \'%s\' AND "Expiry" >= %s',
56
-            Convert::raw2sql($session_id),
57
-            $this->getNow()
58
-        );
56
+			Convert::raw2sql($session_id),
57
+			$this->getNow()
58
+		);
59 59
 
60
-        $result = DB::query($query);
60
+		$result = DB::query($query);
61 61
 
62
-        if ($result && $result->numRecords()) {
63
-            $data = $result->first();
64
-            return $data['Data'];
65
-        }
66
-    }
62
+		if ($result && $result->numRecords()) {
63
+			$data = $result->first();
64
+			return $data['Data'];
65
+		}
66
+	}
67 67
 
68
-    public function write($session_id, $session_data)
69
-    {
70
-        if (!$this->isDatabaseReady()) {
71
-            return false;
72
-        }
68
+	public function write($session_id, $session_data)
69
+	{
70
+		if (!$this->isDatabaseReady()) {
71
+			return false;
72
+		}
73 73
 
74
-        $expiry = $this->getNow() + $this->getLifetime();
74
+		$expiry = $this->getNow() + $this->getLifetime();
75 75
 
76
-        DB::query($str = sprintf(
77
-            'INSERT INTO "HybridSessionDataObject" ("SessionID", "Expiry", "Data")
76
+		DB::query($str = sprintf(
77
+			'INSERT INTO "HybridSessionDataObject" ("SessionID", "Expiry", "Data")
78 78
             VALUES (\'%1$s\', %2$u, \'%3$s\')
79 79
             ON DUPLICATE KEY UPDATE "Expiry" = %2$u, "Data" = \'%3$s\'',
80
-            Convert::raw2sql($session_id),
81
-            $expiry,
82
-            Convert::raw2sql($session_data)
83
-        ));
84
-
85
-        return true;
86
-    }
87
-
88
-    public function destroy($session_id)
89
-    {
90
-        // NOP
91
-    }
92
-
93
-    public function gc($maxlifetime)
94
-    {
95
-        if (!$this->isDatabaseReady()) {
96
-            return;
97
-        }
98
-
99
-        DB::query(sprintf(
100
-            'DELETE FROM "HybridSessionDataObject" WHERE "Expiry" < %u',
101
-            $this->getNow()
102
-        ));
103
-    }
80
+			Convert::raw2sql($session_id),
81
+			$expiry,
82
+			Convert::raw2sql($session_data)
83
+		));
84
+
85
+		return true;
86
+	}
87
+
88
+	public function destroy($session_id)
89
+	{
90
+		// NOP
91
+	}
92
+
93
+	public function gc($maxlifetime)
94
+	{
95
+		if (!$this->isDatabaseReady()) {
96
+			return;
97
+		}
98
+
99
+		DB::query(sprintf(
100
+			'DELETE FROM "HybridSessionDataObject" WHERE "Expiry" < %u',
101
+			$this->getNow()
102
+		));
103
+	}
104 104
 }
Please login to merge, or discard this patch.