提交 e18ebd2e 编写于 作者: A Aaron Patterson

remove request reference from chained jars

This changes the chained jars to ask the parent jar for the request
object which should eventually call back up to the original jar
上级 f052e4ae
......@@ -150,7 +150,7 @@ module ChainedCookieJars
# cookies.permanent.signed[:remember_me] = current_user.id
# # => Set-Cookie: remember_me=BAhU--848956038e692d7046deab32b7131856ab20e14e; path=/; expires=Sun, 16-Dec-2029 03:24:16 GMT
def permanent
@permanent ||= PermanentCookieJar.new(self, @request)
@permanent ||= PermanentCookieJar.new(self)
end
# Returns a jar that'll automatically generate a signed representation of cookie value and verify it when reading from
......@@ -171,9 +171,9 @@ def permanent
def signed
@signed ||=
if upgrade_legacy_signed_cookies?
UpgradeLegacySignedCookieJar.new(self, @request)
UpgradeLegacySignedCookieJar.new(self)
else
SignedCookieJar.new(self, @request)
SignedCookieJar.new(self)
end
end
......@@ -194,9 +194,9 @@ def signed
def encrypted
@encrypted ||=
if upgrade_legacy_signed_cookies?
UpgradeLegacyEncryptedCookieJar.new(self, @request)
UpgradeLegacyEncryptedCookieJar.new(self)
else
EncryptedCookieJar.new(self, @request)
EncryptedCookieJar.new(self)
end
end
......@@ -204,21 +204,25 @@ def encrypted
# Used by ActionDispatch::Session::CookieStore to avoid the need to introduce new cookie stores.
def signed_or_encrypted
@signed_or_encrypted ||=
if @request.secret_key_base.present?
if request.secret_key_base.present?
encrypted
else
signed
end
end
protected
def request; @parent_jar.request; end
private
def upgrade_legacy_signed_cookies?
@request.secret_token.present? && @request.secret_key_base.present?
request.secret_token.present? && request.secret_key_base.present?
end
def key_generator
@request.key_generator
request.key_generator
end
end
......@@ -229,7 +233,7 @@ def key_generator
module VerifyAndUpgradeLegacySignedMessage # :nodoc:
def initialize(*args)
super
@legacy_verifier = ActiveSupport::MessageVerifier.new(@request.secret_token, serializer: ActiveSupport::MessageEncryptor::NullSerializer)
@legacy_verifier = ActiveSupport::MessageVerifier.new(request.secret_token, serializer: ActiveSupport::MessageEncryptor::NullSerializer)
end
def verify_and_upgrade_legacy_signed_message(name, signed_message)
......@@ -264,6 +268,8 @@ def self.build(req, cookies)
end
end
attr_reader :request
def initialize(request)
@set_cookies = {}
@delete_cookies = {}
......@@ -316,12 +322,12 @@ def handle_options(options) #:nodoc:
# if host is not ip and matches domain regexp
# (ip confirms to domain regexp so we explicitly check for ip)
options[:domain] = if (@request.host !~ /^[\d.]+$/) && (@request.host =~ domain_regexp)
options[:domain] = if (request.host !~ /^[\d.]+$/) && (request.host =~ domain_regexp)
".#{$&}"
end
elsif options[:domain].is_a? Array
# if host matches one of the supplied domains without a dot in front of it
options[:domain] = options[:domain].find {|domain| @request.host.include? domain.sub(/^\./, '') }
options[:domain] = options[:domain].find {|domain| request.host.include? domain.sub(/^\./, '') }
end
end
......@@ -390,16 +396,15 @@ def recycle! #:nodoc:
private
def write_cookie?(cookie)
@request.ssl? || !cookie[:secure] || always_write_cookie
request.ssl? || !cookie[:secure] || always_write_cookie
end
end
class PermanentCookieJar #:nodoc:
include ChainedCookieJars
def initialize(parent_jar, request)
def initialize(parent_jar)
@parent_jar = parent_jar
@request = request
end
def [](name)
......@@ -433,7 +438,7 @@ module SerializedCookieJars # :nodoc:
protected
def needs_migration?(value)
@request.cookies_serializer == :hybrid && value.start_with?(MARSHAL_SIGNATURE)
request.cookies_serializer == :hybrid && value.start_with?(MARSHAL_SIGNATURE)
end
def serialize(value)
......@@ -453,7 +458,7 @@ def deserialize(name, value)
end
def serializer
serializer = @request.cookies_serializer || :marshal
serializer = request.cookies_serializer || :marshal
case serializer
when :marshal
Marshal
......@@ -465,7 +470,7 @@ def serializer
end
def digest
@request.cookies_digest || 'SHA1'
request.cookies_digest || 'SHA1'
end
end
......@@ -473,9 +478,8 @@ class SignedCookieJar #:nodoc:
include ChainedCookieJars
include SerializedCookieJars
def initialize(parent_jar, request)
def initialize(parent_jar)
@parent_jar = parent_jar
@request = request
secret = key_generator.generate_key(request.signed_cookie_salt)
@verifier = ActiveSupport::MessageVerifier.new(secret, digest: digest, serializer: ActiveSupport::MessageEncryptor::NullSerializer)
end
......@@ -528,15 +532,14 @@ class EncryptedCookieJar #:nodoc:
include ChainedCookieJars
include SerializedCookieJars
def initialize(parent_jar, request)
@request = request
def initialize(parent_jar)
@parent_jar = parent_jar
if ActiveSupport::LegacyKeyGenerator === key_generator
raise "You didn't set secrets.secret_key_base, which is required for this cookie jar. " +
"Read the upgrade documentation to learn more about this new config option."
end
@parent_jar = parent_jar
secret = key_generator.generate_key(request.encrypted_cookie_salt || '')
sign_secret = key_generator.generate_key(request.encrypted_signed_cookie_salt || '')
@encryptor = ActiveSupport::MessageEncryptor.new(secret, sign_secret, digest: digest, serializer: ActiveSupport::MessageEncryptor::NullSerializer)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册