{"action":"created","comment":{"url":"https://api.github.com/repos/Automattic/wp-super-cache/pulls/comments/36948955","id":36948955,"diff_hunk":"@@ -0,0 +1,726 @@\n+<?php\n+\n+/**\n+* A sanitizer for WP Super Cache settings\n+*\n+* This class handles sanitizing the WP Super Cache settings. Each settings has a specific\n+* value that can be evaluated before being inserted into the database or written to the wp-cache-config.php file.\n+* This class is developed for the import/export tab in order to sanitize and sanitize the imported values.\n+*\n+* The settings are organized in terms of their allowed values: booleans, integers, strings, database options.\n+*\n+* Custom settings can be added by using the filters 'wp_super_cache_extend_allowed_{type}' to add the setting to the\n+* allowed values and 'wp_super_cache_sanitize_{value}' to sanitize the new value. The value can then be sanitized using\n+* this class's sanitize function.\n+*\n+* @package  WP Super Cache\n+* @since 1.4.4\n+*/\n+\n+class WP_Super_Cache_Sanitizer {\n+\n+  // The list of allowed database options\n+  // Note: The stats and counts are commented out as they may not be necessary to import since they are site specific.\n+  const ALLOWED_OPTIONS = array(\n+      'ossdl_cname',\n+      'ossdl_https',\n+      'ossdl_off_cdn_url',\n+      'ossdl_off_exclude',\n+      'ossdl_off_include_dirs',\n+      'preload_cache_counter',\n+      // 'supercache_last_cached',\n+      // 'supercache_stats',\n+      // 'wpsupercache_count',\n+      // 'wpsupercache_gc_time',\n+      // 'wpsupercache_start',\n+  );\n+\n+  // The list of allowed global boolean variables that are written to the\n+  // wp-cache-config.php file as either true, false, 0 or 1\n+  const ALLOWED_SETTING_BOOLEANS = array(\n+      \"cache_compression\",\n+      \"cache_enabled\",\n+      \"cache_gc_email_me\",\n+      \"cache_jetpack\",\n+      \"cache_rebuild_files\",\n+      \"dismiss_gc_warning\",\n+      \"dismiss_htaccess_warning\",\n+      \"dismiss_readable_warning\",\n+      \"ossdlcdn\",\n+      \"super_cache_enabled\",\n+      \"use_flock\",\n+      \"wp_cache_anon_only\",\n+      \"wp_cache_clear_on_post_edit\",\n+      \"wp_cache_cron_check\",\n+      \"wp_cache_debug_email\",\n+      \"wp_cache_debug_level\",\n+      \"wp_cache_debug_to_file\",\n+      \"wp_cache_disable_utf8\",\n+      \"wp_cache_front_page_checks\",\n+      \"wp_cache_hello_world\",\n+      \"wp_cache_hide_donation\",\n+      \"wp_cache_make_known_anon\",\n+      \"wp_cache_mfunc_enabled\",\n+      \"wp_cache_mobile\",\n+      \"wp_cache_mobile_enabled\",\n+      \"wp_cache_mobile_whitelist\",\n+      \"wp_cache_mod_rewrite\",\n+      \"wp_cache_mutex_disabled\",\n+      \"wp_cache_no_cache_for_get\",\n+      \"wp_cache_not_logged_in\",\n+      \"wp_cache_object_cache\",\n+      \"wp_cache_preload_email_me\",\n+      \"wp_cache_preload_on\",\n+      \"wp_cache_preload_taxonomies\",\n+      \"wp_cache_refresh_single_only\",\n+      \"wp_cache_shutdown_gc\",\n+      \"wp_cache_slash_check\",\n+      \"wp_super_cache_advanced_debug\",\n+      \"wp_super_cache_comments\",\n+      \"wp_super_cache_debug\",\n+      \"wp_super_cache_front_page_check\",\n+      \"wp_super_cache_front_page_clear\",\n+      \"wp_super_cache_front_page_notification\",\n+      \"wp_super_cache_late_init\",\n+      \"wp_supercache_304\",\n+      \"wp_supercache_cache_list\",\n+  );\n+\n+  // The list of allowed global integer variables that are written to the wp-cache-config.php\n+  const ALLOWED_SETTING_INTS = array(\n+      \"cache_badbehaviour\",\n+      \"cache_awaitingmoderation\",\n+      \"cache_domain_mapping\",\n+      \"cache_time_interval\",\n+      \"cache_max_time\",\n+      \"cache_rejected_uri\",\n+      \"wp_cache_preload_interval\",\n+      \"cache_wptouch\",\n+      \"sem_id\",\n+  );\n+\n+  // The list of allowed global string variables that are written to the wp-cache-config.php\n+  const ALLOWED_SETTING_STRINGS = array(\n+      \"cache_acceptable_files\",\n+      \"cache_badbehaviour_file\",\n+      \"cache_no_adverts_for_friends\",\n+      \"cache_page_secret\",\n+      \"cache_rejected_user_agent\",\n+      \"cache_scheduled_time\",\n+      \"cache_schedule_interval\",\n+      \"cache_schedule_type\",\n+      \"cached_direct_pages\",\n+      \"file_prefix\",\n+      \"wp_cache_debug_ip\",\n+      \"wp_cache_debug_log\",\n+      \"wp_cache_home_path\",\n+      \"wp_cache_mobile_browsers\",\n+      \"wp_cache_mobile_groups\",\n+      \"wp_cache_mobile_prefixes\",\n+      \"wp_cache_pages\",\n+      'wp_cache_plugins_dir',\n+      \"wp_cache_preload_email_volume\",\n+      \"wp_cache_preload_posts\",\n+      \"wp_super_cache_front_page_text\",\n+      \"wptouch_exclude_ua\",\n+  );\n+\n+  // The default list of mobile browsers taken from wp-cache.php:648\n+  const MOBILE_BROWSERS = array(\n+      '2.0 MMP',\n+      '240x320',\n+      '400X240',\n+      'Android',\n+      'AvantGo',\n+      'BlackBerry',\n+      'BlackBerry9530',\n+      'Blazer',\n+      'Cellphone',\n+      'Danger',\n+      'DoCoMo',\n+      'Elaine/3.0',\n+      'EudoraWeb',\n+      'Googlebot-Mobile',\n+      'hiptop',\n+      'IEMobile',\n+      'iPhone',\n+      'iPod',\n+      'KYOCERA/WX310K',\n+      'LG-TU915',\n+      'LG/U990',\n+      'LGE',\n+      'MIDP-2.',\n+      'MMEF20',\n+      'MOT-V',\n+      'NetFront',\n+      'Newt',\n+      'Nintendo',\n+      'Nitro',\n+      'Nokia',\n+      'Nokia5800',\n+      'Obigo',\n+      'Opera',\n+      'Palm',\n+      'PlayStation',\n+      'portalmmm',\n+      'Proxinet',\n+      'ProxiNet',\n+      'SHARP-TQ-GX10',\n+      'SHG-i900',\n+      'Small',\n+      'SonyEricsson',\n+      'Symbian',\n+      'SymbianOS',\n+      'TS21i-10',\n+      'UP.Browser',\n+      'UP.Link',\n+      'webOS',\n+      'webOS',\n+      'Windows',\n+      'WinWAP',\n+      'YahooSeeker/M1A1-R2D2',\n+      'CE',\n+      'Mini',\n+      'OS',\n+      'Portable',\n+      'VX',\n+      'Wii',\n+  );\n+  // The default list of mobile prefixes taken from wp-cache.php:653\n+  // Note: the wp-cache.php list is taken from http://svn.wp-plugins.org/wordpress-mobile-pack/trunk/plugins/wpmp_switcher/lite_detection.php\n+  const MOBILE_PREFIXES = array(\n+      'w3c ',\n+      'w3c-',\n+      'acs-',\n+      'alav',\n+      'alca',\n+      'amoi',\n+      'audi',\n+      'avan',\n+      'benq',\n+      'bird',\n+      'blac',\n+      'blaz',\n+      'brew',\n+      'cell',\n+      'cldc',\n+      'cmd-',\n+      'dang',\n+      'doco',\n+      'eric',\n+      'hipt',\n+      'htc_',\n+      'inno',\n+      'ipaq',\n+      'ipod',\n+      'jigs',\n+      'kddi',\n+      'keji',\n+      'leno',\n+      'lg-c',\n+      'lg-d',\n+      'lg-g',\n+      'lge-',\n+      'lg/u',\n+      'maui',\n+      'maxo',\n+      'midp',\n+      'mits',\n+      'mmef',\n+      'mobi',\n+      'mot-',\n+      'moto',\n+      'mwbp',\n+      'nec-',\n+      'newt',\n+      'noki',\n+      'palm',\n+      'pana',\n+      'pant',\n+      'phil',\n+      'play',\n+      'port',\n+      'prox',\n+      'qwap',\n+      'sage',\n+      'sams',\n+      'sany',\n+      'sch-',\n+      'sec-',\n+      'send',\n+      'seri',\n+      'sgh-',\n+      'shar',\n+      'sie-',\n+      'siem',\n+      'smal',\n+      'smar',\n+      'sony',\n+      'sph-',\n+      'symb',\n+      't-mo',\n+      'teli',\n+      'tim-',\n+      'tosh',\n+      'tsm-',\n+      'upg1',\n+      'upsi',\n+      'vk-v',\n+      'voda',\n+      'wap-',\n+      'wapa',\n+      'wapi',\n+      'wapp',\n+      'wapr',\n+      'webc',\n+      'winw',\n+        'winw',\n+      'xda ',\n+      'xda-'\n+  );\n+\n+    /**\n+     * Merges the list of all the options that will act as a list of options allowed to imported\n+     *\n+     * @since  1.4.4\n+     */\n+\n+  function __construct() {\n+\n+    $this->allowed_options = apply_filters( 'wp_super_cache_extend_allowed_option', self::ALLOWED_OPTIONS );\n+    $this->allowed_booleans = apply_filters( 'wp_super_cache_extend_allowed_booleans', self::ALLOWED_SETTING_BOOLEANS );\n+    $this->allowed_integers = apply_filters( 'wp_super_cache_extend_allowed_integers', self::ALLOWED_SETTING_INTS );\n+    $this->allowed_strings = apply_filters( 'wp_super_cache_extend_allowed_strings', self::ALLOWED_SETTING_STRINGS );\n+\n+    $this->allowed_values = array_merge(\n+        $this->allowed_options,\n+        $this->allowed_booleans,\n+        $this->allowed_integers,\n+        $this->allowed_strings\n+    );\n+\n+  }\n+\n+  /**\n+   * Determines if the current setting is allowed to imported.  If the current setting is allowed\n+   * to imported then perform then sanitize the value correctly.  If the $insert variable is set to\n+   * true then this function will call the insert function to write the settings to the wp-cache-config.php\n+   * file or to the database, depending on the setting.\n+   *\n+   * @param String $setting The current setting of the value to be sanitized\n+   * @param Mixed $value The value of the current setting being imported\n+   * @param Boolean $insert Determines whether the value will be written to the wp-cache-config.php file or inserted into the database\n+   *\n+   * @since  1.4.4\n+   */\n+  function sanitize( $setting, $value, $insert = false ) {\n+\n+    if ( ! in_array( $setting, $this->allowed_values ) )\n+        return false;\n+\n+    if ( in_array( $setting, $this->allowed_booleans ) )\n+      $sanitized_value = $this->sanitize_boolean( $setting, $value );\n+    else if ( in_array( $setting, $this->allowed_integers ) )\n+      $sanitized_value = $this->sanitize_int( $setting, $value );\n+    else if ( in_array( $setting, $this->allowed_strings ) )\n+      $sanitized_value = $this->sanitize_string( $setting, $value );\n+    else if ( in_array( $setting, $this->allowed_options ) )\n+      $sanitized_value = $this->sanitize_options( $setting, $value );\n+\n+    if ( $insert === true )\n+        $this->insert( $setting, $sanitized_value );\n+\n+    return $sanitized_value;\n+  }\n+\n+  /**\n+   * This function inserts the current setting and its sanitized value into the wp-cache-config.php\n+   * file or the database depending on the setting.\n+   *\n+   * @param String $setting The current setting being inserted\n+   * @param Mixed $sanitized_value The sanitized value of the setting\n+   *\n+   * @since  1.4.4\n+   *\n+   * @uses  wp_cache_replace_line Replace the lines in the wp-cache-config.php file\n+   */\n+  private function insert( $setting, $sanitized_value ) {\n+    global $wp_cache_config_file;\n+\n+    if ( in_array( $setting, $this->allowed_booleans ) ) {\n+        wp_cache_replace_line('^ *\\$' . $setting . ' =', \"\\$\" . $setting . \" = \" . $sanitized_value . \";\", $wp_cache_config_file);\n+    } else if ( in_array( $setting, $this->allowed_strings ) ) {\n+        if ( is_array( $sanitized_value ) && $setting === 'wp_cache_pages' ) {\n+            foreach ( $sanitized_value as $page => $status ) {\n+                wp_cache_replace_line('^ *\\$wp_cache_pages\\[ \"' . $page . '\" \\]', \"\\$wp_cache_pages[ \\\"{$page}\\\" ] = $status;\", $wp_cache_config_file);\n+            }\n+        } else {\n+            wp_cache_replace_line('^ *\\$' . $setting . ' =', \"\\$\". $setting .\" = $sanitized_value;\", $wp_cache_config_file);\n+        }\n+    } else if ( in_array( $setting, $this->allowed_integers ) ) {\n+        wp_cache_replace_line('^ *\\$' . $setting . ' =', \"\\$\". $setting .\" = $sanitized_value;\", $wp_cache_config_file);\n+    } else if ( in_array( $setting, $this->allowed_options ) ) {\n+        update_option( $setting, $sanitized_value );\n+    }\n+  }\n+\n+  /**\n+   * This sanitizes the settings where the allowed values are boolean, 0 or 1. The boolean values true and false\n+   * are converted to strings to maintain the values in wp-cache-config.php file\n+   *\n+   * @param String $setting The current boolean setting to be sanitized\n+   * @param Mixed $value The mixed value of the current setting that will be sanitized\n+   *\n+   * @return Boolean|String A sanitized version of the inputed value\n+   */\n+  function sanitize_boolean( $setting, $value ) {\n+    // Note: necessary to force cache_enable and super_cache_enabled to be true/false\n+    $sanitized_value = apply_filters( \"wp_super_cache_sanitize_$value\", $value );\n+    if ( is_bool( $value ) === true ) {\n+        $sanitized_value = $value ? 'true' : 'false';\n+    } else {\n+        $sanitized_value = intval( $value ) === 1 ? 1 : 0;\n+    }\n+    return $sanitized_value;\n+  }\n+\n+  /**\n+   * This sanitizes the settings where the allowed values are only integers.\n+   * The sanitation method is different per setting name.\n+   *\n+   * @param String $setting The current integer setting to be sanitized\n+   * @param Mixed $value The mixed value of the current setting that will be sanitized\n+   *\n+   * @return Integer A sanitized version of the inputed value\n+   */\n+  function sanitize_int( $setting, $value ) {\n+    switch ( $setting ) {\n+        case \"cache_badbehaviour\":\n+            $value = $value == '' || $value == 'no' ? 0 : $value;\n+            $sanitized_value = intval( $value );\n+            break;\n+\n+        case \"cache_awaitingmoderation\":\n+        case \"cache_wptouch\":\n+        case \"cache_domain_mapping\":\n+            $value = $value == '' ? '0' : $value;\n+            $sanitized_value = intval( $value );\n+            break;\n+\n+        case \"cache_time_interval\":\n+            $sanitized_value = 600;\n+            $value = is_numeric( $value ) ? intval( $value ) : $sanitized_value;\n+            if ( $sanitized_value !== $value )\n+                $sanitized_value = $value;\n+            break;\n+\n+        case \"cache_max_time\":\n+            $sanitized_value = 3600;\n+            $value = is_numeric( $value ) ? intval( $value ) : $sanitized_value;\n+            if ( $sanitized_value !== $value )\n+                $sanitized_value = $value;\n+            break;\n+\n+        case \"cache_rejected_uri\":\n+            global $cache_rejected_uri;\n+            foreach ( $value as $index => $url ) {\n+                $value[ $index ] = str_replace( '\\\\\\\\', '\\\\', $url );\n+            }\n+            $sanitized_value = wp_cache_sanitize_value( implode(', ', $value), $cache_rejected_uri );\n+            break;\n+\n+        case \"wp_cache_preload_interval\":\n+            $sanitized_value = is_numeric( $value ) && $value >= 30 ? intval( $value ) : 0;\n+            break;\n+\n+        case \"sem_id\":\n+            global $WPSC_HTTP_HOST, $cache_path;\n+            if ( preg_match('/^\\d{9}$/', intval( $value ) ) ) {\n+                $sanitized_value = intval( $value );\n+            } else {\n+                $cache_path =  '/' != substr( $cache_path, -1 )  ? $cache_path .= '/' : '';\n+                $sanitized_value = crc32( $WPSC_HTTP_HOST . $cache_path ) & 0x7fffffff;\n+            }\n+            break;\n+\n+        default:\n+            $sanitized_value = apply_filters( \"wp_super_cache_sanitize_$value\", $value );\n+            $sanitized_value = intval( $sanitized_value );\n+            break;\n+    }\n+    return $sanitized_value;\n+  }\n+\n+  /**\n+   * This sanitizes the settings where the allowed values are only strings.\n+   * The sanitation method is different per setting name.\n+   *\n+   * @param String $setting The current string setting to be sanitized\n+   * @param Mixed $value The mixed value of the current setting that will be sanitized\n+   *\n+   * @uses  wp_cache_sanitize_value Sanitizes an array value\n+   *\n+   * @return String|Array A sanitized version of the inputed value\n+   */\n+  function sanitize_string( $setting, $value ) {\n+    switch ( $setting ) {\n+\n+        case 'cache_acceptable_files' :\n+            global $cache_acceptable_files;\n+            if ( is_array( $value ) ) {\n+                $value = implode( ',', $value );\n+            }\n+            $sanitized_value = wp_cache_sanitize_value( $value, $cache_acceptable_files );\n+            break;\n+\n+        case 'cache_badbehaviour_file':\n+            $sanitized_value = function_exists('get_bb_file_loc') ? get_bb_file_loc() : \"\";\n+            $sanitized_value = \"\\\"$sanitized_value\\\"\";\n+            break;\n+\n+        case 'cache_no_adverts_for_friends':\n+            $sanitized_value = in_array( $value, array( 'yes', 'no' ) ) ? $value : \"yes\";\n+            $sanitized_value = \"\\\"$sanitized_value\\\"\";\n+            break;\n+\n+        case 'cache_rejected_user_agent':\n+            global $cache_rejected_user_agent;\n+            if ( is_array( $value ) ) {\n+                $value = implode( ',', $value );\n+            }\n+            $value = str_replace( ' ', '___', $value );\n+            $sanitized_value = str_replace( '___', ' ', wp_cache_sanitize_value( $value, $cache_rejected_user_agent ) );\n+            break;\n+\n+        case \"cache_scheduled_time\":\n+            $sanitized_value = preg_match( '/^\\d{2}:\\d{2}$/', $value ) ? \"\\\"$value\\\"\" : \"\\\"00:00\\\"\";\n+            break;\n+\n+        case \"cache_schedule_interval\":\n+            $sanitized_value = in_array( $value, array( 'daily', 'twicedaily', 'hourly' ) ) ? \"\\\"$value\\\"\" : \"\\\"daily\\\"\";\n+            break;\n+\n+        case 'cache_schedule_type':\n+            $sanitized_value = in_array( $value, array( 'time', 'interval' ) ) ? \"\\\"$value\\\"\" : \"\\\"interval\\\"\";\n+            break;\n+\n+        case 'cache_page_secret':\n+            if ( strlen( $value ) != 32 || ! ctype_xdigit( $value ) ) {\n+                $sanitized_value = md5( date( 'H:i:s' ) . mt_rand() );\n+            } else {\n+                $sanitized_value = $value;\n+            }\n+            $sanitized_value = \"\\\"$sanitized_value\\\"\";\n+            break;\n+\n+        case 'cached_direct_pages':\n+            if ( is_array( $value ) )  {","path":"wp-cache-sanitizer.php","position":517,"original_position":517,"commit_id":"bc842d1916f79c6a267277447d09f361fb0b1bcb","original_commit_id":"bc842d1916f79c6a267277447d09f361fb0b1bcb","user":{"login":"mdawaffe","id":125994,"avatar_url":"https://avatars.githubusercontent.com/u/125994?v=3","gravatar_id":"","url":"https://api.github.com/users/mdawaffe","html_url":"https://github.com/mdawaffe","followers_url":"https://api.github.com/users/mdawaffe/followers","following_url":"https://api.github.com/users/mdawaffe/following{/other_user}","gists_url":"https://api.github.com/users/mdawaffe/gists{/gist_id}","starred_url":"https://api.github.com/users/mdawaffe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mdawaffe/subscriptions","organizations_url":"https://api.github.com/users/mdawaffe/orgs","repos_url":"https://api.github.com/users/mdawaffe/repos","events_url":"https://api.github.com/users/mdawaffe/events{/privacy}","received_events_url":"https://api.github.com/users/mdawaffe/received_events","type":"User","site_admin":false},"body":"Why is this being sanitized with `::sanitize_string()`","created_at":"2015-08-13T08:01:29Z","updated_at":"2015-08-13T08:01:29Z","html_url":"https://github.com/Automattic/wp-super-cache/pull/56#discussion_r36948955","pull_request_url":"https://api.github.com/repos/Automattic/wp-super-cache/pulls/56","_links":{"self":{"href":"https://api.github.com/repos/Automattic/wp-super-cache/pulls/comments/36948955"},"html":{"href":"https://github.com/Automattic/wp-super-cache/pull/56#discussion_r36948955"},"pull_request":{"href":"https://api.github.com/repos/Automattic/wp-super-cache/pulls/56"}}},"pull_request":{"url":"https://api.github.com/repos/Automattic/wp-super-cache/pulls/56","id":41303615,"html_url":"https://github.com/Automattic/wp-super-cache/pull/56","diff_url":"https://github.com/Automattic/wp-super-cache/pull/56.diff","patch_url":"https://github.com/Automattic/wp-super-cache/pull/56.patch","issue_url":"https://api.github.com/repos/Automattic/wp-super-cache/issues/56","number":56,"state":"open","locked":false,"title":"Import/Export settings","user":{"login":"daneodekirk","id":881930,"avatar_url":"https://avatars.githubusercontent.com/u/881930?v=3","gravatar_id":"","url":"https://api.github.com/users/daneodekirk","html_url":"https://github.com/daneodekirk","followers_url":"https://api.github.com/users/daneodekirk/followers","following_url":"https://api.github.com/users/daneodekirk/following{/other_user}","gists_url":"https://api.github.com/users/daneodekirk/gists{/gist_id}","starred_url":"https://api.github.com/users/daneodekirk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/daneodekirk/subscriptions","organizations_url":"https://api.github.com/users/daneodekirk/orgs","repos_url":"https://api.github.com/users/daneodekirk/repos","events_url":"https://api.github.com/users/daneodekirk/events{/privacy}","received_events_url":"https://api.github.com/users/daneodekirk/received_events","type":"User","site_admin":false},"body":"Adds an import/export feature as mentioned in #4. Provides the functionality for importing and exporting the plugin's settings as well as a class for validating/sanitizing the settings. ","created_at":"2015-07-31T03:07:17Z","updated_at":"2015-08-13T08:01:29Z","closed_at":null,"merged_at":null,"merge_commit_sha":"980ab7b254e84626c8f8531dc4de6df5e61c42e7","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/Automattic/wp-super-cache/pulls/56/commits","review_comments_url":"https://api.github.com/repos/Automattic/wp-super-cache/pulls/56/comments","review_comment_url":"https://api.github.com/repos/Automattic/wp-super-cache/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Automattic/wp-super-cache/issues/56/comments","statuses_url":"https://api.github.com/repos/Automattic/wp-super-cache/statuses/bc842d1916f79c6a267277447d09f361fb0b1bcb","head":{"label":"daneodekirk:master","ref":"master","sha":"bc842d1916f79c6a267277447d09f361fb0b1bcb","user":{"login":"daneodekirk","id":881930,"avatar_url":"https://avatars.githubusercontent.com/u/881930?v=3","gravatar_id":"","url":"https://api.github.com/users/daneodekirk","html_url":"https://github.com/daneodekirk","followers_url":"https://api.github.com/users/daneodekirk/followers","following_url":"https://api.github.com/users/daneodekirk/following{/other_user}","gists_url":"https://api.github.com/users/daneodekirk/gists{/gist_id}","starred_url":"https://api.github.com/users/daneodekirk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/daneodekirk/subscriptions","organizations_url":"https://api.github.com/users/daneodekirk/orgs","repos_url":"https://api.github.com/users/daneodekirk/repos","events_url":"https://api.github.com/users/daneodekirk/events{/privacy}","received_events_url":"https://api.github.com/users/daneodekirk/received_events","type":"User","site_admin":false},"repo":{"id":38796620,"name":"wp-super-cache","full_name":"daneodekirk/wp-super-cache","owner":{"login":"daneodekirk","id":881930,"avatar_url":"https://avatars.githubusercontent.com/u/881930?v=3","gravatar_id":"","url":"https://api.github.com/users/daneodekirk","html_url":"https://github.com/daneodekirk","followers_url":"https://api.github.com/users/daneodekirk/followers","following_url":"https://api.github.com/users/daneodekirk/following{/other_user}","gists_url":"https://api.github.com/users/daneodekirk/gists{/gist_id}","starred_url":"https://api.github.com/users/daneodekirk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/daneodekirk/subscriptions","organizations_url":"https://api.github.com/users/daneodekirk/orgs","repos_url":"https://api.github.com/users/daneodekirk/repos","events_url":"https://api.github.com/users/daneodekirk/events{/privacy}","received_events_url":"https://api.github.com/users/daneodekirk/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/daneodekirk/wp-super-cache","description":"http://wordpress.org/plugins/wp-super-cache/","fork":true,"url":"https://api.github.com/repos/daneodekirk/wp-super-cache","forks_url":"https://api.github.com/repos/daneodekirk/wp-super-cache/forks","keys_url":"https://api.github.com/repos/daneodekirk/wp-super-cache/keys{/key_id}","collaborators_url":"https://api.github.com/repos/daneodekirk/wp-super-cache/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/daneodekirk/wp-super-cache/teams","hooks_url":"https://api.github.com/repos/daneodekirk/wp-super-cache/hooks","issue_events_url":"https://api.github.com/repos/daneodekirk/wp-super-cache/issues/events{/number}","events_url":"https://api.github.com/repos/daneodekirk/wp-super-cache/events","assignees_url":"https://api.github.com/repos/daneodekirk/wp-super-cache/assignees{/user}","branches_url":"https://api.github.com/repos/daneodekirk/wp-super-cache/branches{/branch}","tags_url":"https://api.github.com/repos/daneodekirk/wp-super-cache/tags","blobs_url":"https://api.github.com/repos/daneodekirk/wp-super-cache/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/daneodekirk/wp-super-cache/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/daneodekirk/wp-super-cache/git/refs{/sha}","trees_url":"https://api.github.com/repos/daneodekirk/wp-super-cache/git/trees{/sha}","statuses_url":"https://api.github.com/repos/daneodekirk/wp-super-cache/statuses/{sha}","languages_url":"https://api.github.com/repos/daneodekirk/wp-super-cache/languages","stargazers_url":"https://api.github.com/repos/daneodekirk/wp-super-cache/stargazers","contributors_url":"https://api.github.com/repos/daneodekirk/wp-super-cache/contributors","subscribers_url":"https://api.github.com/repos/daneodekirk/wp-super-cache/subscribers","subscription_url":"https://api.github.com/repos/daneodekirk/wp-super-cache/subscription","commits_url":"https://api.github.com/repos/daneodekirk/wp-super-cache/commits{/sha}","git_commits_url":"https://api.github.com/repos/daneodekirk/wp-super-cache/git/commits{/sha}","comments_url":"https://api.github.com/repos/daneodekirk/wp-super-cache/comments{/number}","issue_comment_url":"https://api.github.com/repos/daneodekirk/wp-super-cache/issues/comments{/number}","contents_url":"https://api.github.com/repos/daneodekirk/wp-super-cache/contents/{+path}","compare_url":"https://api.github.com/repos/daneodekirk/wp-super-cache/compare/{base}...{head}","merges_url":"https://api.github.com/repos/daneodekirk/wp-super-cache/merges","archive_url":"https://api.github.com/repos/daneodekirk/wp-super-cache/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/daneodekirk/wp-super-cache/downloads","issues_url":"https://api.github.com/repos/daneodekirk/wp-super-cache/issues{/number}","pulls_url":"https://api.github.com/repos/daneodekirk/wp-super-cache/pulls{/number}","milestones_url":"https://api.github.com/repos/daneodekirk/wp-super-cache/milestones{/number}","notifications_url":"https://api.github.com/repos/daneodekirk/wp-super-cache/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/daneodekirk/wp-super-cache/labels{/name}","releases_url":"https://api.github.com/repos/daneodekirk/wp-super-cache/releases{/id}","created_at":"2015-07-09T04:14:37Z","updated_at":"2015-07-09T04:14:38Z","pushed_at":"2015-07-31T02:55:57Z","git_url":"git://github.com/daneodekirk/wp-super-cache.git","ssh_url":"git@github.com:daneodekirk/wp-super-cache.git","clone_url":"https://github.com/daneodekirk/wp-super-cache.git","svn_url":"https://github.com/daneodekirk/wp-super-cache","homepage":null,"size":1954,"stargazers_count":0,"watchers_count":0,"language":"PHP","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"Automattic:master","ref":"master","sha":"e3791442ed9c9f16564f2607d0565f2d28eb302f","user":{"login":"Automattic","id":887802,"avatar_url":"https://avatars.githubusercontent.com/u/887802?v=3","gravatar_id":"","url":"https://api.github.com/users/Automattic","html_url":"https://github.com/Automattic","followers_url":"https://api.github.com/users/Automattic/followers","following_url":"https://api.github.com/users/Automattic/following{/other_user}","gists_url":"https://api.github.com/users/Automattic/gists{/gist_id}","starred_url":"https://api.github.com/users/Automattic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Automattic/subscriptions","organizations_url":"https://api.github.com/users/Automattic/orgs","repos_url":"https://api.github.com/users/Automattic/repos","events_url":"https://api.github.com/users/Automattic/events{/privacy}","received_events_url":"https://api.github.com/users/Automattic/received_events","type":"Organization","site_admin":false},"repo":{"id":21128555,"name":"wp-super-cache","full_name":"Automattic/wp-super-cache","owner":{"login":"Automattic","id":887802,"avatar_url":"https://avatars.githubusercontent.com/u/887802?v=3","gravatar_id":"","url":"https://api.github.com/users/Automattic","html_url":"https://github.com/Automattic","followers_url":"https://api.github.com/users/Automattic/followers","following_url":"https://api.github.com/users/Automattic/following{/other_user}","gists_url":"https://api.github.com/users/Automattic/gists{/gist_id}","starred_url":"https://api.github.com/users/Automattic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Automattic/subscriptions","organizations_url":"https://api.github.com/users/Automattic/orgs","repos_url":"https://api.github.com/users/Automattic/repos","events_url":"https://api.github.com/users/Automattic/events{/privacy}","received_events_url":"https://api.github.com/users/Automattic/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Automattic/wp-super-cache","description":"http://wordpress.org/plugins/wp-super-cache/","fork":false,"url":"https://api.github.com/repos/Automattic/wp-super-cache","forks_url":"https://api.github.com/repos/Automattic/wp-super-cache/forks","keys_url":"https://api.github.com/repos/Automattic/wp-super-cache/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Automattic/wp-super-cache/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Automattic/wp-super-cache/teams","hooks_url":"https://api.github.com/repos/Automattic/wp-super-cache/hooks","issue_events_url":"https://api.github.com/repos/Automattic/wp-super-cache/issues/events{/number}","events_url":"https://api.github.com/repos/Automattic/wp-super-cache/events","assignees_url":"https://api.github.com/repos/Automattic/wp-super-cache/assignees{/user}","branches_url":"https://api.github.com/repos/Automattic/wp-super-cache/branches{/branch}","tags_url":"https://api.github.com/repos/Automattic/wp-super-cache/tags","blobs_url":"https://api.github.com/repos/Automattic/wp-super-cache/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Automattic/wp-super-cache/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Automattic/wp-super-cache/git/refs{/sha}","trees_url":"https://api.github.com/repos/Automattic/wp-super-cache/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Automattic/wp-super-cache/statuses/{sha}","languages_url":"https://api.github.com/repos/Automattic/wp-super-cache/languages","stargazers_url":"https://api.github.com/repos/Automattic/wp-super-cache/stargazers","contributors_url":"https://api.github.com/repos/Automattic/wp-super-cache/contributors","subscribers_url":"https://api.github.com/repos/Automattic/wp-super-cache/subscribers","subscription_url":"https://api.github.com/repos/Automattic/wp-super-cache/subscription","commits_url":"https://api.github.com/repos/Automattic/wp-super-cache/commits{/sha}","git_commits_url":"https://api.github.com/repos/Automattic/wp-super-cache/git/commits{/sha}","comments_url":"https://api.github.com/repos/Automattic/wp-super-cache/comments{/number}","issue_comment_url":"https://api.github.com/repos/Automattic/wp-super-cache/issues/comments{/number}","contents_url":"https://api.github.com/repos/Automattic/wp-super-cache/contents/{+path}","compare_url":"https://api.github.com/repos/Automattic/wp-super-cache/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Automattic/wp-super-cache/merges","archive_url":"https://api.github.com/repos/Automattic/wp-super-cache/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Automattic/wp-super-cache/downloads","issues_url":"https://api.github.com/repos/Automattic/wp-super-cache/issues{/number}","pulls_url":"https://api.github.com/repos/Automattic/wp-super-cache/pulls{/number}","milestones_url":"https://api.github.com/repos/Automattic/wp-super-cache/milestones{/number}","notifications_url":"https://api.github.com/repos/Automattic/wp-super-cache/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Automattic/wp-super-cache/labels{/name}","releases_url":"https://api.github.com/repos/Automattic/wp-super-cache/releases{/id}","created_at":"2014-06-23T14:08:58Z","updated_at":"2015-08-10T20:53:09Z","pushed_at":"2015-08-13T02:21:12Z","git_url":"git://github.com/Automattic/wp-super-cache.git","ssh_url":"git@github.com:Automattic/wp-super-cache.git","clone_url":"https://github.com/Automattic/wp-super-cache.git","svn_url":"https://github.com/Automattic/wp-super-cache","homepage":null,"size":3290,"stargazers_count":42,"watchers_count":42,"language":"PHP","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":19,"mirror_url":null,"open_issues_count":36,"forks":19,"open_issues":36,"watchers":42,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Automattic/wp-super-cache/pulls/56"},"html":{"href":"https://github.com/Automattic/wp-super-cache/pull/56"},"issue":{"href":"https://api.github.com/repos/Automattic/wp-super-cache/issues/56"},"comments":{"href":"https://api.github.com/repos/Automattic/wp-super-cache/issues/56/comments"},"review_comments":{"href":"https://api.github.com/repos/Automattic/wp-super-cache/pulls/56/comments"},"review_comment":{"href":"https://api.github.com/repos/Automattic/wp-super-cache/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Automattic/wp-super-cache/pulls/56/commits"},"statuses":{"href":"https://api.github.com/repos/Automattic/wp-super-cache/statuses/bc842d1916f79c6a267277447d09f361fb0b1bcb"}}}}