foolabs-rack-flash-session 1.0.2

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/README.rdoc ADDED
@@ -0,0 +1,43 @@
1
+ == Install
2
+
3
+ $ gem install rack-flash-session
4
+
5
+ === Rails
6
+
7
+ # config/environment.rb
8
+ config.gem 'rack-flash-session', :lib => 'rack/flash-session'
9
+ config.middleware.insert_before(ActionController::Base.session_store, 'Rack::FlashSession');
10
+
11
+ === Middleware
12
+
13
+ # add a use line to your builder
14
+ require 'rack/flash-session'
15
+ Rack::Builder.new do
16
+ use Rack::FlashSession
17
+ run MyApp.new
18
+ end
19
+
20
+ == Options
21
+
22
+ The default session key is '_session_id' but you can specify your
23
+ own:
24
+
25
+ use Rack::FlashSession, 'sid'
26
+
27
+ Or in Rails you can reference the key defined to be used as session key:
28
+
29
+ config.middleware.insert_before(ActionController::Base.session_store, 'Rack::FlashSession', config.action_controller.session[:key])
30
+
31
+ Note that the session key is used for both the query parameter name
32
+ and the cookie name.
33
+
34
+ You can specify multiple session keys:
35
+
36
+ use Rack::FlashSession, 'sid', 'my_other_session_key'
37
+
38
+ == Thanks to:
39
+
40
+ Rob Anderton for posting Flash uploaders, Rails, cookie based
41
+ sessions and CSRF: Rack Middleware to the rescue!
42
+ (http://thewebfellas.com/blog/2008/12/22/flash-uploaders-rails-cookie-based-sessions-and-csrf-rack-middleware-to-the-rescue)
43
+ on which this gem is based.
@@ -0,0 +1,21 @@
1
+ require 'rack/utils'
2
+
3
+ module Rack
4
+ class FlashSession
5
+
6
+ def initialize(app, *args)
7
+ args = ['_session_id'] if args.empty?
8
+ @app = app
9
+ @session_keys = args
10
+ end
11
+
12
+ def call(env)
13
+ if env['HTTP_USER_AGENT'] =~ /^(Adobe|Shockwave) Flash/ then
14
+ params = ::Rack::Request.new(env).params
15
+ env['HTTP_COOKIE'] = params.select{|k,v| @session_keys.include?(k)}.map{|k,v| [k, ::Rack::Utils.escape(v)].join('=')}.join(';')
16
+ end
17
+ @app.call(env)
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,55 @@
1
+ require 'spec_helper'
2
+
3
+ describe Rack::FlashSession do
4
+ def app(*args)
5
+ Rack::Builder.new {
6
+ use Rack::Lint
7
+ use Rack::FlashSession, *args
8
+ run lambda {|env| [200, {'Content-Type' => 'text/html'}, ['']] }
9
+ }.to_app
10
+ end
11
+
12
+ def env_for(params = {}, options={})
13
+ Rack::MockRequest.env_for('', options.merge(:params => params))
14
+ end
15
+
16
+ def do_call(params, options, *args)
17
+ env = env_for(params, options)
18
+ app(*args).call(env)
19
+ Rack::Request.new(env)
20
+ end
21
+
22
+ context 'flash request' do
23
+ def request(params, *args)
24
+ options = {'HTTP_USER_AGENT' => 'Adobe Flash'}
25
+ do_call(params, options, *args)
26
+ end
27
+
28
+ describe 'default _session_id' do
29
+ subject {request({'_session_id' => '12345'})}
30
+ its(:cookies){should == {'_session_id' => '12345'}}
31
+ end
32
+
33
+ describe 'custom session id' do
34
+ subject {request({'my_session_id' => '12345'}, 'my_session_id')}
35
+ its(:cookies){should == {'my_session_id' => '12345'}}
36
+ end
37
+
38
+ describe 'multiple cookies' do
39
+ subject {request({'my_session_id' => '12345', 'my_other_session_id' => '54321'}, 'my_session_id', 'my_other_session_id')}
40
+ its(:cookies){should include({'my_session_id' => '12345'})}
41
+ its(:cookies){should include({'my_other_session_id' => '54321'})}
42
+ its(:cookies){should have(2).items}
43
+ end
44
+ end
45
+
46
+ context 'non flash request' do
47
+ def request(params, *args)
48
+ options = {'HTTP_USER_AGENT' => 'some browser'}
49
+ do_call(params, options, *args)
50
+ end
51
+
52
+ subject {request({'_session_id' => '12345'})}
53
+ its(:cookies){should be_empty}
54
+ end
55
+ end
@@ -0,0 +1,7 @@
1
+ require 'rubygems'
2
+
3
+ require 'spec'
4
+ require 'rack'
5
+ require 'rack/mock'
6
+
7
+ require 'rack/flash-session'
metadata ADDED
@@ -0,0 +1,136 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: foolabs-rack-flash-session
3
+ version: !ruby/object:Gem::Version
4
+ hash: 19
5
+ prerelease: false
6
+ segments:
7
+ - 1
8
+ - 0
9
+ - 2
10
+ version: 1.0.2
11
+ platform: ruby
12
+ authors:
13
+ - Bart Teeuwisse
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-05-27 00:00:00 +02:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rack
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 15
30
+ segments:
31
+ - 1
32
+ - 0
33
+ version: "1.0"
34
+ type: :runtime
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: rack
38
+ prerelease: false
39
+ requirement: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ hash: 13
45
+ segments:
46
+ - 1
47
+ - 1
48
+ version: "1.1"
49
+ type: :development
50
+ version_requirements: *id002
51
+ - !ruby/object:Gem::Dependency
52
+ name: rack-test
53
+ prerelease: false
54
+ requirement: &id003 !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ hash: 13
60
+ segments:
61
+ - 0
62
+ - 5
63
+ - 3
64
+ version: 0.5.3
65
+ type: :development
66
+ version_requirements: *id003
67
+ - !ruby/object:Gem::Dependency
68
+ name: rspec
69
+ prerelease: false
70
+ requirement: &id004 !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ hash: 27
76
+ segments:
77
+ - 1
78
+ - 3
79
+ - 0
80
+ version: 1.3.0
81
+ type: :development
82
+ version_requirements: *id004
83
+ description: |+
84
+
85
+ Rack::FlashSession converts a session query parameter to a cookie if the request's user agent is flash.
86
+ http://github.com/bartt/rack-flash-session
87
+
88
+ email: <bart.teeuwisse@thecodemill.biz>
89
+ executables: []
90
+
91
+ extensions: []
92
+
93
+ extra_rdoc_files:
94
+ - README.rdoc
95
+ files:
96
+ - lib/rack/flash-session.rb
97
+ - README.rdoc
98
+ - spec/flash_session_spec.rb
99
+ - spec/spec_helper.rb
100
+ has_rdoc: true
101
+ homepage: http://github.com/bartt/rack-flash-session
102
+ licenses: []
103
+
104
+ post_install_message:
105
+ rdoc_options:
106
+ - --charset=UTF-8
107
+ require_paths:
108
+ - lib
109
+ required_ruby_version: !ruby/object:Gem::Requirement
110
+ none: false
111
+ requirements:
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ hash: 3
115
+ segments:
116
+ - 0
117
+ version: "0"
118
+ required_rubygems_version: !ruby/object:Gem::Requirement
119
+ none: false
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ hash: 3
124
+ segments:
125
+ - 0
126
+ version: "0"
127
+ requirements: []
128
+
129
+ rubyforge_project:
130
+ rubygems_version: 1.3.7
131
+ signing_key:
132
+ specification_version: 3
133
+ summary: Rack::FlashSession converts a session query parameter to a cookie if the request's user agent is flash
134
+ test_files:
135
+ - spec/flash_session_spec.rb
136
+ - spec/spec_helper.rb