rockoauth 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.
Files changed (54) hide show
  1. checksums.yaml +7 -0
  2. data/History.txt +5 -0
  3. data/README.rdoc +422 -0
  4. data/example/README.rdoc +11 -0
  5. data/example/application.rb +158 -0
  6. data/example/config.ru +3 -0
  7. data/example/environment.rb +11 -0
  8. data/example/models/connection.rb +9 -0
  9. data/example/models/note.rb +4 -0
  10. data/example/models/user.rb +5 -0
  11. data/example/public/style.css +78 -0
  12. data/example/schema.rb +22 -0
  13. data/example/views/authorize.erb +28 -0
  14. data/example/views/create_user.erb +3 -0
  15. data/example/views/error.erb +6 -0
  16. data/example/views/home.erb +24 -0
  17. data/example/views/layout.erb +24 -0
  18. data/example/views/login.erb +20 -0
  19. data/example/views/new_client.erb +25 -0
  20. data/example/views/new_user.erb +22 -0
  21. data/example/views/show_client.erb +15 -0
  22. data/lib/rockoauth/model/authorization.rb +132 -0
  23. data/lib/rockoauth/model/client.rb +54 -0
  24. data/lib/rockoauth/model/client_owner.rb +13 -0
  25. data/lib/rockoauth/model/hashing.rb +26 -0
  26. data/lib/rockoauth/model/helpers.rb +14 -0
  27. data/lib/rockoauth/model/resource_owner.rb +22 -0
  28. data/lib/rockoauth/model.rb +38 -0
  29. data/lib/rockoauth/provider/access_token.rb +70 -0
  30. data/lib/rockoauth/provider/authorization.rb +185 -0
  31. data/lib/rockoauth/provider/error.rb +19 -0
  32. data/lib/rockoauth/provider/exchange.rb +225 -0
  33. data/lib/rockoauth/provider.rb +133 -0
  34. data/lib/rockoauth/router.rb +75 -0
  35. data/lib/rockoauth/schema/20120828112156_rockoauth_schema_original_schema.rb +35 -0
  36. data/lib/rockoauth/schema/20121024180930_rockoauth_schema_add_authorization_index.rb +13 -0
  37. data/lib/rockoauth/schema/20121025180447_rockoauth_schema_add_unique_indexes.rb +31 -0
  38. data/lib/rockoauth/schema.rb +25 -0
  39. data/lib/rockoauth.rb +1 -0
  40. data/spec/factories.rb +20 -0
  41. data/spec/request_helpers.rb +62 -0
  42. data/spec/rockoauth/model/authorization_spec.rb +237 -0
  43. data/spec/rockoauth/model/client_spec.rb +44 -0
  44. data/spec/rockoauth/model/helpers_spec.rb +25 -0
  45. data/spec/rockoauth/model/resource_owner_spec.rb +87 -0
  46. data/spec/rockoauth/provider/access_token_spec.rb +138 -0
  47. data/spec/rockoauth/provider/authorization_spec.rb +356 -0
  48. data/spec/rockoauth/provider/exchange_spec.rb +361 -0
  49. data/spec/rockoauth/provider_spec.rb +560 -0
  50. data/spec/spec_helper.rb +80 -0
  51. data/spec/test_app/helper.rb +36 -0
  52. data/spec/test_app/provider/application.rb +67 -0
  53. data/spec/test_app/provider/views/authorize.erb +19 -0
  54. metadata +238 -0
@@ -0,0 +1,67 @@
1
+ require 'sinatra'
2
+ require File.expand_path('../../helper', __FILE__)
3
+
4
+ module TestApp
5
+ class Provider < Sinatra::Base
6
+
7
+ extend Helper::RackRunner
8
+
9
+ RockOAuth::Provider.realm = 'Demo App'
10
+
11
+ set :views, File.dirname(__FILE__) + '/views'
12
+
13
+ def handle_authorize
14
+ @oauth2 = RockOAuth::Provider.parse(User['Bob'], env)
15
+ redirect(@oauth2.redirect_uri, @oauth2.response_status) if @oauth2.redirect?
16
+
17
+ headers @oauth2.response_headers
18
+ status @oauth2.response_status
19
+
20
+ if body = @oauth2.response_body
21
+ body
22
+ elsif @oauth2.valid?
23
+ erb(:authorize)
24
+ else
25
+ 'WAT'
26
+ end
27
+ end
28
+
29
+ def protect_resource_for(user = nil, scopes = [])
30
+ access_token = RockOAuth::Provider.access_token(user, scopes, env)
31
+ headers access_token.response_headers
32
+ status access_token.response_status
33
+ yield access_token
34
+ end
35
+
36
+ def serve_protected_resource
37
+ @user = User['Bob']
38
+ protect_resource_for(@user, ['profile']) do |auth|
39
+ if auth.valid?
40
+ JSON.unparse('data' => 'Top secret')
41
+ else
42
+ JSON.unparse('data' => 'No soup for you')
43
+ end
44
+ end
45
+ end
46
+
47
+ [:get, :post].each do |method|
48
+ __send__(method, '/authorize') { handle_authorize }
49
+ end
50
+
51
+ post '/allow' do
52
+ @user = User['bob']
53
+ @oauth2 = RockOAuth::Provider::Authorization.new(@user, params)
54
+ if params['allow'] == '1'
55
+ @oauth2.grant_access! :duration => 3.hours
56
+ else
57
+ @oauth2.deny_access!
58
+ end
59
+ redirect @oauth2.redirect_uri, @oauth2.response_status
60
+ end
61
+
62
+ [:get, :post].each do |method|
63
+ __send__(method, '/user_profile') { serve_protected_resource }
64
+ end
65
+
66
+ end
67
+ end
@@ -0,0 +1,19 @@
1
+ <h1>Authorize OAuth client</h1>
2
+
3
+ <p>Do you want to allow <%= @oauth2.client.name %> to act on your behalf?</p>
4
+
5
+ <ul>
6
+ <% @oauth2.scopes.each do |scope| %><%= scope %><% end %>
7
+ </ul>
8
+
9
+ <form method="post" action="/allow">
10
+ <% @oauth2.params.each do |key, value| %>
11
+ <input type="hidden" name="<%= key %>" value="<%= value %>">
12
+ <% end %>
13
+
14
+ <input type="checkbox" name="allow" id="allow" value="1">
15
+ <label for="allow">Allow this application</label>
16
+
17
+ <input type="submit" value="Go!">
18
+ </form>
19
+
metadata ADDED
@@ -0,0 +1,238 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rockoauth
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Daniel Evans
8
+ - James Coglan
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-07-09 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activerecord
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: '4.0'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: '4.0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: bcrypt-ruby
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: json
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: rack
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: appraisal
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: 1.0.0
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: 1.0.0
84
+ - !ruby/object:Gem::Dependency
85
+ name: rspec
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - "~>"
89
+ - !ruby/object:Gem::Version
90
+ version: '3'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: '3'
98
+ - !ruby/object:Gem::Dependency
99
+ name: sqlite3
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ - !ruby/object:Gem::Dependency
113
+ name: sinatra
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: 1.3.0
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: 1.3.0
126
+ - !ruby/object:Gem::Dependency
127
+ name: thin
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ - !ruby/object:Gem::Dependency
141
+ name: factory_girl
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - "~>"
145
+ - !ruby/object:Gem::Version
146
+ version: '2.0'
147
+ type: :development
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - "~>"
152
+ - !ruby/object:Gem::Version
153
+ version: '2.0'
154
+ description:
155
+ email: evans.daniel.n@gmail.com
156
+ executables: []
157
+ extensions: []
158
+ extra_rdoc_files:
159
+ - README.rdoc
160
+ files:
161
+ - History.txt
162
+ - README.rdoc
163
+ - example/README.rdoc
164
+ - example/application.rb
165
+ - example/config.ru
166
+ - example/environment.rb
167
+ - example/models/connection.rb
168
+ - example/models/note.rb
169
+ - example/models/user.rb
170
+ - example/public/style.css
171
+ - example/schema.rb
172
+ - example/views/authorize.erb
173
+ - example/views/create_user.erb
174
+ - example/views/error.erb
175
+ - example/views/home.erb
176
+ - example/views/layout.erb
177
+ - example/views/login.erb
178
+ - example/views/new_client.erb
179
+ - example/views/new_user.erb
180
+ - example/views/show_client.erb
181
+ - lib/rockoauth.rb
182
+ - lib/rockoauth/model.rb
183
+ - lib/rockoauth/model/authorization.rb
184
+ - lib/rockoauth/model/client.rb
185
+ - lib/rockoauth/model/client_owner.rb
186
+ - lib/rockoauth/model/hashing.rb
187
+ - lib/rockoauth/model/helpers.rb
188
+ - lib/rockoauth/model/resource_owner.rb
189
+ - lib/rockoauth/provider.rb
190
+ - lib/rockoauth/provider/access_token.rb
191
+ - lib/rockoauth/provider/authorization.rb
192
+ - lib/rockoauth/provider/error.rb
193
+ - lib/rockoauth/provider/exchange.rb
194
+ - lib/rockoauth/router.rb
195
+ - lib/rockoauth/schema.rb
196
+ - lib/rockoauth/schema/20120828112156_rockoauth_schema_original_schema.rb
197
+ - lib/rockoauth/schema/20121024180930_rockoauth_schema_add_authorization_index.rb
198
+ - lib/rockoauth/schema/20121025180447_rockoauth_schema_add_unique_indexes.rb
199
+ - spec/factories.rb
200
+ - spec/request_helpers.rb
201
+ - spec/rockoauth/model/authorization_spec.rb
202
+ - spec/rockoauth/model/client_spec.rb
203
+ - spec/rockoauth/model/helpers_spec.rb
204
+ - spec/rockoauth/model/resource_owner_spec.rb
205
+ - spec/rockoauth/provider/access_token_spec.rb
206
+ - spec/rockoauth/provider/authorization_spec.rb
207
+ - spec/rockoauth/provider/exchange_spec.rb
208
+ - spec/rockoauth/provider_spec.rb
209
+ - spec/spec_helper.rb
210
+ - spec/test_app/helper.rb
211
+ - spec/test_app/provider/application.rb
212
+ - spec/test_app/provider/views/authorize.erb
213
+ homepage: http://github.com/rocketmade/rockoauth
214
+ licenses: []
215
+ metadata: {}
216
+ post_install_message:
217
+ rdoc_options:
218
+ - "--main"
219
+ - README.rdoc
220
+ require_paths:
221
+ - lib
222
+ required_ruby_version: !ruby/object:Gem::Requirement
223
+ requirements:
224
+ - - ">="
225
+ - !ruby/object:Gem::Version
226
+ version: '0'
227
+ required_rubygems_version: !ruby/object:Gem::Requirement
228
+ requirements:
229
+ - - ">="
230
+ - !ruby/object:Gem::Version
231
+ version: '0'
232
+ requirements: []
233
+ rubyforge_project:
234
+ rubygems_version: 2.3.0
235
+ signing_key:
236
+ specification_version: 4
237
+ summary: Simple OAuth 2.0 provider toolkit
238
+ test_files: []