Skip to content

Commit d3a948a

Browse files
committed
update to Magento2.4.1 compatible implementation (beta version).
1 parent b4c3a5d commit d3a948a

File tree

13 files changed

+146
-486
lines changed

13 files changed

+146
-486
lines changed

Model/Config/Source/SameSite.php

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
namespace Veriteworks\CookieFix\Model\Config\Source;
3+
4+
class SameSite
5+
{
6+
/**
7+
* @return array
8+
*/
9+
public function toOptionArray()
10+
{
11+
return [
12+
['value' => 'Lax','label' => __('Lax')],
13+
['value' => 'Strict','label' => __('Strict')],
14+
['value' => 'None','label' => __('None')]
15+
];
16+
}
17+
}

Plugin/Session/AddSameSite.php

-64
This file was deleted.

Plugin/SwitchSameSite.php

+83
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
<?php
2+
namespace Veriteworks\CookieFix\Plugin;
3+
4+
5+
use Magento\Framework\App\Config\ScopeConfigInterface;
6+
use Magento\Framework\HTTP\Header;
7+
use Magento\Framework\Stdlib\Cookie\PhpCookieManager;
8+
use Magento\Framework\Stdlib\Cookie\PublicCookieMetadata;
9+
use Magento\Store\Model\ScopeInterface;
10+
use Veriteworks\CookieFix\Validator\SameSite;
11+
12+
class SwitchSameSite
13+
{
14+
const CONFIG_PATH = 'web/cookie/samesite';
15+
const CONFIG_AFFECTED_KEYS = 'web/cookie/affected_keys';
16+
/**
17+
* @var SameSite
18+
*/
19+
private $validator;
20+
/**
21+
* @var Header
22+
*/
23+
private $header;
24+
/**
25+
* @var ScopeConfigInterface
26+
*/
27+
private $scopeConfig;
28+
29+
private $affectedKeys = [];
30+
31+
/**
32+
* SwitchSameSite constructor.
33+
* @param Header $header
34+
* @param ScopeConfigInterface $scopeConfig
35+
* @param SameSite $validator
36+
*/
37+
public function __construct(
38+
Header $header,
39+
ScopeConfigInterface $scopeConfig,
40+
SameSite $validator
41+
) {
42+
$this->validator = $validator;
43+
$this->header = $header;
44+
$this->scopeConfig = $scopeConfig;
45+
}
46+
47+
/**
48+
* @param PhpCookieManager $subject
49+
* @param string $name
50+
* @param string $value
51+
* @param PublicCookieMetadata|null $metadata
52+
* @return array
53+
*/
54+
public function beforeSetPublicCookie(
55+
PhpCookieManager $subject,
56+
$name,
57+
$value,
58+
PublicCookieMetadata $metadata = null
59+
) {
60+
if ($this->isAffectedKeys($name)) {
61+
$agent = $this->header->getHttpUserAgent();
62+
$sameSite = $this->validator->shouldSendSameSiteNone($agent);
63+
if ($sameSite === false) {
64+
$metadata->setSameSite('None');
65+
} else {
66+
$config = $this->scopeConfig->getValue(self::CONFIG_PATH, ScopeInterface::SCOPE_STORE);
67+
$metadata->setSameSite($config);
68+
}
69+
}
70+
71+
return [$name, $value, $metadata];
72+
}
73+
74+
private function isAffectedKeys($name)
75+
{
76+
if (!count($this->affectedKeys)) {
77+
$affectedKeys = $this->scopeConfig->getValue(self::CONFIG_AFFECTED_KEYS, ScopeInterface::SCOPE_STORE);
78+
$this->affectedKeys = explode(',', strtolower($affectedKeys));
79+
}
80+
81+
return in_array(strtolower($name), $this->affectedKeys);
82+
}
83+
}

Plugin/View/Element/Js/AdjustPath.php

-21
This file was deleted.

README.md

+5
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@ This extension set SameSite=None and make customers place order via 3DS payment
1111
+ composer require veriteworks/cookiefix
1212
+ bin/magento module:enable Veriteworks_CookieFix
1313
+ bin/magento setup:upgrade
14+
15+
# Configuration
16+
17+
After 3.0.0-beta1, you can change SameSite cookie configuration from admin panel. Go to "Stores > configuration > web" and open cookie section. You can see "SameSite" field.
18+
By default, this extension sets SameSite configuration value to limited cookies. If you hope to update the list, please update web/cookie/affected_keys configuration value.
1419

1520
# Support
1621

Rewrite/Stdlib/Cookie/PublicCookieMetadata.php

-24
This file was deleted.

0 commit comments

Comments
 (0)