Mini Shell
<?php
/** *********************************************
* LiteSpeed Web Server WordPress Dash Notifier
*
* @author LiteSpeed Technologies, Inc. (https://www.litespeedtech.com)
* @copyright (c) 2019
* *******************************************
*/
namespace Lsc\Wp;
use \Lsc\Wp\Context\Context;
class DashNotifier
{
const BYPASS_FLAG = '.dash_notifier_bypass';
const DASH_MD5 = 'dash_md5';
const DASH_PLUGIN = 'dash-notifier/dash-notifier.php';
const DEFAULT_PLUGIN_PATH = '/wp-content/plugins/dash-notifier';
/**
* @deprecated 1.9
*/
const DOWNLOAD_DIR = '/usr/src/litespeed-wp-plugin';
const PLUGIN_NAME = 'dash-notifier';
const VER_FILE = 'dash_ver';
private function __construct()
{
}
/**
*
* @since 1.9
*
* @return void
* @throws LSCMException Thrown indirectly.
*/
public static function prepLocalDashPluginFiles()
{
$dashVerFile = Context::LOCAL_PLUGIN_DIR . '/' . self::VER_FILE;
if ( ! file_exists($dashVerFile) ) {
$latestVer = self::getLatestVersion();
self::downloadVersion($latestVer);
return;
}
$localVer = trim(file_get_contents($dashVerFile));
$pluginDir = Context::LOCAL_PLUGIN_DIR . '/' . self::PLUGIN_NAME;
if ( ! file_exists($pluginDir) ) {
self::downloadVersion($localVer);
return;
}
$md5File = Context::LOCAL_PLUGIN_DIR . '/' . self::DASH_MD5;
$md5StoredVal = file_get_contents($md5File);
$md5Val = Util::DirectoryMd5($pluginDir);
if ( $md5StoredVal != $md5Val ) {
self::downloadVersion($localVer);
return;
}
clearstatcache();
if ( (time() - filemtime($dashVerFile)) > 86400 ) {
try {
$latestVer = self::getLatestVersion();
if ( version_compare($latestVer, $localVer, '<') ) {
self::downloadVersion($latestVer);
}
}
catch ( LSCMException $e ) {
Logger::error($e->getMessage());
}
touch($dashVerFile);
}
}
/**
*
* @since 1.9
*
* @return string
* @throws LSCMException
*/
public static function getLatestVersion()
{
$latestVer = '';
$latestVerUrl = 'https://www.litespeedtech.com/packages/lswpcache/dash_latest';
$content = Util::get_url_contents($latestVerUrl);
if ( empty($content) ) {
throw new LSCMException('Could not retrieve latest Dash Notifier plugin version');
}
$latestVer = trim($content);
return $latestVer;
}
/**
*
* @since 1.9
*
* @param string $version
* @throws LSCMException Thrown indirectly.
*/
protected static function downloadVersion( $version )
{
$pluginDir = Context::LOCAL_PLUGIN_DIR . '/' . self::PLUGIN_NAME;
if ( file_exists($pluginDir) ) {
exec("/bin/rm -rf {$pluginDir}");
}
self::wgetPlugin($version, true);
}
/**
*
* @since 1.9
*
* @param string $version
* @param boolean $saveMD5
* @throws LSCMException Thrown directly and indirectly.
*/
protected static function wgetPlugin( $version, $saveMD5 = false )
{
Logger::info("Downloading Dash Notifier v{$version}...");
$pluginDir = Context::LOCAL_PLUGIN_DIR . '/' . self::PLUGIN_NAME;
$zipFileName = self::PLUGIN_NAME . ".{$version}.zip";
$localZipFile = Context::LOCAL_PLUGIN_DIR . "/{$zipFileName}";
$url = "https://downloads.wordpress.org/plugin/{$zipFileName}";
$wget_command = "wget -q --tries=1 --no-check-certificate {$url} -P "
. Context::LOCAL_PLUGIN_DIR;
exec($wget_command, $output, $return_var);
if ( $return_var !== 0 ) {
throw new LSCMException("Failed to download Dash Notifier v{$version} with wget "
. "exit status {$return_var}.", LSCMException::E_NON_FATAL);
}
$extracted = Util::unzipFile($localZipFile, Context::LOCAL_PLUGIN_DIR);
unlink($localZipFile);
if ( ! $extracted ) {
throw new LSCMException("Unable to unzip {$localZipFile}",
LSCMException::E_NON_FATAL);
}
$testfile = "{$pluginDir}/" . self::PLUGIN_NAME . '.php';
if ( ! file_exists($testfile) ) {
throw new LSCMException("Unable to download Dash Notifier v{$version}.",
LSCMException::E_NON_FATAL);
}
if ( $saveMD5 ) {
$md5Val = Util::DirectoryMd5($pluginDir);
file_put_contents(Context::LOCAL_PLUGIN_DIR . '/'
. self::DASH_MD5, $md5Val);
}
file_put_contents(Context::LOCAL_PLUGIN_DIR . '/' . self::VER_FILE,
$version);
}
/**
* Check if WordPress installation should be notified using the Dash
* Notifier plugin.
*
* @param string $wpPath WordPress installation root directory.
* @return boolean
*/
public static function canNotify( $wpPath )
{
if ( file_exists("{$wpPath}/" . self::BYPASS_FLAG) ) {
return false;
}
return true;
}
/**
* Checks the current installation for existing LSCWP plugin files and
* copies them to the installation's plugins directory if not found.
* This function should only be run as the user.
*
* @return boolean True when new Dash Notifier plugin files are
* used.
* @throws LSCMException
*/
public static function prepareUserInstall()
{
$pluginDir = WP_PLUGIN_DIR;
$dashNotifierPlugin = "{$pluginDir}/dash-notifier/dash-notifier.php";
if ( file_exists($dashNotifierPlugin) ) {
/**
* Existing installation detected.
*/
return false;
}
$pluginSrc = Context::LOCAL_PLUGIN_DIR . '/' . self::PLUGIN_NAME;
exec("/bin/cp -rf {$pluginSrc} {$pluginDir}");
if ( !file_exists($dashNotifierPlugin) ) {
throw new LSCMException("Failed to copy Dash Notifier plugin files to "
. "{$pluginDir}.", LSCMException::E_NON_FATAL);
}
Logger::debug("Copied Dash Notifier plugin files into plugins directory {$pluginDir}");
return true;
}
/**
* Activate Dash Notifier plugin if it is not already activated, and give
* the plugin any notification data in the form of a JSON encoded array.
*
* @param string $jsonInfo Dash Notifier plugin info.
* @return boolean
* @throws LSCMException
*/
public static function doNotify( $jsonInfo )
{
if ( file_exists(WP_PLUGIN_DIR . '/' . self::DASH_PLUGIN) ) {
/**
* Used to pass info to the Dash Notifier Plugin.
*/
define( 'DASH_NOTIFIER_MSG', $jsonInfo);
if ( !is_plugin_active(self::DASH_PLUGIN) ) {
/**
* Should not check directly, can error on success due to object
* cache.
*/
activate_plugin(self::DASH_PLUGIN, '', false, false);
if ( !is_plugin_active(self::DASH_PLUGIN) ) {
return false;
}
}
else {
include WP_PLUGIN_DIR . '/' . self::DASH_PLUGIN;
}
}
else {
throw new LSCMException('Dash Notifier plugin files are missing. Cannot notify.',
LSCMException::E_NON_FATAL);
}
return true;
}
/**
* WP Functions: deactivate_plugins(), delete_plugins()
*
* @param boolean $uninstall
*/
public static function deactivate( $uninstall )
{
deactivate_plugins(self::DASH_PLUGIN);
if ( $uninstall ) {
//add some msg about having removed plugin files?
delete_plugins(array( self::DASH_PLUGIN ));
}
}
}
Zerion Mini Shell 1.0