pages_core 3.6.2 → 3.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +0 -1
- data/Rakefile +3 -1
- data/app/assets/javascripts/pages/admin/components/grid_image.jsx +1 -1
- data/app/assets/javascripts/pages/admin/components/image_editor.jsx +5 -5
- data/app/assets/javascripts/pages/admin/components/image_grid.jsx +10 -5
- data/app/assets/javascripts/pages/admin/components/image_uploader.jsx +10 -5
- data/app/assets/javascripts/pages/admin/components/page_tree.jsx +9 -9
- data/app/assets/javascripts/pages/admin/components/page_tree_node.jsx +11 -11
- data/app/assets/javascripts/pages/admin/components/rich_text_area.jsx +5 -4
- data/app/assets/javascripts/pages/admin/components/rich_text_toolbar.jsx +54 -21
- data/app/assets/javascripts/pages/admin/components/toast.jsx +0 -3
- data/app/assets/javascripts/pages/admin/components/toast_store.jsx +1 -1
- data/app/assets/javascripts/pages/admin/features/edit_page.jsx +3 -3
- data/app/assets/javascripts/pages/admin/features/rich_text.jsx +1 -1
- data/app/assets/javascripts/pages/admin/features/tag_editor.jsx +28 -28
- data/app/assets/javascripts/pages/admin/lib/tree.jsx +9 -9
- data/app/assets/javascripts/pages/login_form.jsx +8 -8
- data/app/assets/stylesheets/pages/admin/components/forms.scss +20 -0
- data/app/assets/stylesheets/pages/errors.css +2 -0
- data/app/controller_dummies/admin/admin_controller.rb +2 -0
- data/app/controller_dummies/application_controller.rb +2 -0
- data/app/controller_dummies/attachments_controller.rb +2 -0
- data/app/controller_dummies/frontend_controller.rb +2 -0
- data/app/controller_dummies/images_controller.rb +2 -0
- data/app/controller_dummies/page_files_controller.rb +2 -0
- data/app/controller_dummies/pages_controller.rb +2 -0
- data/app/controller_dummies/sitemaps_controller.rb +2 -0
- data/app/controllers/admin/attachments_controller.rb +4 -2
- data/app/controllers/admin/categories_controller.rb +2 -0
- data/app/controllers/admin/images_controller.rb +10 -5
- data/app/controllers/admin/invites_controller.rb +4 -1
- data/app/controllers/admin/pages_controller.rb +7 -19
- data/app/controllers/admin/password_resets_controller.rb +9 -5
- data/app/controllers/admin/users_controller.rb +10 -4
- data/app/controllers/concerns/pages_core/admin/news_page_controller.rb +13 -11
- data/app/controllers/concerns/pages_core/admin/persistent_params.rb +75 -0
- data/app/controllers/concerns/pages_core/authentication.rb +4 -1
- data/app/controllers/concerns/pages_core/error_renderer.rb +3 -0
- data/app/controllers/concerns/pages_core/error_reporting.rb +36 -0
- data/app/controllers/concerns/pages_core/policies_helper.rb +4 -1
- data/app/controllers/concerns/pages_core/preview_pages_controller.rb +3 -0
- data/app/controllers/concerns/pages_core/process_titler.rb +2 -0
- data/app/controllers/concerns/pages_core/rss_controller.rb +2 -0
- data/app/controllers/concerns/pages_core/static_cache_controller.rb +48 -0
- data/app/controllers/errors_controller.rb +5 -53
- data/app/controllers/pages_core/admin_controller.rb +7 -67
- data/app/controllers/pages_core/attachments_controller.rb +10 -6
- data/app/controllers/pages_core/base_controller.rb +11 -17
- data/app/controllers/pages_core/frontend/page_files_controller.rb +6 -2
- data/app/controllers/pages_core/frontend/pages_controller.rb +9 -15
- data/app/controllers/pages_core/frontend_controller.rb +3 -0
- data/app/controllers/pages_core/images_controller.rb +3 -1
- data/app/controllers/pages_core/sitemaps_controller.rb +11 -5
- data/app/controllers/sessions_controller.rb +2 -0
- data/app/formatters/pages_core/html_formatter.rb +13 -63
- data/app/formatters/pages_core/image_embedder.rb +79 -0
- data/app/formatters/pages_core/link_renderer.rb +2 -0
- data/app/helpers/admin/admin_helper.rb +2 -0
- data/app/helpers/admin/menu_helper.rb +6 -4
- data/app/helpers/admin/pages_helper.rb +4 -57
- data/app/helpers/application_helper.rb +2 -0
- data/app/helpers/frontend_helper.rb +2 -0
- data/app/helpers/pages_core/admin/admin_helper.rb +22 -106
- data/app/helpers/pages_core/admin/content_tabs_helper.rb +28 -0
- data/app/helpers/pages_core/admin/date_range_helper.rb +55 -0
- data/app/helpers/pages_core/admin/form_builder.rb +8 -0
- data/app/helpers/pages_core/admin/image_uploads_helper.rb +48 -0
- data/app/helpers/pages_core/admin/labelled_field_helper.rb +12 -9
- data/app/helpers/pages_core/admin/page_blocks_helper.rb +66 -0
- data/app/helpers/pages_core/admin/page_json_helper.rb +23 -0
- data/app/helpers/pages_core/admin/tag_editor_helper.rb +11 -9
- data/app/helpers/pages_core/application_helper.rb +3 -0
- data/app/helpers/pages_core/attachments_helper.rb +31 -27
- data/app/helpers/pages_core/form_builder.rb +17 -13
- data/app/helpers/pages_core/frontend_helper.rb +3 -3
- data/app/helpers/pages_core/head_tags_helper.rb +7 -2
- data/app/helpers/pages_core/images_helper.rb +3 -0
- data/app/helpers/pages_core/meta_tags_helper.rb +3 -1
- data/app/helpers/pages_core/open_graph_tags_helper.rb +7 -5
- data/app/helpers/pages_core/page_path_helper.rb +24 -3
- data/app/jobs/pages_core/autopublish_job.rb +3 -1
- data/app/jobs/pages_core/sweep_cache_job.rb +4 -2
- data/app/mailers/admin_mailer.rb +4 -14
- data/app/models/attachment.rb +10 -8
- data/app/models/autopublisher.rb +3 -0
- data/app/models/category.rb +3 -1
- data/app/models/concerns/pages_core/has_roles.rb +2 -0
- data/app/models/concerns/pages_core/humanizable_param.rb +9 -6
- data/app/models/concerns/pages_core/page_model/attachments.rb +2 -0
- data/app/models/concerns/pages_core/page_model/autopublishable.rb +2 -0
- data/app/models/concerns/pages_core/page_model/dated_page.rb +11 -11
- data/app/models/concerns/pages_core/page_model/images.rb +5 -1
- data/app/models/concerns/pages_core/page_model/localizable.rb +2 -0
- data/app/models/concerns/pages_core/page_model/pathable.rb +26 -25
- data/app/models/concerns/pages_core/page_model/redirectable.rb +3 -1
- data/app/models/concerns/pages_core/page_model/sortable.rb +6 -5
- data/app/models/concerns/pages_core/page_model/status.rb +2 -0
- data/app/models/concerns/pages_core/page_model/templateable.rb +7 -2
- data/app/models/concerns/pages_core/page_model/tree.rb +27 -20
- data/app/models/concerns/pages_core/sweepable.rb +4 -2
- data/app/models/concerns/pages_core/taggable.rb +8 -2
- data/app/models/image.rb +14 -1
- data/app/models/invite.rb +3 -1
- data/app/models/invite_role.rb +5 -3
- data/app/models/page.rb +4 -3
- data/app/models/page_builder.rb +2 -0
- data/app/models/page_category.rb +3 -1
- data/app/models/page_exporter.rb +22 -9
- data/app/models/page_file.rb +3 -1
- data/app/models/page_image.rb +3 -1
- data/app/models/page_path.rb +13 -5
- data/app/models/password_reset_token.rb +3 -1
- data/app/models/role.rb +8 -5
- data/app/models/tag.rb +8 -6
- data/app/models/tagging.rb +4 -2
- data/app/models/user.rb +7 -4
- data/app/policies/invite_policy.rb +2 -0
- data/app/policies/page_file_policy.rb +2 -0
- data/app/policies/page_image_policy.rb +2 -0
- data/app/policies/page_policy.rb +2 -0
- data/app/policies/policy.rb +2 -0
- data/app/policies/user_policy.rb +2 -0
- data/app/serializers/admin/attachment_serializer.rb +4 -2
- data/app/serializers/admin/image_serializer.rb +4 -2
- data/app/serializers/admin/page_file_serializer.rb +2 -0
- data/app/serializers/admin/page_image_serializer.rb +2 -0
- data/app/serializers/page_export_serializer.rb +2 -0
- data/app/serializers/page_file_export_serializer.rb +2 -0
- data/app/serializers/page_image_export_serializer.rb +2 -0
- data/app/serializers/page_image_serializer.rb +2 -0
- data/app/serializers/page_serializer.rb +2 -0
- data/app/services/pages_core/create_user_service.rb +5 -2
- data/app/services/pages_core/destroy_invite_service.rb +25 -0
- data/app/services/pages_core/invite_service.rb +2 -0
- data/app/views/admin/images/show.json.jbuilder +2 -0
- data/app/views/admin/pages/news.html.erb +1 -1
- data/app/views/errors/500.html.erb +2 -20
- data/app/views/errors/_generic_help.html.erb +1 -1
- data/app/views/feeds/pages.rss.builder +2 -0
- data/app/views/sitemaps/show.xml.builder +2 -0
- data/config/routes.rb +5 -5
- data/db/migrate/20111219033112_create_pages_tables.rb +192 -271
- data/lib/pages_core.rb +10 -0
- data/lib/pages_core/admin_menu_item.rb +3 -0
- data/lib/pages_core/archive_finder.rb +12 -16
- data/lib/pages_core/attachment_embedder.rb +4 -6
- data/lib/pages_core/cache_sweeper.rb +10 -108
- data/lib/pages_core/configuration.rb +2 -0
- data/lib/pages_core/configuration/base.rb +5 -0
- data/lib/pages_core/configuration/pages.rb +4 -2
- data/lib/pages_core/digest_verifier.rb +5 -5
- data/lib/pages_core/engine.rb +52 -0
- data/lib/pages_core/extensions.rb +2 -0
- data/lib/pages_core/extensions/string_extensions.rb +3 -1
- data/lib/pages_core/page_path_constraint.rb +2 -0
- data/lib/pages_core/pages_plugin.rb +3 -1
- data/lib/pages_core/plugin.rb +4 -52
- data/lib/pages_core/pub_sub.rb +2 -0
- data/lib/pages_core/static_cache.rb +26 -0
- data/lib/pages_core/static_cache/null_handler.rb +17 -0
- data/lib/pages_core/static_cache/page_cache_handler.rb +56 -0
- data/lib/pages_core/static_cache/varnish_handler.rb +55 -0
- data/lib/pages_core/templates.rb +5 -3
- data/lib/pages_core/templates/block_configuration.rb +3 -0
- data/lib/pages_core/templates/configuration.rb +5 -1
- data/lib/pages_core/templates/configuration_handler.rb +4 -2
- data/lib/pages_core/templates/configuration_proxy.rb +2 -0
- data/lib/pages_core/templates/controller_actions.rb +2 -0
- data/lib/pages_core/templates/template_configuration.rb +18 -13
- data/lib/pages_core/version.rb +3 -1
- data/lib/rails/generators/pages_core/frontend/frontend_generator.rb +2 -0
- data/lib/rails/generators/pages_core/install/install_generator.rb +3 -7
- data/lib/rails/generators/pages_core/install/templates/active_job_initializer.rb +2 -0
- data/lib/rails/generators/pages_core/install/templates/application_controller.rb +2 -0
- data/lib/rails/generators/pages_core/install/templates/application_helper.rb +2 -0
- data/lib/rails/generators/pages_core/install/templates/delayed_job +1 -0
- data/lib/rails/generators/pages_core/install/templates/delayed_job_initializer.rb +17 -0
- data/lib/rails/generators/pages_core/install/templates/frontend_controller.rb +2 -0
- data/lib/rails/generators/pages_core/install/templates/frontend_helper.rb +2 -0
- data/lib/rails/generators/pages_core/install/templates/gitignore.erb +12 -1
- data/lib/rails/generators/pages_core/install/templates/page_templates_initializer.rb +2 -0
- data/lib/rails/generators/pages_core/install/templates/pages_controller.rb +2 -0
- data/lib/rails/generators/pages_core/install/templates/pages_initializer.rb +2 -6
- data/lib/rails/generators/pages_core/rspec/rspec_generator.rb +18 -14
- data/lib/rails/generators/pages_core/rspec/templates/factories.rb +3 -8
- data/lib/rails/generators/pages_core/rspec/templates/mailer_macros.rb +2 -0
- data/lib/rails/generators/pages_core/rspec/templates/page_templates_spec.rb +26 -0
- data/lib/rails/generators/pages_core/rspec/templates/rails_helper.rb +91 -0
- data/lib/rails/generators/pages_core/rspec/templates/spec_helper.rb +89 -36
- data/lib/tasks/pages.rake +3 -2
- data/lib/tasks/pages/cache.rake +8 -5
- data/lib/tasks/pages/export.rake +3 -1
- data/lib/tasks/pages/page_paths.rake +2 -0
- data/template.rb +2 -0
- metadata +127 -77
- data/app/controllers/concerns/pages_core/domain_based_cache.rb +0 -26
- data/app/views/admin_mailer/error_report.html.erb +0 -70
- data/app/views/errors/500_critical.html.erb +0 -7
- data/app/views/errors/report.html.erb +0 -4
- data/config/removed_migrations.yml +0 -60
- data/db/migrate/20120627033112_rename_textbits.rb +0 -17
- data/db/migrate/20121010055412_drop_removed_tables.rb +0 -81
- data/db/migrate/20130130053932_add_queue_to_delayed_jobs.rb +0 -9
- data/db/migrate/20130303053932_remove_filter_from_localizations.rb +0 -9
- data/db/migrate/20130303160632_remove_imagesets.rb +0 -22
- data/db/migrate/20130303161732_remove_sms_subscribers.rb +0 -14
- data/db/migrate/20130823133208_update_page_redirect_to.rb +0 -10
- data/db/migrate/20140203183900_create_roles.rb +0 -66
- data/db/migrate/20140414150500_change_locale_names.rb +0 -11
- data/db/migrate/20140604142100_remove_openid_url.rb +0 -9
- data/db/migrate/20140920231700_convert_images_to_dis.rb +0 -81
- data/db/migrate/20140922124600_convert_page_files_to_dis.rb +0 -50
- data/db/migrate/20141004003100_create_password_reset_tokens.rb +0 -10
- data/db/migrate/20141006181300_remove_user_cruft.rb +0 -11
- data/db/migrate/20141007173000_create_invites.rb +0 -16
- data/db/migrate/20150204130800_update_delayed_job_table.rb +0 -9
- data/db/migrate/20150401131300_localize_images.rb +0 -38
- data/db/migrate/20150520174300_add_meta_image_to_page.rb +0 -5
- data/db/migrate/20150904164200_add_pinned_to_tags.rb +0 -5
- data/db/migrate/20151002174800_create_page_paths.rb +0 -10
- data/db/migrate/20151021103400_drop_binaries_table.rb +0 -7
- data/db/migrate/20151204151000_remove_page_content_order.rb +0 -5
- data/db/migrate/20160330220900_rename_pages_categories.rb +0 -6
- data/db/migrate/20160405202700_change_localization_limit.rb +0 -9
- data/db/migrate/20170716040500_remove_page_comments.rb +0 -23
- data/db/migrate/20170716213400_remove_sessions.rb +0 -15
- data/db/migrate/20180207134000_add_dates_to_pages.rb +0 -11
- data/db/migrate/20190211154800_create_attachments.rb +0 -73
- data/db/migrate/20190318115000_fix_page_file_ids.rb +0 -34
- data/lib/rails/generators/pages_core/install/templates/cache_sweeper_initializer.rb +0 -6
- data/lib/tasks/pages/update.rake +0 -17
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Admin
|
|
2
4
|
class PasswordResetsController < Admin::AdminController
|
|
3
5
|
before_action :find_password_reset_token, only: %i[show update]
|
|
@@ -42,11 +44,12 @@ module Admin
|
|
|
42
44
|
admin_password_reset_with_token_url(
|
|
43
45
|
password_reset, password_reset.token
|
|
44
46
|
)
|
|
45
|
-
).
|
|
47
|
+
).deliver_later
|
|
46
48
|
end
|
|
47
49
|
|
|
48
50
|
def find_user_by_email(email)
|
|
49
51
|
return unless email
|
|
52
|
+
|
|
50
53
|
User.login_name(params[:username])
|
|
51
54
|
end
|
|
52
55
|
|
|
@@ -60,10 +63,10 @@ module Admin
|
|
|
60
63
|
|
|
61
64
|
def find_password_reset_token
|
|
62
65
|
@password_reset_token = begin
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
66
|
+
PasswordResetToken.find(params[:id])
|
|
67
|
+
rescue ActiveRecord::RecordNotFound
|
|
68
|
+
nil
|
|
69
|
+
end
|
|
67
70
|
|
|
68
71
|
return if valid_token?(@password_reset_token)
|
|
69
72
|
|
|
@@ -73,6 +76,7 @@ module Admin
|
|
|
73
76
|
|
|
74
77
|
def check_for_expired_token
|
|
75
78
|
return unless @password_reset_token.expired?
|
|
79
|
+
|
|
76
80
|
@password_reset_token.destroy
|
|
77
81
|
flash[:notice] = "Your password reset link has expired"
|
|
78
82
|
redirect_to(login_admin_users_url)
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Admin
|
|
2
4
|
class UsersController < Admin::AdminController
|
|
3
5
|
before_action :require_authentication, except: %i[new create login]
|
|
@@ -19,6 +21,7 @@ module Admin
|
|
|
19
21
|
|
|
20
22
|
def login
|
|
21
23
|
return unless logged_in?
|
|
24
|
+
|
|
22
25
|
redirect_to admin_default_url
|
|
23
26
|
end
|
|
24
27
|
|
|
@@ -72,10 +75,11 @@ module Admin
|
|
|
72
75
|
end
|
|
73
76
|
|
|
74
77
|
def user_params
|
|
75
|
-
permitted_params = %i[
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
78
|
+
permitted_params = %i[name email image image_id]
|
|
79
|
+
if policy(User).manage?
|
|
80
|
+
permitted_params += [:activated,
|
|
81
|
+
{ role_names: [] }]
|
|
82
|
+
end
|
|
79
83
|
if User.none? || (@user && policy(@user).change_password?)
|
|
80
84
|
permitted_params += %i[password confirm_password]
|
|
81
85
|
end
|
|
@@ -84,11 +88,13 @@ module Admin
|
|
|
84
88
|
|
|
85
89
|
def user_params_with_roles
|
|
86
90
|
return user_params unless policy(User).manage?
|
|
91
|
+
|
|
87
92
|
{ role_names: [] }.merge(user_params)
|
|
88
93
|
end
|
|
89
94
|
|
|
90
95
|
def require_no_users
|
|
91
96
|
return unless User.any?
|
|
97
|
+
|
|
92
98
|
flash[:error] = "Account holder already exists"
|
|
93
99
|
redirect_to(admin_users_url)
|
|
94
100
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module PagesCore
|
|
2
4
|
module Admin
|
|
3
5
|
module NewsPageController
|
|
@@ -6,26 +8,19 @@ module PagesCore
|
|
|
6
8
|
included do
|
|
7
9
|
before_action :require_news_pages, only: [:news]
|
|
8
10
|
before_action :find_news_pages, only: %i[news new_news]
|
|
11
|
+
before_action :find_year_and_month, only: %i[news]
|
|
9
12
|
end
|
|
10
13
|
|
|
11
14
|
def news
|
|
12
15
|
@archive_finder = archive_finder(@news_pages, @locale)
|
|
13
|
-
|
|
14
|
-
unless params[:year]
|
|
16
|
+
unless @year
|
|
15
17
|
redirect_to(news_admin_pages_path(@locale,
|
|
16
18
|
(@archive_finder.latest_year ||
|
|
17
19
|
Time.zone.now.year)))
|
|
18
20
|
return
|
|
19
21
|
end
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
@month = params[:month]&.to_i
|
|
23
|
-
|
|
24
|
-
@pages = (if @month
|
|
25
|
-
@archive_finder.by_year_and_month(@year, @month)
|
|
26
|
-
else
|
|
27
|
-
@archive_finder.by_year(@year)
|
|
28
|
-
end).paginate(per_page: 50, page: params[:page])
|
|
22
|
+
@pages = @archive_finder.by_year_and_maybe_month(@year, @month)
|
|
23
|
+
.paginate(per_page: 50, page: params[:page])
|
|
29
24
|
end
|
|
30
25
|
|
|
31
26
|
def new_news
|
|
@@ -48,12 +43,19 @@ module PagesCore
|
|
|
48
43
|
.in_locale(@locale)
|
|
49
44
|
.reorder("parent_page_id ASC, position ASC")
|
|
50
45
|
return if @news_pages.any?
|
|
46
|
+
|
|
51
47
|
redirect_to(admin_pages_url(@locale))
|
|
52
48
|
end
|
|
53
49
|
|
|
50
|
+
def find_year_and_month
|
|
51
|
+
@year = params[:year]&.to_i
|
|
52
|
+
@month = params[:month]&.to_i
|
|
53
|
+
end
|
|
54
|
+
|
|
54
55
|
# Redirect away if no news pages has been configured
|
|
55
56
|
def require_news_pages
|
|
56
57
|
return if Page.news_pages.any?
|
|
58
|
+
|
|
57
59
|
redirect_to(admin_pages_url(@locale))
|
|
58
60
|
end
|
|
59
61
|
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module PagesCore
|
|
4
|
+
module Admin
|
|
5
|
+
module PersistentParams
|
|
6
|
+
extend ActiveSupport::Concern
|
|
7
|
+
|
|
8
|
+
included do
|
|
9
|
+
before_action :restore_persistent_params
|
|
10
|
+
after_action :save_persistent_params
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
protected
|
|
14
|
+
|
|
15
|
+
# Loads persistent params from user model and merges with session.
|
|
16
|
+
def restore_persistent_params
|
|
17
|
+
return unless current_user&.persistent_data?
|
|
18
|
+
|
|
19
|
+
session[:persistent_params] ||= {}
|
|
20
|
+
session[:persistent_params] = current_user.persistent_data.merge(
|
|
21
|
+
session[:persistent_params]
|
|
22
|
+
)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Saves persistent params from session to User model if applicable.
|
|
26
|
+
def save_persistent_params
|
|
27
|
+
return unless current_user && session[:persistent_params]
|
|
28
|
+
|
|
29
|
+
current_user.persistent_data = session[:persistent_params]
|
|
30
|
+
current_user.save
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def persistent_params(namespace)
|
|
34
|
+
session[:persistent_params] ||= {}
|
|
35
|
+
session[:persistent_params][namespace] ||= {}
|
|
36
|
+
session[:persistent_params][namespace]
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def coerce_persistent_param(value)
|
|
40
|
+
case value
|
|
41
|
+
when "true"
|
|
42
|
+
true
|
|
43
|
+
when "false"
|
|
44
|
+
false
|
|
45
|
+
else
|
|
46
|
+
value
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def get_persistent_param(namespace, key, default)
|
|
51
|
+
if params.key?(key)
|
|
52
|
+
params[key]
|
|
53
|
+
elsif persistent_params(namespace).key?(key)
|
|
54
|
+
persistent_params(namespace)[key]
|
|
55
|
+
else
|
|
56
|
+
default
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Get a persistent param
|
|
61
|
+
def persistent_param(key, default = nil, options = {})
|
|
62
|
+
key = key.to_s
|
|
63
|
+
namespace = options[:namespace] || self.class.to_s
|
|
64
|
+
|
|
65
|
+
value = coerce_persistent_param(
|
|
66
|
+
get_persistent_param(namespace, key, default)
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
persistent_params(namespace)[key] = value unless value.nil?
|
|
70
|
+
|
|
71
|
+
value
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module PagesCore
|
|
2
4
|
module Authentication
|
|
3
5
|
extend ActiveSupport::Concern
|
|
@@ -33,13 +35,14 @@ module PagesCore
|
|
|
33
35
|
user = User.where(id: session[:current_user_id]).first
|
|
34
36
|
end
|
|
35
37
|
|
|
36
|
-
return unless user
|
|
38
|
+
return unless user&.can_login?
|
|
37
39
|
|
|
38
40
|
authenticate!(user)
|
|
39
41
|
end
|
|
40
42
|
|
|
41
43
|
def finalize_authenticated_session
|
|
42
44
|
return unless current_user
|
|
45
|
+
|
|
43
46
|
session[:current_user_id] = current_user.id
|
|
44
47
|
end
|
|
45
48
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module PagesCore
|
|
2
4
|
module ErrorRenderer
|
|
3
5
|
extend ActiveSupport::Concern
|
|
@@ -23,6 +25,7 @@ module PagesCore
|
|
|
23
25
|
|
|
24
26
|
def error_layout(error, options = {})
|
|
25
27
|
return options[:layout] if options.key?(:layout)
|
|
28
|
+
|
|
26
29
|
if error == 404 && PagesCore.config.error_404_layout?
|
|
27
30
|
PagesCore.config.error_404_layout
|
|
28
31
|
else
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module PagesCore
|
|
4
|
+
module ErrorReporting
|
|
5
|
+
extend ActiveSupport::Concern
|
|
6
|
+
|
|
7
|
+
included do
|
|
8
|
+
before_action :configure_sentry_context
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
protected
|
|
12
|
+
|
|
13
|
+
def configure_sentry_context
|
|
14
|
+
if Object.const_defined?("Sentry")
|
|
15
|
+
Sentry.set_user(current_user_context)
|
|
16
|
+
Sentry.set_tags(locale: params[:locale] || I18n.default_locale.to_s)
|
|
17
|
+
Sentry.set_extras(params: params.to_unsafe_h)
|
|
18
|
+
elsif Object.const_defined?("Raven")
|
|
19
|
+
configure_legacy_sentry_context
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def configure_legacy_sentry_context
|
|
24
|
+
Raven.user_context(current_user_context)
|
|
25
|
+
Raven.tags_context(locale: params[:locale] || I18n.default_locale.to_s)
|
|
26
|
+
Raven.extra_context(params: params.to_unsafe_h)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def current_user_context
|
|
30
|
+
return { user_id: :guest } unless logged_in?
|
|
31
|
+
|
|
32
|
+
{ user_id: current_user.id,
|
|
33
|
+
user_email: current_user.email }
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module PagesCore
|
|
2
4
|
module PoliciesHelper
|
|
3
5
|
extend ActiveSupport::Concern
|
|
@@ -33,7 +35,8 @@ module PagesCore
|
|
|
33
35
|
end
|
|
34
36
|
|
|
35
37
|
def verify_policy(record)
|
|
36
|
-
return true if policy(record).public_send(action_name
|
|
38
|
+
return true if policy(record).public_send("#{action_name}?")
|
|
39
|
+
|
|
37
40
|
raise PagesCore::NotAuthorized
|
|
38
41
|
end
|
|
39
42
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module PagesCore
|
|
2
4
|
module PreviewPagesController
|
|
3
5
|
extend ActiveSupport::Concern
|
|
@@ -8,6 +10,7 @@ module PagesCore
|
|
|
8
10
|
|
|
9
11
|
def preview
|
|
10
12
|
redirect_to(page_url(@locale, @page)) && return unless logged_in?
|
|
13
|
+
|
|
11
14
|
@page.attributes = page_params.merge(
|
|
12
15
|
status: 2,
|
|
13
16
|
published_at: Time.zone.now,
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module PagesCore
|
|
4
|
+
module StaticCacheController
|
|
5
|
+
extend ActiveSupport::Concern
|
|
6
|
+
|
|
7
|
+
module ClassMethods
|
|
8
|
+
def static_cache(*actions, permanent: false)
|
|
9
|
+
return unless perform_caching
|
|
10
|
+
|
|
11
|
+
if permanent
|
|
12
|
+
after_action :cache_static_page_permanently, only: actions
|
|
13
|
+
else
|
|
14
|
+
after_action :cache_static_page, only: actions
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
alias caches_page static_cache
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def disable_static_cache!
|
|
22
|
+
@static_cache_disabled = true
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
def cache_static_page
|
|
28
|
+
return unless static_cache_allowed?
|
|
29
|
+
|
|
30
|
+
PagesCore::StaticCache.handler.cache_page(
|
|
31
|
+
self, request, response
|
|
32
|
+
)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def cache_static_page_permanently
|
|
36
|
+
return unless static_cache_allowed?
|
|
37
|
+
|
|
38
|
+
PagesCore::StaticCache.handler.cache_page_permanently(
|
|
39
|
+
self, request, response
|
|
40
|
+
)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def static_cache_allowed?
|
|
44
|
+
(request.get? || request.head?) && response.status == 200 &&
|
|
45
|
+
perform_caching && !@static_cache_disabled
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -1,13 +1,8 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
class ErrorsController < ::ApplicationController
|
|
2
4
|
layout "errors"
|
|
3
5
|
|
|
4
|
-
def report
|
|
5
|
-
report = decrypt_report(params[:error_report])
|
|
6
|
-
report[:user] = User.find_by(id: report[:user_id]) if report.key?(:user_id)
|
|
7
|
-
|
|
8
|
-
deliver_error_report(report, params[:email], params[:description])
|
|
9
|
-
end
|
|
10
|
-
|
|
11
6
|
def show
|
|
12
7
|
render_error params[:id].to_i
|
|
13
8
|
end
|
|
@@ -30,54 +25,11 @@ class ErrorsController < ::ApplicationController
|
|
|
30
25
|
|
|
31
26
|
def internal_error
|
|
32
27
|
exception = request.env["action_dispatch.exception"]
|
|
33
|
-
if
|
|
34
|
-
render_error 500
|
|
35
|
-
elsif exception.is_a?(PagesCore::NotAuthorized)
|
|
36
|
-
render_error 403
|
|
37
|
-
else
|
|
38
|
-
@report = encrypt_report(error_report(request, exception))
|
|
28
|
+
if exception
|
|
39
29
|
wrapper = ActionDispatch::ExceptionWrapper.new(nil, exception)
|
|
40
30
|
render_error wrapper.status_code
|
|
31
|
+
else
|
|
32
|
+
render_error 500
|
|
41
33
|
end
|
|
42
34
|
end
|
|
43
|
-
|
|
44
|
-
private
|
|
45
|
-
|
|
46
|
-
def deliver_error_report(report, from, description)
|
|
47
|
-
AdminMailer.error_report(report, from, description).deliver_now
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def decrypt_report(str)
|
|
51
|
-
YAML.safe_load(report_encryptor.decrypt_and_verify(str))
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def encrypt_report(report)
|
|
55
|
-
report_encryptor.encrypt_and_sign(report.to_yaml)
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
def error_report(request, exception)
|
|
59
|
-
{ message: exception.to_s,
|
|
60
|
-
url: request.original_url,
|
|
61
|
-
env: request.env.select { |_, v| v.is_a?(String) },
|
|
62
|
-
params: params.to_unsafe_h,
|
|
63
|
-
session: session.to_hash,
|
|
64
|
-
backtrace: exception_backtrace(exception),
|
|
65
|
-
timestamp: Time.now.utc,
|
|
66
|
-
user_id: current_user.try(&:id) }
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
def exception_backtrace(exception)
|
|
70
|
-
Rails.backtrace_cleaner.send(:filter, exception.backtrace)
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
def report_encryptor
|
|
74
|
-
ActiveSupport::MessageEncryptor.new(
|
|
75
|
-
ActiveSupport::CachingKeyGenerator.new(
|
|
76
|
-
ActiveSupport::KeyGenerator.new(
|
|
77
|
-
Rails.application.secrets.secret_key_base,
|
|
78
|
-
iterations: 1000
|
|
79
|
-
)
|
|
80
|
-
).generate_key("encrypted error report")
|
|
81
|
-
)
|
|
82
|
-
end
|
|
83
35
|
end
|