FIX: displaying wrong avatar and letter avatar

correct regression where params and env is reused in production
This commit is contained in:
Sam 2017-11-28 09:28:40 +11:00
parent 5a715b7d55
commit ca7af7b88f
2 changed files with 34 additions and 4 deletions

View File

@ -7,11 +7,26 @@ module Hijack
def hijack(&blk)
controller_class = self.class
request = self.request
#env = request.env.dup
#request_copy = ActionDispatch::Request.new(env)
request_copy = self.request
if hijack = request.env['rack.hijack']
io = hijack.call
# in prd the env object is re-used
# make a copy of all strings
env_copy = {}
request.env.each do |k, v|
env_copy[k] = v if String === v
end
request_copy = ActionDispatch::Request.new(env_copy)
# params is generated per request so we can simply reuse it
params_copy = params
Scheduler::Defer.later("hijack work") do
begin
@ -24,7 +39,8 @@ module Hijack
instance = controller_class.new
response = ActionDispatch::Response.new
instance.response = response
instance.request = request
instance.request = request_copy
instance.params = params_copy
begin
instance.instance_eval(&blk)

View File

@ -8,8 +8,10 @@ describe Hijack do
def initialize
@io = StringIO.new
self.request = ActionController::TestRequest.new(
{ "rack.hijack" => lambda { @io } },
self.request = ActionController::TestRequest.new({
"rack.hijack" => lambda { @io },
"rack.input" => StringIO.new
},
nil,
nil
)
@ -27,6 +29,18 @@ describe Hijack do
Hijack::Tester.new
end
it "dupes the request params and env" do
orig_req = tester.request
copy_req = nil
tester.hijack_test do
copy_req = request
render body: "hello world", status: 200
end
expect(copy_req.object_id).not_to eq(orig_req.object_id)
end
it "handles expires_in" do
tester.hijack_test do
expires_in 1.year