same_site_cookie_fix 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 31d1e0e8dabda0f0c00de78e9cf12dcd076b29702a5db6f40469e7831d2d7a2e
|
4
|
+
data.tar.gz: 1d77b4362e2344ac110b1dfac01cb5ac356e033a98bcf835b36b4c2f62670a1c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: db5e35935fe1723c903ce9930b732c7ea36f54a6a5b89d3c4dabfe9b1da8aee2cacd29e052c62efbb3a9503bbc74572ddb870da4198303507b28800f23e83be8
|
7
|
+
data.tar.gz: 92cdf746e1a8796253b66c8dd102382623de1a36eea772b5b51286da18b4c346950872326df58f7932051a78c5eafe67dfe02158267759c3610ed4c55682af55
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module SameSiteCookieFix
|
2
|
+
class Middleware
|
3
|
+
def initialize(app)
|
4
|
+
@app = app
|
5
|
+
end
|
6
|
+
|
7
|
+
def call(env)
|
8
|
+
_status, headers, _body = @app.call(env)
|
9
|
+
ensure
|
10
|
+
user_agent = env['HTTP_USER_AGENT']
|
11
|
+
|
12
|
+
if headers && headers['Set-Cookie'] && !SameSiteCookieFix::Middleware.same_site_none_incompatible?(user_agent)
|
13
|
+
cookies = headers['Set-Cookie'].split("\n").compact
|
14
|
+
|
15
|
+
cookies.each do |cookie|
|
16
|
+
unless cookie.include?("; SameSite")
|
17
|
+
headers['Set-Cookie'] = headers['Set-Cookie'].gsub("#{cookie}", "#{cookie}; secure; SameSite=None\n")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.same_site_none_incompatible?(user_agent)
|
24
|
+
sniffer = BrowserSniffer.new(user_agent)
|
25
|
+
|
26
|
+
webkit_same_site_bug?(sniffer) || drops_unrecognized_same_site_cookies?(sniffer)
|
27
|
+
rescue
|
28
|
+
true
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.webkit_same_site_bug?(sniffer)
|
32
|
+
(sniffer.os == :ios && sniffer.os_version.match?(/^([0-9]|1[12])[\.\_]/)) ||
|
33
|
+
(sniffer.os == :mac && sniffer.browser == :safari && sniffer.os_version.match?(/^10[\.\_]14/))
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.drops_unrecognized_same_site_cookies?(sniffer)
|
37
|
+
(chromium_based?(sniffer) && sniffer.major_browser_version >= 51 && sniffer.major_browser_version <= 66) ||
|
38
|
+
(uc_browser?(sniffer) && !uc_browser_version_at_least?(sniffer: sniffer, major: 12, minor: 13, build: 2))
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.chromium_based?(sniffer)
|
42
|
+
sniffer.browser_name.downcase.match?(/chrom(e|ium)/)
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.uc_browser?(sniffer)
|
46
|
+
sniffer.user_agent.downcase.match?(/uc\s?browser/)
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.uc_browser_version_at_least?(sniffer:, major:, minor:, build:)
|
50
|
+
digits = sniffer.browser_version.split('.').map(&:to_i)
|
51
|
+
return false unless digits.count >= 3
|
52
|
+
|
53
|
+
return digits[0] > major if digits[0] != major
|
54
|
+
return digits[1] > minor if digits[1] != minor
|
55
|
+
digits[2] >= build
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
metadata
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: same_site_cookie_fix
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Gavin Ballard
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2021-10-14 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: browser_sniffer
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
description: Addresses the SameSite=None cookie issue for Disco Rails apps.
|
28
|
+
email:
|
29
|
+
- gavin@gavinballard.com
|
30
|
+
executables: []
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- lib/same_site_cookie_fix.rb
|
35
|
+
- lib/same_site_cookie_fix/middleware.rb
|
36
|
+
- lib/same_site_cookie_fix/railtie.rb
|
37
|
+
- lib/same_site_cookie_fix/version.rb
|
38
|
+
homepage: https://github.com/discolabs/same_site_cookie_fix/
|
39
|
+
licenses:
|
40
|
+
- None
|
41
|
+
metadata: {}
|
42
|
+
post_install_message:
|
43
|
+
rdoc_options: []
|
44
|
+
require_paths:
|
45
|
+
- lib
|
46
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
47
|
+
requirements:
|
48
|
+
- - ">="
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: '0'
|
51
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
requirements: []
|
57
|
+
rubyforge_project:
|
58
|
+
rubygems_version: 2.7.6
|
59
|
+
signing_key:
|
60
|
+
specification_version: 4
|
61
|
+
summary: Addresses the SameSite=None cookie issue for Disco Rails apps.
|
62
|
+
test_files: []
|