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 +5 -5
- data/lib/rack/iframe.rb +13 -3
- data/lib/rack/iframe/version.rb +1 -1
- data/spec/rack-iframe_spec.rb +9 -0
- data/spec/spec_helper.rb +11 -1
- metadata +89 -29
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/
|
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
|
data/lib/rack/iframe.rb
CHANGED
@@ -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
|
-
@
|
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
|
|
data/lib/rack/iframe/version.rb
CHANGED
data/spec/rack-iframe_spec.rb
CHANGED
@@ -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
|
data/spec/spec_helper.rb
CHANGED
@@ -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.
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
254
|
+
hash: 2887272205395203645
|
195
255
|
requirements: []
|
196
256
|
rubyforge_project: rack-iframe
|
197
|
-
rubygems_version: 1.8.
|
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
|