Skip to content

Commit 8cbf185

Browse files
committed
Fix bug preventing saving of sessions with legacy format sid
1 parent 3126844 commit 8cbf185

File tree

1 file changed

+13
-15
lines changed

1 file changed

+13
-15
lines changed

lib/aws/session_store/dynamo_db/rack_middleware.rb

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@ def find_session(req, sid)
2323
if req.session.options[:skip]
2424
[generate_sid, {}]
2525
else
26-
session = find_session_data(req, sid)
27-
unless session
26+
unless sid and session = @lock.get_session_data(req.env, get_session_id_with_fallback(sid))
2827
session = {}
2928
sid = generate_unique_sid(req.env, session)
3029
end
@@ -37,31 +36,30 @@ def generate_hmac(sid, secret)
3736
OpenSSL::HMAC.hexdigest(OpenSSL::Digest::MD5.new, secret, sid).strip()
3837
end
3938

40-
# Get session data from DynamoDB.
41-
def find_session_data(req, sid)
39+
def generate_unique_sid(env, session)
40+
env['dynamo_db.new_session'] = 'true'
41+
generate_sid
42+
end
43+
44+
def get_session_id_with_fallback(sid)
4245
return nil unless sid
43-
digest, ver_sid = sid.public_id.split("--")
46+
digest, ver_sid = sid.public_id.split('--')
4447
if ver_sid && @config.secret_key && digest == generate_hmac(ver_sid, @config.secret_key)
4548
# Legacy session id format
46-
@lock.get_session_data(req.env, sid.public_id)
49+
sid.public_id
4750
else
48-
@lock.get_session_data(req.env, sid.private_id)
51+
sid.private_id
4952
end
5053
end
5154

52-
def generate_unique_sid(env, session)
53-
env['dynamo_db.new_session'] = 'true'
54-
generate_sid
55-
end
56-
5755
def write_session(req, sid, session, options)
58-
sid = generate_sid if sid.nil? || !sid.respond_to?(:private_id)
59-
@lock.set_session_data(req.env, sid.private_id, session, options)
56+
sid = generate_sid if sid.nil?
57+
@lock.set_session_data(req.env, get_session_id_with_fallback(sid), session, options)
6058
sid
6159
end
6260

6361
def delete_session(req, sid, options)
64-
@lock.delete_session(req.env, sid.private_id)
62+
@lock.delete_session(req.env, get_session_id_with_fallback(sid))
6563
generate_sid unless options[:drop]
6664
end
6765
end

0 commit comments

Comments
 (0)