pages_core 3.6.2 → 3.8.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.
- checksums.yaml +4 -4
- data/README.md +1 -3
- data/Rakefile +3 -1
- data/app/assets/builds/pages_core/admin-dist.js +55 -0
- data/app/assets/stylesheets/pages/admin/components/forms.scss +20 -0
- data/app/assets/stylesheets/pages/admin/components/image_editor.scss +1 -0
- data/app/assets/stylesheets/pages/admin/components/image_grid.scss +33 -5
- data/app/assets/stylesheets/pages/admin/components/layout.scss +2 -1
- data/app/assets/stylesheets/pages/admin/components/login.scss +6 -0
- data/app/assets/stylesheets/pages/admin/components/tabs.scss +5 -0
- data/app/assets/stylesheets/pages/admin/components/tag_editor.scss +13 -7
- data/app/assets/stylesheets/pages/admin/controllers/pages.scss +13 -5
- data/app/assets/stylesheets/pages/admin.scss +0 -1
- data/app/assets/stylesheets/pages/errors.css +2 -0
- data/app/controller_dummies/admin/admin_controller.rb +3 -1
- data/app/controller_dummies/application_controller.rb +3 -1
- data/app/controller_dummies/attachments_controller.rb +3 -1
- data/app/controller_dummies/frontend_controller.rb +3 -1
- data/app/controller_dummies/images_controller.rb +3 -1
- data/app/controller_dummies/page_files_controller.rb +3 -1
- data/app/controller_dummies/pages_controller.rb +3 -1
- data/app/controller_dummies/sitemaps_controller.rb +3 -1
- data/app/controllers/admin/attachments_controller.rb +5 -3
- data/app/controllers/admin/categories_controller.rb +2 -0
- data/app/controllers/admin/images_controller.rb +16 -8
- 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 +13 -5
- 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 +8 -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 +14 -17
- 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 +3 -1
- 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 +4 -2
- 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 +3 -1
- data/app/helpers/frontend_helper.rb +3 -1
- data/app/helpers/pages_core/admin/admin_helper.rb +22 -106
- data/app/helpers/pages_core/admin/content_tabs_helper.rb +31 -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 +47 -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 -39
- 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 +18 -22
- 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 +8 -6
- data/app/helpers/pages_core/page_path_helper.rb +24 -3
- data/app/javascript/admin-dist.js +2 -0
- data/app/javascript/components/Attachments/Attachment.jsx +121 -0
- data/app/javascript/components/Attachments/AttachmentEditor.jsx +116 -0
- data/app/javascript/components/Attachments/Placeholder.jsx +10 -0
- data/app/javascript/components/Attachments.jsx +165 -0
- data/app/{assets/javascripts/pages/admin/components/date_range_select.jsx → javascript/components/DateRangeSelect.jsx} +16 -5
- data/app/javascript/components/EditableImage.jsx +61 -0
- data/app/javascript/components/FileUploadButton.jsx +47 -0
- data/app/{assets/javascripts/pages/admin/components/focal_point.jsx → javascript/components/ImageCropper/FocalPoint.jsx} +12 -1
- data/app/javascript/components/ImageCropper/Image.jsx +65 -0
- data/app/javascript/components/ImageCropper/Toolbar.jsx +73 -0
- data/app/javascript/components/ImageCropper/useCrop.js +199 -0
- data/app/javascript/components/ImageCropper.jsx +90 -0
- data/app/javascript/components/ImageEditor/Form.jsx +98 -0
- data/app/javascript/components/ImageEditor.jsx +62 -0
- data/app/javascript/components/ImageGrid/DragElement.jsx +30 -0
- data/app/javascript/components/ImageGrid/FilePlaceholder.jsx +9 -0
- data/app/javascript/components/ImageGrid/GridImage.jsx +103 -0
- data/app/javascript/components/ImageGrid/Placeholder.jsx +23 -0
- data/app/javascript/components/ImageGrid.jsx +257 -0
- data/app/javascript/components/ImageUploader.jsx +171 -0
- data/app/{assets/javascripts/pages/admin/components/modal.jsx → javascript/components/Modal.jsx} +13 -2
- data/app/{assets/javascripts/pages/admin/components/page_dates.jsx → javascript/components/PageDates.jsx} +11 -1
- data/app/{assets/javascripts/pages/admin/components/page_files.jsx → javascript/components/PageFiles.jsx} +11 -2
- data/app/{assets/javascripts/pages/admin/components/page_images.jsx → javascript/components/PageImages.jsx} +11 -2
- data/app/{assets/javascripts/pages/admin/components/page_tree_store.jsx → javascript/components/PageTree.jsx} +127 -137
- data/app/{assets/javascripts/pages/admin/components/page_tree.jsx → javascript/components/PageTreeDraggable.jsx} +44 -38
- data/app/{assets/javascripts/pages/admin/components/page_tree_node.jsx → javascript/components/PageTreeNode.jsx} +46 -31
- data/app/javascript/components/RichTextArea.jsx +213 -0
- data/app/javascript/components/RichTextToolbarButton.jsx +20 -0
- data/app/javascript/components/TagEditor/AddTagForm.jsx +42 -0
- data/app/javascript/components/TagEditor/Tag.jsx +32 -0
- data/app/javascript/components/TagEditor.jsx +61 -0
- data/app/javascript/components/Toast.jsx +72 -0
- data/app/javascript/components/drag/draggedOrder.js +51 -0
- data/app/javascript/components/drag/useDragCollection.js +84 -0
- data/app/javascript/components/drag/useDragUploader.js +112 -0
- data/app/javascript/components/drag/useDraggable.js +17 -0
- data/app/javascript/components/drag.js +6 -0
- data/app/javascript/components.js +15 -0
- data/app/javascript/controllers/EditPageController.js +20 -0
- data/app/javascript/controllers/LoginController.js +29 -0
- data/app/javascript/controllers/MainController.js +65 -0
- data/app/javascript/controllers/PageOptionsController.js +62 -0
- data/app/javascript/features/RichText.jsx +34 -0
- data/app/javascript/hooks.js +2 -0
- data/app/javascript/index.js +38 -0
- data/app/{assets/javascripts/pages/admin/lib/tree.jsx → javascript/lib/Tree.js} +64 -63
- data/app/javascript/lib/copyToClipboard.js +13 -0
- data/app/javascript/lib/readyHandler.js +22 -0
- data/app/javascript/lib/request.js +36 -0
- data/app/javascript/stores/ModalStore.jsx +12 -0
- data/app/javascript/stores/ToastStore.jsx +14 -0
- data/app/javascript/stores.js +2 -0
- 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 +8 -2
- 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/searchable.rb +19 -0
- 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/searchable_document.rb +71 -0
- data/app/models/concerns/pages_core/sweepable.rb +4 -2
- data/app/models/concerns/pages_core/taggable.rb +33 -12
- 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 +6 -3
- data/app/models/page_builder.rb +2 -0
- data/app/models/page_category.rb +3 -1
- data/app/models/page_exporter.rb +23 -10
- data/app/models/page_file.rb +3 -1
- data/app/models/page_image.rb +3 -3
- data/app/models/page_path.rb +13 -5
- data/app/models/password_reset_token.rb +3 -1
- data/app/models/role.rb +9 -6
- data/app/models/search_document.rb +72 -0
- data/app/models/tag.rb +9 -6
- data/app/models/tagging.rb +4 -2
- data/app/models/user.rb +8 -5
- 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 → resources/admin/attachment_resource.rb} +10 -7
- data/app/{serializers/admin/image_serializer.rb → resources/admin/image_resource.rb} +13 -11
- data/app/resources/admin/page_file_resource.rb +10 -0
- data/app/resources/admin/page_image_resource.rb +10 -0
- data/app/resources/export/attachment_resource.rb +10 -0
- data/app/resources/export/page_image_resource.rb +45 -0
- data/app/resources/export/page_resource.rb +42 -0
- data/app/{serializers/page_image_serializer.rb → resources/page_image_resource.rb} +10 -16
- data/app/resources/page_resource.rb +33 -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 +4 -2
- data/app/views/admin/images/show.json.jbuilder +2 -0
- data/app/views/admin/pages/_edit_content.html.erb +1 -1
- data/app/views/admin/pages/_edit_files.html.erb +1 -5
- data/app/views/admin/pages/_edit_images.html.erb +1 -5
- data/app/views/admin/pages/_edit_options.html.erb +74 -55
- data/app/views/admin/pages/_form.html.erb +19 -0
- data/app/views/admin/pages/edit.html.erb +35 -61
- data/app/views/admin/pages/index.html.erb +0 -1
- data/app/views/admin/pages/new.html.erb +32 -32
- data/app/views/admin/pages/news.html.erb +1 -1
- data/app/views/admin/users/_access_control.html.erb +5 -1
- data/app/views/admin/users/login.html.erb +12 -4
- 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 +3 -2
- data/app/views/layouts/admin/_header.html.erb +1 -1
- data/app/views/layouts/admin/_page_header.html.erb +33 -0
- data/app/views/layouts/admin.html.erb +23 -42
- data/app/views/pages_core/_google_analytics.html.erb +8 -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/db/migrate/20180625154059_enable_search_extensions.rb +10 -0
- data/db/migrate/20210209151400_create_search_configurations.rb +35 -0
- data/db/migrate/20210210235200_create_search_documents.rb +74 -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/base.rb +5 -0
- data/lib/pages_core/configuration/pages.rb +4 -2
- data/lib/pages_core/configuration.rb +2 -0
- data/lib/pages_core/digest_verifier.rb +5 -5
- data/lib/pages_core/engine.rb +53 -5
- data/lib/pages_core/extensions/string_extensions.rb +3 -1
- data/lib/pages_core/extensions.rb +2 -0
- 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/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/static_cache.rb +26 -0
- data/lib/pages_core/templates/block_configuration.rb +4 -1
- data/lib/pages_core/templates/configuration.rb +5 -1
- data/lib/pages_core/templates/configuration_handler.rb +5 -3
- 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/templates.rb +5 -3
- data/lib/pages_core/version.rb +3 -1
- data/lib/pages_core.rb +13 -5
- data/lib/rails/generators/pages_core/frontend/frontend_generator.rb +2 -7
- 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 +4 -2
- 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/cache.rake +8 -5
- data/lib/tasks/pages/export.rake +3 -1
- data/lib/tasks/pages/page_paths.rake +2 -0
- data/lib/tasks/pages.rake +3 -2
- data/template.rb +2 -0
- metadata +194 -157
- data/app/assets/javascripts/pages/admin/components/attachment.jsx +0 -130
- data/app/assets/javascripts/pages/admin/components/attachment_editor.jsx +0 -131
- data/app/assets/javascripts/pages/admin/components/attachments.jsx +0 -211
- data/app/assets/javascripts/pages/admin/components/drag_uploader.jsx +0 -174
- data/app/assets/javascripts/pages/admin/components/editable_image.jsx +0 -57
- data/app/assets/javascripts/pages/admin/components/file_upload_button.jsx +0 -44
- data/app/assets/javascripts/pages/admin/components/grid_image.jsx +0 -124
- data/app/assets/javascripts/pages/admin/components/image_editor.jsx +0 -496
- data/app/assets/javascripts/pages/admin/components/image_grid.jsx +0 -301
- data/app/assets/javascripts/pages/admin/components/image_uploader.jsx +0 -171
- data/app/assets/javascripts/pages/admin/components/modal_store.jsx +0 -20
- data/app/assets/javascripts/pages/admin/components/rich_text_area.jsx +0 -63
- data/app/assets/javascripts/pages/admin/components/rich_text_toolbar.jsx +0 -58
- data/app/assets/javascripts/pages/admin/components/toast.jsx +0 -37
- data/app/assets/javascripts/pages/admin/components/toast_store.jsx +0 -52
- data/app/assets/javascripts/pages/admin/components.jsx +0 -2
- data/app/assets/javascripts/pages/admin/features/content_tabs.jsx +0 -72
- data/app/assets/javascripts/pages/admin/features/edit_page.jsx +0 -97
- data/app/assets/javascripts/pages/admin/features/rich_text.jsx +0 -14
- data/app/assets/javascripts/pages/admin/features/tag_editor.jsx +0 -160
- data/app/assets/javascripts/pages/admin.jsx +0 -17
- data/app/assets/javascripts/pages/login_form.jsx +0 -21
- data/app/controllers/concerns/pages_core/domain_based_cache.rb +0 -26
- data/app/serializers/admin/page_file_serializer.rb +0 -6
- data/app/serializers/admin/page_image_serializer.rb +0 -6
- data/app/serializers/page_export_serializer.rb +0 -30
- data/app/serializers/page_file_export_serializer.rb +0 -4
- data/app/serializers/page_image_export_serializer.rb +0 -40
- data/app/serializers/page_serializer.rb +0 -21
- 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/app/views/layouts/admin/_analytics.html.erb +0 -16
- 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/frontend/templates/application.js.erb +0 -15
- data/lib/rails/generators/pages_core/install/templates/cache_sweeper_initializer.rb +0 -6
- data/lib/tasks/pages/update.rake +0 -17
- data/vendor/assets/javascripts/ReactCrop.min.js +0 -1
- data/vendor/assets/javascripts/reflux.min.js +0 -1
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module PagesCore
|
|
2
4
|
module Authentication
|
|
3
5
|
extend ActiveSupport::Concern
|
|
@@ -17,29 +19,35 @@ module PagesCore
|
|
|
17
19
|
end
|
|
18
20
|
|
|
19
21
|
def authenticate!(user)
|
|
20
|
-
|
|
21
|
-
|
|
22
|
+
reset_session
|
|
23
|
+
authenticated(user)
|
|
22
24
|
end
|
|
23
25
|
|
|
24
26
|
def deauthenticate!
|
|
25
27
|
@current_user = nil
|
|
26
|
-
|
|
28
|
+
reset_session
|
|
27
29
|
end
|
|
28
30
|
|
|
29
31
|
protected
|
|
30
32
|
|
|
33
|
+
def authenticated(user)
|
|
34
|
+
user.mark_active!
|
|
35
|
+
@current_user = user
|
|
36
|
+
end
|
|
37
|
+
|
|
31
38
|
def start_authenticated_session
|
|
32
39
|
if session[:current_user_id]
|
|
33
40
|
user = User.where(id: session[:current_user_id]).first
|
|
34
41
|
end
|
|
35
42
|
|
|
36
|
-
return unless user
|
|
43
|
+
return unless user&.can_login?
|
|
37
44
|
|
|
38
|
-
|
|
45
|
+
authenticated(user)
|
|
39
46
|
end
|
|
40
47
|
|
|
41
48
|
def finalize_authenticated_session
|
|
42
49
|
return unless current_user
|
|
50
|
+
|
|
43
51
|
session[:current_user_id] = current_user.id
|
|
44
52
|
end
|
|
45
53
|
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,8 @@ module PagesCore
|
|
|
8
10
|
|
|
9
11
|
def preview
|
|
10
12
|
redirect_to(page_url(@locale, @page)) && return unless logged_in?
|
|
13
|
+
|
|
14
|
+
@preview = true
|
|
11
15
|
@page.attributes = page_params.merge(
|
|
12
16
|
status: 2,
|
|
13
17
|
published_at: Time.zone.now,
|
|
@@ -17,6 +21,10 @@ module PagesCore
|
|
|
17
21
|
render_page
|
|
18
22
|
end
|
|
19
23
|
|
|
24
|
+
def preview?
|
|
25
|
+
@preview || false
|
|
26
|
+
end
|
|
27
|
+
|
|
20
28
|
private
|
|
21
29
|
|
|
22
30
|
def disable_xss_protection
|
|
@@ -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
|
|
@@ -1,13 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# All admin controllers inherit Admin::AdminController, which provides layout,
|
|
2
4
|
# authorization and other common code for the Admin set of controllers.
|
|
3
5
|
module PagesCore
|
|
4
6
|
class AdminController < ::ApplicationController
|
|
7
|
+
include PagesCore::Admin::PersistentParams
|
|
8
|
+
|
|
5
9
|
protect_from_forgery with: :exception
|
|
6
10
|
|
|
7
11
|
before_action :set_i18n_locale
|
|
8
12
|
before_action :require_authentication
|
|
9
|
-
before_action :restore_persistent_params
|
|
10
|
-
after_action :save_persistent_params
|
|
11
13
|
|
|
12
14
|
layout "admin"
|
|
13
15
|
|
|
@@ -36,29 +38,14 @@ module PagesCore
|
|
|
36
38
|
# If not, renders the login screen.
|
|
37
39
|
def require_authentication
|
|
38
40
|
return if logged_in?
|
|
41
|
+
|
|
39
42
|
if User.count < 1
|
|
40
|
-
redirect_to(new_admin_user_url)
|
|
43
|
+
redirect_to(new_admin_user_url)
|
|
41
44
|
else
|
|
42
|
-
redirect_to(login_admin_users_url)
|
|
45
|
+
redirect_to(login_admin_users_url)
|
|
43
46
|
end
|
|
44
47
|
end
|
|
45
48
|
|
|
46
|
-
# Loads persistent params from user model and merges with session.
|
|
47
|
-
def restore_persistent_params
|
|
48
|
-
return unless current_user && current_user.persistent_data?
|
|
49
|
-
session[:persistent_params] ||= {}
|
|
50
|
-
session[:persistent_params] = current_user.persistent_data.merge(
|
|
51
|
-
session[:persistent_params]
|
|
52
|
-
)
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
# Saves persistent params from session to User model if applicable.
|
|
56
|
-
def save_persistent_params
|
|
57
|
-
return unless current_user && session[:persistent_params]
|
|
58
|
-
current_user.persistent_data = session[:persistent_params]
|
|
59
|
-
current_user.save
|
|
60
|
-
end
|
|
61
|
-
|
|
62
49
|
def secure_compare(compare, other)
|
|
63
50
|
return false unless compare && other
|
|
64
51
|
return false unless compare.bytesize == other.bytesize
|
|
@@ -69,52 +56,5 @@ module PagesCore
|
|
|
69
56
|
other.each_byte { |byte| res |= byte ^ l.shift }
|
|
70
57
|
res.zero?
|
|
71
58
|
end
|
|
72
|
-
|
|
73
|
-
# --- HELPERS ---
|
|
74
|
-
|
|
75
|
-
# Add a stylesheet
|
|
76
|
-
def add_stylesheet(css_file)
|
|
77
|
-
@admin_stylesheets ||= []
|
|
78
|
-
@admin_stylesheets << "admin/#{css_file}"
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
def persistent_params(namespace)
|
|
82
|
-
session[:persistent_params] ||= {}
|
|
83
|
-
session[:persistent_params][namespace] ||= {}
|
|
84
|
-
session[:persistent_params][namespace]
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
def coerce_persistent_param(value)
|
|
88
|
-
case value
|
|
89
|
-
when "true"
|
|
90
|
-
true
|
|
91
|
-
when "false"
|
|
92
|
-
false
|
|
93
|
-
else
|
|
94
|
-
value
|
|
95
|
-
end
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
# Get a persistent param
|
|
99
|
-
def persistent_param(key, default = nil, options = {})
|
|
100
|
-
key = key.to_s
|
|
101
|
-
namespace = options[:namespace] || self.class.to_s
|
|
102
|
-
|
|
103
|
-
value = coerce_persistent_param(
|
|
104
|
-
if params.key?(key)
|
|
105
|
-
params[key]
|
|
106
|
-
elsif persistent_params(namespace).key?(key)
|
|
107
|
-
persistent_params(namespace)[key]
|
|
108
|
-
else
|
|
109
|
-
default
|
|
110
|
-
end
|
|
111
|
-
)
|
|
112
|
-
|
|
113
|
-
if !value.nil? || options[:preserve_nil]
|
|
114
|
-
persistent_params(namespace)[key.to_s] = value
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
value
|
|
118
|
-
end
|
|
119
59
|
end
|
|
120
60
|
end
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module PagesCore
|
|
2
4
|
class AttachmentsController < ::ApplicationController
|
|
3
5
|
before_action :verify_signed_params
|
|
4
6
|
before_action :find_attachment, only: %i[show download]
|
|
5
7
|
|
|
6
|
-
|
|
8
|
+
static_cache :show, permanent: true
|
|
7
9
|
|
|
8
10
|
def show
|
|
9
11
|
send_attachment
|
|
@@ -20,12 +22,14 @@ module PagesCore
|
|
|
20
22
|
end
|
|
21
23
|
|
|
22
24
|
def send_attachment(disposition: "inline")
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
filename: @attachment.filename,
|
|
26
|
-
type: @attachment.content_type,
|
|
27
|
-
disposition: disposition)
|
|
25
|
+
unless stale?(etag: @attachment, last_modified: @attachment.updated_at)
|
|
26
|
+
return
|
|
28
27
|
end
|
|
28
|
+
|
|
29
|
+
send_data(@attachment.data,
|
|
30
|
+
filename: @attachment.filename,
|
|
31
|
+
type: @attachment.content_type,
|
|
32
|
+
disposition: disposition)
|
|
29
33
|
end
|
|
30
34
|
|
|
31
35
|
def verify_signed_params
|
|
@@ -1,41 +1,35 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module PagesCore
|
|
2
4
|
class BaseController < ActionController::Base
|
|
3
5
|
include PagesCore::Authentication
|
|
4
|
-
include PagesCore::DomainBasedCache
|
|
5
6
|
include PagesCore::ErrorRenderer
|
|
7
|
+
include PagesCore::ErrorReporting
|
|
6
8
|
include PagesCore::ProcessTitler
|
|
7
9
|
include PagesCore::PoliciesHelper
|
|
10
|
+
include PagesCore::StaticCacheController
|
|
8
11
|
|
|
9
|
-
before_action :set_locale
|
|
12
|
+
before_action :set_locale
|
|
10
13
|
after_action :set_content_language_header
|
|
11
14
|
|
|
12
15
|
protected
|
|
13
16
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
Raven.user_context(user_id: current_user.id,
|
|
19
|
-
user_email: current_user.email)
|
|
20
|
-
else
|
|
21
|
-
Raven.user_context({})
|
|
22
|
-
end
|
|
23
|
-
Raven.tags_context(locale: locale)
|
|
24
|
-
Raven.extra_context(params: params.to_unsafe_h)
|
|
17
|
+
def append_info_to_payload(payload)
|
|
18
|
+
super
|
|
19
|
+
payload[:remote_ip] = request.remote_ip
|
|
20
|
+
payload.merge!(current_user_context)
|
|
25
21
|
end
|
|
26
22
|
|
|
27
23
|
# Sets @locale from params[:locale], with I18n.default_locale as fallback
|
|
28
24
|
def set_locale
|
|
29
|
-
legacy_locales = {
|
|
30
|
-
"nor" => "nb",
|
|
31
|
-
"eng" => "en"
|
|
32
|
-
}
|
|
25
|
+
legacy_locales = { "nor" => "nb", "eng" => "en" }
|
|
33
26
|
@locale = params[:locale] || I18n.default_locale.to_s
|
|
34
27
|
@locale = legacy_locales[@locale] if legacy_locales[@locale]
|
|
35
28
|
end
|
|
36
29
|
|
|
37
30
|
def set_content_language_header
|
|
38
31
|
return unless locale
|
|
32
|
+
|
|
39
33
|
headers["Content-Language"] = locale.to_s
|
|
40
34
|
end
|
|
41
35
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module PagesCore
|
|
2
4
|
module Frontend
|
|
3
5
|
class PageFilesController < ::FrontendController
|
|
@@ -6,9 +8,11 @@ module PagesCore
|
|
|
6
8
|
before_action :find_page_file, only: %i[show]
|
|
7
9
|
|
|
8
10
|
def show
|
|
9
|
-
|
|
10
|
-
|
|
11
|
+
unless stale?(etag: @page_file, last_modified: @page_file.updated_at)
|
|
12
|
+
return
|
|
11
13
|
end
|
|
14
|
+
|
|
15
|
+
redirect_to attachment_path(@page_file.attachment)
|
|
12
16
|
end
|
|
13
17
|
|
|
14
18
|
private
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module PagesCore
|
|
2
4
|
module Frontend
|
|
3
5
|
class PagesController < ::FrontendController
|
|
@@ -13,7 +15,7 @@ module PagesCore
|
|
|
13
15
|
before_action :find_page, only: %i[show preview]
|
|
14
16
|
before_action :require_page, only: %i[show preview]
|
|
15
17
|
before_action :canonicalize_url, only: [:show]
|
|
16
|
-
|
|
18
|
+
static_cache :index, :show
|
|
17
19
|
|
|
18
20
|
def index
|
|
19
21
|
respond_to do |format|
|
|
@@ -25,8 +27,11 @@ module PagesCore
|
|
|
25
27
|
def show
|
|
26
28
|
respond_to do |format|
|
|
27
29
|
format.html { render_published_page(@page) }
|
|
28
|
-
format.
|
|
29
|
-
format.
|
|
30
|
+
format.json { render json: PageResource.new(@page) }
|
|
31
|
+
format.rss do
|
|
32
|
+
render_rss(@page.pages.limit(20).includes(:image, :author),
|
|
33
|
+
title: @page.name)
|
|
34
|
+
end
|
|
30
35
|
end
|
|
31
36
|
end
|
|
32
37
|
|
|
@@ -45,11 +50,8 @@ module PagesCore
|
|
|
45
50
|
return if request.path == canonical_path(@page)
|
|
46
51
|
# Don't canonicalize if any unknown params are present
|
|
47
52
|
return if (params.keys - %w[controller action path locale id]).any?
|
|
48
|
-
redirect_to(canonical_path(@page), status: :moved_permanently)
|
|
49
|
-
end
|
|
50
53
|
|
|
51
|
-
|
|
52
|
-
@page_cache_disabled = true
|
|
54
|
+
redirect_to(canonical_path(@page), status: :moved_permanently)
|
|
53
55
|
end
|
|
54
56
|
|
|
55
57
|
def render(*args)
|
|
@@ -80,20 +82,13 @@ module PagesCore
|
|
|
80
82
|
template = page_template(@page)
|
|
81
83
|
run_template_actions_for(template, @page)
|
|
82
84
|
return if @already_rendered
|
|
83
|
-
render template: "pages/templates/#{template}"
|
|
84
|
-
end
|
|
85
85
|
|
|
86
|
-
|
|
87
|
-
def cache_page_request
|
|
88
|
-
return if @page_cache_disabled || !PagesCore.config(:page_cache)
|
|
89
|
-
return if response.status&.to_i != 200
|
|
90
|
-
return unless @page && @locale
|
|
91
|
-
|
|
92
|
-
self.class.cache_page(response.body, request.path)
|
|
86
|
+
render template: "pages/templates/#{template}"
|
|
93
87
|
end
|
|
94
88
|
|
|
95
89
|
def find_page_by_path
|
|
96
90
|
return unless params[:path]
|
|
91
|
+
|
|
97
92
|
@page = PagePath.get(locale, params[:path]).try(&:page)
|
|
98
93
|
end
|
|
99
94
|
|
|
@@ -103,7 +98,7 @@ module PagesCore
|
|
|
103
98
|
end
|
|
104
99
|
|
|
105
100
|
def render_published_page(page)
|
|
106
|
-
if page
|
|
101
|
+
if page&.published?
|
|
107
102
|
@page = page
|
|
108
103
|
render_page
|
|
109
104
|
else
|
|
@@ -113,11 +108,13 @@ module PagesCore
|
|
|
113
108
|
|
|
114
109
|
def redirect_page(page)
|
|
115
110
|
return false unless page.redirects?
|
|
111
|
+
|
|
116
112
|
redirect_to(page.redirect_path(locale: locale))
|
|
117
113
|
end
|
|
118
114
|
|
|
119
115
|
def require_page
|
|
120
116
|
return if @page
|
|
117
|
+
|
|
121
118
|
render_error 404
|
|
122
119
|
end
|
|
123
120
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# Abstract controller for all frontend controllers.
|
|
2
4
|
module PagesCore
|
|
3
5
|
class FrontendController < ::ApplicationController
|
|
@@ -32,6 +34,7 @@ module PagesCore
|
|
|
32
34
|
I18n.locale = locale_param
|
|
33
35
|
rescue I18n::InvalidLocale
|
|
34
36
|
raise if Rails.application.config.consider_all_requests_local
|
|
37
|
+
|
|
35
38
|
render_error 404
|
|
36
39
|
end
|
|
37
40
|
end
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module PagesCore
|
|
2
4
|
class SitemapsController < ::ApplicationController
|
|
3
5
|
include PagesCore::PagePathHelper
|
|
4
|
-
|
|
6
|
+
static_cache :show
|
|
5
7
|
|
|
6
8
|
def show
|
|
7
9
|
@entries = formatted_entries
|
|
@@ -42,13 +44,13 @@ module PagesCore
|
|
|
42
44
|
|
|
43
45
|
def pages
|
|
44
46
|
([Page.root.try(:localize, I18n.default_locale)] +
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
47
|
+
locales.flat_map do |locale|
|
|
48
|
+
Page.published.localized(locale).includes(:parent)
|
|
49
|
+
end).compact.uniq
|
|
48
50
|
end
|
|
49
51
|
|
|
50
52
|
def page_record_url(record)
|
|
51
|
-
if record ==
|
|
53
|
+
if record == root_page && record.locale == I18n.default_locale
|
|
52
54
|
root_url
|
|
53
55
|
else
|
|
54
56
|
page_url(record.locale, record)
|
|
@@ -68,5 +70,9 @@ module PagesCore
|
|
|
68
70
|
def records
|
|
69
71
|
pages
|
|
70
72
|
end
|
|
73
|
+
|
|
74
|
+
def root_page
|
|
75
|
+
@root_page ||= Page.root
|
|
76
|
+
end
|
|
71
77
|
end
|
|
72
78
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
class SessionsController < ::ApplicationController
|
|
2
4
|
def create
|
|
3
5
|
user = find_user(params[:username], params[:password])
|
|
@@ -7,7 +9,7 @@ class SessionsController < ::ApplicationController
|
|
|
7
9
|
redirect_to admin_default_url
|
|
8
10
|
else
|
|
9
11
|
flash[:notice] = "The provided email address and password combination " \
|
|
10
|
-
|
|
12
|
+
"was not valid"
|
|
11
13
|
redirect_to login_admin_users_url
|
|
12
14
|
end
|
|
13
15
|
end
|