rack-iframe 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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