scoper.inc.php
131 lines
| 1 | <?php |
| 2 | |
| 3 | namespace WP2FA_Vendor; |
| 4 | |
| 5 | /** |
| 6 | * PHP-Scoper configuration file. |
| 7 | * |
| 8 | * @package wp2fa |
| 9 | * @copyright %%YEAR%% Melapress |
| 10 | * @license https://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0 |
| 11 | * @link https://wordpress.org/plugins/wp-2fa/ |
| 12 | */ |
| 13 | use WP2FA_Vendor\Isolated\Symfony\Component\Finder\Finder; |
| 14 | return array( |
| 15 | 'prefix' => 'WP2FA_Vendor', |
| 16 | 'finders' => array( |
| 17 | // General dependencies. |
| 18 | Finder::create()->files()->ignoreVCS(\true)->notName('/LICENSE|.*\\.md|.*\\.dist|Makefile|composer\\.(json|lock)/')->exclude(array('doc', 'test', 'test_old', 'tests', 'Tests', 'vendor-bin'))->in('../vendor'), |
| 19 | ), |
| 20 | 'patchers' => array(static function (string $file_path, string $prefix, string $content) : string { |
| 21 | $path = \dirname(__FILE__) . \DIRECTORY_SEPARATOR . \implode(\DIRECTORY_SEPARATOR, array('composer', 'autoload_real.php')); |
| 22 | if (0 === \strcasecmp($file_path, $path)) { |
| 23 | $content = \str_replace('spl_autoload_unregister(array(\'ComposerAutoloader', 'spl_autoload_unregister(array(\'' . $prefix . '\\\\ComposerAutoloader', $content); |
| 24 | } |
| 25 | return $content; |
| 26 | }, function ($file_path, $prefix, $contents) { |
| 27 | /* |
| 28 | * There is currently no easy way to simply whitelist all global WordPress functions. |
| 29 | * |
| 30 | * This list here is a manual attempt after scanning through the AMP plugin, which means |
| 31 | * it needs to be maintained and kept in sync with any changes to the dependency. |
| 32 | * |
| 33 | * As long as there's no built-in solution in PHP-Scoper for this, an alternative could be |
| 34 | * to generate a list based on php-stubs/wordpress-stubs. devowlio/wp-react-starter/ seems |
| 35 | * to be doing just this successfully. |
| 36 | * |
| 37 | * @see https://github.com/humbug/php-scoper/issues/303 |
| 38 | * @see https://github.com/php-stubs/wordpress-stubs |
| 39 | * @see https://github.com/devowlio/wp-react-starter/ |
| 40 | */ |
| 41 | $contents = \str_replace("\\{$prefix}\\_doing_it_wrong", '\\_doing_it_wrong', $contents); |
| 42 | $contents = \str_replace("\\{$prefix}\\__", '\\__', $contents); |
| 43 | $contents = \str_replace("\\{$prefix}\\esc_html_e", '\\esc_html_e', $contents); |
| 44 | $contents = \str_replace("\\{$prefix}\\esc_html", '\\esc_html', $contents); |
| 45 | $contents = \str_replace("\\{$prefix}\\esc_attr", '\\esc_attr', $contents); |
| 46 | $contents = \str_replace("\\{$prefix}\\esc_url", '\\esc_url', $contents); |
| 47 | $contents = \str_replace("\\{$prefix}\\do_action", '\\do_action', $contents); |
| 48 | $contents = \str_replace("\\{$prefix}\\site_url", '\\site_url', $contents); |
| 49 | $contents = \str_replace("\\{$prefix}\\wp_guess_url", '\\wp_guess_url', $contents); |
| 50 | $contents = \str_replace("\\{$prefix}\\untrailingslashit", '\\untrailingslashit', $contents); |
| 51 | $contents = \str_replace("\\{$prefix}\\WP_CONTENT_URL", '\\WP_CONTENT_URL', $contents); |
| 52 | $contents = \str_replace("\\{$prefix}\\wp_list_pluck", '\\wp_list_pluck', $contents); |
| 53 | $contents = \str_replace("\\{$prefix}\\is_customize_preview", '\\is_customize_preview', $contents); |
| 54 | $contents = \str_replace("\\{$prefix}\\do_action", '\\do_action', $contents); |
| 55 | $contents = \str_replace("\\{$prefix}\\trailingslashit", '\\trailingslashit', $contents); |
| 56 | $contents = \str_replace("\\{$prefix}\\get_template_directory_uri", '\\get_template_directory_uri', $contents); |
| 57 | $contents = \str_replace("\\{$prefix}\\get_stylesheet_directory_uri", '\\get_stylesheet_directory_uri', $contents); |
| 58 | $contents = \str_replace("\\{$prefix}\\includes_url", '\\includes_url', $contents); |
| 59 | $contents = \str_replace("\\{$prefix}\\wp_styles", '\\wp_styles', $contents); |
| 60 | $contents = \str_replace("\\{$prefix}\\get_stylesheet", '\\get_stylesheet', $contents); |
| 61 | $contents = \str_replace("\\{$prefix}\\get_template", '\\get_template', $contents); |
| 62 | $contents = \str_replace("\\{$prefix}\\wp_parse_url", '\\wp_parse_url', $contents); |
| 63 | $contents = \str_replace("\\{$prefix}\\is_wp_error", '\\is_wp_error', $contents); |
| 64 | $contents = \str_replace("\\{$prefix}\\content_url", '\\content_url', $contents); |
| 65 | $contents = \str_replace("\\{$prefix}\\get_admin_url", '\\get_admin_url', $contents); |
| 66 | $contents = \str_replace("\\{$prefix}\\WP_CONTENT_DIR", '\\WP_CONTENT_DIR', $contents); |
| 67 | $contents = \str_replace("\\{$prefix}\\ABSPATH", '\\ABSPATH', $contents); |
| 68 | $contents = \str_replace("\\{$prefix}\\wp_nonce_url", '\\wp_nonce_url', $contents); |
| 69 | $contents = \str_replace("\\{$prefix}\\WPINC", '\\WPINC', $contents); |
| 70 | $contents = \str_replace("\\{$prefix}\\home_url", '\\home_url', $contents); |
| 71 | $contents = \str_replace("\\{$prefix}\\__", '\\__', $contents); |
| 72 | $contents = \str_replace("\\{$prefix}\\wp_array_slice_assoc", '\\wp_array_slice_assoc', $contents); |
| 73 | $contents = \str_replace("\\{$prefix}\\wp_json_encode", '\\wp_json_encode', $contents); |
| 74 | $contents = \str_replace("\\{$prefix}\\get_transient", '\\get_transient', $contents); |
| 75 | $contents = \str_replace("\\{$prefix}\\wp_cache_get", '\\wp_cache_get', $contents); |
| 76 | $contents = \str_replace("\\{$prefix}\\set_transient", '\\set_transient', $contents); |
| 77 | $contents = \str_replace("\\{$prefix}\\wp_cache_set", '\\wp_cache_set', $contents); |
| 78 | $contents = \str_replace("\\{$prefix}\\wp_using_ext_object_cache", '\\wp_using_ext_object_cache', $contents); |
| 79 | $contents = \str_replace("\\{$prefix}\\_doing_it_wrong", '\\_doing_it_wrong', $contents); |
| 80 | $contents = \str_replace("\\{$prefix}\\plugin_dir_url", '\\plugin_dir_url', $contents); |
| 81 | $contents = \str_replace("\\{$prefix}\\is_admin_bar_showing", '\\is_admin_bar_showing', $contents); |
| 82 | $contents = \str_replace("\\{$prefix}\\get_bloginfo", '\\get_bloginfo', $contents); |
| 83 | $contents = \str_replace("\\{$prefix}\\add_filter", '\\add_filter', $contents); |
| 84 | $contents = \str_replace("\\{$prefix}\\add_action", '\\add_action', $contents); |
| 85 | $contents = \str_replace("\\{$prefix}\\apply_filters", '\\apply_filters', $contents); |
| 86 | $contents = \str_replace("\\{$prefix}\\add_query_arg", '\\add_query_arg', $contents); |
| 87 | $contents = \str_replace("\\{$prefix}\\remove_query_arg", '\\remove_query_arg', $contents); |
| 88 | $contents = \str_replace("\\{$prefix}\\get_post", '\\get_post', $contents); |
| 89 | $contents = \str_replace("\\{$prefix}\\wp_scripts", '\\wp_scripts', $contents); |
| 90 | $contents = \str_replace("\\{$prefix}\\wp_styles", '\\wp_styles', $contents); |
| 91 | $contents = \str_replace("\\{$prefix}\\wp_style_is", '\\wp_style_is', $contents); |
| 92 | $contents = \str_replace("\\{$prefix}\\WP_PLUGIN_URL", '\\WP_PLUGIN_URL', $contents); |
| 93 | $contents = \str_replace("\\{$prefix}\\WPMU_PLUGIN_URL", '\\WPMU_PLUGIN_URL', $contents); |
| 94 | $contents = \str_replace("\\{$prefix}\\wp_list_pluck", '\\wp_list_pluck', $contents); |
| 95 | $contents = \str_replace("\\{$prefix}\\wp_array_slice_assoc", '\\wp_array_slice_assoc', $contents); |
| 96 | $contents = \str_replace("\\{$prefix}\\wp_json_encode", '\\wp_json_encode', $contents); |
| 97 | $contents = \str_replace("\\{$prefix}\\WP_Http", '\\WP_Http', $contents); |
| 98 | $contents = \str_replace("\\{$prefix}\\WP_Error", '\\WP_Error', $contents); |
| 99 | $contents = \str_replace("\\{$prefix}\\MINUTE_IN_SECONDS", '\\MINUTE_IN_SECONDS', $contents); |
| 100 | $contents = \str_replace("\\{$prefix}\\wp_next_scheduled", '\\wp_next_scheduled', $contents); |
| 101 | $contents = \str_replace("\\{$prefix}\\wp_remote_post", '\\wp_remote_post', $contents); |
| 102 | $contents = \str_replace("\\{$prefix}\\wp_create_nonce", '\\wp_create_nonce', $contents); |
| 103 | $contents = \str_replace("\\{$prefix}\\admin_url", '\\admin_url', $contents); |
| 104 | $contents = \str_replace("\\{$prefix}\\check_ajax_referer", '\\check_ajax_referer', $contents); |
| 105 | $contents = \str_replace("\\{$prefix}\\wp_die", '\\wp_die', $contents); |
| 106 | $contents = \str_replace("\\{$prefix}\\wp_clear_scheduled_hook", '\\wp_clear_scheduled_hook', $contents); |
| 107 | $contents = \str_replace("\\{$prefix}\\wp_unschedule_event", '\\wp_unschedule_event', $contents); |
| 108 | $contents = \str_replace("\\{$prefix}\\wp_convert_hr_to_bytes", '\\wp_convert_hr_to_bytes', $contents); |
| 109 | $contents = \str_replace("\\{$prefix}\\maybe_unserialize", '\\maybe_unserialize', $contents); |
| 110 | $contents = \str_replace("\\{$prefix}\\delete_site_transient", '\\delete_site_transient', $contents); |
| 111 | $contents = \str_replace("\\{$prefix}\\set_site_transient", '\\set_site_transient', $contents); |
| 112 | $contents = \str_replace("\\{$prefix}\\get_site_transient", '\\get_site_transient', $contents); |
| 113 | $contents = \str_replace("\\{$prefix}\\is_multisite", '\\is_multisite', $contents); |
| 114 | $contents = \str_replace("\\{$prefix}\\update_site_option", '\\update_site_option', $contents); |
| 115 | $contents = \str_replace("\\{$prefix}\\delete_site_option", '\\delete_site_option', $contents); |
| 116 | $contents = \str_replace("\\{$prefix}\\wp_schedule_event", '\\wp_schedule_event', $contents); |
| 117 | return $contents; |
| 118 | }), |
| 119 | 'exclude-files' => array(), |
| 120 | // list<string> |
| 121 | 'exclude-namespaces' => array('WP2FA', 'Composer'), |
| 122 | // list<string|regex> |
| 123 | 'exclude-constants' => array(), |
| 124 | // list<string|regex> |
| 125 | 'exclude-classes' => array(), |
| 126 | // list<string|regex> |
| 127 | 'exclude-functions' => array(), |
| 128 | // list<string|regex> |
| 129 | 'whitelist' => array('add_action'), |
| 130 | ); |
| 131 |