Plugin Directory

Changeset 2611140


Ignore:
Timestamp:
10/07/2021 05:20:28 PM (4 years ago)
Author:
miguelxavierpenha
Message:

VaultPress 2.2.0-beta https://github.com/Automattic/vaultpress/releases/tag/2.2.0-beta

Location:
vaultpress/trunk
Files:
19 added
16 edited

Legend:

Unmodified
Added
Removed
  • vaultpress/trunk/class.vaultpress-cli.php

    r1582905 r2611140  
    1 <?php
     1<?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
     2/**
     3 * WP CLI commands for vaultpress.
     4 *
     5 * @package automattic/vaultpress
     6 */
    27
    38WP_CLI::add_command( 'vaultpress', 'VaultPress_CLI' );
  • vaultpress/trunk/class.vaultpress-hotfixes.php

    r2201737 r2611140  
    77        global $wp_version;
    88
    9         if ( version_compare( $wp_version, '3.0.2', '<' ) )
    10             add_filter( 'query', array( $this, 'r16625' ) );
    11 
    12         if ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST && version_compare( $wp_version, '4.3.1', '<' ) )
    13             add_action( 'xmlrpc_call', array( $this, 'filter_xmlrpc_methods' ) );
    14 
    15         if ( version_compare( $wp_version, '3.3.2', '<' ) ) {
    16             add_filter( 'pre_kses', array( $this, 'r17172_wp_kses' ), 1, 3 );
    17             add_filter( 'clean_url', array( $this, 'r17172_esc_url' ), 1, 3 );
    18         }
    19 
    20         if ( version_compare( $wp_version, '3.1.3', '<' ) ) {
    21             add_filter( 'sanitize_file_name', array( $this, 'r17990' ) );
    22 
    23             if ( ! empty( $_POST ) ) {
    24                 $this->r17994( $_POST );
    25             }
    26             // Protect add_meta, update_meta used by the XML-RPC API.
    27             add_filter( 'wp_xmlrpc_server_class', 'r17994_xmlrpc_server' );
    28 
    29             // clean post_mime_type and guid (r17994)
    30             add_filter( 'pre_post_mime_type', array( $this, 'r17994_sanitize_mime_type' ) );
    31             add_filter( 'post_mime_type', array( $this, 'r17994_sanitize_mime_type' ) );
    32             add_filter( 'pre_post_guid', 'esc_url_raw' );
    33             add_filter( 'post_guid', 'esc_url' );
    34         }
    35 
    36         if ( version_compare( $wp_version, '3.1.4', '<' ) ) {
    37             add_filter( 'wp_insert_post_data', array( $this, 'r18368' ), 1, 2 );
    38 
    39             // Add click jacking protection
    40             // login_init does not exist before 17826.
    41             $action = isset( $_REQUEST['action'] ) ? $_REQUEST['action'] : 'login';
    42             add_action( 'login_form_' . $action, array( $this, 'r17826_send_frame_options_header' ), 10, 0 );
    43             add_action( 'admin_init', array( $this, 'r17826_send_frame_options_header' ), 10, 0 );
    44 
    45             add_filter( 'sanitize_option_WPLANG', array( $this, 'r18346_sanitize_lang_on_save' ) );
    46             add_filter( 'sanitize_option_new_admin_email', array( $this, 'r18346_sanitize_admin_email_on_save' ) );
    47         }
    489        add_filter( 'option_new_admin_email', array( $this, 'r18346_sanitize_admin_email' ) );
    4910
    50         if ( version_compare( $wp_version, '3.3.2', '<' ) ) {
    51             remove_filter( 'comment_text', 'make_clickable' );
    52             add_filter( 'comment_text', array( $this, 'r20493_make_clickable' ), 9 );
    53 
    54             add_filter( 'comment_post_redirect', array( $this, 'r20486_comment_post_redirect' ) );
    55         }
    56 
    57         // WooThemes < 3.8.3, foxypress, asset-manager, wordpress-member-private-conversation.
    58         $end_execution = false;
    59         if ( isset( $_SERVER['SCRIPT_FILENAME'] ) )
    60             foreach ( array( 'preview-shortcode-external.php', 'uploadify.php', 'doupload.php', 'cef-upload.php', 'upload.php' ) as $vulnerable_script ) {
    61                 if ( $vulnerable_script == basename( $_SERVER['SCRIPT_FILENAME'] ) ) {
    62                     switch ( $vulnerable_script ) {
    63                         case 'upload.php':
    64                             $pma_config_file = realpath( dirname( $_SERVER['SCRIPT_FILENAME'] ) . DIRECTORY_SEPARATOR . 'paam-config-ajax.php' );
    65                             if ( false === $pma_config_file || ! in_array( $pma_config_file, get_included_files() ) ) {
    66                                 break;
    67                             }
    68                         default:
    69                             $end_execution = true;
    70                             break 2;
    71                     }
    72                 }
    73             }
    74         if ( $end_execution )
    75             die( 'Disabled for security reasons' );
    76 
    77         if ( version_compare(  $wp_version, '3.3.2', '>') && version_compare( $wp_version, '3.4.1', '<' ) ) {
    78             add_filter( 'map_meta_cap', array( $this, 'r21138_xmlrpc_edit_posts' ), 10, 4 );
    79             add_action( 'map_meta_cap', array( $this, 'r21152_unfiltered_html' ), 10, 4 );
    80         }
    81 
    82         // https://core.trac.wordpress.org/changeset/21083
    83         if ( version_compare( $wp_version, '3.3', '>=') && version_compare( $wp_version, '3.3.3', '<' ) )
    84             add_filter( 'editable_slug', 'esc_textarea' );
    85 
    86         if ( version_compare( $wp_version, '4.1', '>=' ) && version_compare( $wp_version, '4.1.2', '<' ) )
    87             add_filter( 'wp_check_filetype_and_ext', array( $this, 'wp_check_filetype_and_ext' ), 20, 4 );
    88 
    89         if ( version_compare( $wp_version, '4.2', '<=' ) )
    90             add_filter( 'preprocess_comment', array( $this, 'filter_long_comment_xss' ), 10, 1 );
    91 
    9211        add_filter( 'get_pagenum_link', array( $this, 'get_pagenum_link' ) );
    93 
    94         add_filter( 'jetpack_xmlrpc_methods', array( $this, 'disable_jetpack_xmlrpc_methods_293' ), 20, 3 );
    95         add_filter( 'xmlrpc_methods', array( $this, 'disable_xmlrpc_methods_293' ), 20 );
    9612
    9713        // Protect All-in-one SEO from non-authorized users making changes, and script injection attacks.
    9814        add_action( 'wp_ajax_aioseop_ajax_save_meta', array( $this, 'protect_aioseo_ajax' ), 1 );
    9915
    100         // Protect The MailPoet plugin (wysija-newsletters) from remote file upload. Affects versions <= 2.6.6
    101         add_action( 'admin_init', array( $this , 'protect_wysija_newsletters_verify_capability' ), 1 );
    102 
    103         // Protect the Revolution Slider plugin (revslider) from local file inclusion. Affects versions < 4.2
    104         add_action( 'init', array( $this , 'protect_revslider_lfi' ), 1 );
    105 
    10616        // Protect WooCommerce from object injection via PayPal IPN notifications. Affects 2.0.20 -> 2.3.10
    10717        add_action( 'init', array( $this , 'protect_woocommerce_paypal_object_injection' ), 1 );
    108 
    109         // Protect Jetpack from comments-based XSS attack
    110         add_action( 'plugins_loaded', array( $this, 'protect_jetpack_402_from_oembed_xss' ), 1 );
    111 
    112         if ( version_compare(  $wp_version, '3.1', '>=') && version_compare( $wp_version, '4.3', '<=' ) ) {
    113             if ( is_admin() ) {
    114                 add_filter( 'user_email', array( $this, 'patch_user_email' ), 10 , 3 );
    115             }
    116 
    117             remove_shortcode( 'wp_caption' );
    118             remove_shortcode( 'caption' );
    119             add_shortcode( 'wp_caption', array( $this, 'filtered_caption_shortcode' ) );
    120             add_shortcode( 'caption', array( $this, 'filtered_caption_shortcode' ) );
    121         }
    122 
    123         // Protect Akismet < 3.1.5 from stored XSS in admin page
    124         add_filter( 'init', array( $this, 'protect_akismet_comment_xss' ), 50 );
    12518
    12619        if ( version_compare( $wp_version, '4.7.1', '<=' ) ) {
     
    16053    }
    16154
    162     function protect_jetpack_402_from_oembed_xss() {
    163         if ( $this->needs_jetpack_402_fix() ) {
    164             add_filter( 'jetpack_comments_allow_oembed', array( $this, 'disable_jetpack_oembed' ) );
    165         }
    166     }
    167 
    168     function needs_jetpack_402_fix() {
    169         if ( ! defined( 'JETPACK__VERSION' ) ) {
    170             return false;
    171         }
    172 
    173         if ( version_compare( JETPACK__VERSION, '2.0.7', '<' ) ) {
    174             return true;
    175         }
    176 
    177         if ( version_compare( JETPACK__VERSION, '4.0.2', '>' ) ) {
    178             return false;
    179         }
    180 
    181         $secure_jetpacks = array(
    182             '2.1' => '2.1.5',
    183             '2.2' => '2.2.8',
    184             '2.3' => '2.3.8',
    185             '2.4' => '2.4.5',
    186             '2.5' => '2.5.3',
    187             '2.6' => '2.6.4',
    188             '2.7' => '2.7.3',
    189             '2.8' => '2.8.3',
    190             '2.9' => '2.9.4',
    191             '3.0' => '3.0.4',
    192             '3.1' => '3.1.3',
    193             '3.2' => '3.2.3',
    194             '3.3' => '3.3.4',
    195             '3.4' => '3.4.4',
    196             '3.5' => '3.5.4',
    197             '3.6' => '3.6.2',
    198             '3.7' => '3.7.3',
    199             '3.8' => '3.8.3',
    200             '3.9' => '3.9.7',
    201             '4.0' => '4.0.3',
    202         );
    203 
    204         $parts = explode( '.', JETPACK__VERSION, 3 );
    205         if ( count( $parts ) < 2 ) {
    206             // no/not enough periods in the version;
    207             return false;
    208         }
    209 
    210         // pull out the first two components, cast to int to get rid of weird 'beta2' junk
    211         $int_parts = array();
    212         $int_parts[0] = intval( $parts[0] );
    213         $int_parts[1] = intval( $parts[1] );
    214 
    215         // and find the secure version for this branch
    216         $branch = sprintf( '%d.%d', $int_parts[0], $int_parts[1] );
    217         if ( ! isset( $secure_jetpacks[ $branch ] ) ) {
    218             return false;
    219         }
    220         return version_compare( JETPACK__VERSION, $secure_jetpacks[ $branch ], '<' );
    221     }
    222 
    22355    function disable_jetpack_oembed( $enabled ) {
    22456        return false;
    22557    }
    22658
    227     function filter_long_comment_xss( $commentdata ) {
    228         if ( strlen( $commentdata['comment_content'] ) > 65500 )
    229             wp_die( 'Comment too long', 'Invalid comment' );
    230 
    231         return $commentdata;
    232     }
    233 
    234     function wp_check_filetype_and_ext( $filetype, $file, $filename, $mimes ) {
    235         if ( empty( $mimes ) )
    236             $mimes = get_allowed_mime_types();
    237         $type = false;
    238         $ext = false;
    239         foreach ( $mimes as $ext_preg => $mime_match ) {
    240             $ext_preg = '!\.(' . $ext_preg . ')$!i';
    241             if ( preg_match( $ext_preg, $filename, $ext_matches ) ) {
    242                 $type = $mime_match;
    243                 $ext = $ext_matches[1];
    244                 break;
    245             }
    246         }
    247         $filetype['ext'] = $ext;
    248         $filetype['type'] = $type;
    249         return $filetype;
    250     }
    251 
    252     function disable_jetpack_xmlrpc_methods_293( $jetpack_methods, $core_methods, $user = false ) {
    253         if ( $this->needs_jetpack_293_fix() && !$user )
    254             unset( $jetpack_methods['jetpack.jsonAPI'], $jetpack_methods['jetpack.verifyAction'] );
    255         return $jetpack_methods;
    256     }
    257 
    258     function disable_xmlrpc_methods_293( $core_methods ) {
    259         if ( $this->needs_jetpack_293_fix() )
    260             unset( $core_methods['jetpack.verifyAction'] );
    261         return $core_methods;
    262     }
    263 
    264     function needs_jetpack_293_fix() {
    265         if ( ! defined( 'JETPACK__VERSION' ) )
    266             return false;
    267         $secure_jetpacks = array(
    268             '1.9' => '1.9.3',
    269             '2.0' => '2.0.5',
    270             '2.1' => '2.1.3',
    271             '2.2' => '2.2.6',
    272             '2.3' => '2.3.6',
    273             '2.4' => '2.4.3',
    274             '2.5' => '2.5.1',
    275             '2.6' => '2.6.2',
    276             '2.7' => '2.7.1',
    277             '2.8' => '2.8.1',
    278             '2.9' => '2.9.3',
    279         );
    280         $float_version = (string) floatval( JETPACK__VERSION );
    281         if ( ! isset( $secure_jetpacks[ $float_version ] ) )
    282             return false;
    283         return version_compare( JETPACK__VERSION, $secure_jetpacks[ $float_version ], '<' );
    284     }
    285 
    286     function r21138_xmlrpc_edit_posts( $caps, $cap, $user_id, $args ) {
    287         if ( ! isset( $args[0] ) || isset( $args[1] ) && $args[1] === 'hotfixed' )
    288             return $caps;
    289         foreach ( get_post_types( array(), 'objects' ) as $post_type_object ) {
    290             if ( $cap === $post_type_object->cap->edit_posts )
    291                 return map_meta_cap( $post_type_object->cap->edit_post, $user_id, $args[0], 'hotfixed' );
    292         }
    293         return $caps;
    294     }
    295 
    296     function r21152_unfiltered_html( $caps, $cap, $user_id, $args ) {
    297         if ( $cap !== 'unfiltered_html' )
    298             return $caps;
    299         if ( defined( 'DISALLOW_UNFILTERED_HTML' ) && DISALLOW_UNFILTERED_HTML )
    300             return $caps;
    301         $key = array_search( 'do_not_allow', $caps );
    302         if ( false !== $key )
    303             return $caps;
    304         if ( is_multisite() && ! is_super_admin( $user_id ) )
    305             $caps[$key] = 'do_not_allow';
    306         return $caps;
    307     }
    308 
    30959    function get_pagenum_link( $url ) {
    31060        return esc_url_raw( $url );
    311     }
    312 
    313     function r20486_comment_post_redirect( $location ) {
    314         $location = wp_sanitize_redirect( $location );
    315         $location = wp_validate_redirect( $location, admin_url() );
    316 
    317         return $location;
    318     }
    319 
    320     function r20493_make_clickable( $text ) {
    321         $r = '';
    322         $textarr = preg_split( '/(<[^<>]+>)/', $text, -1, PREG_SPLIT_DELIM_CAPTURE ); // split out HTML tags
    323         foreach ( $textarr as $piece ) {
    324             if ( empty( $piece ) || ( $piece[0] == '<' && ! preg_match('|^<\s*[\w]{1,20}+://|', $piece) ) ) {
    325                 $r .= $piece;
    326                 continue;
    327             }
    328 
    329             // Long strings might contain expensive edge cases ...
    330             if ( 10000 < strlen( $piece ) ) {
    331                 // ... break it up
    332                 foreach ( $this->r20493_split_str_by_whitespace( $piece, 2100 ) as $chunk ) { // 2100: Extra room for scheme and leading and trailing paretheses
    333                     if ( 2101 < strlen( $chunk ) ) {
    334                         $r .= $chunk; // Too big, no whitespace: bail.
    335                     } else {
    336                         $r .= $this->r20493_make_clickable( $chunk );
    337                     }
    338                 }
    339             } else {
    340                 $ret = " $piece "; // Pad with whitespace to simplify the regexes
    341 
    342                 $url_clickable = '~
    343                     ([\\s(<.,;:!?])                                        # 1: Leading whitespace, or punctuation
    344                     (                                                      # 2: URL
    345                         [\\w]{1,20}+://                                # Scheme and hier-part prefix
    346                         (?=\S{1,2000}\s)                               # Limit to URLs less than about 2000 characters long
    347                         [\\w\\x80-\\xff#%\\~/@\\[\\]*(+=&$-]*+         # Non-punctuation URL character
    348                         (?:                                            # Unroll the Loop: Only allow puctuation URL character if followed by a non-punctuation URL character
    349                             [\'.,;:!?)]                            # Punctuation URL character
    350                             [\\w\\x80-\\xff#%\\~/@\\[\\]*(+=&$-]++ # Non-punctuation URL character
    351                         )*
    352                     )
    353                     (\)?)                                                  # 3: Trailing closing parenthesis (for parethesis balancing post processing)
    354                 ~xS'; // The regex is a non-anchored pattern and does not have a single fixed starting character.
    355                       // Tell PCRE to spend more time optimizing since, when used on a page load, it will probably be used several times.
    356 
    357                 $ret = preg_replace_callback( $url_clickable, array( $this, 'r20493_make_url_clickable_cb') , $ret );
    358 
    359                 $ret = preg_replace_callback( '#([\s>])((www|ftp)\.[\w\\x80-\\xff\#$%&~/.\-;:=,?@\[\]+]+)#is', '_make_web_ftp_clickable_cb', $ret );
    360                 $ret = preg_replace_callback( '#([\s>])([.0-9a-z_+-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,})#i', '_make_email_clickable_cb', $ret );
    361 
    362                 $ret = substr( $ret, 1, -1 ); // Remove our whitespace padding.
    363                 $r .= $ret;
    364             }
    365         }
    366 
    367         // Cleanup of accidental links within links
    368         $r = preg_replace( '#(<a( [^>]+?>|>))<a [^>]+?>([^>]+?)</a></a>#i', "$1$3</a>", $r );
    369         return $r;
    37061    }
    37162
     
    422113    }
    423114
    424     function r16625( $query ) {
    425         // Hotfixes: http://core.trac.wordpress.org/changeset/16625
    426 
    427         // Punt as fast as possible if this isn't an UPDATE
    428         if ( substr( $query, 0, 6 ) != "UPDATE" )
    429             return $query;
    430         global $wpdb;
    431 
    432         // Determine what the prefix of the bad query would look like and punt if this query doesn't match
    433         $badstring = "UPDATE $wpdb->posts SET to_ping = TRIM(REPLACE(to_ping, '";
    434         if ( substr( $query, 0, strlen( $badstring ) ) != $badstring )
    435             return $query;
    436 
    437         // Pull the post_id which is the last thing in the origin query, after a space, no quotes
    438         $query_parts = explode( " ", $query );
    439         $post_id = array_pop( $query_parts );
    440 
    441         // Chop off the beginning and end of the original query to get our unsanitized $tb_ping
    442         $tb_ping = substr(
    443             $query,
    444             strlen( $badstring ),
    445             (
    446                 strlen( $query ) - (
    447                     strlen( $badstring ) + strlen( sprintf( "', '')) WHERE ID = %d", $post_id ) )
    448                 )
    449             )
    450         );
    451 
    452         // Return the fixed query
    453         return $wpdb->prepare( "UPDATE $wpdb->posts SET to_ping = TRIM(REPLACE(to_ping, %s, '')) WHERE ID = %d", $tb_ping, $post_id );
    454     }
    455 
    456     function filter_xmlrpc_methods( $xmlrpc_method ) {
    457         // Hotfixes: http://core.trac.wordpress.org/changeset/16803
    458         global $wp_xmlrpc_server;
    459         // Pretend that we are an xmlrpc method, freshly called
    460         $args = $wp_xmlrpc_server->message->params;
    461         $error_code = 401;
    462         switch( $xmlrpc_method ) {
    463                 case 'metaWeblog.newPost':
    464                         $content_struct = $args[3];
    465                         $publish = isset( $args[4] ) ? $args[4] : 0;
    466                         if ( !empty( $content_struct['post_type'] ) ) {
    467                                 if ( $content_struct['post_type'] == 'page' ) {
    468                                         if ( $publish || 'publish' == $content_struct['page_status'] )
    469                                                 $cap  = 'publish_pages';
    470                                         else
    471                                                 $cap = 'edit_pages';
    472                                         $error_message = __( 'Sorry, you are not allowed to publish pages on this site.' );
    473                                 } elseif ( $content_struct['post_type'] == 'post' ) {
    474                                         if ( $publish || 'publish' == $content_struct['post_status'] )
    475                                                 $cap  = 'publish_posts';
    476                                         else
    477                                                 $cap = 'edit_posts';
    478                                         $error_message = __( 'Sorry, you are not allowed to publish posts on this site.' );
    479                                 } else {
    480                                         $error_message = __( 'Invalid post type.' );
    481                                 }
    482                         } else {
    483                                 if ( $publish || 'publish' == $content_struct['post_status'] )
    484                                         $cap  = 'publish_posts';
    485                                 else
    486                                         $cap = 'edit_posts';
    487                                 $error_message = __( 'Sorry, you are not allowed to publish posts on this site.' );
    488                         }
    489                         if ( current_user_can( $cap ) )
    490                                 return true;
    491                         break;
    492                 case 'metaWeblog.editPost':
    493                         $post_ID = (int) $args[0];
    494                         $content_struct = $args[3];
    495                         $publish = $args[4] || ( isset( $content_struct['post_status'] ) && in_array( $content_struct['post_status'], array( 'publish', 'private' ) ) );
    496                         $cap = ( $publish ) ? 'publish_posts' : 'edit_posts';
    497                         $error_message = __( 'Sorry, you are not allowed to publish posts on this site.' );
    498                         if ( !empty( $content_struct['post_type'] ) ) {
    499                             if ( $content_struct['post_type'] == 'page' ) {
    500                                 $error_message = __( 'Sorry, you are not allowed to publish pages on this site.' );
    501                             } elseif ( $content_struct['post_type'] == 'post' ) {
    502                                 $error_message = __( 'Sorry, you are not allowed to publish posts on this site.' );
    503                             } else {
    504                                 $error_message = __( 'Invalid post type.' );
    505                             }
    506                         }
    507                         if ( current_user_can( $cap ) )
    508                                 return true;
    509                         break;
    510                 case 'mt.publishPost':
    511                         $post_ID = (int) $args[0];
    512                         if ( current_user_can( 'publish_posts' ) && current_user_can( 'edit_post', $post_ID ) )
    513                                 return true;
    514                         $error_message = __( 'Sorry, you cannot edit this post.' );
    515                         break;
    516                 case 'blogger.deletePost':
    517                         $post_ID = (int) $args[1];
    518                         if ( current_user_can( 'delete_post', $post_ID ) )
    519                                 return true;
    520                         $error_message = __( 'Sorry, you do not have the right to delete this post.' );
    521                         break;
    522                 case 'wp.getPageStatusList':
    523                         if ( current_user_can( 'edit_pages' ) )
    524                                 return true;
    525                         $error_code = 403;
    526                         $error_message = __( 'You are not allowed access to details about this site.' );
    527                         break;
    528                 case 'wp.deleteComment':
    529                 case 'wp.editComment':
    530                         $comment_ID = (int) $args[3];
    531                         if ( !$comment = get_comment( $comment_ID ) )
    532                                 return true; // This will be handled in the calling function explicitly
    533                         if ( current_user_can( 'edit_post', $comment->comment_post_ID ) )
    534                                 return true;
    535                         $error_code = 403;
    536                         $error_message = __( 'You are not allowed to moderate comments on this site.' );
    537                         break;
    538                 default:
    539                         return true;
    540         }
    541         // If we are here then this was a handlable xmlrpc call and the capability checks above all failed
    542         // ( otherwise they would have returned to the do_action from the switch statement above ) so it's
    543         // time to exit with whatever error we've determined is the problem (thus short circuiting the
    544         // original XMLRPC method call, and enforcing the above capability checks -- with an ax.  We'll
    545         // mimic the behavior from the end of IXR_Server::serve()
    546         $r = new IXR_Error( $error_code, $error_message );
    547         $resultxml = $r->getXml();
    548         $xml = <<<EOD
    549 <methodResponse>
    550   <params>
    551     <param>
    552       <value>
    553         $resultxml
    554       </value>
    555     </param>
    556   </params>
    557 </methodResponse>
    558 EOD;
    559         $wp_xmlrpc_server->output( $xml );
    560         // For good measure...
    561         die();
    562     }
    563 
    564     function r17172_esc_url( $url, $original_url, $_context ) {
    565         $url = $original_url;
    566 
    567         if ( '' == $url )
    568             return $url;
    569         $url = preg_replace('|[^a-z0-9-~+_.?#=!&;,/:%@$\|*\'()\\x80-\\xff]|i', '', $url);
    570         $strip = array('%0d', '%0a', '%0D', '%0A');
    571         $url = _deep_replace($strip, $url);
    572         $url = str_replace(';//', '://', $url);
    573         /* If the URL doesn't appear to contain a scheme, we
    574          * presume it needs http:// appended (unless a relative
    575          * link starting with /, # or ? or a php file).
    576          */
    577         if ( strpos($url, ':') === false && ! in_array( $url[0], array( '/', '#', '?' ) ) &&
    578             ! preg_match('/^[a-z0-9-]+?\.php/i', $url) )
    579             $url = 'http://' . $url;
    580 
    581         // Replace ampersands and single quotes only when displaying.
    582         if ( 'display' == $_context ) {
    583             $url = wp_kses_normalize_entities( $url );
    584             $url = str_replace( '&amp;', '&#038;', $url );
    585             $url = str_replace( "'", '&#039;', $url );
    586         }
    587 
    588         $protocols = array ('http', 'https', 'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', 'nntp', 'feed', 'telnet', 'mms', 'rtsp', 'svn');
    589         if ( VaultPress_kses::wp_kses_bad_protocol( $url, $protocols ) != $url )
    590             return '';
    591         return $url;
    592     }
    593 
    594     // http://core.trac.wordpress.org/changeset/17172
    595     // http://core.trac.wordpress.org/changeset/20541
    596     function r17172_wp_kses( $string, $html, $protocols ) {
    597         return VaultPress_kses::wp_kses( $string, $html, $protocols );
    598     }
    599 
    600     // http://core.trac.wordpress.org/changeset/17990
    601     function r17990( $filename ) {
    602         $parts = explode('.', $filename);
    603         $filename = array_shift($parts);
    604         $extension = array_pop($parts);
    605         $mimes = get_allowed_mime_types();
    606 
    607         // Loop over any intermediate extensions.  Munge them with a trailing underscore if they are a 2 - 5 character
    608         // long alpha string not in the extension whitelist.
    609         foreach ( (array) $parts as $part) {
    610             $filename .= '.' . $part;
    611 
    612             if ( preg_match("/^[a-zA-Z]{2,5}\d?$/", $part) ) {
    613                 $allowed = false;
    614                 foreach ( $mimes as $ext_preg => $mime_match ) {
    615                     $ext_preg = '!^(' . $ext_preg . ')$!i';
    616                     if ( preg_match( $ext_preg, $part ) ) {
    617                         $allowed = true;
    618                         break;
    619                     }
    620                 }
    621                 if ( !$allowed )
    622                     $filename .= '_';
    623             }
    624         }
    625         $filename .= '.' . $extension;
    626         return $filename;
    627     }
    628 
    629     /*
    630      * Hotfixes: http://core.trac.wordpress.org/changeset/18368
    631      */
    632     function r18368( $post, $raw_post ) {
    633         if ( isset( $post['filter'] ) || isset ( $raw_post['filter'] ) ) {
    634             unset( $post['filter'], $raw_post['filter'] ); // to ensure the post is properly sanitized
    635             $post = sanitize_post($post, 'db');
    636         }
    637         if ( empty( $post['ID'] ) )
    638             unset( $post['ID'] ); // sanitize_post
    639         unset( $post['filter'] ); // sanitize_post
    640         return $post;
    641     }
    642 
    643     /**
    644      * Protect WordPress internal metadata.
    645      *
    646      * The post data is passed as a parameter to (unit) test this method.
    647      * @param $post_data|array the $_POST array.
    648      */
    649     function r17994( &$post_data ) {
    650         // Protect admin-ajax add_meta
    651         $metakeyselect = isset( $post_data['metakeyselect'] ) ? stripslashes( trim( $post_data['metakeyselect'] ) ) : '';
    652         $metakeyinput = isset( $post_data['metakeyinput'] ) ? stripslashes( trim( $post_data['metakeyinput'] ) ) : '';
    653 
    654         if ( ( $metakeyselect && '_' == $metakeyselect[0] ) || ( $metakeyinput && '_' == $metakeyinput[0] ) ) {
    655             unset( $_POST['metakeyselect'], $_POST['metakeyinput'] );
    656         }
    657 
    658         // Protect admin-ajax update_meta
    659         if ( isset( $post_data['meta'] ) ) {
    660             foreach ( (array)$post_data['meta'] as $mid => $value ) {
    661                 $key = stripslashes( $post_data['meta'][$mid]['key'] );
    662                 if ( $key && '_' == $key[0] )
    663                     unset( $post_data['meta'][$mid] );
    664             }
    665         }
    666     }
    667 
    668     function r17994_sanitize_mime_type( $mime_type ) {
    669         $sani_mime_type = preg_replace( '/[^\-*.a-zA-Z0-9\/+]/', '', $mime_type );
    670         return apply_filters( 'sanitize_mime_type', $sani_mime_type, $mime_type );
    671     }
    672 
    673     function r17826_send_frame_options_header() {
    674         @header( 'X-Frame-Options: SAMEORIGIN' );
    675     }
    676 
    677     function r18346_sanitize_admin_email_on_save($value) {
    678         $value = sanitize_email( $value );
    679         if ( !is_email( $value ) ) {
    680             $value = get_option( 'new_admin_email' ); // Resets option to stored value in the case of failed sanitization
    681             if ( function_exists( 'add_settings_error' ) )
    682                 add_settings_error( 'new_admin_email', 'invalid_admin_email', __( 'The email address entered did not appear to be a valid email address. Please enter a valid email address.' ) );
    683         }
    684         return $value;
    685     }
    686 
    687115    function r18346_sanitize_admin_email( $value ) {
    688116        return sanitize_email( $value ); // Is it enough ?
    689     }
    690 
    691     function r18346_sanitize_lang_on_save( $value ) {
    692         $value = $this->r18346_sanitize_lang( $value ); // sanitize the new value.
    693         if ( empty( $value ) )
    694             $value = get_option( 'WPLANG' );
    695         return $value;
    696117    }
    697118
     
    724145    }
    725146
    726     // Protect The MailPoet plugin (wysija-newsletters) from remote file upload. Affects versions <= 2.6.6
    727     function protect_wysija_newsletters_verify_capability() {
    728         if ( !class_exists( 'WYSIJA_object' ) )
    729             return true;
    730         if ( version_compare( WYSIJA::get_version(), '2.6.7', '>=' ) )
    731             return true;
    732         if ( !defined( 'DOING_AJAX' ) && !defined( 'WYSIJA_ITF' ) )
    733             return true;
    734         if( isset( $_REQUEST['page'] ) && substr( $_REQUEST['page'] ,0 ,7 ) == 'wysija_' ){
    735 
    736             switch( $_REQUEST['page'] ){
    737                 case 'wysija_campaigns':
    738                     $role_needed = 'wysija_newsletters';
    739                     break;
    740                 case 'wysija_subscribers':
    741                     $role_needed = 'wysija_subscribers';
    742                     break;
    743                 case 'wysija_config':
    744                     $role_needed = 'wysija_config';
    745                     break;
    746                 case 'wysija_statistics':
    747                     $role_needed = 'wysija_stats_dashboard';
    748                     break;
    749                 default:
    750                     $role_needed = 'switch_themes';
    751             }
    752 
    753             if( current_user_can( $role_needed ) ){
    754                 return true;
    755             } else{
    756                 die( 'You are not allowed here.' );
    757             }
    758 
    759         }else{
    760             // this is not a wysija interface/action we can let it pass
    761             return true;
    762         }
    763     }
    764 
    765     // Protect the Revolution Slider plugin (revslider) from local file inclusion. Affects versions < 4.2
    766     function protect_revslider_lfi() {
    767         if ( isset( $_GET['action'] ) && 'revslider_show_image' == $_GET['action'] ) {
    768             $img = '';
    769             if ( isset( $_GET['img'] ) )
    770                 $img = $_GET['img'];
    771             if ( is_numeric( $img ) )
    772                 return;
    773             $validate = validate_file( $img );
    774             if ( 0 !== $validate )
    775                 die( 'invalid file' );
    776             if ( !file_exists( $img ) )
    777                 die( 'file does not exist' );
    778         }
    779     }
    780 
    781147    // Protect WooCommerce 2.0.20 - 2.3.10 from PayPal IPN object injection attack.
    782148    function protect_woocommerce_paypal_object_injection() {
     
    797163            }
    798164        }
    799     }
    800 
    801     // Protect WordPress 3.1.0 -> WordPress 4.3.0 from code injection via user email
    802     function patch_user_email( $value, $user_id, $context ) {
    803         if ( 'display' === $context && class_exists( 'WP_Users_List_Table' ) ) {
    804             return esc_attr( $value );
    805         }
    806 
    807         return $value;
    808     }
    809 
    810     // Protect WordPress < 4.3.1 from evil tags inside caption shortcodes
    811     function filtered_caption_shortcode( $attr, $content = null ) {
    812         if ( isset( $attr['caption'] ) && strpos( $attr['caption'], '<' ) !== false ) {
    813             $attr['caption'] = wp_kses( $attr['caption'], 'post' );
    814         }
    815 
    816         return img_caption_shortcode( $attr, $content );
    817     }
    818 
    819     // Protect Akismet < 3.1.5 from stored XSS in admin page
    820     function protect_akismet_comment_xss() {
    821         remove_filter( 'comment_text', array( 'Akismet_Admin', 'text_add_link_class' ) );
    822     }
    823 }
    824 
    825 global $wp_version;
    826 $needs_class_fix = version_compare( $wp_version, '3.1', '>=') && version_compare( $wp_version, '3.1.3', '<' );
    827 if ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST && $needs_class_fix ) {
    828     include_once( ABSPATH . WPINC . '/class-IXR.php' );
    829     include_once( ABSPATH . WPINC . '/class-wp-xmlrpc-server.php' );
    830 
    831     class VaultPress_XMLRPC_Server_r17994 extends wp_xmlrpc_server {
    832         function set_custom_fields( $post_id, $fields ) {
    833             foreach( $fields as $k => $meta ) {
    834                 $key = stripslashes( trim( $meta['key'] ) );
    835                 if ( $key && '_' ==  $key[0] )
    836                     unset( $fields[$k] );
    837             }
    838             parent::set_custom_fields( $post_id, $fields );
    839         }
    840     }
    841 
    842     function r17994_xmlrpc_server() {
    843         return 'VaultPress_XMLRPC_Server_r17994';
    844165    }
    845166}
  • vaultpress/trunk/composer.json

    r2354699 r2611140  
    66    "license": "GPL-2.0-or-later",
    77    "support": {
    8         "issues": "https://github.com/Automattic/vaultpress/issues"
     8        "issues": "https://github.com/Automattic/jetpack/issues"
    99    },
    1010    "require": {
    11         "automattic/jetpack-logo": "1.3.0",
    12         "automattic/jetpack-autoloader": "1.7.0"
     11        "automattic/jetpack-logo": "^1.5",
     12        "automattic/jetpack-autoloader": "^2.10"
    1313    },
    1414    "require-dev": {
    15         "automattic/jetpack-standards": "master-dev"
     15        "yoast/phpunit-polyfills": "1.0.2",
     16        "automattic/jetpack-changelogger": "^2.0"
    1617    },
    1718    "scripts": {
    18         "php:compatibility": "composer install && vendor/bin/phpcs -p -s -n --runtime-set testVersion '5.3-' --standard=PHPCompatibilityWP --ignore=docker,tools,tests,node_modules,vendor --extensions=php",
    19         "php:lint": "composer install && vendor/bin/phpcs -p -s",
    20         "php:autofix": "composer install && vendor/bin/phpcbf",
    21         "php:lint:errors": "composer install && vendor/bin/phpcs -p -s --runtime-set ignore_warnings_on_exit 1"
     19        "phpunit": [
     20            "./vendor/phpunit/phpunit/phpunit --colors=always"
     21        ],
     22        "test-coverage": [
     23            "@composer install",
     24            "phpdbg -d memory_limit=2048M -d max_execution_time=900 -qrr ./vendor/bin/phpunit --coverage-clover \"$COVERAGE_DIR/clover.xml\""
     25        ],
     26        "test-php": [
     27            "@composer install",
     28            "@composer phpunit"
     29        ],
     30        "build-development": [
     31            "Composer\\Config::disableProcessTimeout",
     32            "@clean",
     33            "@composer install"
     34        ],
     35        "build-production": [
     36            "Composer\\Config::disableProcessTimeout",
     37            "@clean",
     38            "@putenv COMPOSER_MIRROR_PATH_REPOS=1",
     39            "@composer install -o --no-dev --classmap-authoritative --prefer-dist"
     40        ],
     41        "clean": [
     42            "rm -rf vendor/"
     43        ]
     44    },
     45    "repositories": [],
     46    "minimum-stability": "dev",
     47    "prefer-stable": true,
     48    "config": {
     49        "autoloader-suffix": "9559eef123208b7d1b9c15b978567267_vaultpressⓥ2_2_0_beta"
     50    },
     51    "extra": {
     52        "mirror-repo": "Automattic/vaultpress",
     53        "release-branch-prefix": "vaultpress",
     54        "version-constants": {
     55            "VAULTPRESS__VERSION": "vaultpress.php"
     56        },
     57        "wp-plugin-slug": "vaultpress"
    2258    }
    2359}
  • vaultpress/trunk/cron-tasks.php

    r2063252 r2611140  
    1212    // Do 'all' actions first
    1313    if ( isset($wp_filter['all']) ) {
     14        $all_args = func_get_args();
    1415        $wp_current_filter[] = $tag;
    15         $all_args = func_get_args();
    1616        _wp_call_all_hook($all_args);
    1717    }
  • vaultpress/trunk/readme.txt

    r2354794 r2611140  
    4949
    5050== Changelog ==
     51### 2.2.0-beta - 2021-10-07
     52#### Changed
     53- Tests: update PHPUnit polyfills dependency (yoast/phpunit-polyfills).
     54- Updated package dependencies.
    5155
    52 = 2.1.4 =
     56#### Removed
     57- VaultPress: Remove obsolete hotfixes
    5358
    54 * Release date: August 7, 2020
    55 
    56 ** Opcache Conflict **
    57 
    58 * General: Revert autoloader version to prior 1.7.0 version, to resolve an intermittent issue during the upgrade process for some users.
    59 
    60 = 2.1.3 =
    61 
    62 * Release date: August 6, 2020
    63 
    64 ** Compatibility **
    65 
    66 * General: Handle new user meta actions.
    67 * General: Implement the spread operator for our IXR class methods to match WordPress Core behavior in 5.5.
    68 * General: Update some miscellaneous dependencies.
    69 
    70 = 2.1.2 =
    71 
    72 * Release date: Not publicly released, all changes shipped in subsequent version instead.
    73 
    74 = 2.1.1 =
    75 
    76 * Release date: December 10, 2019
    77 
    78 **Compatibility**
    79 
    80 * General: the VaultPress plugin now requires PHP 5.6, just like WordPress.
    81 * General: avoid using PHP short array syntax to load plugin files.
    82 
    83 = 2.1 =
    84 
    85 * Release date: December 9, 2019
    86 
    87 **Compatibility**
    88 
    89 * General: avoid PHP deprecation notices when using a newer version of the Jetpack plugin.
    90 * Admin Page: do not display a dashboard link if not registered.
    91 * Admin Page: update reset settings card wording.
    92 * Connect button: update link to current VaultPress page.
    93 * Notices: only display notices in specific locations.
    94 * Notices: update wording for the VaultPress connection notice
     59#### Fixed
     60- General: avoid PHP notices when using recent versions of PHP.
    9561
    9662--------
    9763
    98 [See the previous changelogs here](https://raw.githubusercontent.com/Automattic/vaultpress/master/changelog.txt).
     64[See the previous changelogs here](https://github.com/Automattic/jetpack/blob/master/projects/plugins/vaultpress/CHANGELOG.md#changelog)
  • vaultpress/trunk/vaultpress.php

    r2354699 r2611140  
    44 * Plugin URI: http://vaultpress.com/?utm_source=plugin-uri&amp;utm_medium=plugin-description&amp;utm_campaign=1.0
    55 * Description: Protect your content, themes, plugins, and settings with <strong>realtime backup</strong> and <strong>automated security scanning</strong> from <a href="http://vaultpress.com/?utm_source=wp-admin&amp;utm_medium=plugin-description&amp;utm_campaign=1.0" rel="nofollow">VaultPress</a>. Activate, enter your registration key, and never worry again. <a href="http://vaultpress.com/help/?utm_source=wp-admin&amp;utm_medium=plugin-description&amp;utm_campaign=1.0" rel="nofollow">Need some help?</a>
    6  * Version: 2.1.4
     6 * Version: 2.2.0-beta
    77 * Author: Automattic
    88 * Author URI: http://vaultpress.com/?utm_source=author-uri&amp;utm_medium=plugin-description&amp;utm_campaign=1.0
     
    1111 * Domain Path: /languages/
    1212 *
    13  * @package VaultPress
     13 * @package automattic/vaultpress
    1414 */
    1515
     
    1818
    1919define( 'VAULTPRESS__MINIMUM_PHP_VERSION', '5.6' );
    20 define( 'VAULTPRESS__VERSION', '2.1.4' );
     20define( 'VAULTPRESS__VERSION', '2.2.0-beta' );
    2121define( 'VAULTPRESS__PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
    2222
     
    30473047if ( isset( $_GET['vaultpress'] ) && $_GET['vaultpress'] ) {
    30483048    if ( !function_exists( 'wp_magic_quotes' ) ) {
    3049         // If already slashed, strip.
    3050         if ( get_magic_quotes_gpc() ) {
    3051             $_GET    = stripslashes_deep( $_GET    );
    3052             $_POST   = stripslashes_deep( $_POST   );
    3053             $_COOKIE = stripslashes_deep( $_COOKIE );
    3054         }
    3055 
    30563049        // Escape with wpdb.
    30573050        $_GET    = add_magic_quotes( $_GET    );
  • vaultpress/trunk/vendor/autoload.php

    r2354699 r2611140  
    55require_once __DIR__ . '/composer/autoload_real.php';
    66
    7 return ComposerAutoloaderInitabbe6786ee8beb5eddaaf6583db0467b::getLoader();
     7return ComposerAutoloaderInit9559eef123208b7d1b9c15b978567267_vaultpressⓥ2_2_0_beta::getLoader();
  • vaultpress/trunk/vendor/autoload_packages.php

    r2354699 r2611140  
    11<?php
    22/**
    3  * This file `autoload_packages.php`was generated by automattic/jetpack-autoloader.
    4  *
    5  * From your plugin include this file with:
    6  * require_once . plugin_dir_path( __FILE__ ) . '/vendor/autoload_packages.php';
     3 * This file was automatically generated by automattic/jetpack-autoloader.
    74 *
    85 * @package automattic/jetpack-autoloader
    96 */
    107
    11 // phpcs:disable PHPCompatibility.LanguageConstructs.NewLanguageConstructs.t_ns_separatorFound
    12 // phpcs:disable PHPCompatibility.Keywords.NewKeywords.t_namespaceFound
    13 // phpcs:disable PHPCompatibility.Keywords.NewKeywords.t_ns_cFound
     8namespace Automattic\Jetpack\Autoloader\jp9559eef123208b7d1b9c15b978567267_vaultpressⓥ2_2_0_beta;
    149
    15 namespace Automattic\Jetpack\Autoloader;
     10 // phpcs:ignore
    1611
    17 if ( ! function_exists( __NAMESPACE__ . '\enqueue_package_class' ) ) {
    18     global $jetpack_packages_classes;
    19 
    20     if ( ! is_array( $jetpack_packages_classes ) ) {
    21         $jetpack_packages_classes = array();
    22     }
    23     /**
    24      * Adds the version of a package to the $jetpack_packages global array so that
    25      * the autoloader is able to find it.
    26      *
    27      * @param string $class_name Name of the class that you want to autoload.
    28      * @param string $version Version of the class.
    29      * @param string $path Absolute path to the class so that we can load it.
    30      */
    31     function enqueue_package_class( $class_name, $version, $path ) {
    32         global $jetpack_packages_classes;
    33 
    34         if ( ! isset( $jetpack_packages_classes[ $class_name ] ) ) {
    35             $jetpack_packages_classes[ $class_name ] = array(
    36                 'version' => $version,
    37                 'path'    => $path,
    38             );
    39 
    40             return;
    41         }
    42         // If we have a @dev version set always use that one!
    43         if ( 'dev-' === substr( $jetpack_packages_classes[ $class_name ]['version'], 0, 4 ) ) {
    44             return;
    45         }
    46 
    47         // Always favour the @dev version. Since that version is the same as bleeding edge.
    48         // We need to make sure that we don't do this in production!
    49         if ( 'dev-' === substr( $version, 0, 4 ) ) {
    50             $jetpack_packages_classes[ $class_name ] = array(
    51                 'version' => $version,
    52                 'path'    => $path,
    53             );
    54 
    55             return;
    56         }
    57         // Set the latest version!
    58         if ( version_compare( $jetpack_packages_classes[ $class_name ]['version'], $version, '<' ) ) {
    59             $jetpack_packages_classes[ $class_name ] = array(
    60                 'version' => $version,
    61                 'path'    => $path,
    62             );
    63         }
    64     }
    65 }
    66 
    67 if ( ! function_exists( __NAMESPACE__ . '\enqueue_package_file' ) ) {
    68     global $jetpack_packages_files;
    69 
    70     if ( ! is_array( $jetpack_packages_files ) ) {
    71         $jetpack_packages_files = array();
    72     }
    73     /**
    74      * Adds the version of a package file to the $jetpack_packages_files global array so that
    75      * we can load the most recent version after 'plugins_loaded'.
    76      *
    77      * @param string $file_identifier Unique id to file assigned by composer based on package name and filename.
    78      * @param string $version Version of the file.
    79      * @param string $path Absolute path to the file so that we can load it.
    80      */
    81     function enqueue_package_file( $file_identifier, $version, $path ) {
    82         global $jetpack_packages_files;
    83 
    84         if ( ! isset( $jetpack_packages_files[ $file_identifier ] ) ) {
    85             $jetpack_packages_files[ $file_identifier ] = array(
    86                 'version' => $version,
    87                 'path'    => $path,
    88             );
    89 
    90             return;
    91         }
    92         // If we have a @dev version set always use that one!
    93         if ( 'dev-' === substr( $jetpack_packages_files[ $file_identifier ]['version'], 0, 4 ) ) {
    94             return;
    95         }
    96 
    97         // Always favour the @dev version. Since that version is the same as bleeding edge.
    98         // We need to make sure that we don't do this in production!
    99         if ( 'dev-' === substr( $version, 0, 4 ) ) {
    100             $jetpack_packages_files[ $file_identifier ] = array(
    101                 'version' => $version,
    102                 'path'    => $path,
    103             );
    104 
    105             return;
    106         }
    107         // Set the latest version!
    108         if ( version_compare( $jetpack_packages_files[ $file_identifier ]['version'], $version, '<' ) ) {
    109             $jetpack_packages_files[ $file_identifier ] = array(
    110                 'version' => $version,
    111                 'path'    => $path,
    112             );
    113         }
    114     }
    115 }
    116 
    117 if ( ! function_exists( __NAMESPACE__ . '\file_loader' ) ) {
    118     /**
    119      * Include latest version of all enqueued files. Should be called after all plugins are loaded.
    120      */
    121     function file_loader() {
    122         global $jetpack_packages_files;
    123         foreach ( $jetpack_packages_files as $file_identifier => $file_data ) {
    124             if ( empty( $GLOBALS['__composer_autoload_files'][ $file_identifier ] ) ) {
    125                 require $file_data['path'];
    126 
    127                 $GLOBALS['__composer_autoload_files'][ $file_identifier ] = true;
    128             }
    129         }
    130     }
    131 }
    132 
    133 if ( ! function_exists( __NAMESPACE__ . '\autoloader' ) ) {
    134     /**
    135      * Used for autoloading jetpack packages.
    136      *
    137      * @param string $class_name Class Name to load.
    138      */
    139     function autoloader( $class_name ) {
    140         global $jetpack_packages_classes;
    141 
    142         if ( isset( $jetpack_packages_classes[ $class_name ] ) ) {
    143             if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
    144                 // TODO ideally we shouldn't skip any of these, see: https://github.com/Automattic/jetpack/pull/12646.
    145                 $ignore = in_array(
    146                     $class_name,
    147                     array(
    148                         'Automattic\Jetpack\Connection\Manager',
    149                         'Jetpack_Options',
    150                     ),
    151                     true
    152                 );
    153 
    154                 if ( ! $ignore && function_exists( 'did_action' ) && ! did_action( 'plugins_loaded' ) ) {
    155                     _doing_it_wrong(
    156                         esc_html( $class_name ),
    157                         sprintf(
    158                         /* translators: %s Name of a PHP Class */
    159                             esc_html__( 'Not all plugins have loaded yet but we requested the class %s', 'jetpack' ),
    160                             // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
    161                             $class_name
    162                         ),
    163                         esc_html( $jetpack_packages_classes[ $class_name ]['version'] )
    164                     );
    165                 }
    166             }
    167 
    168             require_once $jetpack_packages_classes[ $class_name ]['path'];
    169 
    170             return true;
    171         }
    172 
    173         return false;
    174     }
    175 
    176     // Add the jetpack autoloader.
    177     spl_autoload_register( __NAMESPACE__ . '\autoloader' );
    178 }
    179 /**
    180  * Prepare all the classes for autoloading.
    181  */
    182 function enqueue_packages_dad950db79c73a765361c7b7c609843f() {
    183     $class_map = require_once dirname( __FILE__ ) . '/composer/autoload_classmap_package.php';
    184     foreach ( $class_map as $class_name => $class_info ) {
    185         enqueue_package_class( $class_name, $class_info['version'], $class_info['path'] );
    186     }
    187 
    188     $autoload_file = __DIR__ . '/composer/autoload_files_package.php';
    189 
    190     $includeFiles = file_exists( $autoload_file )
    191         ? require $autoload_file
    192         : array();
    193 
    194     foreach ( $includeFiles as $fileIdentifier => $file_data ) {
    195         enqueue_package_file( $fileIdentifier, $file_data[ 'version' ], $file_data[ 'path' ] );
    196     }
    197 
    198     if ( function_exists( 'has_action') && function_exists( 'did_action' ) && ! did_action( 'plugins_loaded' ) && false === has_action( 'plugins_loaded', __NAMESPACE__ . '\file_loader' ) ) {
    199         // Add action if it has not been added and has not happened yet.
    200         // Priority -10 to load files as early as possible in case plugins try to use them during `plugins_loaded`.
    201         add_action( 'plugins_loaded', __NAMESPACE__ . '\file_loader', 0, -10 );
    202     } elseif( ! function_exists( 'did_action' ) || did_action( 'plugins_loaded' ) ) {
    203         file_loader(); // Either WordPress is not loaded or plugin is doing it wrong. Either way we'll load the files so nothing breaks.
    204     }
    205 }
    206 enqueue_packages_dad950db79c73a765361c7b7c609843f();
     12require_once __DIR__ . '/jetpack-autoloader/class-autoloader.php';
     13Autoloader::init();
  • vaultpress/trunk/vendor/automattic/jetpack-logo/composer.json

    r2201737 r2611140  
    66    "require": {},
    77    "require-dev": {
    8         "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5",
    9         "php-mock/php-mock": "^2.1"
     8        "yoast/phpunit-polyfills": "1.0.2",
     9        "automattic/jetpack-changelogger": "^2.0"
    1010    },
    1111    "autoload": {
     
    1616    "scripts": {
    1717        "phpunit": [
    18             "@composer install",
    1918            "./vendor/phpunit/phpunit/phpunit --colors=always"
     19        ],
     20        "test-coverage": [
     21            "@composer update",
     22            "phpdbg -d memory_limit=2048M -d max_execution_time=900 -qrr ./vendor/bin/phpunit --coverage-clover \"$COVERAGE_DIR/clover.xml\""
     23        ],
     24        "test-php": [
     25            "@composer update",
     26            "@composer phpunit"
    2027        ]
    2128    },
     29    "repositories": [],
    2230    "minimum-stability": "dev",
    23     "prefer-stable": true
     31    "prefer-stable": true,
     32    "extra": {
     33        "autotagger": true,
     34        "mirror-repo": "Automattic/jetpack-logo",
     35        "changelogger": {
     36            "link-template": "https://github.com/Automattic/jetpack-logo/compare/v${old}...v${new}"
     37        },
     38        "branch-alias": {
     39            "dev-master": "1.5.x-dev"
     40        }
     41    }
    2442}
  • vaultpress/trunk/vendor/automattic/jetpack-logo/src/class-logo.php

    r2353267 r2611140  
    4646     * Return string containing the Jetpack logo.
    4747     *
    48      * @since 7.5.0
     48     * @since 1.1.4
     49     * @since-jetpack 7.5.0
    4950     *
    5051     * @param bool $logotype Should we use the full logotype (logo + text). Default to false.
  • vaultpress/trunk/vendor/composer/ClassLoader.php

    r2120238 r2611140  
    3838 * @author Fabien Potencier <[email protected]>
    3939 * @author Jordi Boggiano <[email protected]>
    40  * @see    http://www.php-fig.org/psr/psr-0/
    41  * @see    http://www.php-fig.org/psr/psr-4/
     40 * @see    https://www.php-fig.org/psr/psr-0/
     41 * @see    https://www.php-fig.org/psr/psr-4/
    4242 */
    4343class ClassLoader
    4444{
     45    /** @var ?string */
     46    private $vendorDir;
     47
    4548    // PSR-4
     49    /**
     50     * @var array[]
     51     * @psalm-var array<string, array<string, int>>
     52     */
    4653    private $prefixLengthsPsr4 = array();
     54    /**
     55     * @var array[]
     56     * @psalm-var array<string, array<int, string>>
     57     */
    4758    private $prefixDirsPsr4 = array();
     59    /**
     60     * @var array[]
     61     * @psalm-var array<string, string>
     62     */
    4863    private $fallbackDirsPsr4 = array();
    4964
    5065    // PSR-0
     66    /**
     67     * @var array[]
     68     * @psalm-var array<string, array<string, string[]>>
     69     */
    5170    private $prefixesPsr0 = array();
     71    /**
     72     * @var array[]
     73     * @psalm-var array<string, string>
     74     */
    5275    private $fallbackDirsPsr0 = array();
    5376
     77    /** @var bool */
    5478    private $useIncludePath = false;
     79
     80    /**
     81     * @var string[]
     82     * @psalm-var array<string, string>
     83     */
    5584    private $classMap = array();
     85
     86    /** @var bool */
    5687    private $classMapAuthoritative = false;
     88
     89    /**
     90     * @var bool[]
     91     * @psalm-var array<string, bool>
     92     */
    5793    private $missingClasses = array();
     94
     95    /** @var ?string */
    5896    private $apcuPrefix;
    5997
     98    /**
     99     * @var self[]
     100     */
     101    private static $registeredLoaders = array();
     102
     103    /**
     104     * @param ?string $vendorDir
     105     */
     106    public function __construct($vendorDir = null)
     107    {
     108        $this->vendorDir = $vendorDir;
     109    }
     110
     111    /**
     112     * @return string[]
     113     */
    60114    public function getPrefixes()
    61115    {
    62116        if (!empty($this->prefixesPsr0)) {
    63             return call_user_func_array('array_merge', $this->prefixesPsr0);
     117            return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
    64118        }
    65119
     
    67121    }
    68122
     123    /**
     124     * @return array[]
     125     * @psalm-return array<string, array<int, string>>
     126     */
    69127    public function getPrefixesPsr4()
    70128    {
     
    72130    }
    73131
     132    /**
     133     * @return array[]
     134     * @psalm-return array<string, string>
     135     */
    74136    public function getFallbackDirs()
    75137    {
     
    77139    }
    78140
     141    /**
     142     * @return array[]
     143     * @psalm-return array<string, string>
     144     */
    79145    public function getFallbackDirsPsr4()
    80146    {
     
    82148    }
    83149
     150    /**
     151     * @return string[] Array of classname => path
     152     * @psalm-var array<string, string>
     153     */
    84154    public function getClassMap()
    85155    {
     
    88158
    89159    /**
    90      * @param array $classMap Class to filename map
     160     * @param string[] $classMap Class to filename map
     161     * @psalm-param array<string, string> $classMap
     162     *
     163     * @return void
    91164     */
    92165    public function addClassMap(array $classMap)
     
    103176     * appending or prepending to the ones previously set for this prefix.
    104177     *
    105      * @param string       $prefix  The prefix
    106      * @param array|string $paths   The PSR-0 root directories
    107      * @param bool         $prepend Whether to prepend the directories
     178     * @param string          $prefix  The prefix
     179     * @param string[]|string $paths   The PSR-0 root directories
     180     * @param bool            $prepend Whether to prepend the directories
     181     *
     182     * @return void
    108183     */
    109184    public function add($prefix, $paths, $prepend = false)
     
    148223     * appending or prepending to the ones previously set for this namespace.
    149224     *
    150      * @param string       $prefix  The prefix/namespace, with trailing '\\'
    151      * @param array|string $paths   The PSR-4 base directories
    152      * @param bool         $prepend Whether to prepend the directories
     225     * @param string          $prefix  The prefix/namespace, with trailing '\\'
     226     * @param string[]|string $paths   The PSR-4 base directories
     227     * @param bool            $prepend Whether to prepend the directories
    153228     *
    154229     * @throws \InvalidArgumentException
     230     *
     231     * @return void
    155232     */
    156233    public function addPsr4($prefix, $paths, $prepend = false)
     
    196273     * replacing any others previously set for this prefix.
    197274     *
    198      * @param string       $prefix The prefix
    199      * @param array|string $paths  The PSR-0 base directories
     275     * @param string          $prefix The prefix
     276     * @param string[]|string $paths  The PSR-0 base directories
     277     *
     278     * @return void
    200279     */
    201280    public function set($prefix, $paths)
     
    212291     * replacing any others previously set for this namespace.
    213292     *
    214      * @param string       $prefix The prefix/namespace, with trailing '\\'
    215      * @param array|string $paths  The PSR-4 base directories
     293     * @param string          $prefix The prefix/namespace, with trailing '\\'
     294     * @param string[]|string $paths  The PSR-4 base directories
    216295     *
    217296     * @throws \InvalidArgumentException
     297     *
     298     * @return void
    218299     */
    219300    public function setPsr4($prefix, $paths)
     
    235316     *
    236317     * @param bool $useIncludePath
     318     *
     319     * @return void
    237320     */
    238321    public function setUseIncludePath($useIncludePath)
     
    257340     *
    258341     * @param bool $classMapAuthoritative
     342     *
     343     * @return void
    259344     */
    260345    public function setClassMapAuthoritative($classMapAuthoritative)
     
    277362     *
    278363     * @param string|null $apcuPrefix
     364     *
     365     * @return void
    279366     */
    280367    public function setApcuPrefix($apcuPrefix)
     
    297384     *
    298385     * @param bool $prepend Whether to prepend the autoloader or not
     386     *
     387     * @return void
    299388     */
    300389    public function register($prepend = false)
    301390    {
    302391        spl_autoload_register(array($this, 'loadClass'), true, $prepend);
     392
     393        if (null === $this->vendorDir) {
     394            return;
     395        }
     396
     397        if ($prepend) {
     398            self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
     399        } else {
     400            unset(self::$registeredLoaders[$this->vendorDir]);
     401            self::$registeredLoaders[$this->vendorDir] = $this;
     402        }
    303403    }
    304404
    305405    /**
    306406     * Unregisters this instance as an autoloader.
     407     *
     408     * @return void
    307409     */
    308410    public function unregister()
    309411    {
    310412        spl_autoload_unregister(array($this, 'loadClass'));
     413
     414        if (null !== $this->vendorDir) {
     415            unset(self::$registeredLoaders[$this->vendorDir]);
     416        }
    311417    }
    312418
     
    315421     *
    316422     * @param  string    $class The name of the class
    317      * @return bool|null True if loaded, null otherwise
     423     * @return true|null True if loaded, null otherwise
    318424     */
    319425    public function loadClass($class)
     
    324430            return true;
    325431        }
     432
     433        return null;
    326434    }
    327435
     
    368476    }
    369477
     478    /**
     479     * Returns the currently registered loaders indexed by their corresponding vendor directories.
     480     *
     481     * @return self[]
     482     */
     483    public static function getRegisteredLoaders()
     484    {
     485        return self::$registeredLoaders;
     486    }
     487
     488    /**
     489     * @param  string       $class
     490     * @param  string       $ext
     491     * @return string|false
     492     */
    370493    private function findFileWithExtension($class, $ext)
    371494    {
     
    439562 *
    440563 * Prevents access to $this/self from included files.
     564 *
     565 * @param  string $file
     566 * @return void
     567 * @private
    441568 */
    442569function includeFile($file)
  • vaultpress/trunk/vendor/composer/autoload_classmap.php

    r2201737 r2611140  
    88return array(
    99    'Automattic\\Jetpack\\Assets\\Logo' => $vendorDir . '/automattic/jetpack-logo/src/class-logo.php',
     10    'Automattic\\Jetpack\\Autoloader\\AutoloadFileWriter' => $vendorDir . '/automattic/jetpack-autoloader/src/AutoloadFileWriter.php',
     11    'Automattic\\Jetpack\\Autoloader\\AutoloadGenerator' => $vendorDir . '/automattic/jetpack-autoloader/src/AutoloadGenerator.php',
     12    'Automattic\\Jetpack\\Autoloader\\AutoloadProcessor' => $vendorDir . '/automattic/jetpack-autoloader/src/AutoloadProcessor.php',
     13    'Automattic\\Jetpack\\Autoloader\\CustomAutoloaderPlugin' => $vendorDir . '/automattic/jetpack-autoloader/src/CustomAutoloaderPlugin.php',
     14    'Automattic\\Jetpack\\Autoloader\\ManifestGenerator' => $vendorDir . '/automattic/jetpack-autoloader/src/ManifestGenerator.php',
     15    'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
    1016);
  • vaultpress/trunk/vendor/composer/autoload_psr4.php

    r2201737 r2611140  
    77
    88return array(
    9     'VariableAnalysis\\' => array($vendorDir . '/sirbrillig/phpcs-variable-analysis/VariableAnalysis'),
    10     'Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\' => array($vendorDir . '/dealerdirect/phpcodesniffer-composer-installer/src'),
    11     'Automattic\\Jetpack\\Standards\\' => array($vendorDir . '/automattic/jetpack-standards'),
    129    'Automattic\\Jetpack\\Autoloader\\' => array($vendorDir . '/automattic/jetpack-autoloader/src'),
    1310);
  • vaultpress/trunk/vendor/composer/autoload_real.php

    r2354699 r2611140  
    33// autoload_real.php @generated by Composer
    44
    5 class ComposerAutoloaderInitabbe6786ee8beb5eddaaf6583db0467b
     5class ComposerAutoloaderInit9559eef123208b7d1b9c15b978567267_vaultpressⓥ2_2_0_beta
    66{
    77    private static $loader;
     
    2323        }
    2424
    25         spl_autoload_register(array('ComposerAutoloaderInitabbe6786ee8beb5eddaaf6583db0467b', 'loadClassLoader'), true, true);
    26         self::$loader = $loader = new \Composer\Autoload\ClassLoader();
    27         spl_autoload_unregister(array('ComposerAutoloaderInitabbe6786ee8beb5eddaaf6583db0467b', 'loadClassLoader'));
     25        spl_autoload_register(array('ComposerAutoloaderInit9559eef123208b7d1b9c15b978567267_vaultpressⓥ2_2_0_beta', 'loadClassLoader'), true, true);
     26        self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
     27        spl_autoload_unregister(array('ComposerAutoloaderInit9559eef123208b7d1b9c15b978567267_vaultpressⓥ2_2_0_beta', 'loadClassLoader'));
    2828
    2929        $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
    3030        if ($useStaticLoader) {
    31             require_once __DIR__ . '/autoload_static.php';
     31            require __DIR__ . '/autoload_static.php';
    3232
    33             call_user_func(\Composer\Autoload\ComposerStaticInitabbe6786ee8beb5eddaaf6583db0467b::getInitializer($loader));
     33            call_user_func(\Composer\Autoload\ComposerStaticInit9559eef123208b7d1b9c15b978567267_vaultpressⓥ2_2_0_beta::getInitializer($loader));
    3434        } else {
    35             $map = require __DIR__ . '/autoload_namespaces.php';
    36             foreach ($map as $namespace => $path) {
    37                 $loader->set($namespace, $path);
    38             }
    39 
    40             $map = require __DIR__ . '/autoload_psr4.php';
    41             foreach ($map as $namespace => $path) {
    42                 $loader->setPsr4($namespace, $path);
    43             }
    44 
    4535            $classMap = require __DIR__ . '/autoload_classmap.php';
    4636            if ($classMap) {
     
    4939        }
    5040
     41        $loader->setClassMapAuthoritative(true);
    5142        $loader->register(true);
    5243
  • vaultpress/trunk/vendor/composer/autoload_static.php

    r2354699 r2611140  
    55namespace Composer\Autoload;
    66
    7 class ComposerStaticInitabbe6786ee8beb5eddaaf6583db0467b
     7class ComposerStaticInit9559eef123208b7d1b9c15b978567267_vaultpressⓥ2_2_0_beta
    88{
    99    public static $prefixLengthsPsr4 = array (
    10         'V' =>
    11         array (
    12             'VariableAnalysis\\' => 17,
    13         ),
    14         'D' =>
    15         array (
    16             'Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\' => 55,
    17         ),
    1810        'A' =>
    1911        array (
    20             'Automattic\\Jetpack\\Standards\\' => 29,
    2112            'Automattic\\Jetpack\\Autoloader\\' => 30,
    2213        ),
     
    2415
    2516    public static $prefixDirsPsr4 = array (
    26         'VariableAnalysis\\' =>
    27         array (
    28             0 => __DIR__ . '/..' . '/sirbrillig/phpcs-variable-analysis/VariableAnalysis',
    29         ),
    30         'Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\' =>
    31         array (
    32             0 => __DIR__ . '/..' . '/dealerdirect/phpcodesniffer-composer-installer/src',
    33         ),
    34         'Automattic\\Jetpack\\Standards\\' =>
    35         array (
    36             0 => __DIR__ . '/..' . '/automattic/jetpack-standards',
    37         ),
    3817        'Automattic\\Jetpack\\Autoloader\\' =>
    3918        array (
     
    4423    public static $classMap = array (
    4524        'Automattic\\Jetpack\\Assets\\Logo' => __DIR__ . '/..' . '/automattic/jetpack-logo/src/class-logo.php',
     25        'Automattic\\Jetpack\\Autoloader\\AutoloadFileWriter' => __DIR__ . '/..' . '/automattic/jetpack-autoloader/src/AutoloadFileWriter.php',
     26        'Automattic\\Jetpack\\Autoloader\\AutoloadGenerator' => __DIR__ . '/..' . '/automattic/jetpack-autoloader/src/AutoloadGenerator.php',
     27        'Automattic\\Jetpack\\Autoloader\\AutoloadProcessor' => __DIR__ . '/..' . '/automattic/jetpack-autoloader/src/AutoloadProcessor.php',
     28        'Automattic\\Jetpack\\Autoloader\\CustomAutoloaderPlugin' => __DIR__ . '/..' . '/automattic/jetpack-autoloader/src/CustomAutoloaderPlugin.php',
     29        'Automattic\\Jetpack\\Autoloader\\ManifestGenerator' => __DIR__ . '/..' . '/automattic/jetpack-autoloader/src/ManifestGenerator.php',
     30        'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
    4631    );
    4732
     
    4934    {
    5035        return \Closure::bind(function () use ($loader) {
    51             $loader->prefixLengthsPsr4 = ComposerStaticInitabbe6786ee8beb5eddaaf6583db0467b::$prefixLengthsPsr4;
    52             $loader->prefixDirsPsr4 = ComposerStaticInitabbe6786ee8beb5eddaaf6583db0467b::$prefixDirsPsr4;
    53             $loader->classMap = ComposerStaticInitabbe6786ee8beb5eddaaf6583db0467b::$classMap;
     36            $loader->prefixLengthsPsr4 = ComposerStaticInit9559eef123208b7d1b9c15b978567267_vaultpressⓥ2_2_0_beta::$prefixLengthsPsr4;
     37            $loader->prefixDirsPsr4 = ComposerStaticInit9559eef123208b7d1b9c15b978567267_vaultpressⓥ2_2_0_beta::$prefixDirsPsr4;
     38            $loader->classMap = ComposerStaticInit9559eef123208b7d1b9c15b978567267_vaultpressⓥ2_2_0_beta::$classMap;
    5439
    5540        }, null, ClassLoader::class);
  • vaultpress/trunk/vendor/composer/installed.json

    r2354699 r2611140  
    1 [
    2     {
    3         "name": "automattic/jetpack-autoloader",
    4         "version": "v1.7.0",
    5         "version_normalized": "1.7.0.0",
    6         "source": {
    7             "type": "git",
    8             "url": "https://github.com/Automattic/jetpack-autoloader.git",
    9             "reference": "7c6736eeee0f9fc49fa691fe3e958725efb27ca0"
     1{
     2    "packages": [
     3        {
     4            "name": "automattic/jetpack-autoloader",
     5            "version": "v2.10.7",
     6            "version_normalized": "2.10.7.0",
     7            "source": {
     8                "type": "git",
     9                "url": "https://github.com/Automattic/jetpack-autoloader.git",
     10                "reference": "e3dfa1a2679e4b8e380bc37b722081875c84a381"
     11            },
     12            "dist": {
     13                "type": "zip",
     14                "url": "https://api.github.com/repos/Automattic/jetpack-autoloader/zipball/e3dfa1a2679e4b8e380bc37b722081875c84a381",
     15                "reference": "e3dfa1a2679e4b8e380bc37b722081875c84a381",
     16                "shasum": ""
     17            },
     18            "require": {
     19                "composer-plugin-api": "^1.1 || ^2.0"
     20            },
     21            "require-dev": {
     22                "automattic/jetpack-changelogger": "^2.0",
     23                "yoast/phpunit-polyfills": "1.0.2"
     24            },
     25            "time": "2021-10-07T14:29:51+00:00",
     26            "type": "composer-plugin",
     27            "extra": {
     28                "autotagger": true,
     29                "class": "Automattic\\Jetpack\\Autoloader\\CustomAutoloaderPlugin",
     30                "mirror-repo": "Automattic/jetpack-autoloader",
     31                "changelogger": {
     32                    "link-template": "https://github.com/Automattic/jetpack-autoloader/compare/v${old}...v${new}"
     33                },
     34                "branch-alias": {
     35                    "dev-master": "2.10.x-dev"
     36                }
     37            },
     38            "installation-source": "dist",
     39            "autoload": {
     40                "classmap": [
     41                    "src/AutoloadGenerator.php"
     42                ],
     43                "psr-4": {
     44                    "Automattic\\Jetpack\\Autoloader\\": "src"
     45                }
     46            },
     47            "notification-url": "https://packagist.org/downloads/",
     48            "license": [
     49                "GPL-2.0-or-later"
     50            ],
     51            "description": "Creates a custom autoloader for a plugin or theme.",
     52            "support": {
     53                "source": "https://github.com/Automattic/jetpack-autoloader/tree/v2.10.7"
     54            },
     55            "install-path": "../automattic/jetpack-autoloader"
    1056        },
    11         "dist": {
    12             "type": "zip",
    13             "url": "https://api.github.com/repos/Automattic/jetpack-autoloader/zipball/7c6736eeee0f9fc49fa691fe3e958725efb27ca0",
    14             "reference": "7c6736eeee0f9fc49fa691fe3e958725efb27ca0",
    15             "shasum": ""
    16         },
    17         "require": {
    18             "composer-plugin-api": "^1.1"
    19         },
    20         "require-dev": {
    21             "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5"
    22         },
    23         "time": "2020-04-23T02:28:37+00:00",
    24         "type": "composer-plugin",
    25         "extra": {
    26             "class": "Automattic\\Jetpack\\Autoloader\\CustomAutoloaderPlugin"
    27         },
    28         "installation-source": "dist",
    29         "autoload": {
    30             "psr-4": {
    31                 "Automattic\\Jetpack\\Autoloader\\": "src"
    32             }
    33         },
    34         "notification-url": "https://packagist.org/downloads/",
    35         "license": [
    36             "GPL-2.0-or-later"
    37         ],
    38         "description": "Creates a custom autoloader for a plugin or theme."
    39     },
    40     {
    41         "name": "automattic/jetpack-logo",
    42         "version": "v1.2.0",
    43         "version_normalized": "1.2.0.0",
    44         "source": {
    45             "type": "git",
    46             "url": "https://github.com/Automattic/jetpack-logo.git",
    47             "reference": "d7840f25d7836ab69de979bcb67e8190220e53a3"
    48         },
    49         "dist": {
    50             "type": "zip",
    51             "url": "https://api.github.com/repos/Automattic/jetpack-logo/zipball/d7840f25d7836ab69de979bcb67e8190220e53a3",
    52             "reference": "d7840f25d7836ab69de979bcb67e8190220e53a3",
    53             "shasum": ""
    54         },
    55         "require-dev": {
    56             "php-mock/php-mock": "^2.1",
    57             "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5"
    58         },
    59         "time": "2020-03-27T21:57:58+00:00",
    60         "type": "library",
    61         "installation-source": "dist",
    62         "autoload": {
    63             "classmap": [
    64                 "src/"
    65             ]
    66         },
    67         "notification-url": "https://packagist.org/downloads/",
    68         "license": [
    69             "GPL-2.0-or-later"
    70         ],
    71         "description": "A logo for Jetpack"
    72     },
    73     {
    74         "name": "automattic/jetpack-standards",
    75         "version": "dev-master",
    76         "version_normalized": "9999999-dev",
    77         "source": {
    78             "type": "git",
    79             "url": "https://github.com/Automattic/jetpack-standards.git",
    80             "reference": "1453b5eafe67bc82d0361e4d76a113cbd11c8149"
    81         },
    82         "dist": {
    83             "type": "zip",
    84             "url": "https://api.github.com/repos/Automattic/jetpack-standards/zipball/1453b5eafe67bc82d0361e4d76a113cbd11c8149",
    85             "reference": "1453b5eafe67bc82d0361e4d76a113cbd11c8149",
    86             "shasum": ""
    87         },
    88         "require": {
    89             "composer-plugin-api": "^1.1",
    90             "dealerdirect/phpcodesniffer-composer-installer": "0.5.0",
    91             "phpcompatibility/phpcompatibility-wp": "2.0.0",
    92             "sirbrillig/phpcs-variable-analysis": "2.6.4",
    93             "wp-coding-standards/wpcs": "2.1.1"
    94         },
    95         "time": "2019-05-21T18:08:46+00:00",
    96         "type": "composer-plugin",
    97         "extra": {
    98             "class": "Automattic\\Jetpack\\Standards\\PostInstall"
    99         },
    100         "installation-source": "source",
    101         "autoload": {
    102             "psr-4": {
    103                 "Automattic\\Jetpack\\Standards\\": ""
    104             }
    105         },
    106         "notification-url": "https://packagist.org/downloads/",
    107         "license": [
    108             "GPL-2.0-or-later"
    109         ],
    110         "description": "Adds basic Jetpack standards to a project."
    111     },
    112     {
    113         "name": "dealerdirect/phpcodesniffer-composer-installer",
    114         "version": "v0.5.0",
    115         "version_normalized": "0.5.0.0",
    116         "source": {
    117             "type": "git",
    118             "url": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer.git",
    119             "reference": "e749410375ff6fb7a040a68878c656c2e610b132"
    120         },
    121         "dist": {
    122             "type": "zip",
    123             "url": "https://api.github.com/repos/Dealerdirect/phpcodesniffer-composer-installer/zipball/e749410375ff6fb7a040a68878c656c2e610b132",
    124             "reference": "e749410375ff6fb7a040a68878c656c2e610b132",
    125             "shasum": ""
    126         },
    127         "require": {
    128             "composer-plugin-api": "^1.0",
    129             "php": "^5.3|^7",
    130             "squizlabs/php_codesniffer": "^2|^3"
    131         },
    132         "require-dev": {
    133             "composer/composer": "*",
    134             "phpcompatibility/php-compatibility": "^9.0",
    135             "sensiolabs/security-checker": "^4.1.0"
    136         },
    137         "time": "2018-10-26T13:21:45+00:00",
    138         "type": "composer-plugin",
    139         "extra": {
    140             "class": "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin"
    141         },
    142         "installation-source": "dist",
    143         "autoload": {
    144             "psr-4": {
    145                 "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/"
    146             }
    147         },
    148         "notification-url": "https://packagist.org/downloads/",
    149         "license": [
    150             "MIT"
    151         ],
    152         "authors": [
    153             {
    154                 "name": "Franck Nijhof",
    155                 "email": "[email protected]",
    156                 "homepage": "http://www.frenck.nl",
    157                 "role": "Developer / IT Manager"
    158             }
    159         ],
    160         "description": "PHP_CodeSniffer Standards Composer Installer Plugin",
    161         "homepage": "http://www.dealerdirect.com",
    162         "keywords": [
    163             "PHPCodeSniffer",
    164             "PHP_CodeSniffer",
    165             "code quality",
    166             "codesniffer",
    167             "composer",
    168             "installer",
    169             "phpcs",
    170             "plugin",
    171             "qa",
    172             "quality",
    173             "standard",
    174             "standards",
    175             "style guide",
    176             "stylecheck",
    177             "tests"
    178         ]
    179     },
    180     {
    181         "name": "phpcompatibility/php-compatibility",
    182         "version": "9.3.4",
    183         "version_normalized": "9.3.4.0",
    184         "source": {
    185             "type": "git",
    186             "url": "https://github.com/PHPCompatibility/PHPCompatibility.git",
    187             "reference": "1f37659196e4f3113ea506a7efba201c52303bf1"
    188         },
    189         "dist": {
    190             "type": "zip",
    191             "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/1f37659196e4f3113ea506a7efba201c52303bf1",
    192             "reference": "1f37659196e4f3113ea506a7efba201c52303bf1",
    193             "shasum": ""
    194         },
    195         "require": {
    196             "php": ">=5.3",
    197             "squizlabs/php_codesniffer": "^2.3 || ^3.0.2"
    198         },
    199         "conflict": {
    200             "squizlabs/php_codesniffer": "2.6.2"
    201         },
    202         "require-dev": {
    203             "phpunit/phpunit": "~4.5 || ^5.0 || ^6.0 || ^7.0"
    204         },
    205         "suggest": {
    206             "dealerdirect/phpcodesniffer-composer-installer": "^0.5 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically.",
    207             "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues."
    208         },
    209         "time": "2019-11-15T04:12:02+00:00",
    210         "type": "phpcodesniffer-standard",
    211         "installation-source": "dist",
    212         "notification-url": "https://packagist.org/downloads/",
    213         "license": [
    214             "LGPL-3.0-or-later"
    215         ],
    216         "authors": [
    217             {
    218                 "name": "Wim Godden",
    219                 "homepage": "https://github.com/wimg",
    220                 "role": "lead"
     57        {
     58            "name": "automattic/jetpack-logo",
     59            "version": "v1.5.8",
     60            "version_normalized": "1.5.8.0",
     61            "source": {
     62                "type": "git",
     63                "url": "https://github.com/Automattic/jetpack-logo.git",
     64                "reference": "c3045c4aa008507a13ee02ae5035dc91b3ff3ae4"
    22165            },
    222             {
    223                 "name": "Juliette Reinders Folmer",
    224                 "homepage": "https://github.com/jrfnl",
    225                 "role": "lead"
     66            "dist": {
     67                "type": "zip",
     68                "url": "https://api.github.com/repos/Automattic/jetpack-logo/zipball/c3045c4aa008507a13ee02ae5035dc91b3ff3ae4",
     69                "reference": "c3045c4aa008507a13ee02ae5035dc91b3ff3ae4",
     70                "shasum": ""
    22671            },
    227             {
    228                 "name": "Contributors",
    229                 "homepage": "https://github.com/PHPCompatibility/PHPCompatibility/graphs/contributors"
    230             }
    231         ],
    232         "description": "A set of sniffs for PHP_CodeSniffer that checks for PHP cross-version compatibility.",
    233         "homepage": "http://techblog.wimgodden.be/tag/codesniffer/",
    234         "keywords": [
    235             "compatibility",
    236             "phpcs",
    237             "standards"
    238         ]
    239     },
    240     {
    241         "name": "phpcompatibility/phpcompatibility-paragonie",
    242         "version": "1.3.0",
    243         "version_normalized": "1.3.0.0",
    244         "source": {
    245             "type": "git",
    246             "url": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie.git",
    247             "reference": "b862bc32f7e860d0b164b199bd995e690b4b191c"
    248         },
    249         "dist": {
    250             "type": "zip",
    251             "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityParagonie/zipball/b862bc32f7e860d0b164b199bd995e690b4b191c",
    252             "reference": "b862bc32f7e860d0b164b199bd995e690b4b191c",
    253             "shasum": ""
    254         },
    255         "require": {
    256             "phpcompatibility/php-compatibility": "^9.0"
    257         },
    258         "require-dev": {
    259             "dealerdirect/phpcodesniffer-composer-installer": "^0.5",
    260             "paragonie/random_compat": "dev-master",
    261             "paragonie/sodium_compat": "dev-master"
    262         },
    263         "suggest": {
    264             "dealerdirect/phpcodesniffer-composer-installer": "^0.5 || This Composer plugin will sort out the PHP_CodeSniffer 'installed_paths' automatically.",
    265             "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues."
    266         },
    267         "time": "2019-11-04T15:17:54+00:00",
    268         "type": "phpcodesniffer-standard",
    269         "installation-source": "dist",
    270         "notification-url": "https://packagist.org/downloads/",
    271         "license": [
    272             "LGPL-3.0-or-later"
    273         ],
    274         "authors": [
    275             {
    276                 "name": "Wim Godden",
    277                 "role": "lead"
     72            "require-dev": {
     73                "automattic/jetpack-changelogger": "^2.0",
     74                "yoast/phpunit-polyfills": "1.0.2"
    27875            },
    279             {
    280                 "name": "Juliette Reinders Folmer",
    281                 "role": "lead"
    282             }
    283         ],
    284         "description": "A set of rulesets for PHP_CodeSniffer to check for PHP cross-version compatibility issues in projects, while accounting for polyfills provided by the Paragonie polyfill libraries.",
    285         "homepage": "http://phpcompatibility.com/",
    286         "keywords": [
    287             "compatibility",
    288             "paragonie",
    289             "phpcs",
    290             "polyfill",
    291             "standards"
    292         ]
    293     },
    294     {
    295         "name": "phpcompatibility/phpcompatibility-wp",
    296         "version": "2.0.0",
    297         "version_normalized": "2.0.0.0",
    298         "source": {
    299             "type": "git",
    300             "url": "https://github.com/PHPCompatibility/PHPCompatibilityWP.git",
    301             "reference": "cb303f0067cd5b366a41d4fb0e254fb40ff02efd"
    302         },
    303         "dist": {
    304             "type": "zip",
    305             "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityWP/zipball/cb303f0067cd5b366a41d4fb0e254fb40ff02efd",
    306             "reference": "cb303f0067cd5b366a41d4fb0e254fb40ff02efd",
    307             "shasum": ""
    308         },
    309         "require": {
    310             "phpcompatibility/php-compatibility": "^9.0",
    311             "phpcompatibility/phpcompatibility-paragonie": "^1.0"
    312         },
    313         "require-dev": {
    314             "dealerdirect/phpcodesniffer-composer-installer": "^0.4.3"
    315         },
    316         "suggest": {
    317             "dealerdirect/phpcodesniffer-composer-installer": "^0.4.3 || This Composer plugin will sort out the PHP_CodeSniffer 'installed_paths' automatically.",
    318             "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues."
    319         },
    320         "time": "2018-10-07T18:31:37+00:00",
    321         "type": "phpcodesniffer-standard",
    322         "installation-source": "dist",
    323         "notification-url": "https://packagist.org/downloads/",
    324         "license": [
    325             "LGPL-3.0-or-later"
    326         ],
    327         "authors": [
    328             {
    329                 "name": "Wim Godden",
    330                 "role": "lead"
     76            "time": "2021-10-07T14:29:57+00:00",
     77            "type": "library",
     78            "extra": {
     79                "autotagger": true,
     80                "mirror-repo": "Automattic/jetpack-logo",
     81                "changelogger": {
     82                    "link-template": "https://github.com/Automattic/jetpack-logo/compare/v${old}...v${new}"
     83                },
     84                "branch-alias": {
     85                    "dev-master": "1.5.x-dev"
     86                }
    33187            },
    332             {
    333                 "name": "Juliette Reinders Folmer",
    334                 "role": "lead"
    335             }
    336         ],
    337         "description": "A ruleset for PHP_CodeSniffer to check for PHP cross-version compatibility issues in projects, while accounting for polyfills provided by WordPress.",
    338         "homepage": "http://phpcompatibility.com/",
    339         "keywords": [
    340             "compatibility",
    341             "phpcs",
    342             "standards",
    343             "wordpress"
    344         ]
    345     },
    346     {
    347         "name": "sirbrillig/phpcs-variable-analysis",
    348         "version": "v2.6.4",
    349         "version_normalized": "2.6.4.0",
    350         "source": {
    351             "type": "git",
    352             "url": "https://github.com/sirbrillig/phpcs-variable-analysis.git",
    353             "reference": "fd217f2077fbcc287aded2b52147e68d208ace4b"
    354         },
    355         "dist": {
    356             "type": "zip",
    357             "url": "https://api.github.com/repos/sirbrillig/phpcs-variable-analysis/zipball/fd217f2077fbcc287aded2b52147e68d208ace4b",
    358             "reference": "fd217f2077fbcc287aded2b52147e68d208ace4b",
    359             "shasum": ""
    360         },
    361         "require": {
    362             "php": ">=5.6.0"
    363         },
    364         "require-dev": {
    365             "dealerdirect/phpcodesniffer-composer-installer": "^0.4.4",
    366             "limedeck/phpunit-detailed-printer": "^3.1",
    367             "phpunit/phpunit": "^6.5",
    368             "sirbrillig/phpcs-import-detection": "^1.1",
    369             "squizlabs/php_codesniffer": "^3.1"
    370         },
    371         "time": "2019-05-10T21:08:30+00:00",
    372         "type": "phpcodesniffer-standard",
    373         "installation-source": "dist",
    374         "autoload": {
    375             "psr-4": {
    376                 "VariableAnalysis\\": "VariableAnalysis/"
    377             }
    378         },
    379         "notification-url": "https://packagist.org/downloads/",
    380         "license": [
    381             "BSD-2-Clause"
    382         ],
    383         "authors": [
    384             {
    385                 "name": "Payton Swick",
    386                 "email": "[email protected]"
     88            "installation-source": "dist",
     89            "autoload": {
     90                "classmap": [
     91                    "src/"
     92                ]
    38793            },
    388             {
    389                 "name": "Sam Graham",
    390                 "email": "[email protected]"
    391             }
    392         ],
    393         "description": "A PHPCS sniff to detect problems with variables."
    394     },
    395     {
    396         "name": "squizlabs/php_codesniffer",
    397         "version": "3.5.3",
    398         "version_normalized": "3.5.3.0",
    399         "source": {
    400             "type": "git",
    401             "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
    402             "reference": "557a1fc7ac702c66b0bbfe16ab3d55839ef724cb"
    403         },
    404         "dist": {
    405             "type": "zip",
    406             "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/557a1fc7ac702c66b0bbfe16ab3d55839ef724cb",
    407             "reference": "557a1fc7ac702c66b0bbfe16ab3d55839ef724cb",
    408             "shasum": ""
    409         },
    410         "require": {
    411             "ext-simplexml": "*",
    412             "ext-tokenizer": "*",
    413             "ext-xmlwriter": "*",
    414             "php": ">=5.4.0"
    415         },
    416         "require-dev": {
    417             "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0"
    418         },
    419         "time": "2019-12-04T04:46:47+00:00",
    420         "bin": [
    421             "bin/phpcs",
    422             "bin/phpcbf"
    423         ],
    424         "type": "library",
    425         "extra": {
    426             "branch-alias": {
    427                 "dev-master": "3.x-dev"
    428             }
    429         },
    430         "installation-source": "dist",
    431         "notification-url": "https://packagist.org/downloads/",
    432         "license": [
    433             "BSD-3-Clause"
    434         ],
    435         "authors": [
    436             {
    437                 "name": "Greg Sherwood",
    438                 "role": "lead"
    439             }
    440         ],
    441         "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
    442         "homepage": "https://github.com/squizlabs/PHP_CodeSniffer",
    443         "keywords": [
    444             "phpcs",
    445             "standards"
    446         ]
    447     },
    448     {
    449         "name": "wp-coding-standards/wpcs",
    450         "version": "2.1.1",
    451         "version_normalized": "2.1.1.0",
    452         "source": {
    453             "type": "git",
    454             "url": "https://github.com/WordPress/WordPress-Coding-Standards.git",
    455             "reference": "bd9c33152115e6741e3510ff7189605b35167908"
    456         },
    457         "dist": {
    458             "type": "zip",
    459             "url": "https://api.github.com/repos/WordPress/WordPress-Coding-Standards/zipball/bd9c33152115e6741e3510ff7189605b35167908",
    460             "reference": "bd9c33152115e6741e3510ff7189605b35167908",
    461             "shasum": ""
    462         },
    463         "require": {
    464             "php": ">=5.4",
    465             "squizlabs/php_codesniffer": "^3.3.1"
    466         },
    467         "require-dev": {
    468             "dealerdirect/phpcodesniffer-composer-installer": "^0.5.0",
    469             "phpcompatibility/php-compatibility": "^9.0",
    470             "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0"
    471         },
    472         "suggest": {
    473             "dealerdirect/phpcodesniffer-composer-installer": "^0.5.0 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically."
    474         },
    475         "time": "2019-05-21T02:50:00+00:00",
    476         "type": "phpcodesniffer-standard",
    477         "installation-source": "dist",
    478         "notification-url": "https://packagist.org/downloads/",
    479         "license": [
    480             "MIT"
    481         ],
    482         "authors": [
    483             {
    484                 "name": "Contributors",
    485                 "homepage": "https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards/graphs/contributors"
    486             }
    487         ],
    488         "description": "PHP_CodeSniffer rules (sniffs) to enforce WordPress coding conventions",
    489         "keywords": [
    490             "phpcs",
    491             "standards",
    492             "wordpress"
    493         ]
    494     }
    495 ]
     94            "notification-url": "https://packagist.org/downloads/",
     95            "license": [
     96                "GPL-2.0-or-later"
     97            ],
     98            "description": "A logo for Jetpack",
     99            "support": {
     100                "source": "https://github.com/Automattic/jetpack-logo/tree/v1.5.8"
     101            },
     102            "install-path": "../automattic/jetpack-logo"
     103        }
     104    ],
     105    "dev": false,
     106    "dev-package-names": []
     107}
Note: See TracChangeset for help on using the changeset viewer.