oauth2_provider_engine 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (132) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.rdoc +3 -0
  3. data/Rakefile +40 -0
  4. data/app/assets/javascripts/oauth2_provider/application.js +52 -0
  5. data/app/assets/javascripts/oauth2_provider/highcharts.js +162 -0
  6. data/app/assets/javascripts/oauth2_provider/jquery.tagsinput.js +218 -0
  7. data/app/assets/stylesheets/oauth2_provider/gh-buttons.css +388 -0
  8. data/app/assets/stylesheets/oauth2_provider/gh-icons.png +0 -0
  9. data/app/assets/stylesheets/oauth2_provider/jquery.tagsinput.css +6 -0
  10. data/app/assets/stylesheets/oauth2_provider/reset.css +2 -0
  11. data/app/assets/stylesheets/oauth2_provider/template.css +52 -0
  12. data/app/controllers/oauth2_provider/accesses_controller.rb +39 -0
  13. data/app/controllers/oauth2_provider/application_controller.rb +17 -0
  14. data/app/controllers/oauth2_provider/authorize_controller.rb +141 -0
  15. data/app/controllers/oauth2_provider/clients_controller.rb +85 -0
  16. data/app/controllers/oauth2_provider/scopes_controller.rb +63 -0
  17. data/app/controllers/oauth2_provider/token_controller.rb +187 -0
  18. data/app/helpers/clients_helper.rb +5 -0
  19. data/app/helpers/oauth2_provider/application_helper.rb +4 -0
  20. data/app/models/oauth2_provider/client.rb +129 -0
  21. data/app/models/oauth2_provider/document.rb +15 -0
  22. data/app/models/oauth2_provider/oauth_access.rb +80 -0
  23. data/app/models/oauth2_provider/oauth_authorization.rb +70 -0
  24. data/app/models/oauth2_provider/oauth_daily_request.rb +54 -0
  25. data/app/models/oauth2_provider/oauth_refresh_token.rb +20 -0
  26. data/app/models/oauth2_provider/oauth_token.rb +78 -0
  27. data/app/models/oauth2_provider/scope.rb +39 -0
  28. data/app/views/layouts/oauth2_provider/application.html.erb +62 -0
  29. data/app/views/oauth2_provider/accesses/index.html.erb +25 -0
  30. data/app/views/oauth2_provider/accesses/show.html.erb +35 -0
  31. data/app/views/oauth2_provider/clients/_form.html.erb +50 -0
  32. data/app/views/oauth2_provider/clients/edit.html.erb +9 -0
  33. data/app/views/oauth2_provider/clients/index.html.erb +43 -0
  34. data/app/views/oauth2_provider/clients/new.html.erb +8 -0
  35. data/app/views/oauth2_provider/clients/show.html.erb +49 -0
  36. data/app/views/oauth2_provider/scopes/_form.html.erb +35 -0
  37. data/app/views/oauth2_provider/scopes/edit.html.erb +8 -0
  38. data/app/views/oauth2_provider/scopes/index.html.erb +27 -0
  39. data/app/views/oauth2_provider/scopes/new.html.erb +7 -0
  40. data/app/views/oauth2_provider/scopes/show.html.erb +19 -0
  41. data/app/views/shared/authorize.html.erb +34 -0
  42. data/app/views/shared/token.json.erb +8 -0
  43. data/config/locales/en.yml +31 -0
  44. data/config/oauth.yml +4 -0
  45. data/config/routes.rb +25 -0
  46. data/lib/oauth2_provider.rb +38 -0
  47. data/lib/oauth2_provider/controller_mixin.rb +53 -0
  48. data/lib/oauth2_provider/engine.rb +4 -0
  49. data/lib/oauth2_provider_engine.rb +1 -0
  50. data/lib/oauth2_provider_engine/version.rb +3 -0
  51. data/test/dummy/CHANGELOG.rdoc +67 -0
  52. data/test/dummy/Gemfile +53 -0
  53. data/test/dummy/Gemfile.lock +254 -0
  54. data/test/dummy/README.rdoc +522 -0
  55. data/test/dummy/Rakefile +7 -0
  56. data/test/dummy/VERSION +1 -0
  57. data/test/dummy/app/assets/stylesheets/reset.css +2 -0
  58. data/test/dummy/app/assets/stylesheets/template.css +52 -0
  59. data/test/dummy/app/controllers/application_controller.rb +52 -0
  60. data/test/dummy/app/controllers/pastas_controller.rb +23 -0
  61. data/test/dummy/app/controllers/pizzas_controller.rb +23 -0
  62. data/test/dummy/app/controllers/sessions_controller.rb +26 -0
  63. data/test/dummy/app/controllers/users_controller.rb +59 -0
  64. data/test/dummy/app/models/user.rb +50 -0
  65. data/test/dummy/app/views/layouts/application.html.erb +65 -0
  66. data/test/dummy/app/views/sessions/new.html.erb +25 -0
  67. data/test/dummy/app/views/shared/403.json.erb +4 -0
  68. data/test/dummy/app/views/shared/404.json.erb +6 -0
  69. data/test/dummy/app/views/shared/422.json.erb +5 -0
  70. data/test/dummy/app/views/shared/500.json.erb +4 -0
  71. data/test/dummy/app/views/shared/html/404.html.erb +0 -0
  72. data/test/dummy/app/views/shared/html/422.html.erb +0 -0
  73. data/test/dummy/app/views/users/_form.html.erb +27 -0
  74. data/test/dummy/app/views/users/edit.html.erb +8 -0
  75. data/test/dummy/app/views/users/index.html.erb +20 -0
  76. data/test/dummy/app/views/users/new.html.erb +46 -0
  77. data/test/dummy/app/views/users/show.html.erb +15 -0
  78. data/test/dummy/app/views/users/show.json.erb +6 -0
  79. data/test/dummy/config.ru +4 -0
  80. data/test/dummy/config/application.rb +57 -0
  81. data/test/dummy/config/boot.rb +13 -0
  82. data/test/dummy/config/cucumber.yml +8 -0
  83. data/test/dummy/config/environment.rb +5 -0
  84. data/test/dummy/config/environments/development.rb +32 -0
  85. data/test/dummy/config/environments/production.rb +58 -0
  86. data/test/dummy/config/environments/test.rb +35 -0
  87. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  88. data/test/dummy/config/initializers/inflections.rb +10 -0
  89. data/test/dummy/config/initializers/mime_types.rb +5 -0
  90. data/test/dummy/config/initializers/secret_token.rb +7 -0
  91. data/test/dummy/config/initializers/session_store.rb +8 -0
  92. data/test/dummy/config/initializers/test.rb +3 -0
  93. data/test/dummy/config/locales/en.yml +1 -0
  94. data/test/dummy/config/mongoid.yml +20 -0
  95. data/test/dummy/config/routes.rb +22 -0
  96. data/test/dummy/db/seeds.rb +7 -0
  97. data/test/dummy/doc/README_FOR_APP +2 -0
  98. data/test/dummy/lib/tasks/cucumber.rake +53 -0
  99. data/test/dummy/lib/tasks/watchr.rake +5 -0
  100. data/test/dummy/public/404.html +26 -0
  101. data/test/dummy/public/422.html +26 -0
  102. data/test/dummy/public/500.html +4 -0
  103. data/test/dummy/public/favicon.ico +0 -0
  104. data/test/dummy/public/robots.txt +5 -0
  105. data/test/dummy/script/cucumber +10 -0
  106. data/test/dummy/script/rails +6 -0
  107. data/test/dummy/spec/acceptance/acceptance_helper.rb +5 -0
  108. data/test/dummy/spec/acceptance/accesses_controller_spec.rb +77 -0
  109. data/test/dummy/spec/acceptance/clients_controller_spec.rb +218 -0
  110. data/test/dummy/spec/acceptance/oauth_authorize_controller_spec.rb +241 -0
  111. data/test/dummy/spec/acceptance/oauth_token_controller_spec.rb +196 -0
  112. data/test/dummy/spec/acceptance/resource_controller_spec.rb +143 -0
  113. data/test/dummy/spec/acceptance/scopes_controller_spec.rb +227 -0
  114. data/test/dummy/spec/acceptance/support/helpers.rb +81 -0
  115. data/test/dummy/spec/acceptance/support/paths.rb +9 -0
  116. data/test/dummy/spec/acceptance/support/view_helpers.rb +52 -0
  117. data/test/dummy/spec/acceptance/users_controller_spec.rb +198 -0
  118. data/test/dummy/spec/extras/scope_spec.rb +105 -0
  119. data/test/dummy/spec/factories/oauth.rb +106 -0
  120. data/test/dummy/spec/models/oauth/client_spec.rb +123 -0
  121. data/test/dummy/spec/models/oauth/oauth_access_spec.rb +48 -0
  122. data/test/dummy/spec/models/oauth/oauth_authorization_spec.rb +50 -0
  123. data/test/dummy/spec/models/oauth/oauth_daily_request_spec.rb +14 -0
  124. data/test/dummy/spec/models/oauth/oauth_refresh_token_spec.rb +11 -0
  125. data/test/dummy/spec/models/oauth/oauth_token_spec.rb +55 -0
  126. data/test/dummy/spec/models/scope_spec.rb +17 -0
  127. data/test/dummy/spec/spec_helper.rb +39 -0
  128. data/test/dummy/spec/support/settings_helper.rb +28 -0
  129. data/test/dummy/test/initializers/capybara_headers_hack.rb +23 -0
  130. data/test/oauth2_provider_test.rb +7 -0
  131. data/test/test_helper.rb +15 -0
  132. metadata +387 -0
@@ -0,0 +1,8 @@
1
+ <%=
2
+ {
3
+ 'access_token' => @token.token,
4
+ 'expires_in' => Oauth2Provider.settings["token_expires_in"],
5
+ 'refresh_token' => @refresh_token.refresh_token,
6
+ 'resource_owner_uri' => @resource_owner_uri
7
+ }.to_json.html_safe
8
+ %>
@@ -0,0 +1,31 @@
1
+ en:
2
+ notifications:
3
+ oauth:
4
+ client:
5
+ not_found: "Client not found with the provided params"
6
+ not_authorized: "Client not authorized with the provided scope"
7
+ blocked: "Client blocked"
8
+ response_type:
9
+ not_valid: "Not valid response type"
10
+ authorization:
11
+ not_found: "Authorization not found with the provided params"
12
+ expired: "Authorization expired"
13
+ resource_owner:
14
+ not_found: "User not found with the provided params"
15
+ blocked_client: "Client blocked from the user (check preferences)"
16
+ token:
17
+ not_found: "Access token not found with the provided params"
18
+ expired: "Access token authorization expired"
19
+ blocked_token: "Access token blocked from the user (logged out)"
20
+ refresh_token:
21
+ not_found: "Refresh token not found with the provided params"
22
+ document:
23
+ not_found: "Resource not found"
24
+ not_valid: "Not valid attributes"
25
+ json:
26
+ not_valid: "Not valid JSON"
27
+ not_array: "Not a valid JSON type associated"
28
+ pagination:
29
+ not_valid_page: "Not a valid page"
30
+ not_valid_per_page: "Not a valid per_page"
31
+
@@ -0,0 +1,4 @@
1
+ token_expires_in: "1800"
2
+ authorization_expires_in: "150"
3
+ random_length: 32
4
+ scope_separator: " "
@@ -0,0 +1,25 @@
1
+ Oauth2Provider::Engine.routes.draw do
2
+ namespace :oauth2_provider, path: '' do
3
+
4
+ get "authorize" => "authorize#show", defaults: { format: "html" }
5
+ post "authorize" => "authorize#create", defaults: { format: "html" }
6
+ delete "authorize" => "authorize#destroy", defaults: { format: "html" }
7
+ delete "token/:id" => "token#destroy", defaults: { format: "json" }
8
+ post "token" => "token#create", defaults: { format: "json" }
9
+
10
+ resources :scopes
11
+
12
+ resources :clients do
13
+ put :block, on: :member
14
+ put :unblock, on: :member
15
+ end
16
+
17
+ resources :accesses do
18
+ put :block, on: :member
19
+ put :unblock, on: :member
20
+ end
21
+
22
+ root :to => "clients#index"
23
+ end
24
+
25
+ end
@@ -0,0 +1,38 @@
1
+ require 'mongoid'
2
+ require 'validate_url'
3
+ require 'chronic'
4
+ require 'orm_adapter'
5
+ require "oauth2_provider/engine"
6
+ require "oauth2_provider/controller_mixin"
7
+
8
+ module Oauth2Provider
9
+ def self.settings
10
+ @settings ||= YAML.load_file("#{Oauth2Provider::Engine.root}/config/oauth.yml")
11
+ end
12
+
13
+ def self.normalize_scope(scope = [])
14
+ scope = scope.split(" ") if scope.kind_of? String
15
+ normalized = self::Scope.any_in(name: scope)
16
+ normalized = normalized.map(&:values).flatten
17
+
18
+ if normalized.empty?
19
+ return self.clean(scope)
20
+ else
21
+ return self.clean(scope) + self.normalize_scope(normalized)
22
+ end
23
+ end
24
+
25
+ # Remove 'no action' keys. For example during normalization
26
+ # we add keys like 'pizza' (resource names) or 'pizza/read'
27
+ # wihch we have to remove to easily make the access recognition
28
+ # with the bearer token.
29
+ #
30
+ # NOTE: at the moment are not allowed methods which contain
31
+ # the word "read" because it will be removed
32
+ def self.clean(scope)
33
+ scope = scope.keep_if {|scope| scope =~ /\// }
34
+ scope = scope.delete_if {|scope| scope =~ /read/ }
35
+ scope = scope.uniq
36
+ return scope
37
+ end
38
+ end
@@ -0,0 +1,53 @@
1
+ module Oauth2Provider
2
+ module ControllerMixin
3
+ def _oauth_provider_authenticate
4
+ if api_request
5
+ oauth_authorized # uncomment to make all json API protected
6
+ else
7
+ session_auth
8
+ end
9
+ end
10
+
11
+ def api_request
12
+ json?
13
+ end
14
+
15
+ def json?
16
+ request.format == "application/json"
17
+ end
18
+
19
+ def _oauth_provider_json_body
20
+ body = request.body.read.to_s
21
+ @body = if body.empty?
22
+ HashWithIndifferentAccess.new({})
23
+ else
24
+ HashWithIndifferentAccess.new(Rack::Utils.parse_nested_query body)
25
+ end
26
+ end
27
+
28
+ def oauth_authorized
29
+ action = params[:controller] + "/" + params[:action]
30
+ _oauth_provider_normalize_token
31
+ @token = Oauth2Provider::OauthToken.to_adapter.find_first(token: params[:token], scope: action)
32
+ if @token.nil? or @token.blocked?
33
+ render text: "Unauthorized access.", status: 401
34
+ return false
35
+ else
36
+ access = Oauth2Provider::OauthAccess.to_adapter.find_first(client_uri: @token.client_uri , resource_owner_uri: @token.resource_owner_uri)
37
+ access.accessed!
38
+ @current_user = User.to_adapter.find_first(id: @token.resource_owner_uri.split('/').last)
39
+ end
40
+ end
41
+
42
+ def _oauth_provider_normalize_token
43
+ # Token in the body
44
+ if (_oauth_provider_json_body and @body[:token])
45
+ params[:token] = @body[:token]
46
+ end
47
+ # Token in the header
48
+ if request.env["Authorization"]
49
+ params[:token] = request.env["Authorization"].split(" ").last
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,4 @@
1
+ module Oauth2Provider
2
+ class Engine < ::Rails::Engine
3
+ end
4
+ end
@@ -0,0 +1 @@
1
+ require 'oauth2_provider'
@@ -0,0 +1,3 @@
1
+ module Oauth2ProviderEngine
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,67 @@
1
+ = Changelog
2
+
3
+
4
+ == Release v0.3.1 (2011/04/22)
5
+
6
+ * Added documentation with screenshots
7
+ * Added tag system on scope definition
8
+ * Added basic graph with access token stats
9
+
10
+
11
+ == Release v0.3.0 (2011/04/21)
12
+
13
+ * Added refined UI for the dashboard section
14
+ * Updated documentation
15
+
16
+
17
+ == Release v0.2.3 (2011/04/19)
18
+
19
+ * Added redirect to last URI before logging in
20
+ * Added functionality to block the access of a user resource in
21
+ behalf of a specific client
22
+ * Added client access and stats to every user in the dashboard
23
+ * Added functionality to block a client (only admin can do this)
24
+ * Added UI to automatically set admin the first user which
25
+ register into the OAuth Server
26
+ * Added autoupdate of scopes to all clients when one of them
27
+ changes
28
+
29
+
30
+ == Release v0.2.2 (2011/04/18)
31
+
32
+ * Added documentation on scope definition, action authorization, testing
33
+ framework and oauth flow testing code.
34
+
35
+
36
+ == Release v0.2.1 (2011/04/15)
37
+
38
+ * Added bearer token protection simply adding the filter
39
+ <tt>before_filter :oauth_authorized<tt> on the conrtoller
40
+ * Added dynamic scope setting. Now is possible to set the
41
+ scopes directly in the admin interface, and easily protect
42
+ every method inside a controller.
43
+ * Added dashboard for admin to add scopes and monitor all
44
+ registered users
45
+ * Added dashboard to control and create clients
46
+ * Added dashboard to edit user info
47
+
48
+
49
+ == Release v0.2.0 (2011/04/06)
50
+
51
+ * Added refresh token mechanisms
52
+ * Removed unuseful gems
53
+ * Changed denied message from access=denied to error=access_denied
54
+ * Introduced test to block of single token (idea of logout)
55
+ * Changed oauth/authorize with /oauth/authorization to make sistem more REST
56
+ * Redefinition of all documentation, more simple and complete
57
+
58
+
59
+ == Release v0.1.1 (2011/03/29)
60
+
61
+ * Added documentation explaining the authorization flows
62
+
63
+
64
+ == Release v0.1.0 (2011/03/29)
65
+
66
+ * Added documentation explaining the existing flows
67
+ * Added OAuth2 server with acceptance tests
@@ -0,0 +1,53 @@
1
+ source 'http://rubygems.org'
2
+ source 'http://gemcutter.org'
3
+
4
+ gem 'rails', '3.2.5'
5
+
6
+ # Gems used only for assets and not required
7
+ # in production environments by default.
8
+ group :assets do
9
+ gem 'sass-rails', '~> 3.2.3'
10
+ gem 'coffee-rails', '~> 3.2.1'
11
+
12
+ # See https://github.com/sstephenson/execjs#readme for more supported runtime
13
+ # gem 'therubyracer'
14
+
15
+ gem 'uglifier', '>= 1.0.3'
16
+ end
17
+
18
+ gem "jquery-rails"
19
+ gem 'mongoid'
20
+ gem 'bson_ext'
21
+ gem 'yajl-ruby'
22
+ gem 'will_paginate'
23
+ gem 'rack-ssl'
24
+ gem "bcrypt-ruby", :require => "bcrypt"
25
+ gem 'validate_url'
26
+ gem 'email_validator'
27
+ gem 'chronic'
28
+ gem 'jquery-rails'
29
+ gem 'orm_adapter', :git => 'git://github.com/timgaleckas/orm_adapter.git'
30
+ gem 'oauth2_provider', :path => '../..'
31
+
32
+ group :development, :test do
33
+ gem 'debugger'
34
+ gem 'rspec-rails'
35
+ end
36
+
37
+ group :test do
38
+ gem 'steak'
39
+ gem 'capybara'
40
+ gem 'selenium-client'
41
+ gem 'selenium-webdriver'
42
+ gem 'launchy'
43
+ gem 'shoulda'
44
+ gem 'factory_girl_rails'
45
+ gem 'webrat'
46
+ gem 'autotest'
47
+ gem 'autotest-growl'
48
+ gem 'database_cleaner'
49
+ gem 'fuubar'
50
+ gem 'watchr'
51
+ gem 'delorean'
52
+ gem 'rspec-set'
53
+ end
@@ -0,0 +1,254 @@
1
+ GIT
2
+ remote: git://github.com/timgaleckas/orm_adapter.git
3
+ revision: e4ae617d8eea6c50ca1a4db9de4a12669868119a
4
+ specs:
5
+ orm_adapter (0.1.0)
6
+
7
+ PATH
8
+ remote: ../..
9
+ specs:
10
+ oauth2_provider (0.0.1)
11
+ bson_ext
12
+ chronic
13
+ jquery-rails
14
+ mongoid
15
+ orm_adapter
16
+ rails (~> 3.2.5)
17
+ validate_url
18
+
19
+ GEM
20
+ remote: http://rubygems.org/
21
+ remote: http://gemcutter.org/
22
+ specs:
23
+ ZenTest (4.8.1)
24
+ actionmailer (3.2.5)
25
+ actionpack (= 3.2.5)
26
+ mail (~> 2.4.4)
27
+ actionpack (3.2.5)
28
+ activemodel (= 3.2.5)
29
+ activesupport (= 3.2.5)
30
+ builder (~> 3.0.0)
31
+ erubis (~> 2.7.0)
32
+ journey (~> 1.0.1)
33
+ rack (~> 1.4.0)
34
+ rack-cache (~> 1.2)
35
+ rack-test (~> 0.6.1)
36
+ sprockets (~> 2.1.3)
37
+ activemodel (3.2.5)
38
+ activesupport (= 3.2.5)
39
+ builder (~> 3.0.0)
40
+ activerecord (3.2.5)
41
+ activemodel (= 3.2.5)
42
+ activesupport (= 3.2.5)
43
+ arel (~> 3.0.2)
44
+ tzinfo (~> 0.3.29)
45
+ activeresource (3.2.5)
46
+ activemodel (= 3.2.5)
47
+ activesupport (= 3.2.5)
48
+ activesupport (3.2.5)
49
+ i18n (~> 0.6)
50
+ multi_json (~> 1.0)
51
+ addressable (2.2.8)
52
+ arel (3.0.2)
53
+ autotest (4.4.6)
54
+ ZenTest (>= 4.4.1)
55
+ autotest-growl (0.2.16)
56
+ bcrypt-ruby (3.0.1)
57
+ bson (1.6.4)
58
+ bson_ext (1.6.4)
59
+ bson (~> 1.6.4)
60
+ builder (3.0.0)
61
+ capybara (1.1.2)
62
+ mime-types (>= 1.16)
63
+ nokogiri (>= 1.3.3)
64
+ rack (>= 1.0.0)
65
+ rack-test (>= 0.5.4)
66
+ selenium-webdriver (~> 2.0)
67
+ xpath (~> 0.1.4)
68
+ childprocess (0.3.2)
69
+ ffi (~> 1.0.6)
70
+ chronic (0.6.7)
71
+ coffee-rails (3.2.2)
72
+ coffee-script (>= 2.2.0)
73
+ railties (~> 3.2.0)
74
+ coffee-script (2.2.0)
75
+ coffee-script-source
76
+ execjs
77
+ coffee-script-source (1.3.3)
78
+ columnize (0.3.6)
79
+ database_cleaner (0.8.0)
80
+ debugger (1.1.4)
81
+ columnize (>= 0.3.1)
82
+ debugger-linecache (~> 1.1.1)
83
+ debugger-ruby_core_source (~> 1.1.3)
84
+ debugger-linecache (1.1.1)
85
+ debugger-ruby_core_source (>= 1.1.1)
86
+ debugger-ruby_core_source (1.1.3)
87
+ delorean (1.2.0)
88
+ chronic
89
+ diff-lcs (1.1.3)
90
+ email_validator (1.3.0)
91
+ activemodel
92
+ erubis (2.7.0)
93
+ execjs (1.4.0)
94
+ multi_json (~> 1.0)
95
+ factory_girl (3.4.0)
96
+ activesupport (>= 3.0.0)
97
+ factory_girl_rails (3.4.0)
98
+ factory_girl (~> 3.4.0)
99
+ railties (>= 3.0.0)
100
+ ffi (1.0.11)
101
+ fuubar (1.0.0)
102
+ rspec (~> 2.0)
103
+ rspec-instafail (~> 0.2.0)
104
+ ruby-progressbar (~> 0.0.10)
105
+ hike (1.2.1)
106
+ i18n (0.6.0)
107
+ journey (1.0.3)
108
+ jquery-rails (2.0.2)
109
+ railties (>= 3.2.0, < 5.0)
110
+ thor (~> 0.14)
111
+ json (1.7.3)
112
+ launchy (2.1.0)
113
+ addressable (~> 2.2.6)
114
+ libwebsocket (0.1.3)
115
+ addressable
116
+ mail (2.4.4)
117
+ i18n (>= 0.4.0)
118
+ mime-types (~> 1.16)
119
+ treetop (~> 1.4.8)
120
+ mime-types (1.18)
121
+ mongo (1.6.2)
122
+ bson (~> 1.6.2)
123
+ mongoid (2.4.11)
124
+ activemodel (~> 3.1)
125
+ mongo (<= 1.6.2)
126
+ tzinfo (~> 0.3.22)
127
+ multi_json (1.3.6)
128
+ nokogiri (1.5.4)
129
+ polyglot (0.3.3)
130
+ rack (1.4.1)
131
+ rack-cache (1.2)
132
+ rack (>= 0.4)
133
+ rack-ssl (1.3.2)
134
+ rack
135
+ rack-test (0.6.1)
136
+ rack (>= 1.0)
137
+ rails (3.2.5)
138
+ actionmailer (= 3.2.5)
139
+ actionpack (= 3.2.5)
140
+ activerecord (= 3.2.5)
141
+ activeresource (= 3.2.5)
142
+ activesupport (= 3.2.5)
143
+ bundler (~> 1.0)
144
+ railties (= 3.2.5)
145
+ railties (3.2.5)
146
+ actionpack (= 3.2.5)
147
+ activesupport (= 3.2.5)
148
+ rack-ssl (~> 1.3.2)
149
+ rake (>= 0.8.7)
150
+ rdoc (~> 3.4)
151
+ thor (>= 0.14.6, < 2.0)
152
+ rake (0.9.2.2)
153
+ rdoc (3.12)
154
+ json (~> 1.4)
155
+ rspec (2.10.0)
156
+ rspec-core (~> 2.10.0)
157
+ rspec-expectations (~> 2.10.0)
158
+ rspec-mocks (~> 2.10.0)
159
+ rspec-core (2.10.1)
160
+ rspec-expectations (2.10.0)
161
+ diff-lcs (~> 1.1.3)
162
+ rspec-instafail (0.2.4)
163
+ rspec-mocks (2.10.1)
164
+ rspec-rails (2.10.1)
165
+ actionpack (>= 3.0)
166
+ activesupport (>= 3.0)
167
+ railties (>= 3.0)
168
+ rspec (~> 2.10.0)
169
+ rspec-set (0.0.1)
170
+ rspec (>= 2)
171
+ ruby-progressbar (0.0.10)
172
+ rubyzip (0.9.8)
173
+ sass (3.1.19)
174
+ sass-rails (3.2.5)
175
+ railties (~> 3.2.0)
176
+ sass (>= 3.1.10)
177
+ tilt (~> 1.3)
178
+ selenium-client (1.2.18)
179
+ selenium-webdriver (2.22.2)
180
+ childprocess (>= 0.2.5)
181
+ ffi (~> 1.0)
182
+ libwebsocket (~> 0.1.3)
183
+ multi_json (~> 1.0)
184
+ rubyzip
185
+ shoulda (3.0.1)
186
+ shoulda-context (~> 1.0.0)
187
+ shoulda-matchers (~> 1.0.0)
188
+ shoulda-context (1.0.0)
189
+ shoulda-matchers (1.0.0)
190
+ sprockets (2.1.3)
191
+ hike (~> 1.2)
192
+ rack (~> 1.0)
193
+ tilt (~> 1.1, != 1.3.0)
194
+ steak (2.0.0)
195
+ capybara (>= 1.0.0)
196
+ rspec-rails (>= 2.5.0)
197
+ thor (0.15.2)
198
+ tilt (1.3.3)
199
+ treetop (1.4.10)
200
+ polyglot
201
+ polyglot (>= 0.3.1)
202
+ tzinfo (0.3.33)
203
+ uglifier (1.2.4)
204
+ execjs (>= 0.3.0)
205
+ multi_json (>= 1.0.2)
206
+ validate_url (0.2.0)
207
+ activemodel (>= 3.0.0)
208
+ watchr (0.7)
209
+ webrat (0.7.3)
210
+ nokogiri (>= 1.2.0)
211
+ rack (>= 1.0)
212
+ rack-test (>= 0.5.3)
213
+ will_paginate (3.0.3)
214
+ xpath (0.1.4)
215
+ nokogiri (~> 1.3)
216
+ yajl-ruby (1.1.0)
217
+
218
+ PLATFORMS
219
+ ruby
220
+
221
+ DEPENDENCIES
222
+ autotest
223
+ autotest-growl
224
+ bcrypt-ruby
225
+ bson_ext
226
+ capybara
227
+ chronic
228
+ coffee-rails (~> 3.2.1)
229
+ database_cleaner
230
+ debugger
231
+ delorean
232
+ email_validator
233
+ factory_girl_rails
234
+ fuubar
235
+ jquery-rails
236
+ launchy
237
+ mongoid
238
+ oauth2_provider!
239
+ orm_adapter!
240
+ rack-ssl
241
+ rails (= 3.2.5)
242
+ rspec-rails
243
+ rspec-set
244
+ sass-rails (~> 3.2.3)
245
+ selenium-client
246
+ selenium-webdriver
247
+ shoulda
248
+ steak
249
+ uglifier (>= 1.0.3)
250
+ validate_url
251
+ watchr
252
+ webrat
253
+ will_paginate
254
+ yajl-ruby