ie_iframe_cookies 0.1.0
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/Gemfile +8 -0
- data/Gemfile.lock +37 -0
- data/Rakefile +21 -0
- data/Readme.md +29 -0
- data/VERSION +1 -0
- data/ie_iframe_cookies.gemspec +40 -0
- data/init.rb +1 -0
- data/lib/ie_iframe_cookies.rb +40 -0
- data/test/ie_iframe_cookies_test.rb +142 -0
- data/test/test_helper.rb +16 -0
- metadata +76 -0
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
actionmailer (2.3.14)
|
5
|
+
actionpack (= 2.3.14)
|
6
|
+
actionpack (2.3.14)
|
7
|
+
activesupport (= 2.3.14)
|
8
|
+
rack (~> 1.1.0)
|
9
|
+
activerecord (2.3.14)
|
10
|
+
activesupport (= 2.3.14)
|
11
|
+
activeresource (2.3.14)
|
12
|
+
activesupport (= 2.3.14)
|
13
|
+
activesupport (2.3.14)
|
14
|
+
git (1.2.5)
|
15
|
+
jeweler (1.6.4)
|
16
|
+
bundler (~> 1.0)
|
17
|
+
git (>= 1.2.5)
|
18
|
+
rake
|
19
|
+
rack (1.1.2)
|
20
|
+
rails (2.3.14)
|
21
|
+
actionmailer (= 2.3.14)
|
22
|
+
actionpack (= 2.3.14)
|
23
|
+
activerecord (= 2.3.14)
|
24
|
+
activeresource (= 2.3.14)
|
25
|
+
activesupport (= 2.3.14)
|
26
|
+
rake (>= 0.8.3)
|
27
|
+
rake (0.9.2)
|
28
|
+
redgreen (1.2.2)
|
29
|
+
|
30
|
+
PLATFORMS
|
31
|
+
ruby
|
32
|
+
|
33
|
+
DEPENDENCIES
|
34
|
+
jeweler
|
35
|
+
rails (~> 2)
|
36
|
+
rake
|
37
|
+
redgreen
|
data/Rakefile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'rake/testtask'
|
2
|
+
Rake::TestTask.new(:default) do |test|
|
3
|
+
test.libs << 'lib'
|
4
|
+
test.pattern = 'test/**/*_test.rb'
|
5
|
+
test.verbose = true
|
6
|
+
end
|
7
|
+
|
8
|
+
begin
|
9
|
+
require 'jeweler'
|
10
|
+
Jeweler::Tasks.new do |gem|
|
11
|
+
gem.name = 'ie_iframe_cookies'
|
12
|
+
gem.summary = "Rails: Enabled cookies inside IFrames for IE via p3p headers"
|
13
|
+
gem.email = "michael@grosser.it"
|
14
|
+
gem.homepage = "http://github.com/grosser/#{gem.name}"
|
15
|
+
gem.authors = ["Michael Grosser"]
|
16
|
+
end
|
17
|
+
|
18
|
+
Jeweler::GemcutterTasks.new
|
19
|
+
rescue LoadError
|
20
|
+
puts "Jeweler, or one of its dependencies, is not available. Install it with: gem install jeweler"
|
21
|
+
end
|
data/Readme.md
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
Rails: Enabled cookies inside IFrames for IE via P3P headers.<br/>
|
2
|
+
|
3
|
+
IFrames in IE only get the same cookies as normal pages when P3P headers are added<br/>
|
4
|
+
=> 'iframe-using' IE users get P3P headers on every request<br/>
|
5
|
+
304 Not modified pages do not get P3P headers (via ETag)<br/>
|
6
|
+
=> 'iframe-using' IE users do not get 304
|
7
|
+
|
8
|
+
Install
|
9
|
+
=======
|
10
|
+
sudo gem install ie_iframe_cookies
|
11
|
+
Or
|
12
|
+
|
13
|
+
rails plugin install git://github.com/grosser/ie_iframe_cookies.git
|
14
|
+
|
15
|
+
|
16
|
+
Usage
|
17
|
+
=====
|
18
|
+
To cookie-tag users as 'iframe-using', add this to all actions rendered inside IFrames.<br/>
|
19
|
+
(only IE users are tagged)
|
20
|
+
|
21
|
+
before_filter :normal_cookies_for_ie_in_iframes! # :only => [:foo, :bar]
|
22
|
+
|
23
|
+
Authors
|
24
|
+
=======
|
25
|
+
[Sascha Depold](https://github.com/sdepold)
|
26
|
+
|
27
|
+
[Michael Grosser](http://grosser.it)<br/>
|
28
|
+
michael@grosser.it<br/>
|
29
|
+
Hereby placed under public domain, do what you want, just do not hold me accountable...
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.0
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{ie_iframe_cookies}
|
8
|
+
s.version = "0.1.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Michael Grosser"]
|
12
|
+
s.date = %q{2011-09-08}
|
13
|
+
s.email = %q{michael@grosser.it}
|
14
|
+
s.files = [
|
15
|
+
"Gemfile",
|
16
|
+
"Gemfile.lock",
|
17
|
+
"Rakefile",
|
18
|
+
"Readme.md",
|
19
|
+
"VERSION",
|
20
|
+
"ie_iframe_cookies.gemspec",
|
21
|
+
"init.rb",
|
22
|
+
"lib/ie_iframe_cookies.rb",
|
23
|
+
"test/ie_iframe_cookies_test.rb",
|
24
|
+
"test/test_helper.rb"
|
25
|
+
]
|
26
|
+
s.homepage = %q{http://github.com/grosser/ie_iframe_cookies}
|
27
|
+
s.require_paths = ["lib"]
|
28
|
+
s.rubygems_version = %q{1.6.2}
|
29
|
+
s.summary = %q{Rails: Enabled cookies inside IFrames for IE via p3p headers}
|
30
|
+
|
31
|
+
if s.respond_to? :specification_version then
|
32
|
+
s.specification_version = 3
|
33
|
+
|
34
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
35
|
+
else
|
36
|
+
end
|
37
|
+
else
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
data/init.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'ie_iframe_cookies'
|
@@ -0,0 +1,40 @@
|
|
1
|
+
class IEIframeCookies
|
2
|
+
VERSION = File.read( File.join(File.dirname(__FILE__),'..','VERSION') ).strip
|
3
|
+
end
|
4
|
+
|
5
|
+
module ActionController
|
6
|
+
class Base
|
7
|
+
before_filter :normal_cookies_for_ie_in_iframes
|
8
|
+
|
9
|
+
def normal_cookies_for_ie_in_iframes!
|
10
|
+
if request.ie_iframe_cookies_browser_is_ie?
|
11
|
+
normal_cookies_for_ie_in_iframes(:force => true)
|
12
|
+
cookies["using_iframes_in_ie"] = true
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def normal_cookies_for_ie_in_iframes(options={})
|
17
|
+
headers['P3P'] = 'CP="ALL DSP COR CURa ADMa DEVa OUR IND COM NAV"' if request.normal_cookies_for_ie_in_iframes? or options[:force]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class Request
|
22
|
+
def ie_iframe_cookies_browser_is_ie?
|
23
|
+
(env['HTTP_USER_AGENT'] || "").include?("MSIE")
|
24
|
+
end
|
25
|
+
|
26
|
+
def normal_cookies_for_ie_in_iframes?
|
27
|
+
ie_iframe_cookies_browser_is_ie? and cookies["using_iframes_in_ie"]
|
28
|
+
end
|
29
|
+
|
30
|
+
alias_method :etag_matches_without_ie_iframe_cookies?, :etag_matches?
|
31
|
+
def etag_matches?(*args)
|
32
|
+
not normal_cookies_for_ie_in_iframes? and etag_matches_without_ie_iframe_cookies?(*args)
|
33
|
+
end
|
34
|
+
|
35
|
+
alias_method :not_modified_without_ie_iframe_cookies?, :not_modified?
|
36
|
+
def not_modified?(*args)
|
37
|
+
not normal_cookies_for_ie_in_iframes? and not_modified_without_ie_iframe_cookies?(*args)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,142 @@
|
|
1
|
+
require 'test/test_helper'
|
2
|
+
|
3
|
+
class IETestController < ActionController::Base
|
4
|
+
before_filter :normal_cookies_for_ie_in_iframes!, :only => :activate
|
5
|
+
|
6
|
+
def activate
|
7
|
+
render :text => 'OK'
|
8
|
+
end
|
9
|
+
|
10
|
+
def visit
|
11
|
+
render :text => 'OK'
|
12
|
+
end
|
13
|
+
|
14
|
+
def with_etag
|
15
|
+
if stale?(:etag => 'foo')
|
16
|
+
render :text => 'OK'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def with_modified
|
21
|
+
if stale?(:last_modified => 1.minute.ago)
|
22
|
+
render :text => 'OK'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class IEIFrameCookiesTest < ActionController::TestCase
|
28
|
+
def setup
|
29
|
+
@controller = IETestController.new
|
30
|
+
@request = ActionController::TestRequest.new
|
31
|
+
@response = ActionController::TestResponse.new
|
32
|
+
end
|
33
|
+
|
34
|
+
def is_ok!
|
35
|
+
assert_equal 'OK', @response.body
|
36
|
+
assert_equal 200, @response.status.to_i
|
37
|
+
end
|
38
|
+
|
39
|
+
def is_not_modified!
|
40
|
+
assert_equal 304, @response.status.to_i
|
41
|
+
end
|
42
|
+
|
43
|
+
def set_ie
|
44
|
+
@request.env['HTTP_USER_AGENT'] = 'Mr. MSIE is coming...'
|
45
|
+
end
|
46
|
+
|
47
|
+
def set_tracked
|
48
|
+
@request.cookies['using_iframes_in_ie'] = 'true'
|
49
|
+
end
|
50
|
+
|
51
|
+
def set_etag
|
52
|
+
@request.env['HTTP_IF_NONE_MATCH'] = '"acbd18db4cc2f85cedef654fccc4a4d8"'
|
53
|
+
end
|
54
|
+
|
55
|
+
def set_modified(time)
|
56
|
+
@request.env['HTTP_IF_MODIFIED_SINCE'] = time.rfc2822
|
57
|
+
end
|
58
|
+
|
59
|
+
test "it has a VERSION" do
|
60
|
+
assert_match /^\d+\.\d+\.\d+$/, IEIframeCookies::VERSION
|
61
|
+
end
|
62
|
+
|
63
|
+
# adding tracking cookie
|
64
|
+
test "it sets tracking cookie for IE users" do
|
65
|
+
set_ie
|
66
|
+
get :activate
|
67
|
+
is_ok!
|
68
|
+
assert_equal "true", cookies['using_iframes_in_ie']
|
69
|
+
end
|
70
|
+
|
71
|
+
test "does not set tracking cookie for nice users" do
|
72
|
+
get :activate
|
73
|
+
is_ok!
|
74
|
+
assert_equal nil, cookies['using_iframes_in_ie']
|
75
|
+
end
|
76
|
+
|
77
|
+
# returning P3P headers
|
78
|
+
test "it adds P3P headers for tracked IE users" do
|
79
|
+
set_tracked
|
80
|
+
set_ie
|
81
|
+
get :visit
|
82
|
+
is_ok!
|
83
|
+
assert_equal 'CP="ALL DSP COR CURa ADMa DEVa OUR IND COM NAV"', @response.headers['P3P']
|
84
|
+
end
|
85
|
+
|
86
|
+
test "it does not add P3P headers for un-tracked IE users" do
|
87
|
+
set_ie
|
88
|
+
get :visit
|
89
|
+
is_ok!
|
90
|
+
assert_equal nil, @response.headers['P3P']
|
91
|
+
end
|
92
|
+
|
93
|
+
test "it does not add P3P headers for tracked nice users" do
|
94
|
+
set_tracked
|
95
|
+
get :visit
|
96
|
+
is_ok!
|
97
|
+
assert_equal nil, @response.headers['P3P']
|
98
|
+
end
|
99
|
+
|
100
|
+
# disable ETags 304
|
101
|
+
test "is not modified for tracked nice users" do
|
102
|
+
set_etag
|
103
|
+
set_tracked
|
104
|
+
get :with_etag
|
105
|
+
is_not_modified!
|
106
|
+
end
|
107
|
+
|
108
|
+
test "is not modified for un-tracked ie users" do
|
109
|
+
set_etag
|
110
|
+
set_tracked
|
111
|
+
get :with_etag
|
112
|
+
is_not_modified!
|
113
|
+
end
|
114
|
+
|
115
|
+
test "is modified for tracked ie users" do
|
116
|
+
set_etag
|
117
|
+
set_tracked
|
118
|
+
set_ie
|
119
|
+
get :with_etag
|
120
|
+
is_ok!
|
121
|
+
end
|
122
|
+
|
123
|
+
test "is not modified via modified since" do
|
124
|
+
set_modified(0.minutes.ago)
|
125
|
+
get :with_modified
|
126
|
+
is_not_modified!
|
127
|
+
end
|
128
|
+
|
129
|
+
test "is modified via modified since" do
|
130
|
+
set_modified(2.minutes.ago)
|
131
|
+
get :with_modified
|
132
|
+
is_ok!
|
133
|
+
end
|
134
|
+
|
135
|
+
test "is modified via modified since for tracked ie users" do
|
136
|
+
set_tracked
|
137
|
+
set_ie
|
138
|
+
set_modified(0.minutes.ago)
|
139
|
+
get :with_modified
|
140
|
+
is_ok!
|
141
|
+
end
|
142
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'action_pack'
|
3
|
+
require 'action_controller'
|
4
|
+
require 'action_controller/test_process'
|
5
|
+
require 'test/unit'
|
6
|
+
require 'redgreen' rescue nil
|
7
|
+
|
8
|
+
$LOAD_PATH << 'lib'
|
9
|
+
|
10
|
+
# fake rails env for initialisation
|
11
|
+
# when Rails is defined, backtrace_cleaner is used, when assert fails
|
12
|
+
RAILS_ENV='development'
|
13
|
+
|
14
|
+
ActionController::Routing::Routes.reload
|
15
|
+
|
16
|
+
require "init"
|
metadata
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ie_iframe_cookies
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 0
|
10
|
+
version: 0.1.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Michael Grosser
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-09-08 00:00:00 +02:00
|
19
|
+
default_executable:
|
20
|
+
dependencies: []
|
21
|
+
|
22
|
+
description:
|
23
|
+
email: michael@grosser.it
|
24
|
+
executables: []
|
25
|
+
|
26
|
+
extensions: []
|
27
|
+
|
28
|
+
extra_rdoc_files: []
|
29
|
+
|
30
|
+
files:
|
31
|
+
- Gemfile
|
32
|
+
- Gemfile.lock
|
33
|
+
- Rakefile
|
34
|
+
- Readme.md
|
35
|
+
- VERSION
|
36
|
+
- ie_iframe_cookies.gemspec
|
37
|
+
- init.rb
|
38
|
+
- lib/ie_iframe_cookies.rb
|
39
|
+
- test/ie_iframe_cookies_test.rb
|
40
|
+
- test/test_helper.rb
|
41
|
+
has_rdoc: true
|
42
|
+
homepage: http://github.com/grosser/ie_iframe_cookies
|
43
|
+
licenses: []
|
44
|
+
|
45
|
+
post_install_message:
|
46
|
+
rdoc_options: []
|
47
|
+
|
48
|
+
require_paths:
|
49
|
+
- lib
|
50
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
hash: 3
|
56
|
+
segments:
|
57
|
+
- 0
|
58
|
+
version: "0"
|
59
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
60
|
+
none: false
|
61
|
+
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
hash: 3
|
65
|
+
segments:
|
66
|
+
- 0
|
67
|
+
version: "0"
|
68
|
+
requirements: []
|
69
|
+
|
70
|
+
rubyforge_project:
|
71
|
+
rubygems_version: 1.6.2
|
72
|
+
signing_key:
|
73
|
+
specification_version: 3
|
74
|
+
summary: "Rails: Enabled cookies inside IFrames for IE via p3p headers"
|
75
|
+
test_files: []
|
76
|
+
|