| @@ -2,7 +2,7 @@ | ||||
|   = site_hostname | ||||
|  | ||||
| - content_for :header_tags do | ||||
|   = javascript_pack_tag 'public', integrity: true, crossorigin: 'anonymous' | ||||
|   = javascript_pack_tag 'public', crossorigin: 'anonymous' | ||||
|   = render partial: 'shared/og' | ||||
|  | ||||
| .grid-4 | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
|   = t('admin.action_logs.title') | ||||
|  | ||||
| - content_for :header_tags do | ||||
|   = javascript_pack_tag 'admin', integrity: true, async: true, crossorigin: 'anonymous' | ||||
|   = javascript_pack_tag 'admin', async: true, crossorigin: 'anonymous' | ||||
|  | ||||
| = form_tag admin_action_logs_url, method: 'GET', class: 'simple_form' do | ||||
|   = hidden_field_tag :target_account_id, params[:target_account_id] if params[:target_account_id].present? | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
|   = t('admin.custom_emojis.title') | ||||
|  | ||||
| - content_for :header_tags do | ||||
|   = javascript_pack_tag 'admin', integrity: true, async: true, crossorigin: 'anonymous' | ||||
|   = javascript_pack_tag 'admin', async: true, crossorigin: 'anonymous' | ||||
|  | ||||
| - if can?(:create, :custom_emoji) | ||||
|   - content_for :heading_actions do | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| - content_for :header_tags do | ||||
|   = javascript_pack_tag 'admin', integrity: true, async: true, crossorigin: 'anonymous' | ||||
|   = javascript_pack_tag 'admin', async: true, crossorigin: 'anonymous' | ||||
|  | ||||
| - content_for :page_title do | ||||
|   = t('admin.domain_allows.add_new') | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| - content_for :header_tags do | ||||
|   = javascript_pack_tag 'admin', integrity: true, async: true, crossorigin: 'anonymous' | ||||
|   = javascript_pack_tag 'admin', async: true, crossorigin: 'anonymous' | ||||
|  | ||||
| - content_for :page_title do | ||||
|   = t('admin.domain_blocks.edit') | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| - content_for :header_tags do | ||||
|   = javascript_pack_tag 'admin', integrity: true, async: true, crossorigin: 'anonymous' | ||||
|   = javascript_pack_tag 'admin', async: true, crossorigin: 'anonymous' | ||||
|  | ||||
| - content_for :page_title do | ||||
|   = t('.title') | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
|   = t('admin.ip_blocks.title') | ||||
|  | ||||
| - content_for :header_tags do | ||||
|   = javascript_pack_tag 'admin', integrity: true, async: true, crossorigin: 'anonymous' | ||||
|   = javascript_pack_tag 'admin', async: true, crossorigin: 'anonymous' | ||||
|  | ||||
| - if can?(:create, :ip_block) | ||||
|   - content_for :heading_actions do | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
|   = t('admin.pending_accounts.title', count: User.pending.count) | ||||
|  | ||||
| - content_for :header_tags do | ||||
|   = javascript_pack_tag 'admin', integrity: true, async: true, crossorigin: 'anonymous' | ||||
|   = javascript_pack_tag 'admin', async: true, crossorigin: 'anonymous' | ||||
|  | ||||
| = form_for(@form, url: batch_admin_pending_accounts_path) do |f| | ||||
|   = hidden_field_tag :page, params[:page] || 1 | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| - content_for :header_tags do | ||||
|   = javascript_pack_tag 'admin', integrity: true, async: true, crossorigin: 'anonymous' | ||||
|   = javascript_pack_tag 'admin', async: true, crossorigin: 'anonymous' | ||||
|  | ||||
| - content_for :page_title do | ||||
|   = t('admin.reports.report', id: @report.id) | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| - content_for :header_tags do | ||||
|   = javascript_pack_tag 'admin', integrity: true, async: true, crossorigin: 'anonymous' | ||||
|   = javascript_pack_tag 'admin', async: true, crossorigin: 'anonymous' | ||||
|  | ||||
| - content_for :page_title do | ||||
|   = t('admin.settings.title') | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| - content_for :header_tags do | ||||
|   = javascript_pack_tag 'admin', integrity: true, async: true, crossorigin: 'anonymous' | ||||
|   = javascript_pack_tag 'admin', async: true, crossorigin: 'anonymous' | ||||
|  | ||||
| - content_for :page_title do | ||||
|   = t('admin.statuses.title') | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
|   = t('admin.tags.title') | ||||
|  | ||||
| - content_for :header_tags do | ||||
|   = javascript_pack_tag 'admin', integrity: true, async: true, crossorigin: 'anonymous' | ||||
|   = javascript_pack_tag 'admin', async: true, crossorigin: 'anonymous' | ||||
|  | ||||
| .filters | ||||
|   .filter-subset | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| - content_for :page_title do | ||||
|   = t('auth.login') | ||||
|  | ||||
| =javascript_pack_tag 'two_factor_authentication', integrity: true, crossorigin: 'anonymous' | ||||
| =javascript_pack_tag 'two_factor_authentication', crossorigin: 'anonymous' | ||||
|  | ||||
| - if @webauthn_enabled | ||||
|   = render partial: 'auth/sessions/two_factor/webauthn_form', locals: { hidden: @scheme_type != 'webauthn' } | ||||
|   | ||||
| @@ -1,12 +1,12 @@ | ||||
| - content_for :header_tags do | ||||
|   = preload_link_tag asset_pack_path('features/getting_started.js'), crossorigin: 'anonymous' | ||||
|   = preload_link_tag asset_pack_path('features/compose.js'), crossorigin: 'anonymous' | ||||
|   = preload_link_tag asset_pack_path('features/home_timeline.js'), crossorigin: 'anonymous' | ||||
|   = preload_link_tag asset_pack_path('features/notifications.js'), crossorigin: 'anonymous' | ||||
|   = preload_pack_asset 'features/getting_started.js', crossorigin: 'anonymous' | ||||
|   = preload_pack_asset 'features/compose.js', crossorigin: 'anonymous' | ||||
|   = preload_pack_asset 'features/home_timeline.js', crossorigin: 'anonymous' | ||||
|   = preload_pack_asset 'features/notifications.js', crossorigin: 'anonymous' | ||||
|  | ||||
|   %meta{name: 'applicationServerKey', content: Rails.configuration.x.vapid_public_key} | ||||
|   = render_initial_state | ||||
|   = javascript_pack_tag 'application', integrity: true, crossorigin: 'anonymous' | ||||
|   = javascript_pack_tag 'application', crossorigin: 'anonymous' | ||||
|  | ||||
| .app-holder#mastodon{ data: { props: Oj.dump(default_props) } } | ||||
|   %noscript | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| - content_for :header_tags do | ||||
|   = render_initial_state | ||||
|   = javascript_pack_tag 'public', integrity: true, crossorigin: 'anonymous' | ||||
|   = javascript_pack_tag 'public', crossorigin: 'anonymous' | ||||
|  | ||||
| - content_for :content do | ||||
|   .admin-wrapper | ||||
|   | ||||
| @@ -21,10 +21,10 @@ | ||||
|  | ||||
|     %title= content_for?(:page_title) ? safe_join([yield(:page_title).chomp.html_safe, title], ' - ') : title | ||||
|  | ||||
|     = stylesheet_pack_tag 'common', media: 'all' | ||||
|     = stylesheet_pack_tag current_theme, media: 'all' | ||||
|     = javascript_pack_tag 'common', integrity: true, crossorigin: 'anonymous' | ||||
|     = javascript_pack_tag "locale_#{I18n.locale}", integrity: true, crossorigin: 'anonymous' | ||||
|     = stylesheet_pack_tag 'common', media: 'all', crossorigin: 'anonymous' | ||||
|     = stylesheet_pack_tag current_theme, media: 'all', crossorigin: 'anonymous' | ||||
|     = javascript_pack_tag 'common', crossorigin: 'anonymous' | ||||
|     = javascript_pack_tag "locale_#{I18n.locale}", crossorigin: 'anonymous' | ||||
|     = csrf_meta_tags | ||||
|     %meta{ name: 'style-nonce', content: request.content_security_policy_nonce } | ||||
|  | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| - content_for :header_tags do | ||||
|   = javascript_pack_tag 'public', integrity: true, crossorigin: 'anonymous' | ||||
|   = javascript_pack_tag 'public', crossorigin: 'anonymous' | ||||
|  | ||||
| - content_for :content do | ||||
|   .container-alt | ||||
|   | ||||
| @@ -11,8 +11,8 @@ | ||||
|     - if storage_host? | ||||
|       %link{ rel: 'dns-prefetch', href: storage_host }/ | ||||
|  | ||||
|     = stylesheet_pack_tag 'common', media: 'all' | ||||
|     = stylesheet_pack_tag Setting.default_settings['theme'], media: 'all' | ||||
|     = stylesheet_pack_tag 'common', media: 'all', crossorigin: 'anonymous' | ||||
|     = stylesheet_pack_tag Setting.default_settings['theme'], media: 'all', crossorigin: 'anonymous' | ||||
|     = javascript_pack_tag 'common', integrity: true, crossorigin: 'anonymous' | ||||
|     = javascript_pack_tag "locale_#{I18n.locale}", integrity: true, crossorigin: 'anonymous' | ||||
|     = render_initial_state | ||||
|   | ||||
| @@ -5,10 +5,10 @@ | ||||
|     %meta{ charset: 'utf-8' }/ | ||||
|     %title= safe_join([yield(:page_title), Setting.default_settings['site_title']], ' - ') | ||||
|     %meta{ content: 'width=device-width,initial-scale=1', name: 'viewport' }/ | ||||
|     = stylesheet_pack_tag 'common', media: 'all' | ||||
|     = stylesheet_pack_tag Setting.default_settings['theme'], media: 'all' | ||||
|     = javascript_pack_tag 'common', integrity: true, crossorigin: 'anonymous' | ||||
|     = javascript_pack_tag 'error', integrity: true, crossorigin: 'anonymous' | ||||
|     = stylesheet_pack_tag 'common', media: 'all', crossorigin: 'anonymous' | ||||
|     = stylesheet_pack_tag Setting.default_settings['theme'], media: 'all', crossorigin: 'anonymous' | ||||
|     = javascript_pack_tag 'common', crossorigin: 'anonymous' | ||||
|     = javascript_pack_tag 'error', crossorigin: 'anonymous' | ||||
|   %body.error | ||||
|     .dialog | ||||
|       .dialog__illustration | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| - content_for :header_tags do | ||||
|   = javascript_pack_tag 'public', integrity: true, crossorigin: 'anonymous' | ||||
|   = javascript_pack_tag 'public', crossorigin: 'anonymous' | ||||
|  | ||||
| - content_for :content do | ||||
|   - if user_signed_in? && !@hide_header | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| - content_for :header_tags do | ||||
|   = render_initial_state | ||||
|   = javascript_pack_tag 'public', integrity: true, crossorigin: 'anonymous' | ||||
|   = javascript_pack_tag 'public', crossorigin: 'anonymous' | ||||
|  | ||||
| - content_for :content do | ||||
|   .public-layout | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| - content_for :header_tags do | ||||
|   = render_initial_state | ||||
|   = javascript_pack_tag 'public', integrity: true, crossorigin: 'anonymous' | ||||
|   = javascript_pack_tag 'public', crossorigin: 'anonymous' | ||||
|  | ||||
| - if @media_attachment.video? | ||||
|   = react_component :video, src: @media_attachment.file.url(:original), preview: @media_attachment.thumbnail.present? ? @media_attachment.thumbnail.url : @media_attachment.file.url(:small), blurhash: @media_attachment.blurhash, width: 670, height: 380, editable: true, detailed: true, inline: true, alt: @media_attachment.description do | ||||
|   | ||||
| @@ -3,7 +3,7 @@ | ||||
|  | ||||
| - content_for :header_tags do | ||||
|   %meta{ name: 'robots', content: 'noindex' }/ | ||||
|   = javascript_pack_tag 'about', integrity: true, crossorigin: 'anonymous' | ||||
|   = javascript_pack_tag 'about', crossorigin: 'anonymous' | ||||
|  | ||||
| .page-header | ||||
|   %h1= t('about.see_whats_happening') | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
|   = t('settings.relationships') | ||||
|  | ||||
| - content_for :header_tags do | ||||
|   = javascript_pack_tag 'admin', integrity: true, async: true, crossorigin: 'anonymous' | ||||
|   = javascript_pack_tag 'admin', async: true, crossorigin: 'anonymous' | ||||
|  | ||||
| .filters | ||||
|   .filter-subset | ||||
|   | ||||
| @@ -13,4 +13,4 @@ | ||||
|   .actions | ||||
|     = f.button :button, t('webauthn_credentials.add'), class: 'js-webauthn', type: :submit | ||||
|  | ||||
| = javascript_pack_tag 'two_factor_authentication', integrity: true, crossorigin: 'anonymous' | ||||
| = javascript_pack_tag 'two_factor_authentication', crossorigin: 'anonymous' | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| - content_for :header_tags do | ||||
|   = render_initial_state | ||||
|   = javascript_pack_tag 'share', integrity: true, crossorigin: 'anonymous' | ||||
|   = javascript_pack_tag 'share', crossorigin: 'anonymous' | ||||
|  | ||||
| #mastodon-compose{ data: { props: Oj.dump(default_props) } } | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|   %meta{ name: 'robots', content: 'noindex' }/ | ||||
|   %link{ rel: 'alternate', type: 'application/rss+xml', href: tag_url(@tag, format: 'rss') }/ | ||||
|  | ||||
|   = javascript_pack_tag 'about', integrity: true, crossorigin: 'anonymous' | ||||
|   = javascript_pack_tag 'about', crossorigin: 'anonymous' | ||||
|   = render 'og' | ||||
|  | ||||
| .page-header | ||||
|   | ||||
| @@ -22,6 +22,8 @@ require_relative '../lib/mastodon/version' | ||||
| require_relative '../lib/devise/two_factor_ldap_authenticatable' | ||||
| require_relative '../lib/devise/two_factor_pam_authenticatable' | ||||
| require_relative '../lib/chewy/strategy/custom_sidekiq' | ||||
| require_relative '../lib/webpacker/manifest_extensions' | ||||
| require_relative '../lib/webpacker/helper_extensions' | ||||
|  | ||||
| Dotenv::Railtie.load | ||||
|  | ||||
|   | ||||
| @@ -79,7 +79,8 @@ module.exports = { | ||||
|       chunkFilename: 'css/[name]-[contenthash:8].chunk.css', | ||||
|     }), | ||||
|     new AssetsManifestPlugin({ | ||||
|       integrity: false, | ||||
|       integrity: true, | ||||
|       integrityHashes: ['sha256'], | ||||
|       entrypoints: true, | ||||
|       writeToDisk: true, | ||||
|       publicPath: true, | ||||
|   | ||||
							
								
								
									
										20
									
								
								lib/webpacker/helper_extensions.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								lib/webpacker/helper_extensions.rb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| # frozen_string_literal: true | ||||
|  | ||||
| module Webpacker::HelperExtensions | ||||
|   def javascript_pack_tag(name, **options) | ||||
|     src, integrity = current_webpacker_instance.manifest.lookup!(name, type: :javascript, with_integrity: true) | ||||
|     javascript_include_tag(src, options.merge(integrity: integrity)) | ||||
|   end | ||||
|  | ||||
|   def stylesheet_pack_tag(name, **options) | ||||
|     src, integrity = current_webpacker_instance.manifest.lookup!(name, type: :stylesheet, with_integrity: true) | ||||
|     stylesheet_link_tag(src, options.merge(integrity: integrity)) | ||||
|   end | ||||
|  | ||||
|   def preload_pack_asset(name, **options) | ||||
|     src, integrity = current_webpacker_instance.manifest.lookup!(name, with_integrity: true) | ||||
|     preload_link_tag(src, options.merge(integrity: integrity)) | ||||
|   end | ||||
| end | ||||
|  | ||||
| Webpacker::Helper.prepend(Webpacker::HelperExtensions) | ||||
							
								
								
									
										17
									
								
								lib/webpacker/manifest_extensions.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								lib/webpacker/manifest_extensions.rb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| # frozen_string_literal: true | ||||
|  | ||||
| module Webpacker::ManifestExtensions | ||||
|   def lookup(name, pack_type = {}) | ||||
|     asset = super | ||||
|  | ||||
|     if pack_type[:with_integrity] && asset.respond_to?(:dig) | ||||
|       [asset.dig('src'), asset.dig('integrity')] | ||||
|     elsif asset.respond_to?(:dig) | ||||
|       asset.dig('src') | ||||
|     else | ||||
|       asset | ||||
|     end | ||||
|   end | ||||
| end | ||||
|  | ||||
| Webpacker::Manifest.prepend(Webpacker::ManifestExtensions) | ||||
		Reference in New Issue
	
	Block a user