WordPress.org

Make WordPress Core

Ticket #28195: 28195.16.patch

File 28195.16.patch, 2.8 KB (added by azaozz, 4 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 );