bsm_oa 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +2 -0
  3. data/.travis.yml +5 -0
  4. data/Gemfile +3 -0
  5. data/Gemfile.lock +180 -0
  6. data/Rakefile +21 -0
  7. data/app/controllers/bsm_oa/accounts_controller.rb +12 -0
  8. data/app/controllers/bsm_oa/applications_controller.rb +35 -0
  9. data/app/controllers/bsm_oa/authorizations_controller.rb +80 -0
  10. data/app/controllers/bsm_oa/roles_controller.rb +58 -0
  11. data/app/views/bsm_oa/accounts/show.json.jbuilder +7 -0
  12. data/app/views/bsm_oa/applications/_application.html.erb +15 -0
  13. data/app/views/bsm_oa/applications/_application.json.jbuilder +1 -0
  14. data/app/views/bsm_oa/applications/_inputs.html.erb +11 -0
  15. data/app/views/bsm_oa/applications/create.json.jbuilder +1 -0
  16. data/app/views/bsm_oa/applications/edit.html.erb +10 -0
  17. data/app/views/bsm_oa/applications/index.html.erb +24 -0
  18. data/app/views/bsm_oa/applications/index.json.jbuilder +1 -0
  19. data/app/views/bsm_oa/applications/new.html.erb +10 -0
  20. data/app/views/bsm_oa/applications/show.json.jbuilder +1 -0
  21. data/app/views/bsm_oa/applications/update.json.jbuilder +1 -0
  22. data/app/views/bsm_oa/authorizations/_authorization.json.jbuilder +1 -0
  23. data/app/views/bsm_oa/authorizations/_inputs.html.erb +2 -0
  24. data/app/views/bsm_oa/authorizations/edit.html.erb +10 -0
  25. data/app/views/bsm_oa/authorizations/index.html.erb +0 -0
  26. data/app/views/bsm_oa/authorizations/index.json.jbuilder +1 -0
  27. data/app/views/bsm_oa/authorizations/new.html.erb +11 -0
  28. data/app/views/bsm_oa/authorizations/toggle.js.erb +9 -0
  29. data/app/views/bsm_oa/authorizations/toggle.json.jbuilder +1 -0
  30. data/app/views/bsm_oa/roles/_authorization.html.erb +17 -0
  31. data/app/views/bsm_oa/roles/_inputs.html.erb +5 -0
  32. data/app/views/bsm_oa/roles/_role.html.erb +16 -0
  33. data/app/views/bsm_oa/roles/_role.json.jbuilder +2 -0
  34. data/app/views/bsm_oa/roles/create.json.jbuilder +1 -0
  35. data/app/views/bsm_oa/roles/edit.html.erb +10 -0
  36. data/app/views/bsm_oa/roles/index.html.erb +19 -0
  37. data/app/views/bsm_oa/roles/index.json.jbuilder +2 -0
  38. data/app/views/bsm_oa/roles/new.html.erb +10 -0
  39. data/app/views/bsm_oa/roles/show.html.erb +41 -0
  40. data/app/views/bsm_oa/roles/show.json.jbuilder +1 -0
  41. data/app/views/bsm_oa/roles/update.json.jbuilder +1 -0
  42. data/bsm_oa.gemspec +37 -0
  43. data/config.ru +7 -0
  44. data/db/migrate/20150507113313_bsm_oa_create_doorkeeper_tables.rb +43 -0
  45. data/db/migrate/20150513155732_bsm_oa_create_tables.rb +16 -0
  46. data/lib/bsm_oa/application_mixin.rb +37 -0
  47. data/lib/bsm_oa/authorization.rb +49 -0
  48. data/lib/bsm_oa/config.rb +19 -0
  49. data/lib/bsm_oa/engine.rb +27 -0
  50. data/lib/bsm_oa/role.rb +28 -0
  51. data/lib/bsm_oa/routes.rb +24 -0
  52. data/lib/bsm_oa/version.rb +3 -0
  53. data/lib/bsm_oa.rb +25 -0
  54. data/spec/controllers/bsm_oa/accounts_controller_spec.rb +35 -0
  55. data/spec/controllers/bsm_oa/applications_controller_spec.rb +114 -0
  56. data/spec/controllers/bsm_oa/authorizations_controller_spec.rb +164 -0
  57. data/spec/controllers/bsm_oa/roles_controller_spec.rb +140 -0
  58. data/spec/factories.rb +23 -0
  59. data/spec/internal/config/database.yml +3 -0
  60. data/spec/internal/config/routes.rb +3 -0
  61. data/spec/internal/db/combustion_test.sqlite +0 -0
  62. data/spec/internal/db/schema.rb +13 -0
  63. data/spec/internal/log/.gitignore +1 -0
  64. data/spec/internal/public/favicon.ico +0 -0
  65. data/spec/lib/bsm_oa/application_mixin_spec.rb +48 -0
  66. data/spec/lib/bsm_oa/authorization_spec.rb +53 -0
  67. data/spec/lib/bsm_oa/config_spec.rb +20 -0
  68. data/spec/lib/bsm_oa/role_spec.rb +22 -0
  69. data/spec/spec_helper.rb +64 -0
  70. metadata +372 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b5025b6ecca24e19622010e73f34aeb51ab6c41c
4
+ data.tar.gz: 509fddabc2da4dc37aac6fe107af71dd43dd9885
5
+ SHA512:
6
+ metadata.gz: 2813cf35613dca6b1693216d3ca2f3f304eb28003e92f162d567657e7f6afc1033fa9dc8a33459b1e5bb377168e277ff91e6dfb779ed5e903866fc51e017df34
7
+ data.tar.gz: d497df0bc2375359c9cbcb49edda1034447350370c2bd626d0228d23232071cb20958de605b765776903f2159c6ed8a406ae4c701609722a9b2b6c0c4ade62e4
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ pkg/
2
+ *.sqlite
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2.2
4
+ - 2.1.3
5
+ - 1.9.3
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,180 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ bsm_oa (0.3.1)
5
+ bsm-models
6
+ doorkeeper (~> 3.0.0.rc)
7
+ has_scope (~> 0.6)
8
+ jbuilder (~> 2.2)
9
+ jquery-rails
10
+ railties (>= 4.1, < 5.0)
11
+ responders (~> 2.0)
12
+ simple_form (~> 3.1)
13
+
14
+ GEM
15
+ remote: https://rubygems.org/
16
+ specs:
17
+ abstract (1.0.0)
18
+ actionmailer (4.2.2)
19
+ actionpack (= 4.2.2)
20
+ actionview (= 4.2.2)
21
+ activejob (= 4.2.2)
22
+ mail (~> 2.5, >= 2.5.4)
23
+ rails-dom-testing (~> 1.0, >= 1.0.5)
24
+ actionpack (4.2.2)
25
+ actionview (= 4.2.2)
26
+ activesupport (= 4.2.2)
27
+ rack (~> 1.6)
28
+ rack-test (~> 0.6.2)
29
+ rails-dom-testing (~> 1.0, >= 1.0.5)
30
+ rails-html-sanitizer (~> 1.0, >= 1.0.1)
31
+ actionview (4.2.2)
32
+ activesupport (= 4.2.2)
33
+ builder (~> 3.1)
34
+ erubis (~> 2.7.0)
35
+ rails-dom-testing (~> 1.0, >= 1.0.5)
36
+ rails-html-sanitizer (~> 1.0, >= 1.0.1)
37
+ activejob (4.2.2)
38
+ activesupport (= 4.2.2)
39
+ globalid (>= 0.3.0)
40
+ activemodel (4.2.2)
41
+ activesupport (= 4.2.2)
42
+ builder (~> 3.1)
43
+ activerecord (4.2.2)
44
+ activemodel (= 4.2.2)
45
+ activesupport (= 4.2.2)
46
+ arel (~> 6.0)
47
+ activesupport (4.2.2)
48
+ i18n (~> 0.7)
49
+ json (~> 1.7, >= 1.7.7)
50
+ minitest (~> 5.1)
51
+ thread_safe (~> 0.3, >= 0.3.4)
52
+ tzinfo (~> 1.1)
53
+ arel (6.0.0)
54
+ bsm-models (0.8.2)
55
+ abstract
56
+ activerecord (>= 4.1.0, < 5.0.0)
57
+ railties (>= 4.1.0, < 5.0.0)
58
+ builder (3.2.2)
59
+ combustion (0.5.3)
60
+ activesupport (>= 3.0.0)
61
+ railties (>= 3.0.0)
62
+ thor (>= 0.14.6)
63
+ database_cleaner (1.4.1)
64
+ diff-lcs (1.2.5)
65
+ doorkeeper (3.0.0.rc1)
66
+ railties (>= 3.2)
67
+ erubis (2.7.0)
68
+ factory_girl (4.5.0)
69
+ activesupport (>= 3.0.0)
70
+ faker (1.4.3)
71
+ i18n (~> 0.5)
72
+ globalid (0.3.5)
73
+ activesupport (>= 4.1.0)
74
+ has_scope (0.6.0)
75
+ actionpack (>= 3.2, < 5)
76
+ activesupport (>= 3.2, < 5)
77
+ i18n (0.7.0)
78
+ jbuilder (2.3.0)
79
+ activesupport (>= 3.0.0, < 5)
80
+ multi_json (~> 1.2)
81
+ jquery-rails (4.0.4)
82
+ rails-dom-testing (~> 1.0)
83
+ railties (>= 4.2.0)
84
+ thor (>= 0.14, < 2.0)
85
+ json (1.8.3)
86
+ json_spec (1.1.4)
87
+ multi_json (~> 1.0)
88
+ rspec (>= 2.0, < 4.0)
89
+ loofah (2.0.2)
90
+ nokogiri (>= 1.5.9)
91
+ mail (2.6.3)
92
+ mime-types (>= 1.16, < 3)
93
+ mime-types (2.6.1)
94
+ mini_portile (0.6.2)
95
+ minitest (5.7.0)
96
+ multi_json (1.11.1)
97
+ nokogiri (1.6.6.2)
98
+ mini_portile (~> 0.6.0)
99
+ rack (1.6.2)
100
+ rack-test (0.6.3)
101
+ rack (>= 1.0)
102
+ rails (4.2.2)
103
+ actionmailer (= 4.2.2)
104
+ actionpack (= 4.2.2)
105
+ actionview (= 4.2.2)
106
+ activejob (= 4.2.2)
107
+ activemodel (= 4.2.2)
108
+ activerecord (= 4.2.2)
109
+ activesupport (= 4.2.2)
110
+ bundler (>= 1.3.0, < 2.0)
111
+ railties (= 4.2.2)
112
+ sprockets-rails
113
+ rails-deprecated_sanitizer (1.0.3)
114
+ activesupport (>= 4.2.0.alpha)
115
+ rails-dom-testing (1.0.6)
116
+ activesupport (>= 4.2.0.beta, < 5.0)
117
+ nokogiri (~> 1.6.0)
118
+ rails-deprecated_sanitizer (>= 1.0.1)
119
+ rails-html-sanitizer (1.0.2)
120
+ loofah (~> 2.0)
121
+ railties (4.2.2)
122
+ actionpack (= 4.2.2)
123
+ activesupport (= 4.2.2)
124
+ rake (>= 0.8.7)
125
+ thor (>= 0.18.1, < 2.0)
126
+ rake (10.4.2)
127
+ responders (2.1.0)
128
+ railties (>= 4.2.0, < 5)
129
+ rspec (3.3.0)
130
+ rspec-core (~> 3.3.0)
131
+ rspec-expectations (~> 3.3.0)
132
+ rspec-mocks (~> 3.3.0)
133
+ rspec-core (3.3.1)
134
+ rspec-support (~> 3.3.0)
135
+ rspec-expectations (3.3.0)
136
+ diff-lcs (>= 1.2.0, < 2.0)
137
+ rspec-support (~> 3.3.0)
138
+ rspec-mocks (3.3.0)
139
+ diff-lcs (>= 1.2.0, < 2.0)
140
+ rspec-support (~> 3.3.0)
141
+ rspec-rails (3.3.2)
142
+ actionpack (>= 3.0, < 4.3)
143
+ activesupport (>= 3.0, < 4.3)
144
+ railties (>= 3.0, < 4.3)
145
+ rspec-core (~> 3.3.0)
146
+ rspec-expectations (~> 3.3.0)
147
+ rspec-mocks (~> 3.3.0)
148
+ rspec-support (~> 3.3.0)
149
+ rspec-support (3.3.0)
150
+ shoulda-matchers (2.8.0)
151
+ activesupport (>= 3.0.0)
152
+ simple_form (3.1.0)
153
+ actionpack (~> 4.0)
154
+ activemodel (~> 4.0)
155
+ sprockets (3.2.0)
156
+ rack (~> 1.0)
157
+ sprockets-rails (2.3.1)
158
+ actionpack (>= 3.0)
159
+ activesupport (>= 3.0)
160
+ sprockets (>= 2.8, < 4.0)
161
+ sqlite3 (1.3.10)
162
+ thor (0.19.1)
163
+ thread_safe (0.3.5)
164
+ tzinfo (1.2.2)
165
+ thread_safe (~> 0.1)
166
+
167
+ PLATFORMS
168
+ ruby
169
+
170
+ DEPENDENCIES
171
+ bsm_oa!
172
+ combustion (~> 0.5.3)
173
+ database_cleaner
174
+ factory_girl
175
+ faker
176
+ json_spec
177
+ rails (>= 4.1)
178
+ rspec-rails
179
+ shoulda-matchers
180
+ sqlite3
data/Rakefile ADDED
@@ -0,0 +1,21 @@
1
+ require 'bundler/setup'
2
+ require 'bundler/gem_tasks'
3
+ require 'rspec/core/rake_task'
4
+
5
+ desc 'Default: run specs.'
6
+ task :default => :spec
7
+
8
+ desc "Run all specs"
9
+ RSpec::Core::RakeTask.new(:spec) do |config|
10
+ config.verbose = false
11
+ end
12
+
13
+ desc "Show test app routes"
14
+ task :routes do
15
+ require File.expand_path('../spec/spec_helper', __FILE__)
16
+ require 'action_dispatch/routing/inspector'
17
+
18
+ all_routes = Rails.application.routes.routes
19
+ inspector = ActionDispatch::Routing::RoutesInspector.new(all_routes)
20
+ puts inspector.format(ActionDispatch::Routing::ConsoleFormatter.new, ENV['CONTROLLER'])
21
+ end
@@ -0,0 +1,12 @@
1
+ module BsmOa
2
+ class AccountsController < Doorkeeper::ApplicationController
3
+ before_action :doorkeeper_authorize!
4
+ respond_to :json
5
+
6
+ # GET /me.json
7
+ def show
8
+ @account = BsmOa.config.user_class.find doorkeeper_token.try(:resource_owner_id)
9
+ respond_with @account
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,35 @@
1
+ module BsmOa
2
+ class ApplicationsController < Doorkeeper::ApplicationsController
3
+ respond_to :html, :json
4
+ before_filter :redirect_to_index_on_html, only: [:show]
5
+
6
+ def create
7
+ @application = Doorkeeper::Application.create(application_params)
8
+ location = oauth_application_path(@application) if @application.persisted?
9
+ respond_with @application, location: location
10
+ end
11
+
12
+ def update
13
+ @application.update(application_params)
14
+ respond_with @application, location: oauth_application_path(@application)
15
+ end
16
+
17
+ def destroy
18
+ respond_with @application, location: oauth_applications_path
19
+ end
20
+
21
+ protected
22
+
23
+ def application_params
24
+ params.require(:doorkeeper_application).permit(:name, :redirect_uri, :permissions, :permissions_string, :uid, :secret)
25
+ end
26
+
27
+ def redirect_to_index_on_html
28
+ return unless request.format.html?
29
+
30
+ flash.keep
31
+ redirect_to oauth_applications_path
32
+ end
33
+
34
+ end
35
+ end
@@ -0,0 +1,80 @@
1
+ module BsmOa
2
+ class AuthorizationsController < Doorkeeper::ApplicationController
3
+ respond_to :html
4
+ respond_to :json, except: [:new, :edit]
5
+ respond_to :js, only: [:toggle]
6
+ before_filter :redirect_to_index_on_html, only: [:show]
7
+
8
+ def index
9
+ @authorizations = apply_scopes(resource_scope)
10
+ respond_with @authorizations
11
+ end
12
+
13
+ def show
14
+ @authorization = resource_scope.find params[:id]
15
+ respond_with @authorization
16
+ end
17
+
18
+ def new
19
+ @authorization = resource_scope.new
20
+ respond_with @authorization
21
+ end
22
+
23
+ def edit
24
+ @authorization = resource_scope.find params[:id]
25
+ respond_with @authorization
26
+ end
27
+
28
+ def create
29
+ @authorization = resource_scope.create permitted_params
30
+ respond_with @authorization
31
+ end
32
+
33
+ def update
34
+ @authorization = resource_scope.find params[:id]
35
+ @authorization.update(permitted_params)
36
+ respond_with @authorization, location: bsm_oa_authorization_path(@authorization)
37
+ end
38
+
39
+ def toggle
40
+ @authorization = resource_scope.find params[:id]
41
+ @authorization.toggle(params[:permission])
42
+ respond_with @authorization
43
+ end
44
+
45
+ def destroy
46
+ @authorization = resource_scope.find params[:id]
47
+ @authorization.destroy
48
+ respond_with @authorization, location: bsm_oa_authorization_path(@authorization)
49
+ end
50
+
51
+ protected
52
+
53
+ # @return [User]
54
+ def parent
55
+ @parent ||= BsmOa::Role.find params[:bsm_oa_role_id]
56
+ end
57
+
58
+ # @return [ActiveRecord::Relation]
59
+ def resource_scope
60
+ if params[:bsm_oa_role_id]
61
+ parent.authorizations.all
62
+ else
63
+ BsmOa::Authorization.all
64
+ end
65
+ end
66
+
67
+ def permitted_params
68
+ params.require(:authorization).permit :application_id, :permissions_string, :uid, :secret
69
+ end
70
+
71
+ def redirect_to_index_on_html
72
+ return unless request.format.html?
73
+
74
+ flash.keep
75
+ @authorization ||= resource_scope.find params[:id]
76
+ redirect_to bsm_oa_role_path(@authorization.role)
77
+ end
78
+
79
+ end
80
+ end
@@ -0,0 +1,58 @@
1
+ module BsmOa
2
+ class RolesController < Doorkeeper::ApplicationController
3
+ respond_to :html
4
+ respond_to :json, except: [:new, :edit]
5
+
6
+ has_scope :ordered, default: true, only: [:index]
7
+
8
+ def index
9
+ @roles = apply_scopes(resource_scope)
10
+ respond_with @roles
11
+ end
12
+
13
+ def show
14
+ @role = resource_scope.find params[:id]
15
+ respond_with @role
16
+ end
17
+
18
+ def new
19
+ @role = resource_scope.new
20
+ respond_with @role
21
+ end
22
+
23
+ def create
24
+ @role = resource_scope.create permitted_params
25
+ location = bsm_oa_role_url(@role) if @role.persisted?
26
+ respond_with @role, location: location
27
+ end
28
+
29
+ def edit
30
+ @role = resource_scope.find params[:id]
31
+ respond_with @role
32
+ end
33
+
34
+ def update
35
+ @role = resource_scope.find params[:id]
36
+ @role.update permitted_params
37
+ respond_with @role, location: bsm_oa_role_url(@role)
38
+ end
39
+
40
+ def destroy
41
+ @role = resource_scope.find params[:id]
42
+ @role.destroy
43
+ respond_with @role, location: bsm_oa_roles_url
44
+ end
45
+
46
+ protected
47
+
48
+ # @return [ActiveRecord::Relation]
49
+ def resource_scope
50
+ BsmOa::Role.all
51
+ end
52
+
53
+ def permitted_params
54
+ params.require(:role).permit :name, :description
55
+ end
56
+
57
+ end
58
+ end
@@ -0,0 +1,7 @@
1
+ json.(@account, *BsmOa.config.user_attrs)
2
+
3
+ json.authorizations @account.authorizations.includes(:application) do |auth|
4
+ json.uid auth.application.uid
5
+ json.permissions auth.permissions
6
+ end if @account.respond_to?(:authorizations)
7
+
@@ -0,0 +1,15 @@
1
+ <tr>
2
+ <td><%= application.name %></td>
3
+ <td><%= truncate(application.uid, length: 15) %></td>
4
+ <td><%= truncate(application.secret, length: 15) %></td>
5
+ <td><%= application.redirect_uri %></td>
6
+ <td>
7
+ <%= '&ndash;'.html_safe if application.permissions.empty? %>
8
+ <% application.permissions.each do |pm| %>
9
+ <span class="label label-info"><%= "#{pm}" %></span>
10
+ <% end %>
11
+ <td>
12
+ <%= link_to t('doorkeeper.applications.buttons.edit'), edit_oauth_application_path(application), class: 'btn btn-default btn-xs' %>
13
+ <%= link_to 'Delete', oauth_application_path(application), data: { confirm: 'Are you sure?' }, method: :delete, class: 'btn btn-default btn-xs'%>
14
+ </td>
15
+ </tr>
@@ -0,0 +1 @@
1
+ json.(application, :id, :name, :uid, :secret, :redirect_uri, :scopes)
@@ -0,0 +1,11 @@
1
+ <%= f.input :name, placeholder: "Enter name"%>
2
+
3
+ <%= f.input :uid, placeholder: "Enter application UID"%>
4
+
5
+ <%= f.input :secret, placeholder: "Enter application secret"%>
6
+
7
+ <%= f.input :redirect_uri, placeholder: "Enter redirect url"%>
8
+
9
+ <%= f.input :permissions_string, placeholder: "Enter comma separated permissions"%>
10
+
11
+ <%= f.button :submit %>
@@ -0,0 +1 @@
1
+ json.partial! 'application', application: @application
@@ -0,0 +1,10 @@
1
+ <div class="page-header">
2
+ <div class="pull-right">
3
+ <%= link_to "&larr; Back".html_safe, oauth_applications_path, class: 'btn btn-lg btn-default'%>
4
+ </div>
5
+ <h1>Edit Application</h1>
6
+ </div>
7
+
8
+ <%= simple_form_for @application, url: oauth_application_url(@application) do |f| %>
9
+ <%= render 'inputs', f: f %>
10
+ <% end %>
@@ -0,0 +1,24 @@
1
+ <div class="page-header">
2
+ <div class="pull-right">
3
+ <%= link_to 'New Application', new_oauth_application_path, class: 'btn btn-lg btn-primary' %>
4
+ </div>
5
+ <h1>Applications</h1>
6
+ </div>
7
+
8
+ <table class="table table-hover">
9
+ <thead>
10
+ <tr>
11
+ <th><%= t('.name') %></th>
12
+ <th><%= t('.uid') %></th>
13
+ <th><%= t('.secret') %></th>
14
+ <th><%= t('.callback_url') %></th>
15
+ <th><%= t('.permissions') %></th>
16
+ <th></th>
17
+ </tr>
18
+ </thead>
19
+ <tbody>
20
+ <% @applications.each do |application| %>
21
+ <%= render 'application', application: application %>
22
+ <% end %>
23
+ </tbody>
24
+ </table>
@@ -0,0 +1 @@
1
+ json.array! @applications, :id, :name
@@ -0,0 +1,10 @@
1
+ <div class="page-header">
2
+ <div class="pull-right">
3
+ <%= link_to "&larr; Back".html_safe, oauth_applications_path, class: 'btn btn-lg btn-default'%>
4
+ </div>
5
+ <h1>New Application</h1>
6
+ </div>
7
+
8
+ <%= simple_form_for @application, url: oauth_applications_url do |f| %>
9
+ <%= render 'inputs', f: f %>
10
+ <% end %>
@@ -0,0 +1 @@
1
+ json.partial! 'application', application: @application
@@ -0,0 +1 @@
1
+ json.partial! 'application', application: @application
@@ -0,0 +1 @@
1
+ json.(authorization, :id, :role_id, :application_id, :permissions)
@@ -0,0 +1,2 @@
1
+ <%= f.association :application, as: :select, collection: Doorkeeper::Application.ordered, prompt: true %>
2
+ <%= f.button :submit %>
@@ -0,0 +1,10 @@
1
+ <div class="page-header">
2
+ <div class="pull-right">
3
+ <%= link_to "&larr; Back".html_safe, bsm_oa_role_path(@authorization.role), class: 'btn btn-lg btn-default'%>
4
+ </div>
5
+ <h1>Edit Authorization</h1>
6
+ </div>
7
+
8
+ <%= simple_form_for @authorization, url: bsm_oa_authorization_url do |f| %>
9
+ <%= render 'inputs', f: f %>
10
+ <% end %>
File without changes
@@ -0,0 +1 @@
1
+ json.array! @authorizations, :role_id, :application_id, :permissions
@@ -0,0 +1,11 @@
1
+ <div class="page-header">
2
+ <div class="pull-right">
3
+ <%= link_to "&larr; Back".html_safe, bsm_oa_role_path(@parent), class: 'btn btn-lg btn-default'%>
4
+ </div>
5
+ <h1>New Authorization</h1>
6
+ </div>
7
+
8
+ <%= simple_form_for [@parent, @authorization], url: bsm_oa_role_bsm_oa_authorizations_url do |f| %>
9
+ <%= f.association :application, as: :select, collection: Doorkeeper::Application.ordered, prompt: true %>
10
+ <%= f.button :submit %>
11
+ <% end %>
@@ -0,0 +1,9 @@
1
+ var elem = $("bsm_oa_authorization_<%= @authorization.to_param %>_<%= params[:permission] %>"),
2
+ included = <%= @authorization.permissions.include?(params[:permission]) %>,
3
+ inClass = "label-info",
4
+ exClass = "label-default";
5
+
6
+ elem
7
+ .removeClass(inClass)
8
+ .removeClass(exClass)
9
+ .addClass(included ? inClass : exClass);
@@ -0,0 +1 @@
1
+ json.partial! 'authorization', authorization: @authorization
@@ -0,0 +1,17 @@
1
+ <%- app = auth.application %>
2
+ <tr>
3
+ <td><%= app.name %></td>
4
+ <td>
5
+ <%= '&ndash;'.html_safe if app.permissions.empty? %>
6
+ <% app.permissions.each do |permission| %>
7
+ <%- klass = auth.permissions.include?(permission) ? 'info' : 'default' %>
8
+ <%- path = toggle_authorization_path auth, permission: permission, format: 'js' %>
9
+ <%- elem = "bsm_oa_authorization_#{auth.to_param}_#{permission}" %>
10
+ <%= link_to permission, path, class: "label label-#{klass}", remote: true, method: :put, id: elem %>
11
+ <% end %>
12
+ </td>
13
+ <td>
14
+ <%= link_to 'Edit', edit_authorization_path(auth), class: 'btn btn-default btn-xs' %>
15
+ <%= link_to 'Delete', authorization_path(auth), data: { confirm: 'Are you sure?' }, method: :delete, class: 'btn btn-default btn-xs' %>
16
+ </td>
17
+ </tr>
@@ -0,0 +1,5 @@
1
+ <%= f.input :name, placeholder: "Enter name" %>
2
+ <%= f.input :description, placeholder: "Enter description" %>
3
+
4
+ <%= f.button :submit %>
5
+
@@ -0,0 +1,16 @@
1
+ <tr>
2
+ <td><%= link_to role.name, role %></td>
3
+ <td>
4
+ <%= '&ndash;'.html_safe unless role.description %>
5
+ <%= role.description %></td>
6
+ <td>
7
+ <%= '&ndash;'.html_safe if role.authorizations.empty? %>
8
+ <% role.authorizations.includes(:application).each do |auth| %>
9
+ <span class="label label-info"><%= "#{auth.application.name}" %></span>
10
+ <% end %>
11
+ </td>
12
+ <td>
13
+ <%= link_to 'Edit', edit_role_url(role), class: 'btn btn-default btn-xs' if current_user.admin? %>
14
+ <%= link_to 'Delete', role_path(role), data: { confirm: 'Are you sure?' }, :method => :delete, class: 'btn btn-default btn-xs' %>
15
+ </td>
16
+ </tr>
@@ -0,0 +1,2 @@
1
+ json.(role, :id, :name)
2
+
@@ -0,0 +1 @@
1
+ json.partial! 'role', role: @role
@@ -0,0 +1,10 @@
1
+ <div class="page-header">
2
+ <div class="pull-right">
3
+ <%= link_to "&larr; Back".html_safe, bsm_oa_roles_path, class: 'btn btn-lg btn-default'%>
4
+ </div>
5
+ <h1>Edit Role</h1>
6
+ </div>
7
+
8
+ <%= simple_form_for @role, url: bsm_oa_role_url(@role) do |f| %>
9
+ <%= render 'inputs', f: f %>
10
+ <% end %>
@@ -0,0 +1,19 @@
1
+ <div class="page-header">
2
+ <div class="pull-right">
3
+ <%= link_to 'New Role', new_bsm_oa_role_path, class: 'btn btn-lg btn-primary' %>
4
+ </div>
5
+ <h1>Roles</h1>
6
+ </div>
7
+
8
+ <div class="table-responsive">
9
+ <table class="table table-hover">
10
+ <thead>
11
+ <tr><th>Name</th><th>Description</th><th>Authorizations</th><th>&nbsp;</th></tr>
12
+ </thead>
13
+ <tbody>
14
+ <% @roles.includes(:authorizations).each do |role| -%>
15
+ <%= render 'role', role: role %>
16
+ <% end -%>
17
+ </tbody>
18
+ </table>
19
+ </div>
@@ -0,0 +1,2 @@
1
+ json.array! @roles, :id, :name
2
+
@@ -0,0 +1,10 @@
1
+ <div class="page-header">
2
+ <div class="pull-right">
3
+ <%= link_to "&larr; Back".html_safe, bsm_oa_roles_path, class: 'btn btn-lg btn-default'%>
4
+ </div>
5
+ <h1>New Role</h1>
6
+ </div>
7
+
8
+ <%= simple_form_for @role, url: bsm_oa_roles_path do |f| %>
9
+ <%= render 'inputs', f: f %>
10
+ <% end %>