Fix hashtag column options styling (#14247)
* Enable nonces for stylesheets * Pass nonce to react-select
This commit is contained in:
		
							parent
							
								
									b6b2d8b8a3
								
							
						
					
					
						commit
						aa7142b9e2
					
				
					 3 changed files with 34 additions and 12 deletions
				
			
		|  | @ -4,6 +4,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; | |||
| import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; | ||||
| import Toggle from 'react-toggle'; | ||||
| import AsyncSelect from 'react-select/async'; | ||||
| import { NonceProvider } from 'react-select'; | ||||
| import SettingToggle from '../../notifications/components/setting_toggle'; | ||||
| 
 | ||||
| const messages = defineMessages({ | ||||
|  | @ -58,18 +59,20 @@ class ColumnSettings extends React.PureComponent { | |||
|           {this.modeLabel(mode)} | ||||
|         </span> | ||||
| 
 | ||||
|         <AsyncSelect | ||||
|           isMulti | ||||
|           autoFocus | ||||
|           value={this.tags(mode)} | ||||
|           onChange={this.onSelect(mode)} | ||||
|           loadOptions={this.props.onLoad} | ||||
|           className='column-select__container' | ||||
|           classNamePrefix='column-select' | ||||
|           name='tags' | ||||
|           placeholder={this.props.intl.formatMessage(messages.placeholder)} | ||||
|           noOptionsMessage={this.noOptionsMessage} | ||||
|         /> | ||||
|         <NonceProvider nonce={document.querySelector('meta[name=style-nonce]').content}> | ||||
|           <AsyncSelect | ||||
|             isMulti | ||||
|             autoFocus | ||||
|             value={this.tags(mode)} | ||||
|             onChange={this.onSelect(mode)} | ||||
|             loadOptions={this.props.onLoad} | ||||
|             className='column-select__container' | ||||
|             classNamePrefix='column-select' | ||||
|             name='tags' | ||||
|             placeholder={this.props.intl.formatMessage(messages.placeholder)} | ||||
|             noOptionsMessage={this.noOptionsMessage} | ||||
|           /> | ||||
|         </NonceProvider> | ||||
|       </div> | ||||
|     ); | ||||
|   } | ||||
|  |  | |||
|  | @ -25,6 +25,7 @@ | |||
|     = javascript_pack_tag 'common', integrity: true, crossorigin: 'anonymous' | ||||
|     = javascript_pack_tag "locale_#{I18n.locale}", integrity: true, crossorigin: 'anonymous' | ||||
|     = csrf_meta_tags | ||||
|     %meta{ name: 'style-nonce', content: request.content_security_policy_nonce } | ||||
| 
 | ||||
|     = stylesheet_link_tag '/inert.css', skip_pipeline: true, media: 'all', id: 'inert-style' | ||||
| 
 | ||||
|  |  | |||
|  | @ -47,7 +47,25 @@ end | |||
| # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only | ||||
| # Rails.application.config.content_security_policy_report_only = true | ||||
| 
 | ||||
| Rails.application.config.content_security_policy_nonce_generator = -> request { SecureRandom.base64(16) } | ||||
| 
 | ||||
| # Monkey-patching Rails 5 | ||||
| module ActionDispatch | ||||
|   class ContentSecurityPolicy | ||||
|     def nonce_directive?(directive) | ||||
|       directive == 'style-src' | ||||
|     end | ||||
|   end | ||||
| end | ||||
| 
 | ||||
| # Rails 6 would require the following instead: | ||||
| # Rails.application.config.content_security_policy_nonce_directives = %w(style-src) | ||||
| 
 | ||||
| PgHero::HomeController.content_security_policy do |p| | ||||
|   p.script_src :self, :unsafe_inline, assets_host | ||||
|   p.style_src  :self, :unsafe_inline, assets_host | ||||
| end | ||||
| 
 | ||||
| PgHero::HomeController.after_action do | ||||
|   request.content_security_policy_nonce_generator = nil | ||||
| end | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue