diff --git a/noblogs-wp-ssl.php b/noblogs-wp-ssl.php index 03383f638c3fc16a3329f7104ed57569a5204f0b..63722783a9adf8bc6c85a326622065bbebda7fc0 100644 --- a/noblogs-wp-ssl.php +++ b/noblogs-wp-ssl.php @@ -1,8 +1,8 @@ <?php /* -Plugin Name: NoblogsWpSSL +Plugin Name: Noblogs Wp SSL Plugin URI: https://git.autistici.org/ai/noblogs-wp-ssl -Description: Rewrite internal URLS to use HTTPS +Description: Rewrite internal URLS to use HTTPS. Version: 0.1 Author: Cloudflare, sand License: GPLv2 @@ -17,7 +17,15 @@ if ( !function_exists('add_action') ) { exit; } -function wp_ssl_buffer_wrapup($buffer) { +function rewrite_links($buffer) { + // replace href or src attributes within script, link, base, and img tags with just "//" for protocol + $re = "/(<(?:script|link|base|img|form)(?:[^>]*)(?:href|src|action)=[\"'])http:\\/\\/([^.]+\.noblogs\.org)/i"; + $subst = "$1https://$2"; + return preg_replace($re, $subst, $buffer); +} + +// This is a filter function that act on the whole output buffer +function noblogs_wp_ssl_buffer_wrapup($buffer) { // skip rewrite if not on HTTPS if (empty($_SERVER['HTTPS'])) { return $buffer; @@ -36,10 +44,7 @@ function wp_ssl_buffer_wrapup($buffer) { } if (is_null($content_type) || substr($content_type, 0, 9) === 'text/html') { - // replace href or src attributes within script, link, base, and img tags with just "//" for protocol - $re = "/(<(?:script|link|base|img|form)(?:[^>]*)(?:href|src|action)=[\"'])http:\\/\\/([^.]+\.noblogs\.org)/i"; - $subst = "$1https://$2"; - $return = preg_replace($re, $subst, $buffer); + $return = rewrite_links($buffer); // on regex error, skip overwriting buffer if ($return) { @@ -50,8 +55,20 @@ function wp_ssl_buffer_wrapup($buffer) { return $buffer; } -function wp_ssl_buffer_init() { - ob_start('wp_ssl_buffer_wrapup'); +// This is a filter function that act on the post $content +function noblogs_wp_ssl_content_filter($content) { + // skip rewrite if not on HTTPS + if (empty($_SERVER['HTTPS'])) { + return $buffer; + } + + $return = rewrite_links($content); + if ($return) { + $content = $return; + } + + return $content; } -add_action('plugins_loaded', 'wp_ssl_buffer_init'); +// ob_start('wp_ssl_buffer_wrapup'); +add_filter('the_content', 'noblogs_wp_ssl_content_filter');