rack-iframe 0.0.2 → 0.0.3

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.
data/TODO CHANGED
@@ -5,20 +5,20 @@ x [feature/issue]: Fix/Review "Last-Modified" HTTP cache header case - to comply
5
5
 
6
6
  - [feature]: Track if P3P-headers should be sent via cookie. Reason: We can't assume that only bodies that contain <iframe>-elements needs the P3P header (or so I think right now).
7
7
 
8
- - [feature]: Add option to send 304 headers but delete "Set-Cookie"-header - not allowed by spec, but seems to work in most browsers/servers anyway.
9
-
10
8
 
11
9
  == LOW-PRIO
12
10
 
13
- - [refactor/enhancement]: Use 'useragent' gem to parse 'USER_AGENT'-header - https://rubygems.org/gems/useragent
14
-
15
- - [refactor/test]: Use proper integration testing, i.e. mocks/env => Sinatra/headers.
11
+ - [refactor/test]: Use pure integration testing, i.e. mocks/env => Sinatra/headers.
16
12
 
17
13
 
18
14
  == MAYBE
19
15
 
20
16
  - [feature]: Optionally silently/evily inject "the cross-domain iframe JavaScript hack" for Safari - or specified user agents - into the body response. >:)
21
17
 
18
+ - [refactor/enhancement]: Use 'useragent' gem to parse 'USER_AGENT'-header - https://rubygems.org/gems/useragent
19
+
20
+ - [feature]: Add option to send 304 headers but delete "Set-Cookie"-header - not allowed by spec, but seems to work in most browsers/servers anyway.
21
+
22
22
  - [feature]: Support for policy reference file. http://www.w3.org/TR/P3P/#ref_file
23
23
 
24
24
  - [feature]: Support for specifying compact policies by configuration. http://www.w3.org/TR/P3P/#compact_policies http://www.p3pwriter.com/LRN_111.asp
@@ -7,11 +7,13 @@ module Rack
7
7
 
8
8
  DEFAULT_P3P = %(CP="ALL DSP COR CURa ADMa DEVa OUR IND COM NAV").freeze
9
9
  DEFAULT_IFRAME_SESSION_PATH = '/iframe_session'.freeze
10
+ DEFAULT_ENV_SESSION_KEY = 'rack.session'.freeze
10
11
 
11
12
  def initialize(app, options = {})
12
13
  @app, @options = app, options
13
14
  @options[:p3p] ||= DEFAULT_P3P
14
15
  @options[:iframe_session_path] ||= DEFAULT_IFRAME_SESSION_PATH
16
+ @options[:env_session_key] ||= DEFAULT_ENV_SESSION_KEY
15
17
  end
16
18
 
17
19
  def call(env)
@@ -20,7 +22,8 @@ module Rack
20
22
 
21
23
  # 2) Request
22
24
  if iframe_session_path?(env)
23
- @status, @headers, @body = iframe_session_response
25
+ @app.call(env) # ...still call app as we want same ENV.
26
+ @status, @headers, @body = iframe_session_response(env)
24
27
  else
25
28
  @status, @headers, @body = @app.call(env)
26
29
  end
@@ -35,7 +38,7 @@ module Rack
35
38
  protected
36
39
 
37
40
  def user_agent(env)
38
- env['HTTP_USER_AGENT']
41
+ env['HTTP_USER_AGENT'] || []
39
42
  end
40
43
 
41
44
  def set_invalid_etag!(env)
@@ -77,7 +80,14 @@ module Rack
77
80
  env['PATH_INFO'] == @options[:iframe_session_path]
78
81
  end
79
82
 
80
- def iframe_session_response
83
+ def iframe_session_response(env)
84
+ begin
85
+ # Write a value into the session to ensure we get a session (cookie).
86
+ session_key = @options[:env_session_key]
87
+ env[session_key][:iframe_session] = true
88
+ rescue => e
89
+ env['rack.errors'].puts "[rack-iframe]: env[#{@options[:env_session_key]}] = #{env[@options[:env_session_key]]}"
90
+ end
81
91
  [200, {}, [""]]
82
92
  end
83
93
 
@@ -1,5 +1,5 @@
1
1
  module Rack
2
2
  class Iframe
3
- VERSION = "0.0.2"
3
+ VERSION = "0.0.3"
4
4
  end
5
5
  end
@@ -203,6 +203,15 @@ describe Rack::Iframe do
203
203
  status.must_equal 200 # modified
204
204
  end
205
205
  end
206
+
207
+ it 'should set session variable :iframe_session on request to /iframe_session' do
208
+ @user_agents.each do |user_agent|
209
+ browser = Rack::Test::Session.new(Rack::MockSession.new(SessionIframeApp))
210
+ browser.get '/iframe_session', {}, 'HTTP_USER_AGENT' => user_agent_string(user_agent)
211
+ browser.get '/test_iframe_session', {}, 'HTTP_USER_AGENT' => user_agent_string(user_agent)
212
+ browser.last_response.body.must_equal "true"
213
+ end
214
+ end
206
215
  end
207
216
  end
208
217
  end
@@ -19,9 +19,10 @@ require 'rack/iframe'
19
19
  ENV['RACK_ENV'] = 'test'
20
20
 
21
21
  class CachedApp < Sinatra::Base
22
-
23
22
  use Rack::Cache, :verbose => true, :meta_store => 'heap:/', :entitystore => 'heap:/'
24
23
 
24
+ enable :sessions
25
+
25
26
  get '/' do
26
27
  headers['Content-Type'] = 'text/plain'
27
28
  ""
@@ -40,6 +41,15 @@ class CachedApp < Sinatra::Base
40
41
  end
41
42
  end
42
43
 
44
+ class SessionIframeApp < CachedApp
45
+ use Rack::Iframe
46
+
47
+ get '/test_iframe_session' do
48
+ headers['Content-Type'] = 'text/plain'
49
+ "#{session[:iframe_session]}"
50
+ end
51
+ end
52
+
43
53
  def mock_app(headers = {}, env = {})
44
54
  default_headers = headers.merge({
45
55
  'Content-Type' => 'text/plain'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-iframe
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -11,11 +11,11 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2011-11-01 00:00:00.000000000 Z
14
+ date: 2012-05-21 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rack
18
- requirement: &70224205432460 !ruby/object:Gem::Requirement
18
+ requirement: !ruby/object:Gem::Requirement
19
19
  none: false
20
20
  requirements:
21
21
  - - ! '>='
@@ -23,10 +23,15 @@ dependencies:
23
23
  version: '0'
24
24
  type: :runtime
25
25
  prerelease: false
26
- version_requirements: *70224205432460
26
+ version_requirements: !ruby/object:Gem::Requirement
27
+ none: false
28
+ requirements:
29
+ - - ! '>='
30
+ - !ruby/object:Gem::Version
31
+ version: '0'
27
32
  - !ruby/object:Gem::Dependency
28
33
  name: rake
29
- requirement: &70224205432020 !ruby/object:Gem::Requirement
34
+ requirement: !ruby/object:Gem::Requirement
30
35
  none: false
31
36
  requirements:
32
37
  - - ! '>='
@@ -34,10 +39,15 @@ dependencies:
34
39
  version: '0'
35
40
  type: :development
36
41
  prerelease: false
37
- version_requirements: *70224205432020
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ none: false
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
38
48
  - !ruby/object:Gem::Dependency
39
49
  name: bundler
40
- requirement: &70224205431400 !ruby/object:Gem::Requirement
50
+ requirement: !ruby/object:Gem::Requirement
41
51
  none: false
42
52
  requirements:
43
53
  - - ! '>='
@@ -45,10 +55,15 @@ dependencies:
45
55
  version: '0'
46
56
  type: :development
47
57
  prerelease: false
48
- version_requirements: *70224205431400
58
+ version_requirements: !ruby/object:Gem::Requirement
59
+ none: false
60
+ requirements:
61
+ - - ! '>='
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
49
64
  - !ruby/object:Gem::Dependency
50
65
  name: minitest
51
- requirement: &70224205430820 !ruby/object:Gem::Requirement
66
+ requirement: !ruby/object:Gem::Requirement
52
67
  none: false
53
68
  requirements:
54
69
  - - ! '>='
@@ -56,10 +71,15 @@ dependencies:
56
71
  version: '0'
57
72
  type: :development
58
73
  prerelease: false
59
- version_requirements: *70224205430820
74
+ version_requirements: !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ! '>='
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
60
80
  - !ruby/object:Gem::Dependency
61
81
  name: guard
62
- requirement: &70224205430400 !ruby/object:Gem::Requirement
82
+ requirement: !ruby/object:Gem::Requirement
63
83
  none: false
64
84
  requirements:
65
85
  - - ! '>='
@@ -67,10 +87,15 @@ dependencies:
67
87
  version: '0'
68
88
  type: :development
69
89
  prerelease: false
70
- version_requirements: *70224205430400
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ none: false
92
+ requirements:
93
+ - - ! '>='
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
71
96
  - !ruby/object:Gem::Dependency
72
97
  name: guard-bundler
73
- requirement: &70224205429980 !ruby/object:Gem::Requirement
98
+ requirement: !ruby/object:Gem::Requirement
74
99
  none: false
75
100
  requirements:
76
101
  - - ! '>='
@@ -78,10 +103,15 @@ dependencies:
78
103
  version: '0'
79
104
  type: :development
80
105
  prerelease: false
81
- version_requirements: *70224205429980
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ none: false
108
+ requirements:
109
+ - - ! '>='
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
82
112
  - !ruby/object:Gem::Dependency
83
113
  name: guard-minitest
84
- requirement: &70224205429480 !ruby/object:Gem::Requirement
114
+ requirement: !ruby/object:Gem::Requirement
85
115
  none: false
86
116
  requirements:
87
117
  - - ! '>='
@@ -89,10 +119,15 @@ dependencies:
89
119
  version: '0'
90
120
  type: :development
91
121
  prerelease: false
92
- version_requirements: *70224205429480
122
+ version_requirements: !ruby/object:Gem::Requirement
123
+ none: false
124
+ requirements:
125
+ - - ! '>='
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
93
128
  - !ruby/object:Gem::Dependency
94
129
  name: rack-test
95
- requirement: &70224205428980 !ruby/object:Gem::Requirement
130
+ requirement: !ruby/object:Gem::Requirement
96
131
  none: false
97
132
  requirements:
98
133
  - - ! '>='
@@ -100,10 +135,15 @@ dependencies:
100
135
  version: '0'
101
136
  type: :development
102
137
  prerelease: false
103
- version_requirements: *70224205428980
138
+ version_requirements: !ruby/object:Gem::Requirement
139
+ none: false
140
+ requirements:
141
+ - - ! '>='
142
+ - !ruby/object:Gem::Version
143
+ version: '0'
104
144
  - !ruby/object:Gem::Dependency
105
145
  name: rack-cache
106
- requirement: &70224205428420 !ruby/object:Gem::Requirement
146
+ requirement: !ruby/object:Gem::Requirement
107
147
  none: false
108
148
  requirements:
109
149
  - - ! '>='
@@ -111,10 +151,15 @@ dependencies:
111
151
  version: '0'
112
152
  type: :development
113
153
  prerelease: false
114
- version_requirements: *70224205428420
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ none: false
156
+ requirements:
157
+ - - ! '>='
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
115
160
  - !ruby/object:Gem::Dependency
116
161
  name: chronic
117
- requirement: &70224205427620 !ruby/object:Gem::Requirement
162
+ requirement: !ruby/object:Gem::Requirement
118
163
  none: false
119
164
  requirements:
120
165
  - - ! '>='
@@ -122,10 +167,15 @@ dependencies:
122
167
  version: '0'
123
168
  type: :development
124
169
  prerelease: false
125
- version_requirements: *70224205427620
170
+ version_requirements: !ruby/object:Gem::Requirement
171
+ none: false
172
+ requirements:
173
+ - - ! '>='
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
126
176
  - !ruby/object:Gem::Dependency
127
177
  name: awesome_print
128
- requirement: &70224205426500 !ruby/object:Gem::Requirement
178
+ requirement: !ruby/object:Gem::Requirement
129
179
  none: false
130
180
  requirements:
131
181
  - - ! '>='
@@ -133,10 +183,15 @@ dependencies:
133
183
  version: '0'
134
184
  type: :development
135
185
  prerelease: false
136
- version_requirements: *70224205426500
186
+ version_requirements: !ruby/object:Gem::Requirement
187
+ none: false
188
+ requirements:
189
+ - - ! '>='
190
+ - !ruby/object:Gem::Version
191
+ version: '0'
137
192
  - !ruby/object:Gem::Dependency
138
193
  name: sinatra
139
- requirement: &70224205425760 !ruby/object:Gem::Requirement
194
+ requirement: !ruby/object:Gem::Requirement
140
195
  none: false
141
196
  requirements:
142
197
  - - ! '>='
@@ -144,7 +199,12 @@ dependencies:
144
199
  version: '0'
145
200
  type: :development
146
201
  prerelease: false
147
- version_requirements: *70224205425760
202
+ version_requirements: !ruby/object:Gem::Requirement
203
+ none: false
204
+ requirements:
205
+ - - ! '>='
206
+ - !ruby/object:Gem::Version
207
+ version: '0'
148
208
  description: Rack middleware for enabling problematic web browsers (Internet Explorer
149
209
  and Safari) to use same cookies in iframes as in parent windows.
150
210
  email:
@@ -182,7 +242,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
182
242
  version: '0'
183
243
  segments:
184
244
  - 0
185
- hash: -3225928049267512743
245
+ hash: 2887272205395203645
186
246
  required_rubygems_version: !ruby/object:Gem::Requirement
187
247
  none: false
188
248
  requirements:
@@ -191,10 +251,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
191
251
  version: '0'
192
252
  segments:
193
253
  - 0
194
- hash: -3225928049267512743
254
+ hash: 2887272205395203645
195
255
  requirements: []
196
256
  rubyforge_project: rack-iframe
197
- rubygems_version: 1.8.10
257
+ rubygems_version: 1.8.24
198
258
  signing_key:
199
259
  specification_version: 3
200
260
  summary: Rack middleware for enabling problematic web browsers (Internet Explorer