kadmin 0.3.1 → 0.3.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 (123) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +44 -44
  3. data/Rakefile +146 -146
  4. data/app/assets/javascripts/modular/app.js +1388 -1388
  5. data/app/assets/javascripts/modular/application.js +3 -3
  6. data/app/assets/javascripts/modular/vendor.js +57671 -57671
  7. data/app/assets/stylesheets/kadmin/typeahead-select.scss +2 -0
  8. data/app/assets/stylesheets/modular/app-blue.css +2795 -2795
  9. data/app/assets/stylesheets/modular/app-custom.css +2795 -2795
  10. data/app/assets/stylesheets/modular/app-green.css +2795 -2795
  11. data/app/assets/stylesheets/modular/app-orange.css +2795 -2795
  12. data/app/assets/stylesheets/modular/app-purple.css +2795 -2795
  13. data/app/assets/stylesheets/modular/app-red.css +2795 -2795
  14. data/app/assets/stylesheets/modular/app-seagreen.css +2795 -2795
  15. data/app/assets/stylesheets/modular/app.css +2795 -2795
  16. data/app/assets/stylesheets/modular/custom.css +51 -19
  17. data/app/assets/stylesheets/modular/vendor.css +12999 -12999
  18. data/app/controllers/kadmin/application_controller.rb +64 -64
  19. data/app/controllers/kadmin/auth_controller.rb +98 -98
  20. data/app/controllers/kadmin/concerns/authorized_user.rb +67 -67
  21. data/app/controllers/kadmin/dash_controller.rb +19 -19
  22. data/app/decorators/kadmin/finder_decorator.rb +50 -50
  23. data/app/decorators/kadmin/pager_decorator.rb +33 -33
  24. data/app/helpers/kadmin/alert_helper.rb +59 -59
  25. data/app/helpers/kadmin/application_helper.rb +4 -4
  26. data/app/helpers/kadmin/bootstrap_helper.rb +23 -23
  27. data/app/helpers/kadmin/form_builder.rb +9 -9
  28. data/app/helpers/kadmin/forms/inverted_check_box.rb +10 -10
  29. data/app/helpers/kadmin/navigation_helper.rb +28 -28
  30. data/app/helpers/kadmin/pagination_helper.rb +95 -95
  31. data/app/views/kadmin/auth/login.html.erb +4 -4
  32. data/app/views/kadmin/components/_finder.html.erb +14 -18
  33. data/app/views/kadmin/components/finder/_empty.html.erb +3 -3
  34. data/app/views/kadmin/components/finder/_form.erb +10 -10
  35. data/app/views/kadmin/components/finder/_header.html.erb +14 -11
  36. data/app/views/kadmin/dash/index.html.erb +5 -5
  37. data/app/views/kadmin/error.html.erb +5 -5
  38. data/app/views/kadmin/helpers/_alerts.html.erb +4 -4
  39. data/app/views/kadmin/helpers/_form_errors.html.erb +10 -10
  40. data/app/views/layouts/modular/application.html.erb +134 -132
  41. data/config/initializers/action_view.rb +2 -2
  42. data/config/initializers/assets.rb +5 -5
  43. data/config/locales/de.yml +25 -25
  44. data/config/locales/en.yml +24 -24
  45. data/config/routes.rb +12 -12
  46. data/lib/kadmin.rb +22 -22
  47. data/lib/kadmin/auth.rb +31 -31
  48. data/lib/kadmin/auth/configuration.rb +66 -66
  49. data/lib/kadmin/auth/unauthorized_error.rb +14 -14
  50. data/lib/kadmin/auth/user.rb +15 -15
  51. data/lib/kadmin/auth/user_store.rb +21 -21
  52. data/lib/kadmin/configuration.rb +18 -18
  53. data/lib/kadmin/engine.rb +15 -15
  54. data/lib/kadmin/error.rb +7 -7
  55. data/lib/kadmin/errors/authorization.rb +15 -15
  56. data/lib/kadmin/finder.rb +66 -66
  57. data/lib/kadmin/form.rb +179 -179
  58. data/lib/kadmin/pager.rb +93 -93
  59. data/lib/kadmin/version.rb +3 -3
  60. data/test/dummy/README.rdoc +28 -28
  61. data/test/dummy/Rakefile +6 -6
  62. data/test/dummy/app/assets/javascripts/application.js +13 -13
  63. data/test/dummy/app/assets/stylesheets/application.css +15 -15
  64. data/test/dummy/app/controllers/admin/application_controller.rb +11 -11
  65. data/test/dummy/app/controllers/admin/people_controller.rb +89 -89
  66. data/test/dummy/app/controllers/admin_controller.rb +4 -4
  67. data/test/dummy/app/controllers/application_controller.rb +5 -5
  68. data/test/dummy/app/controllers/authorized_controller.rb +8 -8
  69. data/test/dummy/app/helpers/application_helper.rb +2 -2
  70. data/test/dummy/app/models/group.rb +8 -8
  71. data/test/dummy/app/models/group_person.rb +6 -6
  72. data/test/dummy/app/models/person.rb +20 -20
  73. data/test/dummy/app/views/admin/index.html.erb +1 -1
  74. data/test/dummy/app/views/admin/people/_form.html.erb +34 -34
  75. data/test/dummy/app/views/admin/people/_table.html.erb +33 -33
  76. data/test/dummy/app/views/admin/people/edit.html.erb +4 -4
  77. data/test/dummy/app/views/admin/people/index.html.erb +3 -3
  78. data/test/dummy/app/views/admin/people/new.html.erb +5 -5
  79. data/test/dummy/app/views/admin/people/show.html.erb +3 -3
  80. data/test/dummy/app/views/authorized/index.html.erb +1 -1
  81. data/test/dummy/app/views/layouts/application.html.erb +14 -14
  82. data/test/dummy/bin/bundle +3 -3
  83. data/test/dummy/bin/rails +4 -4
  84. data/test/dummy/bin/rake +4 -4
  85. data/test/dummy/bin/setup +29 -29
  86. data/test/dummy/config.ru +4 -4
  87. data/test/dummy/config/application.rb +39 -39
  88. data/test/dummy/config/boot.rb +5 -5
  89. data/test/dummy/config/database.yml +22 -22
  90. data/test/dummy/config/environment.rb +5 -5
  91. data/test/dummy/config/environments/development.rb +41 -41
  92. data/test/dummy/config/environments/production.rb +79 -79
  93. data/test/dummy/config/environments/test.rb +42 -42
  94. data/test/dummy/config/initializers/assets.rb +10 -10
  95. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -7
  96. data/test/dummy/config/initializers/cookies_serializer.rb +3 -3
  97. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -4
  98. data/test/dummy/config/initializers/inflections.rb +16 -16
  99. data/test/dummy/config/initializers/kadmin.rb +24 -24
  100. data/test/dummy/config/initializers/mime_types.rb +4 -4
  101. data/test/dummy/config/initializers/session_store.rb +3 -3
  102. data/test/dummy/config/initializers/wrap_parameters.rb +14 -14
  103. data/test/dummy/config/locales/en.yml +17 -17
  104. data/test/dummy/config/routes.rb +13 -13
  105. data/test/dummy/config/secrets.yml +22 -22
  106. data/test/dummy/db/migrate/20161006114509_create_people.rb +11 -11
  107. data/test/dummy/db/migrate/20161006134459_create_groups.rb +11 -11
  108. data/test/dummy/db/migrate/20161006134746_create_group_people.rb +11 -11
  109. data/test/dummy/db/schema.rb +43 -43
  110. data/test/dummy/lib/forms/group_form.rb +16 -16
  111. data/test/dummy/lib/forms/person_form.rb +19 -19
  112. data/test/dummy/public/404.html +67 -67
  113. data/test/dummy/public/422.html +67 -67
  114. data/test/dummy/public/500.html +66 -66
  115. data/test/dummy/test/fixtures/children.yml +11 -11
  116. data/test/dummy/test/fixtures/group_people.yml +11 -11
  117. data/test/dummy/test/fixtures/groups.yml +11 -11
  118. data/test/dummy/test/fixtures/people.yml +11 -11
  119. data/test/dummy/test/models/group_person_test.rb +7 -7
  120. data/test/dummy/test/models/group_test.rb +7 -7
  121. data/test/kadmin/form_test.rb +6 -6
  122. data/test/test_helper.rb +32 -32
  123. metadata +54 -53
@@ -1,64 +1,64 @@
1
- module Kadmin
2
- class ApplicationController < ActionController::Base
3
- layout 'modular/application'
4
-
5
- helper Kadmin::ApplicationHelper
6
- helper Kadmin::BootstrapHelper
7
- helper Kadmin::AlertHelper
8
- helper Kadmin::NavigationHelper
9
- helper Kadmin::PaginationHelper
10
-
11
- include Kadmin::Concerns::AuthorizedUser
12
-
13
- before_action :authorize
14
- before_action :set_navbar_links
15
- before_action :set_default_format
16
-
17
- # @!group Error Handling
18
-
19
- unless defined?(BetterErrors)
20
- rescue_from StandardError, with: :handle_unexpected_error
21
- rescue_from ActiveRecord::RecordNotFound, with: :not_found
22
- rescue_from ActionController::ParameterMissing, with: :params_missing
23
- end
24
-
25
- def params_missing(error)
26
- handle_error(error, title: I18n.t('kadmin.errors.params_missing'), status: :bad_request)
27
- end
28
-
29
- def not_found(error)
30
- handle_error(error, title: I18n.t('kadmin.errors.not_found'), status: :not_found)
31
- end
32
-
33
- def handle_unexpected_error(error)
34
- Rails.logger.error(error)
35
- handle_error(error, title: I18n.t('kadmin.errors.unexpected'), message: I18n.t('kadmin.errors.unexpected_message'))
36
- end
37
-
38
- def handle_error(error, options = {})
39
- options = {
40
- title: error.try(:title) || error.class.name,
41
- message: error.message,
42
- status: :internal_server_error
43
- }.merge(options)
44
- render 'kadmin/error', status: options[:status], locals: options
45
- end
46
-
47
- # @!endgroup
48
-
49
- # @!group Helpers
50
-
51
- # Overload in the sub-controllers to set up the links in the layout
52
- def set_navbar_links
53
- @layout_navbar_links = []
54
- end
55
- protected :set_navbar_links
56
-
57
- def set_default_format
58
- params[:format] = 'html' if params[:format].blank?
59
- end
60
- protected :set_default_format
61
-
62
- # @!endgroup
63
- end
64
- end
1
+ module Kadmin
2
+ class ApplicationController < ActionController::Base
3
+ layout 'modular/application'
4
+
5
+ helper Kadmin::ApplicationHelper
6
+ helper Kadmin::BootstrapHelper
7
+ helper Kadmin::AlertHelper
8
+ helper Kadmin::NavigationHelper
9
+ helper Kadmin::PaginationHelper
10
+
11
+ include Kadmin::Concerns::AuthorizedUser
12
+
13
+ before_action :authorize
14
+ before_action :set_navbar_links
15
+ before_action :set_default_format
16
+
17
+ # @!group Error Handling
18
+
19
+ unless defined?(BetterErrors)
20
+ rescue_from StandardError, with: :handle_unexpected_error
21
+ rescue_from ActiveRecord::RecordNotFound, with: :not_found
22
+ rescue_from ActionController::ParameterMissing, with: :params_missing
23
+ end
24
+
25
+ def params_missing(error)
26
+ handle_error(error, title: I18n.t('kadmin.errors.params_missing'), status: :bad_request)
27
+ end
28
+
29
+ def not_found(error)
30
+ handle_error(error, title: I18n.t('kadmin.errors.not_found'), status: :not_found)
31
+ end
32
+
33
+ def handle_unexpected_error(error)
34
+ Rails.logger.error(error)
35
+ handle_error(error, title: I18n.t('kadmin.errors.unexpected'), message: I18n.t('kadmin.errors.unexpected_message'))
36
+ end
37
+
38
+ def handle_error(error, options = {})
39
+ options = {
40
+ title: error.try(:title) || error.class.name,
41
+ message: error.message,
42
+ status: :internal_server_error
43
+ }.merge(options)
44
+ render 'kadmin/error', status: options[:status], locals: options
45
+ end
46
+
47
+ # @!endgroup
48
+
49
+ # @!group Helpers
50
+
51
+ # Overload in the sub-controllers to set up the links in the layout
52
+ def set_navbar_links
53
+ @layout_navbar_links = []
54
+ end
55
+ protected :set_navbar_links
56
+
57
+ def set_default_format
58
+ params[:format] = 'html' if params[:format].blank?
59
+ end
60
+ protected :set_default_format
61
+
62
+ # @!endgroup
63
+ end
64
+ end
@@ -1,98 +1,98 @@
1
- module Kadmin
2
- class AuthController < Kadmin::ApplicationController
3
- SESSION_KEY = 'kadmin.user'.freeze
4
-
5
- # Don't try to authenticate user on the authentication controller...
6
- skip_before_action :authorize
7
-
8
- # @!group Endpoints
9
- # GET /auth/login
10
- def login
11
- render 'kadmin/auth/login'
12
- end
13
-
14
- # GET /auth/logout
15
- # DELETE /auth/logout
16
- def logout
17
- session.delete(SESSION_KEY)
18
- redirect_to action: :login
19
- end
20
-
21
- # GET /auth/:provider/callback
22
- # POST /auth/:provider/callback
23
- def save
24
- auth_hash = request.env['omniauth.auth']
25
-
26
- if auth_hash.blank?
27
- Kadmin.logger.error('No authorization hash provided')
28
- flash.alert = I18n.t('kadmin.auth.error')
29
- redirect_to action: :login
30
- return
31
- end
32
-
33
- email = auth_hash.dig('info', 'email')
34
- if Kadmin::Auth.users.exists?(email)
35
- session[SESSION_KEY] = email
36
- redirect_url = request.env['omniauth.origin']
37
- redirect_url = Kadmin.config.mount_path unless valid_redirect_url?(redirect_url)
38
- else
39
- flash.alert = I18n.t('kadmin.auth.unauthorized_message')
40
- redirect_url = url_for(action: :login)
41
- end
42
-
43
- redirect_to redirect_url
44
- end
45
-
46
- # GET /auth/failure
47
- def failure
48
- flash.alert = params[:message]
49
- redirect_to action: :login
50
- end
51
-
52
- def unauthorized
53
- render 'kadmin/error', format: ['html'], locals: {
54
- title: I18n.t('kadmin.auth.unauthorized'),
55
- message: I18n.t('kadmin.auth.unauthorized_message')
56
- }
57
- end
58
-
59
- # @!endgroup
60
-
61
- # @!group Helpers
62
-
63
- def valid_redirect_url?(url)
64
- valid = false
65
-
66
- unless url.blank?
67
- paths = [url_for(action: :login), url_for(action: :logout)]
68
- valid = paths.none? { |invalid| url == invalid }
69
- end
70
-
71
- return valid
72
- end
73
- protected :valid_redirect_url?
74
-
75
- def omniauth_provider_link
76
- auth_prefix = "#{Kadmin.config.mount_path}/auth"
77
- provider_link = "#{auth_prefix}/#{Kadmin::Auth.omniauth_provider}"
78
- origin = params[:origin]
79
-
80
- # if the referer is a auth route, then we risk ending in an endless loop
81
- if origin.blank?
82
- referer = request.referer
83
- if referer.blank?
84
- origin = Kadmin.config.mount_path
85
- else
86
- uri = URI(referer)
87
- origin = referer unless uri&.path&.start_with?(auth_prefix)
88
- end
89
- end
90
-
91
- provider_link = "#{provider_link}?origin=#{CGI.escape(origin)}" unless origin.blank?
92
- return provider_link
93
- end
94
- helper_method :omniauth_provider_link
95
-
96
- # @!endgroup
97
- end
98
- end
1
+ module Kadmin
2
+ class AuthController < Kadmin::ApplicationController
3
+ SESSION_KEY = 'kadmin.user'.freeze
4
+
5
+ # Don't try to authenticate user on the authentication controller...
6
+ skip_before_action :authorize
7
+
8
+ # @!group Endpoints
9
+ # GET /auth/login
10
+ def login
11
+ render 'kadmin/auth/login'
12
+ end
13
+
14
+ # GET /auth/logout
15
+ # DELETE /auth/logout
16
+ def logout
17
+ session.delete(SESSION_KEY)
18
+ redirect_to action: :login
19
+ end
20
+
21
+ # GET /auth/:provider/callback
22
+ # POST /auth/:provider/callback
23
+ def save
24
+ auth_hash = request.env['omniauth.auth']
25
+
26
+ if auth_hash.blank?
27
+ Kadmin.logger.error('No authorization hash provided')
28
+ flash.alert = I18n.t('kadmin.auth.error')
29
+ redirect_to action: :login
30
+ return
31
+ end
32
+
33
+ email = auth_hash.dig('info', 'email')
34
+ if Kadmin::Auth.users.exists?(email)
35
+ session[SESSION_KEY] = email
36
+ redirect_url = request.env['omniauth.origin']
37
+ redirect_url = Kadmin.config.mount_path unless valid_redirect_url?(redirect_url)
38
+ else
39
+ flash.alert = I18n.t('kadmin.auth.unauthorized_message')
40
+ redirect_url = url_for(action: :login)
41
+ end
42
+
43
+ redirect_to redirect_url
44
+ end
45
+
46
+ # GET /auth/failure
47
+ def failure
48
+ flash.alert = params[:message]
49
+ redirect_to action: :login
50
+ end
51
+
52
+ def unauthorized
53
+ render 'kadmin/error', format: ['html'], locals: {
54
+ title: I18n.t('kadmin.auth.unauthorized'),
55
+ message: I18n.t('kadmin.auth.unauthorized_message')
56
+ }
57
+ end
58
+
59
+ # @!endgroup
60
+
61
+ # @!group Helpers
62
+
63
+ def valid_redirect_url?(url)
64
+ valid = false
65
+
66
+ unless url.blank?
67
+ paths = [url_for(action: :login), url_for(action: :logout)]
68
+ valid = paths.none? { |invalid| url == invalid }
69
+ end
70
+
71
+ return valid
72
+ end
73
+ protected :valid_redirect_url?
74
+
75
+ def omniauth_provider_link
76
+ auth_prefix = "#{Kadmin.config.mount_path}/auth"
77
+ provider_link = "#{auth_prefix}/#{Kadmin::Auth.omniauth_provider}"
78
+ origin = params[:origin]
79
+
80
+ # if the referer is a auth route, then we risk ending in an endless loop
81
+ if origin.blank?
82
+ referer = request.referer
83
+ if referer.blank?
84
+ origin = Kadmin.config.mount_path
85
+ else
86
+ uri = URI(referer)
87
+ origin = referer unless uri&.path&.start_with?(auth_prefix)
88
+ end
89
+ end
90
+
91
+ provider_link = "#{provider_link}?origin=#{CGI.escape(origin)}" unless origin.blank?
92
+ return provider_link
93
+ end
94
+ helper_method :omniauth_provider_link
95
+
96
+ # @!endgroup
97
+ end
98
+ end
@@ -1,67 +1,67 @@
1
- module Kadmin
2
- module Concerns
3
- module AuthorizedUser
4
- extend ActiveSupport::Concern
5
-
6
- included do
7
- if respond_to?(:helper_method)
8
- helper_method :current_user
9
- helper_method :authorized_user
10
- helper_method :logged_in?
11
- helper_method :authorized?
12
- end
13
- end
14
-
15
- # @!group before_action
16
-
17
- # Add as a before_action whenever you wish to authorize a user for a particular
18
- # resource. The app provided user model will perform authorization of the resource.
19
- # @see Kadmin::Auth::User
20
- # @example
21
- # before_action :authorize, except: [:index] # exclude index from authorization
22
- def authorize
23
- if Kadmin::Auth.config.enabled?
24
- if logged_in?
25
- unless authorized?
26
- redirect_to Kadmin::Engine.routes.url_helpers.auth_unauthorized_path
27
- end
28
- else
29
- redirect_to Kadmin::Engine.routes.url_helpers.auth_login_path(origin: request.path)
30
- end
31
- end
32
- end
33
-
34
- # @!endgroup
35
-
36
- # @!group View Helpers
37
-
38
- # @return [String] the current user identifier. Historically called current_user
39
- def current_user
40
- session[Kadmin::AuthController::SESSION_KEY]
41
- end
42
-
43
- # @see Kadmin::Concerns::AuthorizedUser#current_user
44
- # @return [Kadmin::Auth::User] instance of the user identified by current_user
45
- def authorized_user
46
- return Kadmin::Auth.users.get(current_user)
47
- end
48
-
49
- # @!endgroup
50
-
51
- # @!group Helpers
52
-
53
- # @return [Boolean] true if the user is logged in, false otherwise
54
- def logged_in?
55
- return current_user.present?
56
- end
57
-
58
- # @see Kadmin::Auth::User
59
- # @return [Boolean] true if the user is authorized in, false otherwise
60
- def authorized?
61
- return authorized_user&.authorized?(request)
62
- end
63
-
64
- # @!endgroup
65
- end
66
- end
67
- end
1
+ module Kadmin
2
+ module Concerns
3
+ module AuthorizedUser
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ if respond_to?(:helper_method)
8
+ helper_method :current_user
9
+ helper_method :authorized_user
10
+ helper_method :logged_in?
11
+ helper_method :authorized?
12
+ end
13
+ end
14
+
15
+ # @!group before_action
16
+
17
+ # Add as a before_action whenever you wish to authorize a user for a particular
18
+ # resource. The app provided user model will perform authorization of the resource.
19
+ # @see Kadmin::Auth::User
20
+ # @example
21
+ # before_action :authorize, except: [:index] # exclude index from authorization
22
+ def authorize
23
+ if Kadmin::Auth.config.enabled?
24
+ if logged_in?
25
+ unless authorized?
26
+ redirect_to Kadmin::Engine.routes.url_helpers.auth_unauthorized_path
27
+ end
28
+ else
29
+ redirect_to Kadmin::Engine.routes.url_helpers.auth_login_path(origin: request.path)
30
+ end
31
+ end
32
+ end
33
+
34
+ # @!endgroup
35
+
36
+ # @!group View Helpers
37
+
38
+ # @return [String] the current user identifier. Historically called current_user
39
+ def current_user
40
+ session[Kadmin::AuthController::SESSION_KEY]
41
+ end
42
+
43
+ # @see Kadmin::Concerns::AuthorizedUser#current_user
44
+ # @return [Kadmin::Auth::User] instance of the user identified by current_user
45
+ def authorized_user
46
+ return Kadmin::Auth.users.get(current_user)
47
+ end
48
+
49
+ # @!endgroup
50
+
51
+ # @!group Helpers
52
+
53
+ # @return [Boolean] true if the user is logged in, false otherwise
54
+ def logged_in?
55
+ return current_user.present?
56
+ end
57
+
58
+ # @see Kadmin::Auth::User
59
+ # @return [Boolean] true if the user is authorized in, false otherwise
60
+ def authorized?
61
+ return authorized_user&.authorized?(request)
62
+ end
63
+
64
+ # @!endgroup
65
+ end
66
+ end
67
+ end