43 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| class Sanitize
 | |
|   module Config
 | |
|     HTTP_PROTOCOLS ||= ['http', 'https', :relative].freeze
 | |
| 
 | |
|     MASTODON_STRICT ||= freeze_config(
 | |
|       elements: %w(p br span a),
 | |
| 
 | |
|       attributes: {
 | |
|         'a'    => %w(href),
 | |
|         'span' => %w(class),
 | |
|       },
 | |
| 
 | |
|       protocols: {
 | |
|         'a' => { 'href' => HTTP_PROTOCOLS },
 | |
|       }
 | |
|     )
 | |
| 
 | |
|     MASTODON_OEMBED ||= freeze_config merge(
 | |
|       RELAXED,
 | |
|       elements: RELAXED[:elements] + %w(audio embed iframe source video),
 | |
| 
 | |
|       attributes: merge(
 | |
|         RELAXED[:attributes],
 | |
|         'audio'  => %w(controls),
 | |
|         'embed'  => %w(height src type width),
 | |
|         'iframe' => %w(allowfullscreen frameborder height scrolling src width),
 | |
|         'source' => %w(src type),
 | |
|         'video'  => %w(controls height loop width),
 | |
|         'div'    => [:data]
 | |
|       ),
 | |
| 
 | |
|       protocols: merge(
 | |
|         RELAXED[:protocols],
 | |
|         'embed'  => { 'src' => HTTP_PROTOCOLS },
 | |
|         'iframe' => { 'src' => HTTP_PROTOCOLS },
 | |
|         'source' => { 'src' => HTTP_PROTOCOLS }
 | |
|       )
 | |
|     )
 | |
|   end
 | |
| end
 |