encrypted_cookie_store-instructure 1.1.0 → 1.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.
@@ -1,9 +1,9 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = %q{encrypted_cookie_store-instructure}
3
- s.version = "1.1.0"
3
+ s.version = "1.1.1"
4
4
 
5
5
  s.authors = ["Cody Cutrer", "Jacob Fugal", "James Williams"]
6
- s.date = %q{2013-11-13}
6
+ s.date = %q{2013-12-20}
7
7
  s.extra_rdoc_files = [
8
8
  "LICENSE.txt"
9
9
  ]
@@ -13,6 +13,8 @@ module ActionDispatch
13
13
  end
14
14
  self.data_cipher_type = "aes-128-cbc".freeze
15
15
 
16
+ EXPIRE_AFTER_KEY = "encrypted_cookie_store.session_expire_after"
17
+
16
18
  OpenSSLCipherError = OpenSSL::Cipher.const_defined?(:CipherError) ? OpenSSL::Cipher::CipherError : OpenSSL::CipherError
17
19
 
18
20
  def initialize(app, options = {})
@@ -33,8 +35,17 @@ module ActionDispatch
33
35
  super(app, options)
34
36
  end
35
37
 
38
+ def call(env)
39
+ @expire_after = env[EXPIRE_AFTER_KEY]
40
+ super
41
+ end
42
+
36
43
  private
37
44
 
45
+ def expire_after(options={})
46
+ @expire_after || options[:expire_after]
47
+ end
48
+
38
49
  # overrides method in ActionDispatch::Session::CookieStore
39
50
  def unpacked_cookie_data(env)
40
51
  env['encrypted_cookie_store.cookie'] ||= begin
@@ -81,7 +92,7 @@ module ActionDispatch
81
92
  end
82
93
 
83
94
  def refresh_session?(env, options)
84
- if options[:expire_after] && options[:refresh_interval] && time = timestamp(env)
95
+ if expire_after(options) && options[:refresh_interval] && time = timestamp(env)
85
96
  Time.now.utc.to_i > time + options[:refresh_interval]
86
97
  else
87
98
  false
@@ -101,11 +112,11 @@ module ActionDispatch
101
112
  compressed_session_data = session_data
102
113
  end
103
114
  encrypted_session_data = @data_cipher.update(compressed_session_data) << @data_cipher.final
104
- timestamp = Time.now.utc.to_i if options[:expire_after]
115
+ timestamp = Time.now.utc.to_i if expire_after(options)
105
116
  digest = OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new(@digest), @secret, session_data + timestamp.to_s)
106
117
 
107
118
  result = "#{base64(iv)}#{compressed_session_data == session_data ? '.' : ' '}#{base64(encrypted_session_data)}.#{base64(digest)}"
108
- result << ".#{base64([timestamp].pack('N'))}" if options[:expire_after]
119
+ result << ".#{base64([timestamp].pack('N'))}" if expire_after(options)
109
120
  result
110
121
  end
111
122
 
@@ -125,8 +136,8 @@ module ActionDispatch
125
136
  session_data = @data_cipher.update(encrypted_session_data) << @data_cipher.final
126
137
  session_data = inflate(session_data) if compressed
127
138
  return nil unless digest == OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new(@digest), @secret, session_data + timestamp.to_s)
128
- if options[:expire_after]
129
- return nil unless timestamp && Time.now.utc.to_i <= timestamp + options[:expire_after]
139
+ if expire_after(options)
140
+ return nil unless timestamp && Time.now.utc.to_i <= timestamp + expire_after(options)
130
141
  end
131
142
 
132
143
  loaded_data = Marshal.load(session_data) || nil
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: encrypted_cookie_store-instructure
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2013-11-13 00:00:00.000000000 Z
14
+ date: 2013-12-20 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: actionpack