token_redis_session_store 0.1.3 → 0.1.4
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
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0a8c13418ee51a1e0a0a550e74176057ad1f3cf8b67c1996d53efc0729651154
|
|
4
|
+
data.tar.gz: 92e2cbc9d305f143b34d22a74e41ba68be1cf6071092792c7ec1918e1c57bb11
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: adc8d351ef5b871125d0891e9db48e9ae9b6589b63685d915845454b07a7a5abfe6c5096f9b1cdb25f60a76a0199e05a786bc19f8ede5d8e6dca75b3b3339d47
|
|
7
|
+
data.tar.gz: 3995c2c6703e0b690b594d0fe1f853f05dc1417d28935ad427f0f7d011090560a30016f9c3aeb2d7cc93e4dbfac74aa84645c1ec64314c9964592b42c8d59d7f
|
data/Gemfile.lock
CHANGED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
require 'redis'
|
|
2
|
+
|
|
3
|
+
module ActionDispatch
|
|
4
|
+
module Session
|
|
5
|
+
class TokenRedisStore < ActionDispatch::Session::AbstractStore
|
|
6
|
+
def initialize(app, options = {})
|
|
7
|
+
redis_options = options[:redis] || {}
|
|
8
|
+
@session_header = options[:session_header] || 'Session-Id'
|
|
9
|
+
@redis = Redis.new(redis_options)
|
|
10
|
+
options[:defer] = true
|
|
11
|
+
super
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Get a session from the cache.
|
|
15
|
+
def find_session(_req, sid)
|
|
16
|
+
unless sid && (session = parse_session(sid))
|
|
17
|
+
sid = generate_sid
|
|
18
|
+
session = {}
|
|
19
|
+
end
|
|
20
|
+
[sid, session]
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Set a session in the cache.
|
|
24
|
+
def write_session(_req, sid, session, options)
|
|
25
|
+
unless session.nil?
|
|
26
|
+
if options[:expire_after].nil?
|
|
27
|
+
redis.set(sid, session.to_json)
|
|
28
|
+
else
|
|
29
|
+
redis.setex(sid, options[:expire_after], session.to_json)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
sid
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Remove a session from the cache.
|
|
36
|
+
def delete_session(req, sid, _session)
|
|
37
|
+
req.delete_header "HTTP_#{@session_header.sub('-', '_').upcase}"
|
|
38
|
+
redis.del(sid)
|
|
39
|
+
generate_sid
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
private
|
|
43
|
+
|
|
44
|
+
attr_reader :redis
|
|
45
|
+
|
|
46
|
+
def extract_session_id(req)
|
|
47
|
+
req.get_header "HTTP_#{@session_header.sub('-', '_').upcase}"
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def parse_session(sid)
|
|
51
|
+
(entry = redis.get(sid)) ? JSON.parse(entry) : nil
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -1,56 +1 @@
|
|
|
1
|
-
require '
|
|
2
|
-
require "token_redis_session_store/version"
|
|
3
|
-
|
|
4
|
-
module TokenRedisSessionStore
|
|
5
|
-
# Token Redis session storage that uses redis and
|
|
6
|
-
# passes the sessionid on an http header instead of cookie
|
|
7
|
-
class TokenRedisStore < ActionDispatch::Session::AbstractStore
|
|
8
|
-
def initialize(app, options = {})
|
|
9
|
-
redis_options = options[:redis] || {}
|
|
10
|
-
@session_header = options[:session_header] || 'Session-Id'
|
|
11
|
-
@redis = Redis.new(redis_options)
|
|
12
|
-
options[:defer] = true
|
|
13
|
-
super
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
# Get a session from the cache.
|
|
17
|
-
def find_session(_req, sid)
|
|
18
|
-
unless sid && (session = parse_session(sid))
|
|
19
|
-
sid = generate_sid
|
|
20
|
-
session = {}
|
|
21
|
-
end
|
|
22
|
-
[sid, session]
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
# Set a session in the cache.
|
|
26
|
-
def write_session(_req, sid, session, options)
|
|
27
|
-
unless session.nil?
|
|
28
|
-
if options[:expire_after].nil?
|
|
29
|
-
redis.set(sid, session.to_json)
|
|
30
|
-
else
|
|
31
|
-
redis.setex(sid, options[:expire_after], session.to_json)
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
sid
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
# Remove a session from the cache.
|
|
38
|
-
def delete_session(req, sid, _session)
|
|
39
|
-
req.delete_header "HTTP_#{@session_header.sub('-', '_').upcase}"
|
|
40
|
-
redis.del(sid)
|
|
41
|
-
generate_sid
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
private
|
|
45
|
-
|
|
46
|
-
attr_reader :redis
|
|
47
|
-
|
|
48
|
-
def extract_session_id(req)
|
|
49
|
-
req.get_header "HTTP_#{@session_header.sub('-', '_').upcase}"
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
def parse_session(sid)
|
|
53
|
-
(entry = redis.get(sid)) ? JSON.parse(entry) : nil
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
end
|
|
1
|
+
require 'action_dispatch/session/token_redis_store'
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: token_redis_session_store
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- enewbury
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2019-05-
|
|
11
|
+
date: 2019-05-13 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -133,6 +133,7 @@ files:
|
|
|
133
133
|
- Rakefile
|
|
134
134
|
- bin/console
|
|
135
135
|
- bin/setup
|
|
136
|
+
- lib/action_dispatch/session/token_redis_store.rb
|
|
136
137
|
- lib/token_redis_session_store.rb
|
|
137
138
|
- lib/token_redis_session_store/version.rb
|
|
138
139
|
- token_redis_session_store.gemspec
|