WordPress.org

Make WordPress Core

Ticket #28195: 28195.16.patch

File 28195.16.patch, 2.8 KB (added by azaozz, 3 years ago)
  • src/wp-admin/includes/ajax-actions.php

     
    25342534                wp_send_json_error(); 
    25352535        } 
    25362536 
     2537        $shortcode = $_POST['shortcode']; 
     2538 
     2539        // Admin is ssl and the user pasted non-ssl URL. 
     2540        // Check if the provider supports ssl embeds and use that for the preview. 
     2541        if ( is_ssl() && preg_match( '%^\\[embed\\]http://%i', $shortcode ) ) { 
     2542                require_once( ABSPATH . WPINC . '/class-oembed.php' ); 
     2543                $oembed = _wp_oembed_get_object(); 
     2544                $attr = array( 'discover' => ( apply_filters( 'embed_oembed_discover', false ) && current_user_can( 'unfiltered_html' ) ) ); 
     2545                $ssl_shortcode = preg_replace( '%^\\[embed\\]http://%i', '[embed]https://', $shortcode ); 
     2546 
     2547                if ( $oembed->get_provider( $ssl_shortcode, $attr ) ) { 
     2548                        $shortcode = $ssl_shortcode; 
     2549                } 
     2550        } 
     2551 
    25372552        setup_postdata( $post ); 
    25382553 
    25392554        // If the URL cannot be embedded, return an eror message with wp_send_json_error() 
    25402555        add_filter( 'embed_maybe_make_link', '_wpview_embed_error', 20, 2 ); 
    25412556 
    2542         $parsed = $wp_embed->run_shortcode( $_POST['shortcode'] ); 
     2557        $parsed = $wp_embed->run_shortcode( $shortcode ); 
    25432558        $parsed = do_shortcode( $parsed ); 
    25442559 
     2560        if ( is_ssl() && ( preg_match( '%<(iframe|script|embed) [^>]*src="http://%', $parsed ) || 
     2561                preg_match( '%<link [^>]*href="http://%', $parsed ) ) ) { 
     2562                // Admin is ssl and the embed is not. Iframes, scripts, and other "active content" will be blocked. 
     2563                $url = str_replace( '[embed]', '', str_replace( '[/embed]', '', $shortcode ) ); 
     2564                wp_send_json_error( array( 
     2565                        'type' => 'not-ssl', 
     2566                        'message' => sprintf( __( 'Preview not available. %s cannot be embedded securely.' ), esc_url( $url ) ), 
     2567                ) ); 
     2568        } 
     2569 
    25452570        wp_send_json_success( $parsed ); 
    25462571} 
  • src/wp-admin/includes/misc.php

     
    833833 */ 
    834834function _wpview_embed_error( $output, $url ) { 
    835835        wp_send_json_error( array( 
     836                'type' => 'not-embeddable', 
    836837                'message' => sprintf( __( '%s failed to embed.' ), esc_url( $url ) ), 
    837838        ) ); 
    838839} 
  • src/wp-includes/js/mce-view.js

     
    737737                        } ) 
    738738                        .fail( function( response ) { 
    739739                                if ( response && response.message ) { 
    740                                         if ( self.type === 'embed' ) { 
     740                                        if ( ( response.type === 'not-embeddable' && self.type === 'embed' ) || 
     741                                                response.type === 'not-ssl' ) { 
     742 
    741743                                                self.setError( response.message, 'admin-media' ); 
    742744                                        } else { 
    743745                                                self.setContent( '<p>' + self.original + '</p>', null, true );