rack-oauth 0.1.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.
Files changed (88) hide show
  1. data/README.rdoc +49 -0
  2. data/Rakefile +68 -0
  3. data/VERSION +1 -0
  4. data/examples/rails-example/README +243 -0
  5. data/examples/rails-example/Rakefile +10 -0
  6. data/examples/rails-example/app/controllers/application_controller.rb +12 -0
  7. data/examples/rails-example/app/controllers/welcome_controller.rb +26 -0
  8. data/examples/rails-example/app/helpers/application_helper.rb +3 -0
  9. data/examples/rails-example/app/helpers/welcome_helper.rb +2 -0
  10. data/examples/rails-example/app/views/welcome/index.html.erb +2 -0
  11. data/examples/rails-example/config/boot.rb +110 -0
  12. data/examples/rails-example/config/database.yml +22 -0
  13. data/examples/rails-example/config/environment.rb +14 -0
  14. data/examples/rails-example/config/environments/development.rb +17 -0
  15. data/examples/rails-example/config/environments/production.rb +28 -0
  16. data/examples/rails-example/config/environments/test.rb +32 -0
  17. data/examples/rails-example/config/initializers/backtrace_silencers.rb +7 -0
  18. data/examples/rails-example/config/initializers/inflections.rb +10 -0
  19. data/examples/rails-example/config/initializers/mime_types.rb +5 -0
  20. data/examples/rails-example/config/initializers/new_rails_defaults.rb +21 -0
  21. data/examples/rails-example/config/initializers/session_store.rb +15 -0
  22. data/examples/rails-example/config/locales/en.yml +5 -0
  23. data/examples/rails-example/config/routes.rb +6 -0
  24. data/examples/rails-example/db/development.sqlite3 +1 -0
  25. data/examples/rails-example/db/seeds.rb +7 -0
  26. data/examples/rails-example/db/test.sqlite3 +1 -0
  27. data/examples/rails-example/doc/README_FOR_APP +2 -0
  28. data/examples/rails-example/lib/tasks/rspec.rake +182 -0
  29. data/examples/rails-example/log/development.log +165 -0
  30. data/examples/rails-example/log/production.log +0 -0
  31. data/examples/rails-example/log/server.log +0 -0
  32. data/examples/rails-example/log/test.log +1591 -0
  33. data/examples/rails-example/public/404.html +30 -0
  34. data/examples/rails-example/public/422.html +30 -0
  35. data/examples/rails-example/public/500.html +30 -0
  36. data/examples/rails-example/public/favicon.ico +0 -0
  37. data/examples/rails-example/public/images/rails.png +0 -0
  38. data/examples/rails-example/public/javascripts/application.js +2 -0
  39. data/examples/rails-example/public/javascripts/controls.js +963 -0
  40. data/examples/rails-example/public/javascripts/dragdrop.js +973 -0
  41. data/examples/rails-example/public/javascripts/effects.js +1128 -0
  42. data/examples/rails-example/public/javascripts/prototype.js +4320 -0
  43. data/examples/rails-example/public/robots.txt +5 -0
  44. data/examples/rails-example/script/about +4 -0
  45. data/examples/rails-example/script/autospec +6 -0
  46. data/examples/rails-example/script/console +3 -0
  47. data/examples/rails-example/script/dbconsole +3 -0
  48. data/examples/rails-example/script/destroy +3 -0
  49. data/examples/rails-example/script/generate +3 -0
  50. data/examples/rails-example/script/performance/benchmarker +3 -0
  51. data/examples/rails-example/script/performance/profiler +3 -0
  52. data/examples/rails-example/script/plugin +3 -0
  53. data/examples/rails-example/script/runner +3 -0
  54. data/examples/rails-example/script/server +3 -0
  55. data/examples/rails-example/script/spec +10 -0
  56. data/examples/rails-example/script/spec_server +9 -0
  57. data/examples/rails-example/spec/integration/login_spec.rb +27 -0
  58. data/examples/rails-example/spec/rcov.opts +2 -0
  59. data/examples/rails-example/spec/spec.opts +4 -0
  60. data/examples/rails-example/spec/spec_helper.rb +12 -0
  61. data/examples/rails-example/tmp/webrat-1257205170.html +202 -0
  62. data/examples/rails-example/tmp/webrat-1257205276.html +31 -0
  63. data/examples/rails-example/tmp/webrat-1257205315.html +211 -0
  64. data/examples/rails-example/tmp/webrat-1257205333.html +31 -0
  65. data/examples/rails-example/tmp/webrat-1257205380.html +211 -0
  66. data/examples/rails-example/tmp/webrat-1257205757.html +211 -0
  67. data/examples/rails-example/tmp/webrat-1257210107.html +32 -0
  68. data/examples/rails-example/tmp/webrat-1257210160.html +32 -0
  69. data/examples/rails-example/tmp/webrat-1257210488.html +32 -0
  70. data/examples/rails-example/tmp/webrat-1257210501.html +32 -0
  71. data/examples/rails-example/tmp/webrat-1257210545.html +32 -0
  72. data/examples/rails-example/tmp/webrat-1257210564.html +32 -0
  73. data/examples/rails-example/tmp/webrat-1257210581.html +32 -0
  74. data/examples/rails-example/tmp/webrat-1257210600.html +32 -0
  75. data/examples/rails-example/tmp/webrat-1257210608.html +32 -0
  76. data/examples/sinatra-twitter.rb +47 -0
  77. data/examples/sinatra-twitter.ru +2 -0
  78. data/lib/rack/oauth.rb +1 -0
  79. data/lib/rack-oauth.rb +378 -0
  80. data/spec/data/authorized_access_token.yml +58 -0
  81. data/spec/data/authorized_oauth_verifier.yml +1 -0
  82. data/spec/data/authorized_request_secret.yml +1 -0
  83. data/spec/data/authorized_request_token.yml +1 -0
  84. data/spec/data/unauthorized_request_token.yml +56 -0
  85. data/spec/rack_oauth_middleware_spec.rb +156 -0
  86. data/spec/sample_sinatra_app_spec.rb +105 -0
  87. data/spec/spec_helper.rb +24 -0
  88. metadata +162 -0
@@ -0,0 +1,156 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ # This is just testing to make sure that the basics of the middleware
4
+ # all work. This does NOT actually test any of the OAuth functionality.
5
+ describe Rack::OAuth, 'basic middlware usage' do
6
+
7
+ before do
8
+ @app = lambda {|env| [200, {}, ["Hello World"]] }
9
+ end
10
+
11
+ it 'should have a name' do
12
+ oauth = Rack::OAuth.new @app, :foo, :site => 'a', :key => 'b', :secret => 'c'
13
+ oauth.name.should == 'foo'
14
+ end
15
+
16
+ it 'name should default to "default"' do
17
+ oauth = Rack::OAuth.new @app, :site => 'a', :key => 'b', :secret => 'c'
18
+ oauth.name.should == 'default'
19
+ end
20
+
21
+ it 'should be able to access an instance of Rack::OAuth by name from within Rack application' do
22
+ app = lambda {|env| [200, {}, [ env['rack.oauth'].keys.inspect ]] }
23
+
24
+ oauth = Rack::OAuth.new app, :foo, :site => 'a', :key => 'b', :secret => 'c'
25
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/').body.should include('foo')
26
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/').body.should_not include('bar')
27
+
28
+ oauth = Rack::OAuth.new oauth, :bar, :site => 'a', :key => 'b', :secret => 'c'
29
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/').body.should include('foo')
30
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/').body.should include('bar')
31
+ end
32
+
33
+ it 'should be *really* easy to access the default instance of Rack::OAuth by name from within Rack application' do
34
+ app = lambda {|env| [200, {}, [ Rack::OAuth.get(env).inspect ]] }
35
+
36
+ oauth = Rack::OAuth.new app, :foo, :site => 'a', :key => 'b', :secret => 'c'
37
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/').body.should == 'nil'
38
+
39
+ oauth = Rack::OAuth.new app, :site => 'a', :key => 'b', :secret => 'c'
40
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/').body.should_not == 'nil'
41
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/').body.should include('#<Rack::OAuth')
42
+ end
43
+
44
+ it 'should be easy to access an instance of Rack::OAuth by name from within Rack application' do
45
+ app = lambda {|env| [200, {}, [ Rack::OAuth.get(env, :bar).inspect ]] }
46
+
47
+ oauth = Rack::OAuth.new app, :foo, :site => 'a', :key => 'b', :secret => 'c'
48
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/').body.should == 'nil'
49
+
50
+ oauth = Rack::OAuth.new oauth, :bar, :site => 'a', :key => 'b', :secret => 'c'
51
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/').body.should_not == 'nil'
52
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/').body.should include('#<Rack::OAuth')
53
+ end
54
+
55
+ it 'should be easy to access to all instances of Rack::OAuth for a Rack application' do
56
+ app = lambda {|env| [200, {}, [ Rack::OAuth.all(env).length ]] }
57
+
58
+ oauth = Rack::OAuth.new app, :foo, :site => 'a', :key => 'b', :secret => 'c'
59
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/').body.should == '1'
60
+
61
+ oauth = Rack::OAuth.new oauth, :bar, :site => 'a', :key => 'b', :secret => 'c'
62
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/').body.should == '2'
63
+
64
+ ## double check it's working as expected ...
65
+
66
+ app = lambda {|env| [200, {}, [ Rack::OAuth.all(env).keys ]] }
67
+
68
+ oauth = Rack::OAuth.new app, :foo, :site => 'a', :key => 'b', :secret => 'c'
69
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/').body.should include('foo')
70
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/').body.should_not include('bar')
71
+
72
+ oauth = Rack::OAuth.new oauth, :bar, :site => 'a', :key => 'b', :secret => 'c'
73
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/').body.should include('foo')
74
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/').body.should include('bar')
75
+ end
76
+
77
+ it 'should be able to get the login path for an instance (so we can easily redirect from the app)' do
78
+ pending
79
+ oauth = Rack::OAuth.new app, :foo, :site => 'a', :key => 'b', :secret => 'c'
80
+ oauth.login_path
81
+
82
+ end
83
+
84
+ # path getters should join the name of the Rack::OAuth. setters shouldn't include the name.
85
+ it 'login path should be namespaced to the name of the Rack::OAuth instance' do
86
+ app = lambda {|env| [200, {}, ["Hello World"]] }
87
+
88
+ # the default name doesn't have its name appended. we assume 'default' for this.
89
+ Rack::OAuth.new(app, :site => 'a', :key => 'b', :secret => 'c').login_path.should == '/oauth_login'
90
+
91
+ Rack::OAuth.new(app, :foo, :site => 'a', :key => 'b', :secret => 'c').login_path.should == '/oauth_login/foo'
92
+
93
+ oauth = Rack::OAuth.new(app, :bar, :site => 'a', :key => 'b', :secret => 'c', :login_path => '/twitter_login')
94
+ oauth.login_path.should == '/twitter_login/bar'
95
+ end
96
+
97
+ it 'callback path should be namespaced to the name of the Rack::OAuth instance' do
98
+ app = lambda {|env| [200, {}, ["Hello World"]] }
99
+
100
+ # the default name doesn't have its name appended. we assume 'default' for this.
101
+ Rack::OAuth.new(app, :site => 'a', :key => 'b', :secret => 'c').callback_path.should == '/oauth_callback'
102
+
103
+ Rack::OAuth.new(app, :foo, :site => 'a', :key => 'b', :secret => 'c').callback_path.should == '/oauth_callback/foo'
104
+
105
+ oauth = Rack::OAuth.new(app, :bar, :site => 'a', :key => 'b', :secret => 'c', :callback_path => '/twitter_callback')
106
+ oauth.callback_path.should == '/twitter_callback/bar'
107
+ end
108
+
109
+ it 'redirect_to should NOT be namespaced to the name of the Rack::OAuth instance' do
110
+ app = lambda {|env| [200, {}, ["Hello World"]] }
111
+
112
+ # the default name doesn't have its name appended. we assume 'default' for this.
113
+ Rack::OAuth.new(app, :site => 'a', :key => 'b', :secret => 'c').redirect_to.should == '/oauth_complete'
114
+
115
+ Rack::OAuth.new(app, :foo, :site => 'a', :key => 'b', :secret => 'c').redirect_to.should == '/oauth_complete'
116
+
117
+ oauth = Rack::OAuth.new(app, :bar, :site => 'a', :key => 'b', :secret => 'c', :redirect_to => '/twitter_login_complete')
118
+ oauth.redirect_to.should == '/twitter_login_complete'
119
+ end
120
+
121
+ it 'session variables should all be namespaced to the name of the Rack::OAuth instance'
122
+
123
+ it 'should explodify with a helpful message if 2 Rack::OAuths are instantiated with the same name (?)'
124
+
125
+ describe 'Mocked requests / responses and whatnot' do
126
+
127
+ it 'the Rack::OAuth#consumer should persist through requests (confirm this is true because we need it to be true for mocking purposes)' do
128
+ app = lambda {|env| [200, {}, [ Rack::OAuth.get(env).consumer.object_id.to_s ]] }
129
+ oauth = Rack::OAuth.new app, :site => 'a', :key => 'b', :secret => 'c'
130
+
131
+ consumer_id = oauth.consumer.object_id
132
+
133
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/').body.should include(consumer_id.to_s)
134
+ oauth.consumer.object_id.should == consumer_id
135
+
136
+ # do another request to make sure it stays the same
137
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/').body.should include(consumer_id.to_s)
138
+ oauth.consumer.object_id.should == consumer_id
139
+ end
140
+
141
+ it 'should redirect to the authorize_url of the OAuth::RequestToken returned by consumer.get_request_token' do
142
+ app = lambda {|env| [200, {}, ["Hello World"]] }
143
+ oauth = Rack::OAuth.new app, :site => 'a', :key => 'b', :secret => 'c'
144
+
145
+ oauth.consumer.should_receive(:get_request_token).with(:oauth_callback => 'http://foo.com/oauth_callback').
146
+ and_return(mock_request_token(:authorize_path => '/silly_path'))
147
+
148
+ RackBox.request(Rack::Session::Cookie.new(oauth), '/oauth_login', 'HTTP_HOST' => 'foo.com').
149
+ headers['Location'].should =~ /^http:\/\/twitter\.com\/silly_path\?oauth_token=/
150
+ end
151
+
152
+ it 'should get an access token that can be used to make arbitrary requests if the callback_path is hit with the right variables given'
153
+
154
+ end
155
+
156
+ end
@@ -0,0 +1,105 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ require 'json'
4
+ require 'sinatra/base'
5
+ class SampleSinatraApp < Sinatra::Base
6
+
7
+ # this is hardcore optional ... if you want to override where ALL tokens are persisted, you can do this ...
8
+
9
+ def self.get_token key, oauth
10
+ @tokens[key] if @tokens
11
+ end
12
+ def self.set_token key, token, oauth
13
+ @tokens ||= {}
14
+ @tokens[key] = token
15
+ end
16
+
17
+ use Rack::Session::Cookie
18
+ use Rack::OAuth, :site => 'http://twitter.com',
19
+ :key => '4JjFmhjfZyQ6rdbiql5A',
20
+ :secret => 'rv4ZaCgvxVPVjxHIDbMxTGFbIMxUa4KkIdPqL7HmaQo',
21
+ :get => method(:get_token),
22
+ :set => method(:set_token)
23
+
24
+ enable :raise_errors
25
+
26
+ helpers do
27
+ include Rack::OAuth::Methods
28
+ end
29
+
30
+ get '/' do
31
+ if logged_in?
32
+ "Hello World"
33
+ else
34
+ redirect oauth_login_path
35
+ end
36
+ end
37
+
38
+ get '/oauth_complete' do
39
+ info = JSON.parse oauth_request('/account/verify_credentials.json')
40
+ name = info['screen_name']
41
+ $access_tokens[name] = oauth_access_token
42
+ end
43
+
44
+ get '/get_user_info' do
45
+ info = JSON.parse oauth_request('/account/verify_credentials.json')
46
+ end
47
+ end
48
+
49
+ describe SampleSinatraApp do
50
+
51
+ def example_json
52
+ %[{"time_zone":"Pacific Time (US & Canada)","profile_image_url":"http://a3.twimg.com/profile_images/54765389/remi-rock-on_bak_normal.png","description":"Beer goes in, Code comes out","following":false,"profile_text_color":"3E4415","status":{"source":"web","in_reply_to_user_id":64218381,"in_reply_to_status_id":5352275994,"truncated":false,"created_at":"Mon Nov 02 02:00:26 +0000 2009","favorited":false,"in_reply_to_screen_name":"benatkin","id":5352407184,"text":"@benatkin For GoldBar, they would want to tell you when you buy something because lots of people are coming in and not buying anything :/"},"profile_background_image_url":"http://s.twimg.com/a/1256928834/images/themes/theme5/bg.gif","followers_count":257,"screen_name":"remitaylor","profile_link_color":"D02B55","profile_background_tile":false,"friends_count":190,"url":"http://remi.org","created_at":"Tue Dec 11 09:13:43 +0000 2007","profile_background_color":"352726","notifications":false,"favourites_count":0,"statuses_count":1700,"profile_sidebar_fill_color":"99CC33","protected":false,"geo_enabled":false,"location":"Phoenix, AZ","name":"remitaylor","profile_sidebar_border_color":"829D5E","id":11043342,"verified":false,"utc_offset":-28800}]
53
+ end
54
+
55
+ before :all do
56
+ @rackbox_app = RackBox.app
57
+ RackBox.app = SampleSinatraApp
58
+ Rack::OAuth.enable_test_mode
59
+ end
60
+
61
+ after :all do
62
+ RackBox.app = @rackbox_app
63
+ Rack::OAuth.disable_test_mode
64
+ end
65
+
66
+ it 'should be able to "authorize" a user' do
67
+ # we're not authorized, so logged_in? is false and we should redirect to /oauth_login
68
+ request('/').status.should == 302
69
+ request('/').headers['Location'].should include('/oauth_login')
70
+
71
+ # because we're in test mode, redirecting to /oauth_login should pretend to log
72
+ # us in and it should redirect to /oauth_complete
73
+ request('/oauth_login').status.should == 302
74
+ request('/oauth_login').headers['Location'].should include('/oauth_complete')
75
+
76
+ # now the user should be authorized
77
+ request('/').status.should == 200
78
+ request('/').body.should include('Hello World')
79
+ end
80
+
81
+ it 'should be able to specify a mock response for an arbitrary authorized response' do
82
+ request('/oauth_login') # login
83
+
84
+ # if we don't mock the request, it should blow up
85
+ lambda { request('/get_user_info') }.should raise_error
86
+
87
+ Rack::OAuth.mock_request '/account/verify_credentials.json', example_json
88
+
89
+ request('/get_user_info').body.should include('remitaylor')
90
+ end
91
+
92
+ it 'should be able to persist access token by some arbitrary value like twitter screen_name' do
93
+ $access_tokens ||= {}
94
+ request('/oauth_login').status.should == 302
95
+
96
+ # token should be nil
97
+ $access_tokens['remitaylor'].should be_nil
98
+
99
+ request('/oauth_complete')
100
+
101
+ # token should not be nil because the oauth_complete goes and gets and persists it
102
+ $access_tokens['remitaylor'].should_not be_nil
103
+ end
104
+
105
+ end
@@ -0,0 +1,24 @@
1
+ require 'rubygems'
2
+ require 'spec'
3
+ require 'rackbox'
4
+ require File.dirname(__FILE__) + '/../lib/rack-oauth'
5
+
6
+ # returns the path to a data file, eg. data_path(:foo) => 'spec/data/foo.yml'
7
+ def data_path name
8
+ File.join File.dirname(__FILE__), 'data', "#{ name }.yml"
9
+ end
10
+
11
+ # returns the string body of a file using data_path to get the path to the file
12
+ def data name
13
+ File.read data_path(name)
14
+ end
15
+
16
+ def mock_request_token options = {}
17
+ YAML.load data(:unauthorized_request_token).sub('AUTH_PATH', options[:authorize_path] || '/oauth/authorize')
18
+ end
19
+
20
+ RackBox.app = lambda {}
21
+
22
+ Spec::Runner.configure do |config|
23
+ config.use_blackbox = true
24
+ end
metadata ADDED
@@ -0,0 +1,162 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rack-oauth
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.2
5
+ platform: ruby
6
+ authors:
7
+ - remi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-11-02 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: Rack Middleware for OAuth Authorization
17
+ email: remi@remitaylor.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README.rdoc
24
+ files:
25
+ - README.rdoc
26
+ - Rakefile
27
+ - VERSION
28
+ - examples/rails-example/README
29
+ - examples/rails-example/Rakefile
30
+ - examples/rails-example/app/controllers/application_controller.rb
31
+ - examples/rails-example/app/controllers/welcome_controller.rb
32
+ - examples/rails-example/app/helpers/application_helper.rb
33
+ - examples/rails-example/app/helpers/welcome_helper.rb
34
+ - examples/rails-example/app/views/welcome/index.html.erb
35
+ - examples/rails-example/config/boot.rb
36
+ - examples/rails-example/config/database.yml
37
+ - examples/rails-example/config/environment.rb
38
+ - examples/rails-example/config/environments/development.rb
39
+ - examples/rails-example/config/environments/production.rb
40
+ - examples/rails-example/config/environments/test.rb
41
+ - examples/rails-example/config/initializers/backtrace_silencers.rb
42
+ - examples/rails-example/config/initializers/inflections.rb
43
+ - examples/rails-example/config/initializers/mime_types.rb
44
+ - examples/rails-example/config/initializers/new_rails_defaults.rb
45
+ - examples/rails-example/config/initializers/session_store.rb
46
+ - examples/rails-example/config/locales/en.yml
47
+ - examples/rails-example/config/routes.rb
48
+ - examples/rails-example/db/development.sqlite3
49
+ - examples/rails-example/db/seeds.rb
50
+ - examples/rails-example/db/test.sqlite3
51
+ - examples/rails-example/doc/README_FOR_APP
52
+ - examples/rails-example/lib/tasks/rspec.rake
53
+ - examples/rails-example/log/development.log
54
+ - examples/rails-example/log/production.log
55
+ - examples/rails-example/log/server.log
56
+ - examples/rails-example/log/test.log
57
+ - examples/rails-example/public/404.html
58
+ - examples/rails-example/public/422.html
59
+ - examples/rails-example/public/500.html
60
+ - examples/rails-example/public/favicon.ico
61
+ - examples/rails-example/public/images/rails.png
62
+ - examples/rails-example/public/javascripts/application.js
63
+ - examples/rails-example/public/javascripts/controls.js
64
+ - examples/rails-example/public/javascripts/dragdrop.js
65
+ - examples/rails-example/public/javascripts/effects.js
66
+ - examples/rails-example/public/javascripts/prototype.js
67
+ - examples/rails-example/public/robots.txt
68
+ - examples/rails-example/script/about
69
+ - examples/rails-example/script/autospec
70
+ - examples/rails-example/script/console
71
+ - examples/rails-example/script/dbconsole
72
+ - examples/rails-example/script/destroy
73
+ - examples/rails-example/script/generate
74
+ - examples/rails-example/script/performance/benchmarker
75
+ - examples/rails-example/script/performance/profiler
76
+ - examples/rails-example/script/plugin
77
+ - examples/rails-example/script/runner
78
+ - examples/rails-example/script/server
79
+ - examples/rails-example/script/spec
80
+ - examples/rails-example/script/spec_server
81
+ - examples/rails-example/spec/integration/login_spec.rb
82
+ - examples/rails-example/spec/rcov.opts
83
+ - examples/rails-example/spec/spec.opts
84
+ - examples/rails-example/spec/spec_helper.rb
85
+ - examples/rails-example/tmp/webrat-1257205170.html
86
+ - examples/rails-example/tmp/webrat-1257205276.html
87
+ - examples/rails-example/tmp/webrat-1257205315.html
88
+ - examples/rails-example/tmp/webrat-1257205333.html
89
+ - examples/rails-example/tmp/webrat-1257205380.html
90
+ - examples/rails-example/tmp/webrat-1257205757.html
91
+ - examples/rails-example/tmp/webrat-1257210107.html
92
+ - examples/rails-example/tmp/webrat-1257210160.html
93
+ - examples/rails-example/tmp/webrat-1257210488.html
94
+ - examples/rails-example/tmp/webrat-1257210501.html
95
+ - examples/rails-example/tmp/webrat-1257210545.html
96
+ - examples/rails-example/tmp/webrat-1257210564.html
97
+ - examples/rails-example/tmp/webrat-1257210581.html
98
+ - examples/rails-example/tmp/webrat-1257210600.html
99
+ - examples/rails-example/tmp/webrat-1257210608.html
100
+ - examples/sinatra-twitter.rb
101
+ - examples/sinatra-twitter.ru
102
+ - lib/rack-oauth.rb
103
+ - lib/rack/oauth.rb
104
+ - spec/data/authorized_access_token.yml
105
+ - spec/data/authorized_oauth_verifier.yml
106
+ - spec/data/authorized_request_secret.yml
107
+ - spec/data/authorized_request_token.yml
108
+ - spec/data/unauthorized_request_token.yml
109
+ - spec/rack_oauth_middleware_spec.rb
110
+ - spec/sample_sinatra_app_spec.rb
111
+ - spec/spec_helper.rb
112
+ has_rdoc: true
113
+ homepage: http://github.com/remi/rack-oauth
114
+ licenses: []
115
+
116
+ post_install_message:
117
+ rdoc_options:
118
+ - --charset=UTF-8
119
+ require_paths:
120
+ - lib
121
+ required_ruby_version: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: "0"
126
+ version:
127
+ required_rubygems_version: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: "0"
132
+ version:
133
+ requirements: []
134
+
135
+ rubyforge_project:
136
+ rubygems_version: 1.3.5
137
+ signing_key:
138
+ specification_version: 3
139
+ summary: Rack Middleware for OAuth Authorization
140
+ test_files:
141
+ - spec/rack_oauth_middleware_spec.rb
142
+ - spec/spec_helper.rb
143
+ - spec/sample_sinatra_app_spec.rb
144
+ - examples/sinatra-twitter.rb
145
+ - examples/rails-example/spec/integration/login_spec.rb
146
+ - examples/rails-example/spec/spec_helper.rb
147
+ - examples/rails-example/config/boot.rb
148
+ - examples/rails-example/config/routes.rb
149
+ - examples/rails-example/config/environments/development.rb
150
+ - examples/rails-example/config/environments/test.rb
151
+ - examples/rails-example/config/environments/production.rb
152
+ - examples/rails-example/config/environment.rb
153
+ - examples/rails-example/config/initializers/backtrace_silencers.rb
154
+ - examples/rails-example/config/initializers/inflections.rb
155
+ - examples/rails-example/config/initializers/new_rails_defaults.rb
156
+ - examples/rails-example/config/initializers/session_store.rb
157
+ - examples/rails-example/config/initializers/mime_types.rb
158
+ - examples/rails-example/db/seeds.rb
159
+ - examples/rails-example/app/helpers/application_helper.rb
160
+ - examples/rails-example/app/helpers/welcome_helper.rb
161
+ - examples/rails-example/app/controllers/application_controller.rb
162
+ - examples/rails-example/app/controllers/welcome_controller.rb