big_session 0.1.0 → 0.1.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 +4 -4
- data/lib/big_session.rb +1 -1
- data/lib/big_session/rack_middleware.rb +17 -16
- data/lib/big_session/session_id.rb +15 -2
- data/lib/big_session/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5df74f239e196ec09817590c3618f7e5689c48e273e33b284f836fefd3f69318
|
4
|
+
data.tar.gz: 2d0b08359ab3d997e84900b6b7a960fefb3f8bedfba39de928c5b13d974cccc4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c4719aaa0e5404daa58fa3cf38be0d08ab92a1841ef2700e71480f4164d249bff464ce69a3e059a8bcce3e003b141e5827d01f8e86f245d8f1d26a364aa5b732
|
7
|
+
data.tar.gz: 771b9f7a1959a62a6610e07032d92cbd3a5ae8b87cf02d1bbcbd7af21c480047ce31069f46895afe31ee07798710e02b1237d9ad35ff303db7a033f33086f478
|
data/lib/big_session.rb
CHANGED
@@ -10,6 +10,6 @@ module BigSession
|
|
10
10
|
|
11
11
|
BIG_SESSION_HEADER_NAME = 'X-Bigse-SessionID'
|
12
12
|
BIG_SESSION_SIGNATURE_HEADER_NAME = 'X-Bigse-Sig'
|
13
|
-
|
13
|
+
THREAD_BIG_SESSION_CONTAINER_KEY = 'big_session_id'
|
14
14
|
RAILS_SESSION_BIG_SESSION_ID_KEY = 'big_session_id'
|
15
15
|
end
|
@@ -20,32 +20,33 @@ module BigSession
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def call(env)
|
23
|
+
session_id = retrieve_or_generate_session_id(env)
|
24
|
+
env['rack.session'][::BigSession::RAILS_SESSION_BIG_SESSION_ID_KEY] = session_id
|
25
|
+
SessionId.with_session_id(session_id) do
|
26
|
+
@app.call(env)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def retrieve_or_generate_session_id(env)
|
23
33
|
header_session_id, header_signature = env.values_at(
|
24
34
|
'HTTP_' + ::BigSession::BIG_SESSION_HEADER_NAME.upcase.gsub(/-/, '_'),
|
25
35
|
'HTTP_' + ::BigSession::BIG_SESSION_SIGNATURE_HEADER_NAME
|
26
36
|
.upcase.gsub(/-/, '_')
|
27
37
|
)
|
28
38
|
|
29
|
-
|
30
|
-
|
31
|
-
if @header_secret
|
32
|
-
validate_header_session_id(header_session_id, header_signature)
|
33
|
-
else
|
34
|
-
header_session_id
|
35
|
-
end
|
36
|
-
|
37
|
-
SessionId.set(env['rack.session'][::BigSession::RAILS_SESSION_BIG_SESSION_ID_KEY])
|
38
|
-
else
|
39
|
-
SessionId.set(env['rack.session'][::BigSession::RAILS_SESSION_BIG_SESSION_ID_KEY]) unless SessionId.current
|
40
|
-
env['rack.session'][::BigSession::RAILS_SESSION_BIG_SESSION_ID_KEY] = SessionId.current
|
41
|
-
end
|
39
|
+
return validate_header_session_id(header_session_id, header_signature) \
|
40
|
+
if header_session_id
|
42
41
|
|
43
|
-
|
42
|
+
SessionId.current ||
|
43
|
+
env['rack.session'][::BigSession::RAILS_SESSION_BIG_SESSION_ID_KEY] ||
|
44
|
+
SessionId.new_session_id
|
44
45
|
end
|
45
46
|
|
46
|
-
private
|
47
|
-
|
48
47
|
def validate_header_session_id(header_session_id, header_signature)
|
48
|
+
return header_session_id unless @header_secret
|
49
|
+
|
49
50
|
digest = OpenSSL::HMAC.hexdigest('sha256', @header_secret, header_session_id)
|
50
51
|
return header_session_id if digest == header_signature
|
51
52
|
|
@@ -6,20 +6,33 @@ module BigSession
|
|
6
6
|
# SessionId object bridges an access from users to session id
|
7
7
|
class SessionId
|
8
8
|
class << self
|
9
|
+
def with_session_id(session_id, &_block)
|
10
|
+
container.push(session_id)
|
11
|
+
yield
|
12
|
+
ensure
|
13
|
+
container.pop
|
14
|
+
end
|
15
|
+
|
9
16
|
def current
|
10
|
-
|
17
|
+
container.last
|
11
18
|
end
|
12
19
|
|
20
|
+
=begin
|
13
21
|
def set(value = nil)
|
14
22
|
Thread.current[::BigSession::THREAD_BIG_SESSION_ID_KEY] =
|
15
23
|
value || new_session_id
|
16
24
|
end
|
25
|
+
=end
|
17
26
|
|
18
27
|
def new_session_id
|
19
28
|
SecureRandom.hex(16)
|
20
29
|
end
|
30
|
+
|
31
|
+
def container
|
32
|
+
Thread.current[::BigSession::THREAD_BIG_SESSION_CONTAINER_KEY] ||= []
|
33
|
+
end
|
21
34
|
end
|
22
35
|
|
23
|
-
private_class_method :
|
36
|
+
private_class_method :container
|
24
37
|
end
|
25
38
|
end
|
data/lib/big_session/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: big_session
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yuichiro Someya
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-11-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|