couchkeeper 0.6.7

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 (240) hide show
  1. data/.gitignore +14 -0
  2. data/.rspec +1 -0
  3. data/.travis.yml +28 -0
  4. data/CHANGELOG.md +198 -0
  5. data/Gemfile +32 -0
  6. data/MIT-LICENSE +20 -0
  7. data/README.md +290 -0
  8. data/Rakefile +18 -0
  9. data/app/assets/javascripts/doorkeeper/application.js +2 -0
  10. data/app/assets/stylesheets/doorkeeper/application.css +18 -0
  11. data/app/assets/stylesheets/doorkeeper/form.css +13 -0
  12. data/app/controllers/doorkeeper/application_controller.rb +7 -0
  13. data/app/controllers/doorkeeper/applications_controller.rb +60 -0
  14. data/app/controllers/doorkeeper/authorizations_controller.rb +57 -0
  15. data/app/controllers/doorkeeper/authorized_applications_controller.rb +12 -0
  16. data/app/controllers/doorkeeper/token_info_controller.rb +12 -0
  17. data/app/controllers/doorkeeper/tokens_controller.rb +20 -0
  18. data/app/helpers/doorkeeper/form_errors_helper.rb +9 -0
  19. data/app/validators/redirect_uri_validator.rb +23 -0
  20. data/app/views/doorkeeper/applications/_form.html.erb +34 -0
  21. data/app/views/doorkeeper/applications/edit.html.erb +13 -0
  22. data/app/views/doorkeeper/applications/index.html.erb +29 -0
  23. data/app/views/doorkeeper/applications/new.html.erb +13 -0
  24. data/app/views/doorkeeper/applications/show.html.erb +26 -0
  25. data/app/views/doorkeeper/authorizations/error.html.erb +6 -0
  26. data/app/views/doorkeeper/authorizations/new.html.erb +37 -0
  27. data/app/views/doorkeeper/authorizations/show.html.erb +4 -0
  28. data/app/views/doorkeeper/authorized_applications/index.html.erb +25 -0
  29. data/app/views/layouts/doorkeeper/application.html.erb +33 -0
  30. data/config/locales/en.yml +68 -0
  31. data/doorkeeper.gemspec +28 -0
  32. data/lib/doorkeeper.rb +64 -0
  33. data/lib/doorkeeper/config.rb +194 -0
  34. data/lib/doorkeeper/doorkeeper_for.rb +76 -0
  35. data/lib/doorkeeper/engine.rb +19 -0
  36. data/lib/doorkeeper/errors.rb +15 -0
  37. data/lib/doorkeeper/helpers/controller.rb +58 -0
  38. data/lib/doorkeeper/helpers/filter.rb +38 -0
  39. data/lib/doorkeeper/models/access_grant.rb +24 -0
  40. data/lib/doorkeeper/models/access_token.rb +95 -0
  41. data/lib/doorkeeper/models/accessible.rb +9 -0
  42. data/lib/doorkeeper/models/active_record/access_grant.rb +5 -0
  43. data/lib/doorkeeper/models/active_record/access_token.rb +21 -0
  44. data/lib/doorkeeper/models/active_record/application.rb +20 -0
  45. data/lib/doorkeeper/models/application.rb +33 -0
  46. data/lib/doorkeeper/models/couchbase/access_grant.rb +10 -0
  47. data/lib/doorkeeper/models/couchbase/access_token.rb +7 -0
  48. data/lib/doorkeeper/models/couchbase/application.rb +35 -0
  49. data/lib/doorkeeper/models/doorkeeper_access_grant/by_token/map.js +5 -0
  50. data/lib/doorkeeper/models/doorkeeper_access_token/by_application_id/map.js +5 -0
  51. data/lib/doorkeeper/models/doorkeeper_access_token/by_application_id_and_resource_owner_id/map.js +5 -0
  52. data/lib/doorkeeper/models/doorkeeper_access_token/by_refresh_token/map.js +5 -0
  53. data/lib/doorkeeper/models/doorkeeper_access_token/by_resource_owner_id/map.js +5 -0
  54. data/lib/doorkeeper/models/doorkeeper_access_token/by_token/map.js +5 -0
  55. data/lib/doorkeeper/models/doorkeeper_application/by_uid/map.js +5 -0
  56. data/lib/doorkeeper/models/doorkeeper_application/by_uid_and_secret/map.js +5 -0
  57. data/lib/doorkeeper/models/doorkeeper_application/show_all/map.js +6 -0
  58. data/lib/doorkeeper/models/expirable.rb +21 -0
  59. data/lib/doorkeeper/models/mongo_mapper/access_grant.rb +28 -0
  60. data/lib/doorkeeper/models/mongo_mapper/access_token.rb +51 -0
  61. data/lib/doorkeeper/models/mongo_mapper/application.rb +30 -0
  62. data/lib/doorkeeper/models/mongo_mapper/revocable.rb +15 -0
  63. data/lib/doorkeeper/models/mongoid/revocable.rb +15 -0
  64. data/lib/doorkeeper/models/mongoid/scopes.rb +15 -0
  65. data/lib/doorkeeper/models/mongoid2/access_grant.rb +22 -0
  66. data/lib/doorkeeper/models/mongoid2/access_token.rb +41 -0
  67. data/lib/doorkeeper/models/mongoid2/application.rb +22 -0
  68. data/lib/doorkeeper/models/mongoid3/access_grant.rb +22 -0
  69. data/lib/doorkeeper/models/mongoid3/access_token.rb +41 -0
  70. data/lib/doorkeeper/models/mongoid3/application.rb +22 -0
  71. data/lib/doorkeeper/models/ownership.rb +16 -0
  72. data/lib/doorkeeper/models/scopes.rb +17 -0
  73. data/lib/doorkeeper/oauth/authorization.rb +10 -0
  74. data/lib/doorkeeper/oauth/authorization/code.rb +32 -0
  75. data/lib/doorkeeper/oauth/authorization/token.rb +28 -0
  76. data/lib/doorkeeper/oauth/authorization/uri_builder.rb +29 -0
  77. data/lib/doorkeeper/oauth/authorization_code_request.rb +82 -0
  78. data/lib/doorkeeper/oauth/client.rb +29 -0
  79. data/lib/doorkeeper/oauth/client/credentials.rb +21 -0
  80. data/lib/doorkeeper/oauth/client/methods.rb +18 -0
  81. data/lib/doorkeeper/oauth/client_credentials/creator.rb +29 -0
  82. data/lib/doorkeeper/oauth/client_credentials/issuer.rb +35 -0
  83. data/lib/doorkeeper/oauth/client_credentials/validation.rb +33 -0
  84. data/lib/doorkeeper/oauth/client_credentials_request.rb +47 -0
  85. data/lib/doorkeeper/oauth/code_request.rb +28 -0
  86. data/lib/doorkeeper/oauth/code_response.rb +37 -0
  87. data/lib/doorkeeper/oauth/error.rb +9 -0
  88. data/lib/doorkeeper/oauth/error_response.rb +44 -0
  89. data/lib/doorkeeper/oauth/helpers/scope_checker.rb +18 -0
  90. data/lib/doorkeeper/oauth/helpers/unique_token.rb +13 -0
  91. data/lib/doorkeeper/oauth/helpers/uri_checker.rb +32 -0
  92. data/lib/doorkeeper/oauth/password_access_token_request.rb +84 -0
  93. data/lib/doorkeeper/oauth/pre_authorization.rb +62 -0
  94. data/lib/doorkeeper/oauth/refresh_token_request.rb +58 -0
  95. data/lib/doorkeeper/oauth/scopes.rb +60 -0
  96. data/lib/doorkeeper/oauth/token.rb +36 -0
  97. data/lib/doorkeeper/oauth/token_request.rb +28 -0
  98. data/lib/doorkeeper/oauth/token_response.rb +29 -0
  99. data/lib/doorkeeper/rails/routes.rb +90 -0
  100. data/lib/doorkeeper/rails/routes/mapper.rb +28 -0
  101. data/lib/doorkeeper/rails/routes/mapping.rb +39 -0
  102. data/lib/doorkeeper/request.rb +33 -0
  103. data/lib/doorkeeper/request/authorization_code.rb +23 -0
  104. data/lib/doorkeeper/request/client_credentials.rb +23 -0
  105. data/lib/doorkeeper/request/code.rb +24 -0
  106. data/lib/doorkeeper/request/password.rb +23 -0
  107. data/lib/doorkeeper/request/refresh_token.rb +23 -0
  108. data/lib/doorkeeper/request/token.rb +24 -0
  109. data/lib/doorkeeper/server.rb +54 -0
  110. data/lib/doorkeeper/validations.rb +30 -0
  111. data/lib/doorkeeper/version.rb +3 -0
  112. data/lib/generators/doorkeeper/application_owner_generator.rb +15 -0
  113. data/lib/generators/doorkeeper/install_generator.rb +12 -0
  114. data/lib/generators/doorkeeper/migration_generator.rb +15 -0
  115. data/lib/generators/doorkeeper/mongo_mapper/indexes_generator.rb +12 -0
  116. data/lib/generators/doorkeeper/templates/README +44 -0
  117. data/lib/generators/doorkeeper/templates/add_owner_to_application_migration.rb +7 -0
  118. data/lib/generators/doorkeeper/templates/indexes.rb +3 -0
  119. data/lib/generators/doorkeeper/templates/initializer.rb +67 -0
  120. data/lib/generators/doorkeeper/templates/migration.rb +42 -0
  121. data/lib/generators/doorkeeper/views_generator.rb +15 -0
  122. data/script/rails +6 -0
  123. data/script/run_all +14 -0
  124. data/spec/controllers/applications_controller_spec.rb +18 -0
  125. data/spec/controllers/authorizations_controller_spec.rb +154 -0
  126. data/spec/controllers/protected_resources_controller_spec.rb +304 -0
  127. data/spec/controllers/token_info_controller_spec.rb +54 -0
  128. data/spec/controllers/tokens_controller_spec.rb +36 -0
  129. data/spec/dummy/Rakefile +7 -0
  130. data/spec/dummy/app/assets/javascripts/application.js +9 -0
  131. data/spec/dummy/app/assets/stylesheets/application.css +7 -0
  132. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  133. data/spec/dummy/app/controllers/custom_authorizations_controller.rb +7 -0
  134. data/spec/dummy/app/controllers/full_protected_resources_controller.rb +12 -0
  135. data/spec/dummy/app/controllers/home_controller.rb +17 -0
  136. data/spec/dummy/app/controllers/metal_controller.rb +11 -0
  137. data/spec/dummy/app/controllers/semi_protected_resources_controller.rb +11 -0
  138. data/spec/dummy/app/helpers/application_helper.rb +5 -0
  139. data/spec/dummy/app/models/user.rb +27 -0
  140. data/spec/dummy/app/views/home/index.html.erb +0 -0
  141. data/spec/dummy/app/views/layouts/application.html.erb +16 -0
  142. data/spec/dummy/config.ru +4 -0
  143. data/spec/dummy/config/application.rb +54 -0
  144. data/spec/dummy/config/boot.rb +6 -0
  145. data/spec/dummy/config/database.yml +15 -0
  146. data/spec/dummy/config/environment.rb +5 -0
  147. data/spec/dummy/config/environments/development.rb +30 -0
  148. data/spec/dummy/config/environments/production.rb +60 -0
  149. data/spec/dummy/config/environments/test.rb +39 -0
  150. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  151. data/spec/dummy/config/initializers/doorkeeper.rb +56 -0
  152. data/spec/dummy/config/initializers/secret_token.rb +9 -0
  153. data/spec/dummy/config/initializers/session_store.rb +8 -0
  154. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  155. data/spec/dummy/config/locales/doorkeeper.en.yml +5 -0
  156. data/spec/dummy/config/mongo.yml +11 -0
  157. data/spec/dummy/config/mongoid2.yml +9 -0
  158. data/spec/dummy/config/mongoid3.yml +18 -0
  159. data/spec/dummy/config/routes.rb +38 -0
  160. data/spec/dummy/db/migrate/20111122132257_create_users.rb +9 -0
  161. data/spec/dummy/db/migrate/20120312140401_add_password_to_users.rb +5 -0
  162. data/spec/dummy/db/migrate/20120524202412_create_doorkeeper_tables.rb +44 -0
  163. data/spec/dummy/db/schema.rb +64 -0
  164. data/spec/dummy/public/404.html +26 -0
  165. data/spec/dummy/public/422.html +26 -0
  166. data/spec/dummy/public/500.html +26 -0
  167. data/spec/dummy/public/favicon.ico +0 -0
  168. data/spec/dummy/script/rails +6 -0
  169. data/spec/factories/access_grant.rb +9 -0
  170. data/spec/factories/access_token.rb +7 -0
  171. data/spec/factories/application.rb +6 -0
  172. data/spec/generators/application_owner_generator_spec.rb +23 -0
  173. data/spec/generators/install_generator_spec.rb +31 -0
  174. data/spec/generators/migration_generator_spec.rb +20 -0
  175. data/spec/generators/templates/routes.rb +3 -0
  176. data/spec/generators/views_generator_spec.rb +27 -0
  177. data/spec/lib/config_spec.rb +170 -0
  178. data/spec/lib/models/expirable_spec.rb +51 -0
  179. data/spec/lib/models/revocable_spec.rb +31 -0
  180. data/spec/lib/models/scopes_spec.rb +32 -0
  181. data/spec/lib/oauth/authorization/uri_builder_spec.rb +37 -0
  182. data/spec/lib/oauth/authorization_code_request_spec.rb +80 -0
  183. data/spec/lib/oauth/client/credentials_spec.rb +47 -0
  184. data/spec/lib/oauth/client/methods_spec.rb +54 -0
  185. data/spec/lib/oauth/client_credentials/creator_spec.rb +47 -0
  186. data/spec/lib/oauth/client_credentials/issuer_spec.rb +57 -0
  187. data/spec/lib/oauth/client_credentials/validation_spec.rb +29 -0
  188. data/spec/lib/oauth/client_credentials_integration_spec.rb +27 -0
  189. data/spec/lib/oauth/client_credentials_request_spec.rb +64 -0
  190. data/spec/lib/oauth/client_spec.rb +39 -0
  191. data/spec/lib/oauth/code_request_spec.rb +44 -0
  192. data/spec/lib/oauth/error_response_spec.rb +40 -0
  193. data/spec/lib/oauth/error_spec.rb +19 -0
  194. data/spec/lib/oauth/helpers/scope_checker_spec.rb +74 -0
  195. data/spec/lib/oauth/helpers/unique_token_spec.rb +20 -0
  196. data/spec/lib/oauth/helpers/uri_checker_spec.rb +64 -0
  197. data/spec/lib/oauth/password_access_token_request_spec.rb +65 -0
  198. data/spec/lib/oauth/pre_authorization_spec.rb +80 -0
  199. data/spec/lib/oauth/refresh_token_request_spec.rb +56 -0
  200. data/spec/lib/oauth/scopes_spec.rb +115 -0
  201. data/spec/lib/oauth/token_request_spec.rb +46 -0
  202. data/spec/lib/oauth/token_response_spec.rb +52 -0
  203. data/spec/lib/oauth/token_spec.rb +83 -0
  204. data/spec/lib/server_spec.rb +24 -0
  205. data/spec/models/doorkeeper/access_grant_spec.rb +36 -0
  206. data/spec/models/doorkeeper/access_token_spec.rb +153 -0
  207. data/spec/models/doorkeeper/application_spec.rb +162 -0
  208. data/spec/requests/applications/applications_request_spec.rb +92 -0
  209. data/spec/requests/applications/authorized_applications_spec.rb +30 -0
  210. data/spec/requests/endpoints/authorization_spec.rb +47 -0
  211. data/spec/requests/endpoints/token_spec.rb +46 -0
  212. data/spec/requests/flows/authorization_code_errors_spec.rb +66 -0
  213. data/spec/requests/flows/authorization_code_spec.rb +135 -0
  214. data/spec/requests/flows/client_credentials_spec.rb +58 -0
  215. data/spec/requests/flows/implicit_grant_errors_spec.rb +31 -0
  216. data/spec/requests/flows/implicit_grant_spec.rb +19 -0
  217. data/spec/requests/flows/password_spec.rb +78 -0
  218. data/spec/requests/flows/refresh_token_spec.rb +71 -0
  219. data/spec/requests/flows/skip_authorization_spec.rb +40 -0
  220. data/spec/requests/protected_resources/metal_spec.rb +14 -0
  221. data/spec/requests/protected_resources/private_api_spec.rb +50 -0
  222. data/spec/routing/custom_controller_routes_spec.rb +44 -0
  223. data/spec/routing/default_routes_spec.rb +32 -0
  224. data/spec/spec_helper.rb +2 -0
  225. data/spec/spec_helper_integration.rb +40 -0
  226. data/spec/support/dependencies/factory_girl.rb +2 -0
  227. data/spec/support/helpers/access_token_request_helper.rb +11 -0
  228. data/spec/support/helpers/authorization_request_helper.rb +32 -0
  229. data/spec/support/helpers/config_helper.rb +9 -0
  230. data/spec/support/helpers/model_helper.rb +45 -0
  231. data/spec/support/helpers/request_spec_helper.rb +72 -0
  232. data/spec/support/helpers/url_helper.rb +51 -0
  233. data/spec/support/orm/active_record.rb +11 -0
  234. data/spec/support/orm/mongo_mapper.rb +26 -0
  235. data/spec/support/orm/mongoid.rb +31 -0
  236. data/spec/support/shared/controllers_shared_context.rb +60 -0
  237. data/spec/support/shared/models_shared_examples.rb +60 -0
  238. data/spec/validators/redirect_uri_validator_spec.rb +47 -0
  239. data/vendor/assets/stylesheets/doorkeeper/bootstrap.min.css +356 -0
  240. metadata +430 -0
@@ -0,0 +1,18 @@
1
+ require 'bundler/setup'
2
+ require 'rspec/core/rake_task'
3
+
4
+ desc 'Default: run specs.'
5
+ task :default => :spec
6
+
7
+ desc "Run all specs"
8
+ RSpec::Core::RakeTask.new(:spec)
9
+
10
+ namespace :doorkeeper do
11
+ desc "Install doorkeeper in dummy app"
12
+ task :install do
13
+ cd 'spec/dummy'
14
+ system 'bundle exec rails g doorkeeper:install --force'
15
+ end
16
+ end
17
+
18
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,2 @@
1
+ //= require jquery
2
+ //= require jquery_ujs
@@ -0,0 +1,18 @@
1
+ /*
2
+ *= require doorkeeper/bootstrap.min
3
+ *
4
+ *= require_self
5
+ *= require_tree .
6
+ */
7
+
8
+ body {
9
+ padding-top: 60px;
10
+ }
11
+
12
+ .inline_block {
13
+ display: inline-block;
14
+ }
15
+
16
+ table td {
17
+ vertical-align: middle;
18
+ }
@@ -0,0 +1,13 @@
1
+ .field_with_errors {
2
+ display: inline;
3
+ }
4
+
5
+ .field_with_errors input {
6
+ color: #B94A48;
7
+ border-color: #EE5F5B;
8
+ }
9
+
10
+ .input .help-inline.error {
11
+ color: #B94A48;
12
+ }
13
+
@@ -0,0 +1,7 @@
1
+ module Doorkeeper
2
+ class ApplicationController < ActionController::Base
3
+ include Helpers::Controller
4
+
5
+ helper "doorkeeper/form_errors"
6
+ end
7
+ end
@@ -0,0 +1,60 @@
1
+ module Doorkeeper
2
+ class ApplicationsController < Doorkeeper::ApplicationController
3
+ respond_to :html
4
+
5
+ before_filter :authenticate_admin!
6
+
7
+ def index
8
+ @applications = Application.find_all
9
+ end
10
+
11
+ def new
12
+ @application = Application.new
13
+ end
14
+
15
+ def create
16
+ @application = Application.new(application_params)
17
+ if @application.save
18
+ flash[:notice] = I18n.t(:notice, :scope => [:doorkeeper, :flash, :applications, :create])
19
+ p @application
20
+ respond_with [:oauth, @application]
21
+ else
22
+ render :new
23
+ end
24
+ end
25
+
26
+ def show
27
+ @application = Application.find(params[:id])
28
+ end
29
+
30
+ def edit
31
+ @application = Application.find(params[:id])
32
+ end
33
+
34
+ def update
35
+ @application = Application.find(params[:id])
36
+ if @application.update_attributes(application_params)
37
+ flash[:notice] = I18n.t(:notice, :scope => [:doorkeeper, :flash, :applications, :update])
38
+ respond_with [:oauth, @application]
39
+ else
40
+ render :edit
41
+ end
42
+ end
43
+
44
+ def destroy
45
+ @application = Application.find(params[:id])
46
+ flash[:notice] = I18n.t(:notice, :scope => [:doorkeeper, :flash, :applications, :destroy]) if @application.delete
47
+ redirect_to oauth_applications_url
48
+ end
49
+
50
+ private
51
+
52
+ def application_params
53
+ if params.respond_to?(:permit)
54
+ params.require(:application).permit(:name, :redirect_uri)
55
+ else
56
+ params[:application].slice(:name, :redirect_uri) rescue nil
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,57 @@
1
+ module Doorkeeper
2
+ class AuthorizationsController < ::Doorkeeper::ApplicationController
3
+ before_filter :authenticate_resource_owner!
4
+
5
+ def new
6
+ if pre_auth.authorizable?
7
+ #p pre_auth
8
+ if Doorkeeper::AccessToken.matching_token_for(pre_auth.client, current_resource_owner.id, pre_auth.scopes) || skip_authorization?
9
+ auth = authorization.authorize
10
+ redirect_to auth.redirect_uri
11
+ else
12
+ render :new
13
+ end
14
+ else
15
+ render :error
16
+ end
17
+ end
18
+
19
+ def show
20
+ end
21
+
22
+ # TODO: Handle raise invalid authorization
23
+ def create
24
+ auth = authorization.authorize
25
+
26
+ if auth.redirectable?
27
+ redirect_to auth.redirect_uri
28
+ else
29
+ render :json => auth.body, :status => auth.status
30
+ end
31
+ end
32
+
33
+ def destroy
34
+ auth = authorization.deny
35
+
36
+ if auth.redirectable?
37
+ redirect_to auth.redirect_uri
38
+ else
39
+ render :json => auth.body, :status => auth.status
40
+ end
41
+ end
42
+
43
+ private
44
+
45
+ def pre_auth
46
+ @pre_auth ||= OAuth::PreAuthorization.new(Doorkeeper.configuration, server.client_via_uid, params)
47
+ end
48
+
49
+ def authorization
50
+ @authorization ||= strategy.request
51
+ end
52
+
53
+ def strategy
54
+ @strategy ||= server.authorization_request pre_auth.response_type
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,12 @@
1
+ class Doorkeeper::AuthorizedApplicationsController < Doorkeeper::ApplicationController
2
+ before_filter :authenticate_resource_owner!
3
+
4
+ def index
5
+ @applications = Doorkeeper::Application.authorized_for(current_resource_owner)
6
+ end
7
+
8
+ def destroy
9
+ Doorkeeper::AccessToken.revoke_all_for params[:id], current_resource_owner
10
+ redirect_to oauth_authorized_applications_url, :notice => I18n.t(:notice, :scope => [:doorkeeper, :flash, :authorized_applications, :destroy])
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ module Doorkeeper
2
+ class TokenInfoController < ::Doorkeeper::ApplicationController
3
+ def show
4
+ if doorkeeper_token && doorkeeper_token.accessible?
5
+ render :json => doorkeeper_token, :status => :ok
6
+ else
7
+ error = OAuth::ErrorResponse.new(:name => :invalid_request)
8
+ render :json => error.body, :status => error.status
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,20 @@
1
+ module Doorkeeper
2
+ class TokensController < ActionController::Metal
3
+ include Helpers::Controller
4
+
5
+ def create
6
+ response = strategy.authorize
7
+ self.headers.merge! response.headers
8
+ self.response_body = response.body.to_json
9
+ self.status = response.status
10
+ rescue Errors::DoorkeeperError => e
11
+ handle_token_exception e
12
+ end
13
+
14
+ private
15
+
16
+ def strategy
17
+ @strategy ||= server.token_request params[:grant_type]
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,9 @@
1
+ module Doorkeeper::FormErrorsHelper
2
+ def errors_for(object, method)
3
+ if object.errors[method].present?
4
+ content_tag(:span, :class => "error help-inline") do
5
+ object.errors[method].join(',')
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,23 @@
1
+ require 'uri'
2
+
3
+ class RedirectUriValidator < ActiveModel::EachValidator
4
+ def self.test_redirect_uri
5
+ Doorkeeper.configuration.test_redirect_uri
6
+ end
7
+
8
+ def validate_each(record, attribute, value)
9
+ uri = ::URI.parse(value)
10
+ return if test_redirect_uri?(uri)
11
+ record.errors.add(attribute, :fragment_present) unless uri.fragment.nil?
12
+ record.errors.add(attribute, :relative_uri) if uri.scheme.nil? || uri.host.nil?
13
+ record.errors.add(attribute, :has_query_parameter) unless uri.query.nil?
14
+ rescue URI::InvalidURIError => e
15
+ record.errors.add(attribute, :invalid_uri)
16
+ end
17
+
18
+ private
19
+
20
+ def test_redirect_uri?(uri)
21
+ self.class.test_redirect_uri.present? && uri.to_s == self.class.test_redirect_uri.to_s
22
+ end
23
+ end
@@ -0,0 +1,34 @@
1
+ <%= form_for([:oauth, application]) do |f| %>
2
+ <fieldset>
3
+ <% if application.errors.any? %>
4
+ <div class="alert-message error" data-alert><a class="close" href="#">×</a><p>Whoops! Check your form for possible errors</p></div>
5
+ <% end %>
6
+
7
+ <div class="clearfix">
8
+ <%= f.label :name %>
9
+ <div class="input">
10
+ <%= f.text_field :name %>
11
+ <%= errors_for application, :name %>
12
+ </div>
13
+ </div>
14
+
15
+ <div class="clearfix">
16
+ <%= f.label :redirect_uri %>
17
+ <div class="input">
18
+ <%= f.text_field :redirect_uri %>
19
+ <%= errors_for application, :redirect_uri %>
20
+ <% if Doorkeeper.configuration.test_redirect_uri %>
21
+ <span class="help-inline">Use <%= Doorkeeper.configuration.test_redirect_uri %> for local tests</span>
22
+ <% end %>
23
+ </div>
24
+ </div>
25
+
26
+ <div class="clearfix"></div>
27
+
28
+ <div class="actions">
29
+ <%= f.submit :Submit, :class => "btn primary" %>
30
+ <%= link_to "Cancel", oauth_applications_path, :class => "btn" %>
31
+ </div>
32
+ </fieldset>
33
+ <% end %>
34
+
@@ -0,0 +1,13 @@
1
+ <div class="span16">
2
+ <header class="page-header"><h2>Edit application</h2></header>
3
+ </div>
4
+
5
+ <div class="span12">
6
+ <%= render 'form', :application => @application %>
7
+ </div>
8
+
9
+ <div class="span4">
10
+ <h3>Actions</h3>
11
+ <p><%= link_to 'Back to application list', oauth_applications_path %></p>
12
+ </div>
13
+
@@ -0,0 +1,29 @@
1
+ <div class="span16">
2
+ <header class="page-header">
3
+ <h2>Your applications</h2>
4
+ </header>
5
+
6
+ <p><%= link_to 'New Application', new_oauth_application_path %></p>
7
+
8
+ <table class="zebra-striped">
9
+ <thead>
10
+ <tr>
11
+ <th>Name</th>
12
+ <th>Callback url</th>
13
+ <th></th>
14
+ <th></th>
15
+ </tr>
16
+ </thead>
17
+ <tbody>
18
+ <% @applications.each do |application| %>
19
+ <tr id="application_<%= application.id %>">
20
+ <td><%= link_to application.name, [:oauth, application] %></td>
21
+ <td><%= application.redirect_uri %></td>
22
+ <td><%= link_to 'Edit', edit_oauth_application_path(application) %></td>
23
+ <td><%= link_to 'Destroy', [:oauth, application], :data => { :confirm => 'Are you sure?' }, :method => :delete %></td>
24
+ </tr>
25
+ <% end %>
26
+ </tbody>
27
+ </table>
28
+
29
+ </div>
@@ -0,0 +1,13 @@
1
+ <div class="span16">
2
+ <header class="page-header"><h2>New application</h2></header>
3
+ </div>
4
+
5
+ <div class="span12">
6
+ <%= render 'form', :application => @application %>
7
+ </div>
8
+
9
+ <div class="span4">
10
+ <h3>Actions</h3>
11
+ <p><%= link_to 'Back to application list', oauth_applications_path %></p>
12
+ </div>
13
+
@@ -0,0 +1,26 @@
1
+ <div class="span16">
2
+ <header class="page-header">
3
+ <h1>Application: <%= @application.name %></h1>
4
+ </header>
5
+ </div>
6
+
7
+ <div class="span10">
8
+ <h4>Callback url:</h4>
9
+ <p><code id="callback_url"><%= @application.redirect_uri %></code></p>
10
+
11
+ <h4>Application Id:</h4>
12
+ <p><code id="application_id"><%= @application.id %></code></p>
13
+
14
+ <h4>Secret:</h4>
15
+ <p><code id="secret"><%= @application.secret %></code></p>
16
+
17
+ <h4>Link to authorization code:</h4>
18
+ <p><%= link_to 'Authorize', oauth_authorization_path(:client_id => @application.id, :redirect_uri => @application.redirect_uri, :response_type => 'code' ) %></p>
19
+ </div>
20
+
21
+ <div class="span6">
22
+ <h3>Actions</h3>
23
+ <p><%= link_to 'List all', oauth_applications_path %></p>
24
+ <p><%= link_to 'Edit', edit_oauth_application_path(@application) %></p>
25
+ <p><%= link_to 'Remove', [:oauth, @application], :method => :delete, :data => { :confirm => "Are you sure?" } %></p>
26
+ </div>
@@ -0,0 +1,6 @@
1
+ <div class="span16">
2
+ <h2>An error has occurred</h2>
3
+ <p>
4
+ <pre><%= @pre_auth.error_response.body[:error_description] %></pre>
5
+ </p>
6
+ </div>
@@ -0,0 +1,37 @@
1
+ <div class="span16">
2
+ <h2>Authorize <%= @pre_auth.client.name %> to use your account?</h2>
3
+ </div>
4
+
5
+ <div class="span16">
6
+ <% if @pre_auth.scopes %>
7
+ <p>
8
+ This application will be able to:
9
+ </p>
10
+ <ul>
11
+ <% @pre_auth.scopes.each do |scope| %>
12
+ <li><%= t scope, :scope => [:doorkeeper, :scopes] %></li>
13
+ <% end %>
14
+ </ul>
15
+ <% end %>
16
+
17
+ <div class="inline_block">
18
+ <%= form_tag oauth_authorization_path, :method => :post do %>
19
+ <%= hidden_field_tag :client_id, @pre_auth.client.id %>
20
+ <%= hidden_field_tag :redirect_uri, @pre_auth.redirect_uri %>
21
+ <%= hidden_field_tag :state, @pre_auth.state %>
22
+ <%= hidden_field_tag :response_type, @pre_auth.response_type %>
23
+ <%= hidden_field_tag :scope, @pre_auth.scope %>
24
+ <%= submit_tag "Authorize", :class => "btn success" %> or
25
+ <% end %>
26
+ </div>
27
+ <div class="inline_block">
28
+ <%= form_tag oauth_authorization_path, :method => :delete do %>
29
+ <%= hidden_field_tag :client_id, @pre_auth.client.id %>
30
+ <%= hidden_field_tag :redirect_uri, @pre_auth.redirect_uri %>
31
+ <%= hidden_field_tag :state, @pre_auth.state %>
32
+ <%= hidden_field_tag :response_type, @pre_auth.response_type %>
33
+ <%= hidden_field_tag :scope, @pre_auth.scope %>
34
+ <%= submit_tag "Deny", :class => "btn" %>
35
+ <% end %>
36
+ </div>
37
+ </div>
@@ -0,0 +1,4 @@
1
+ <div class="span16">
2
+ <h3>Authorization code:</h3>
3
+ <code id="authorization_code"><%= params[:code] %></code>
4
+ </div>