Skip to content

Commit

Permalink
Merge branch 'release/1.1.8'
Browse files Browse the repository at this point in the history
  • Loading branch information
khalwat committed Jan 23, 2018
2 parents 2b285eb + 46b195d commit 943cf9b
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 18 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
# Cookies Changelog

## 1.1.8 - 2017.01.23
### Changed
* Fixed an issue with removing cookies
* Added try/catch so errors are logged instead of exceptions thrown

## 1.1.7 - 2017.12.06
### Changed
* Updated to require craftcms/cms `^3.0.0-RC1`
Expand Down
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "nystudio107/craft3-cookies",
"description": "A simple plugin for setting and getting cookies from within Craft CMS templates.",
"type": "craft-plugin",
"version": "1.1.7",
"version": "1.1.8",
"keywords": [
"craft",
"cms",
Expand Down
65 changes: 48 additions & 17 deletions src/services/CookiesService.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
use Craft;
use craft\base\Component;

use yii\base\Exception;
use yii\base\InvalidConfigException;
use yii\web\Cookie;

/**
Expand Down Expand Up @@ -44,13 +46,13 @@ public function set(
$secure = false,
$httpOnly = false
) {
$expire = (int)$expire;
// Make sure the cookie expiry is in the past if we're deleting the cookie
if ($value == "") {
$expire = (int)(time() - 3600);
if (empty($value)) {
Craft::$app->response->cookies->remove($name);
} else {
$expire = (int)$expire;
setcookie($name, $value, $expire, $path, $domain, $secure, $httpOnly);
$_COOKIE[$name] = $value;
}
setcookie($name, $value, $expire, $path, $domain, $secure, $httpOnly);
$_COOKIE[$name] = $value;
}

/**
Expand All @@ -64,8 +66,9 @@ public function get($name = "")
{
$result = "";
if (isset($_COOKIE[$name])) {
$result = $_COOKIE[$name];
$result = $_COOKIE[$name];
}

return $result;
}

Expand All @@ -89,24 +92,36 @@ public function setSecure(
$secure = false,
$httpOnly = false
) {
if ($name == "") {
Craft::$app->request->cookies->delete($name);
if (empty($value)) {
Craft::$app->response->cookies->remove($name);
} else {
$expire = (int)$expire;
// Make sure the cookie expiry is in the past if we're deleting the cookie
if ($value == "") {
$expire = (int)(time() - 3600);
}
$cookie = new Cookie($name, '');
$cookie = new Cookie(['name' => $name, 'value' => '']);

try {
$cookie->value = Craft::$app->security->hashData(base64_encode(serialize($value)));
} catch (InvalidConfigException $e) {
Craft::error(
'Error setting secure cookie: '.$e->getMessage(),
__METHOD__
);

$cookie->value = Craft::$app->security->hashData(base64_encode(serialize($value)));
return;
} catch (Exception $e) {
Craft::error(
'Error setting secure cookie: '.$e->getMessage(),
__METHOD__
);

return;
}
$cookie->expire = $expire;
$cookie->path = $path;
$cookie->domain = $domain;
$cookie->secure = $secure;
$cookie->httpOnly = $httpOnly;

Craft::$app->request->cookies->add($cookie);
Craft::$app->response->cookies->add($cookie);
}
}

Expand All @@ -121,12 +136,28 @@ public function getSecure($name = "")
{
$result = "";
$cookie = Craft::$app->request->cookies->get($name);
try {
$data = Craft::$app->security->validateData($cookie->value);
} catch (InvalidConfigException $e) {
Craft::error(
'Error getting secure cookie: '.$e->getMessage(),
__METHOD__
);
$data = false;
} catch (Exception $e) {
Craft::error(
'Error getting secure cookie: '.$e->getMessage(),
__METHOD__
);
$data = false;
}
if ($cookie
&& !empty($cookie->value)
&& ($data = Craft::$app->security->validateData($cookie->value)) !== false
&& $data !== false
) {
$result = @unserialize(base64_decode($data));
}

return $result;
}
}

0 comments on commit 943cf9b

Please sign in to comment.