File: //home/shrsglobal/www/wp-content/plugins/wp-letsencrypt-ssl/classes/le-core.php
<?php
if ( !defined( 'ABSPATH' ) ) {
exit;
}
// Exit if accessed directly
/**
* Autoloader
*
* @since 5.1.1
*/
require_once plugin_dir_path( __DIR__ ) . 'vendor/autoload.php';
/**
* require all the lib files for generating certs
*/
use WPLEClient\LEFunctions;
use WPLEClient\LEConnector;
use WPLEClient\LEAccount;
use WPLEClient\LEAuthorization;
use WPLEClient\LEClient;
use WPLEClient\LEOrder;
require_once WPLE_DIR . 'classes/le-trait.php';
/**
* WPLE_Core class
* Responsible for handling account registration, certificate generation & install certs on cPanel
*
* @since 1.0.0
*/
class WPLE_Core {
protected $email;
protected $date;
protected $basedomain;
public $domains;
protected $mdomain = false;
protected $rootdomain;
protected $client;
protected $order;
protected $pendings;
protected $wcard = false;
protected $dnss = false;
protected $iscron = false;
protected $noscriptresponse = false;
protected $disablespmode = false;
private $wizard = false;
/**
* construct all params & proceed with cert generation
*
* @since 1.0.0
* @param array $opts
* @param boolean $gen
*/
public function __construct(
$opts = array(),
$gen = true,
$wc = false,
$cron = false
) {
if ( $cron ) {
$this->iscron = true;
}
if ( !empty( $opts ) ) {
$this->email = sanitize_email( $opts['email'] );
$this->date = $opts['date'];
$optss = $opts;
if ( isset( $opts['wizard'] ) ) {
$this->wizard = true;
}
} else {
$optss = get_option( 'wple_opts' );
$this->email = ( isset( $optss['email'] ) ? sanitize_email( $optss['email'] ) : '' );
$this->date = ( isset( $optss['date'] ) ? $optss['date'] : '' );
}
$siteurl = site_url();
if ( isset( $optss['subdir'] ) ) {
$siteurl = sanitize_text_field( $optss['domain'] );
}
$this->rootdomain = str_ireplace( array('http://', 'https://', 'www.'), array('', '', ''), $siteurl );
$this->basedomain = str_ireplace( array('http://', 'https://'), array('', ''), $siteurl );
$this->domains = array($this->basedomain);
//include both www & non-www
if ( isset( $optss['include_www'] ) && $optss['include_www'] == 1 ) {
$this->basedomain = $this->rootdomain;
$this->domains = array($this->rootdomain, 'www.' . $this->rootdomain);
}
/** v5.4.8 */
if ( isset( $optss['include_mail'] ) && $optss['include_mail'] == 1 ) {
$this->domains[] = 'mail.' . $this->rootdomain;
}
if ( isset( $optss['include_webmail'] ) && $optss['include_webmail'] == 1 ) {
$this->domains[] = 'webmail.' . $this->rootdomain;
}
if ( get_option( 'wple_disable_spmode' ) == true ) {
$this->disablespmode = true;
}
if ( $gen ) {
$this->wple_generate_verify_ssl();
}
}
/**
* group all different steps into one function & clear debug.log intially.
*
* @since 1.0.0
* @return void
*/
public function wple_generate_verify_ssl() {
$cpanel = (int) get_option( 'wple_have_cpanel' );
//since 4.7
if ( !isset( $_GET['wpleauto'] ) ) {
update_option( 'wple_http_valid', 0 );
if ( isset( $_POST['wple_send_usage'] ) ) {
update_option( 'wple_send_usage', 1 );
} else {
update_option( 'wple_send_usage', 0 );
}
$storage = 'WEB';
/**
* Set certificate storage path
* Re-check permission each time
* @since 7.1.0
*/
$keys_above_root = dirname( ABSPATH, 1 ) . '/ssl/' . sanitize_file_name( WPLE_Trait::get_root_domain() );
if ( file_exists( $keys_above_root ) && is_writable( $keys_above_root ) ) {
//already created
$storage = 'ROOT';
update_option( 'wple_parent_reachable', true );
} else {
if ( @mkdir( $keys_above_root, 0755, true ) ) {
//directory creation success
$testfile = $keys_above_root . '/testfile';
@file_put_contents( $testfile, 'test123' );
if ( file_exists( $testfile ) && file_get_contents( $testfile ) == 'test123' ) {
//file creation possible
unlink( $testfile );
update_option( 'wple_parent_reachable', true );
$storage = 'ROOT';
} else {
//file creation not possible
update_option( 'wple_parent_reachable', false );
}
} else {
update_option( 'wple_parent_reachable', false );
}
}
$PRO = ( wple_fs()->can_use_premium_code__premium_only() ? 'PRO' : '' );
$PRO .= ( $this->wcard ? ' WILDCARD SSL ' : ' SINGLE DOMAIN SSL ' );
$PRO .= ( $this->wizard ? ' WIZARD ' : '' );
if ( isset( $_SERVER['GD_PHP_HANDLER'] ) ) {
$PRO .= 'GD ';
}
if ( false !== stripos( ABSPATH, 'home/customer' ) ) {
$PRO .= 'SG ';
}
$PRO .= $cpanel;
$interests_survey = get_option( 'wple_survey_interests' );
$this->wple_log( '<b>' . WPLE_PLUGIN_VER . ' ' . $PRO . ' - ' . esc_html( site_url() ) . ' - ' . esc_html( $storage ) . ' (' . esc_html( $interests_survey ) . ')</b>', 'success', 'w' );
$this->wple_log( "Domain covered:\n" . json_encode( $this->domains ) . "\n" );
}
//since v6.6
if ( !function_exists( 'curl_init' ) ) {
$this->wple_log(
"PHP Curl is required & not enabled on your server. Please enable PHP Curl before proceeding.",
'error',
'a',
true
);
}
update_option( 'wple_stage', 'starting_client' );
$this->wple_create_client();
update_option( 'wple_stage', 'generating_order' );
$this->wple_generate_order();
update_option( 'wple_stage', 'starting_verification' );
$starthttpverify = $startdnsverify = false;
if ( isset( $_GET['wpleauto'] ) ) {
if ( $_GET['wpleauto'] == 'http' ) {
$starthttpverify = true;
$this->wple_log( 'Starting HTTP verification' );
} else {
$startdnsverify = true;
$this->wple_log( 'Starting DNS verification' );
}
}
$this->wple_verify_free_order( $starthttpverify, $startdnsverify );
$this->wple_generate_certs();
if ( FALSE != ($dlog = get_option( 'wple_send_usage' )) && $dlog ) {
$this->wple_send_usage_data();
}
}
/**
* create ACMEv2 client
*
* @since 1.0.0
* @return void
*/
protected function wple_create_client() {
try {
$keydir = WPLE_Trait::wple_cert_directory();
$sourceIP = get_option( 'wple_sourceip' );
//since 7.1 restore account key from option
$acckey_path = $keydir . '__account/private.pem';
if ( !file_exists( $acckey_path ) ) {
$acckey = ( get_option( 'wple_acc_key' ) ? get_option( 'wple_acc_key' ) : '' );
file_put_contents( $acckey_path, preg_replace( '#<br\\s*/?>#i', "", $acckey ) );
}
$this->client = new LEClient(
$this->email,
LEClient::LE_PRODUCTION,
LEClient::LOG_STATUS,
$keydir,
'__account/',
$sourceIP
);
} catch ( Exception $e ) {
$pro_advantage = '';
$pro_advantage = '<strong><i>You can still generate premium SSL certificate in Annual <b>PRO</b> Plan without these requirements.</i></strong>';
update_option( 'wple_error', 1 );
$mode = ( $this->iscron ? 'a' : 'w' );
$this->wple_log(
"VERSION " . WPLE_PLUGIN_VER . "\n\nCREATE_CLIENT:" . $e . "\n\n{$pro_advantage}",
'error',
$mode,
true
);
}
///echo '<pre>'; print_r( $client->getAccount() ); echo '</pre>';
}
/**
* Generate order with ACMEv2 client for given domain
*
* @since 1.0.0
* @return void
*/
protected function wple_generate_order() {
try {
$this->order = $this->client->getOrCreateOrder( $this->basedomain, $this->domains );
} catch ( Exception $e ) {
update_option( 'wple_error', 1 );
$mode = ( $this->iscron ? 'a' : 'w' );
$this->wple_log(
"VERSION " . WPLE_PLUGIN_VER . "\n\nCREATE_ORDER:" . $e,
'error',
$mode,
true
);
}
}
/**
* Get all pendings orders which need domain verification
*
* @since 1.0.0
* @return void
*/
protected function wple_get_pendings( $dns = false ) {
$chtype = LEOrder::CHALLENGE_TYPE_HTTP;
$http = 1;
if ( $dns ) {
$chtype = LEOrder::CHALLENGE_TYPE_DNS;
$http = 0;
}
try {
$this->pendings = $this->order->getPendingAuthorizations( $chtype );
if ( !empty( $this->pendings ) && $http == 1 ) {
$opts = get_option( 'wple_opts' );
$opts['challenge_files'] = array();
foreach ( $this->pendings as $chlng ) {
$opts['challenge_files'][] = array(
'file' => sanitize_text_field( trim( $chlng['filename'] ) ),
'value' => sanitize_text_field( trim( $chlng['content'] ) ),
);
}
update_option( 'wple_opts', $opts );
}
} catch ( Exception $e ) {
$this->wple_log(
'GET_PENDING_AUTHS:' . $e,
'error',
'w',
true
);
}
}
/**
* Finalize and get certificates
*
* @since 1.0.0
* @return void
*/
public function wple_generate_certs() {
if ( $this->order->allAuthorizationsValid() ) {
update_option( 'wple_stage', 'generated_certificate' );
// Finalize the order
if ( !$this->order->isFinalized() ) {
$this->wple_log( esc_html__( 'Finalizing the order', 'wp-letsencrypt-ssl' ), 'success', 'a' );
$this->order->finalizeOrder();
}
// get the certificate.
if ( $this->order->isFinalized() ) {
$this->wple_log( esc_html__( 'Getting SSL certificates', 'wp-letsencrypt-ssl' ), 'success', 'a' );
$this->order->getCertificate();
}
delete_option( 'wple_hold_cron' );
$cert = WPLE_Trait::wple_cert_directory() . 'certificate.crt';
if ( file_exists( $cert ) ) {
$this->wple_save_expiry_date();
do_action( 'cert_expiry_updated' );
//important
}
//since 5.3.5
//$this->wple_email_cert_files();
$this->wple_send_success_mail();
update_option( 'wple_ssl_screen', 'complete' );
$sslgenerated = "<h2>" . esc_html__( 'SSL Certificate generated successfully', 'wp-letsencrypt-ssl' ) . "!</h2>";
$this->wple_log( $sslgenerated, 'success', 'a' );
/**
* Case: Couldn't store above web root dir
* Delete private key and store in option
* Delete account key and store in option
* @since 7.0.0
*/
if ( !get_option( 'wple_parent_reachable' ) ) {
$priv_key = WPLE_Trait::wple_cert_directory() . 'private.pem';
$acc_key = WPLE_Trait::wple_cert_directory() . '__account/private.pem';
if ( file_exists( $priv_key ) ) {
$priv_key_content = sanitize_textarea_field( file_get_contents( $priv_key ) );
$priv_key_content = nl2br( $priv_key_content );
update_option( 'wple_priv_key', $priv_key_content );
unlink( $priv_key );
$acc_key_content = sanitize_textarea_field( file_get_contents( $acc_key ) );
$acc_key_content = nl2br( $acc_key_content );
update_option( 'wple_acc_key', $acc_key_content );
unlink( $acc_key );
$this->wple_log( "Stored private key as option" );
}
}
if ( $this->wizard || FALSE != ($dlog = get_option( 'wple_send_usage' )) && $dlog ) {
$this->wple_send_usage_data();
}
if ( $this->wizard ) {
echo json_encode( [
'success' => true,
'message' => admin_url( '/admin.php?page=wp_encryption' ),
] );
exit;
}
wp_redirect( admin_url( '/admin.php?page=wp_encryption' ), 302 );
exit;
} else {
update_option( 'wple_error', 2 );
// if (get_option('wple_http_valid')) { //rare case
// $this->wple_log('Looks like HTTP file verification is not possible on your server. Please complete DNS based verification.');
// wp_redirect(admin_url('/admin.php?page=wp_encryption&subdir=1&error=1'), 302);
// exit();
// } else {
if ( method_exists( $this->order, 'updateOrderData' ) && !wple_fs()->is_premium() ) {
$this->order->updateOrderData();
if ( $this->order->status == 'invalid' ) {
update_option( 'wple_order_refreshed', true );
$this->wple_log( "Order failed due to failed verification or other reasons. Getting new challenges from new order. PLEASE TRY DNS VERIFICATION.\n" );
$this->wple_create_client();
$this->wple_generate_order();
$this->wple_verify_free_order();
}
}
$this->wple_log(
'<h2>' . esc_html__( 'There are some pending verifications. Please try again with DNS challenges.', 'wp-letsencrypt-ssl' ) . '</h2>',
'success',
'a',
false
);
$this->wple_save_all_challenges();
//re-update pending challenges
if ( !empty( $this->pendings ) ) {
$this->wple_log( json_encode( $this->pendings ) );
}
$this->wple_log(
'',
'success',
'a',
true
);
//}
}
}
/**
* Save expiry date of cert dynamically by parsing the cert
*
* @since 1.0.0
* @return void
*/
public function wple_save_expiry_date() {
$certfile = WPLE_Trait::wple_cert_directory() . 'certificate.crt';
//TODO: expiry saved separately on each mapped site?
if ( file_exists( $certfile ) ) {
$opts = get_option( 'wple_opts' );
$opts['expiry'] = '';
try {
$this->wple_getRemainingDays( $certfile, $opts );
} catch ( Exception $e ) {
update_option( 'wple_opts', $opts );
}
}
}
/**
* Utility functions
*
* @since 1.0.0
*/
public function wple_parseCertificate( $cert_pem ) {
// if (false === ($ret = openssl_x509_read(file_get_contents($cert_pem)))) {
// throw new Exception('Could not load certificate: ' . $cert_pem . ' (' . $this->get_openssl_error() . ')');
// }
if ( !is_array( $ret = openssl_x509_parse( file_get_contents( $cert_pem ), true ) ) ) {
throw new Exception('Could not parse certificate');
}
return $ret;
}
public function wple_getRemainingDays( $cert_pem, $opts ) {
$ret = $this->wple_parseCertificate( $cert_pem );
$expiry = date( 'd-m-Y', $ret['validTo_time_t'] );
$opts['expiry'] = $expiry;
update_option( 'wple_opts', $opts );
update_option( 'wple_show_review', 1 );
}
public function wple_log(
$msg = '',
$type = 'success',
$mode = 'a',
$redirect = false
) {
$handle = fopen( WPLE_DEBUGGER . 'debug.log', $mode );
if ( $type == 'error' ) {
$msg = '<span class="error"><b>' . esc_html__( 'ERROR', 'wp-letsencrypt-ssl' ) . ':</b> ' . wp_kses_post( $msg ) . '</span>';
}
fwrite( $handle, wp_kses_post( $msg ) . "\n" );
fclose( $handle );
if ( $redirect ) {
if ( FALSE != ($dlog = get_option( 'wple_send_usage' )) && $dlog ) {
$this->wple_send_usage_data();
}
if ( $this->wizard ) {
$debug_log = file_get_contents( WPLE_DEBUGGER . 'debug.log' );
echo json_encode( [
'success' => false,
'message' => $debug_log,
] );
exit;
}
wp_redirect( admin_url( '/admin.php?page=wp_encryption&error=1' ), 302 );
die;
}
}
/**
* Collect usage data to improve plugin
*
* @since 2.1.0
* @return void
*/
public function wple_send_usage_data() {
WPLE_Trait::wple_logger( 'Syncing debug log' );
$readlog = file_get_contents( WPLE_DEBUGGER . 'debug.log' );
$handle = curl_init();
$srvr = array(
'challenge_folder_exists' => '',
'certificate_exists' => file_exists( WPLE_Trait::wple_cert_directory() . 'certificate.crt' ),
'server_software' => sanitize_text_field( $_SERVER['SERVER_SOFTWARE'] ),
'http_host' => site_url(),
'pro' => ( wple_fs()->is__premium_only() ? 'PRO' : 'FREE' ),
);
$curlopts = array(
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_POST => 1,
CURLOPT_URL => 'https://support.wpencryption.com/?catchwple=1',
CURLOPT_HEADER => false,
CURLOPT_POSTFIELDS => array(
'response' => $readlog,
'server' => json_encode( $srvr ),
),
CURLOPT_TIMEOUT => 30,
);
curl_setopt_array( $handle, $curlopts );
try {
curl_exec( $handle );
} catch ( Exception $e ) {
curl_close( $handle );
return;
}
curl_close( $handle );
}
/**
* Retrieve file content
*
* @since 3.2.0
* @param string $acmefile
* @return void
*/
private function wple_get_file_response( $acmefile ) {
$args = array(
'sslverify' => false,
);
$remoteget = wp_remote_get( $acmefile, $args );
if ( is_wp_error( $remoteget ) ) {
$rsponse = 'error';
} else {
$rsponse = trim( wp_remote_retrieve_body( $remoteget ) );
}
return $rsponse;
}
/**
* Save HTTP + DNS challenges for later use
*
* @since 4.6.0
* @return void
*/
private function wple_save_all_challenges( $dnsonly = false ) {
$opts = ( FALSE === get_option( 'wple_opts' ) ? array() : get_option( 'wple_opts' ) );
//DNS
$chtype = LEOrder::CHALLENGE_TYPE_DNS;
try {
$dns_challenges = $this->order->getPendingAuthorizations( $chtype );
if ( !empty( $dns_challenges ) ) {
$opts['dns_challenges'] = array();
foreach ( $dns_challenges as $challenge ) {
if ( $challenge['type'] == 'dns-01' && stripos( $challenge['identifier'], $this->rootdomain ) !== false ) {
$identifier = $challenge['identifier'];
$opts['dns_challenges'][] = sanitize_text_field( $identifier ) . '||' . sanitize_text_field( $challenge['DNSDigest'] );
}
}
}
} catch ( Exception $e ) {
$this->wple_log(
'Unable to store DNS challenges:' . $e,
'error',
'w',
true
);
}
if ( $opts['type'] != 'wildcard' ) {
//HTTP
$chtype = LEOrder::CHALLENGE_TYPE_HTTP;
try {
$httppendings = $this->order->getPendingAuthorizations( $chtype );
if ( !empty( $httppendings ) ) {
$opts['challenge_files'] = array();
foreach ( $httppendings as $chlng ) {
$opts['challenge_files'][] = array(
'file' => sanitize_text_field( trim( $chlng['filename'] ) ),
'value' => sanitize_text_field( trim( $chlng['content'] ) ),
);
}
}
} catch ( Exception $e ) {
$this->wple_log(
'Unable to store HTTP challenges:' . $e,
'error',
'w',
true
);
}
}
update_option( 'wple_opts', $opts );
}
protected function wple_goto_manual_challenges() {
$this->wple_save_all_challenges();
wp_redirect( admin_url( '/admin.php?page=wp_encryption&subdir=1' ), 302 );
exit;
}
/**
* simple debug log message
*
* @since 5.2.6
* @return void
*/
private function wple_nocpanel_notice() {
update_option( 'wple_ssl_screen', 'nocpanel' );
WPLE_Trait::wple_logger( "Awaiting SSL installation for Non-cPanel site and SSL validation\n", "success" );
WPLE_Trait::wple_send_log_data();
do_action( 'cert_expiry_updated' );
wp_redirect( admin_url( '/admin.php?page=wp_encryption&nocpanel=1' ), 302 );
exit;
}
/**
* Send email to user on success
*
* @since 3.0.0
* @moved from le-admin.php on 5.7.2
*/
private function wple_send_success_mail() {
$opts = get_option( 'wple_opts' );
$to = sanitize_email( $opts['email'] );
$subject = sprintf( esc_html__( 'Congratulations! Your SSL certificates for %s generated using WP Encryption Plugin', 'wp-letsencrypt-ssl' ), WPLE_Trait::get_root_domain() );
$headers = array('Content-Type: text/html; charset=UTF-8');
$body = '<h3>' . esc_html__( 'You are just ONE step away from enabling HTTPS for your WordPress site', 'wp-letsencrypt-ssl' ) . '</h3>';
$body .= '<p>' . esc_html__( 'Download the generated SSL certificates from below given links and install it on your cPanel following the video tutorial', 'wp-letsencrypt-ssl' ) . ' (https://youtu.be/KQ2HYtplPEk). ' . esc_html__( 'These certificates expires on', 'wp-letsencrypt-ssl' ) . ' <b>' . esc_html( $opts['expiry'] ) . '</b> so you will have to generate new certificate & install it manually before it expires.</p>
<br/>
<a href="' . admin_url( '/admin.php?page=wp_encryption&le=1', 'http' ) . '" style="background: #0073aa; text-decoration: none; color: #fff; padding: 12px 20px; display: inline-block; margin: 10px 10px 10px 0; font-weight: bold;">' . esc_html__( 'Download Cert File', 'wp-letsencrypt-ssl' ) . '</a>
<a href="' . admin_url( '/admin.php?page=wp_encryption&le=2', 'http' ) . '" style="background: #0073aa; text-decoration: none; color: #fff; padding: 12px 20px; display: inline-block; margin: 10px; font-weight: bold;">' . esc_html__( 'Download Key File', 'wp-letsencrypt-ssl' ) . '</a>
<a href="' . admin_url( '/admin.php?page=wp_encryption&le=3', 'http' ) . '" style="background: #0073aa; text-decoration: none; color: #fff; padding: 12px 20px; display: inline-block; margin: 10px; font-weight: bold;">' . esc_html__( 'Download CA File', 'wp-letsencrypt-ssl' ) . '</a>
<br/>';
///if (FALSE == get_option('wple_no_pricing')) {
$body .= '<br /><br />';
$body .= '<b>' . esc_html__( 'WP Encryption PRO can automate this entire process in one click including SSL installation on cPanel hosting and auto renewal of certificates every 90 days', 'wp-letsencrypt-ssl' ) . '!. <br><a href="' . admin_url( '/admin.php?page=wp_encryption-pricing&checkout=true&billing_cycle_selector=responsive_list&plan_id=8210&plan_name=pro&billing_cycle=lifetime&pricing_id=7965¤cy=usd' ) . '" style="background: #0073aa; text-decoration: none; color: #fff; padding: 12px 20px; display: inline-block; margin: 10px 0; font-weight: bold;">' . esc_html__( 'UPGRADE TO PREMIUM', 'wp-letsencrypt-ssl' ) . '</a></b><br /><br />';
$body .= "<h3>" . esc_html__( "Don't have cPanel hosting?", 'wp-letsencrypt-ssl' ) . "</h3>";
$body .= '<p>No cPanel? No problem! Secure your site effortlessly with our <a href="' . admin_url( '/admin.php?page=wp_encryption-pricing&checkout=true&billing_cycle_selector=responsive_list&plan_id=8210&plan_name=pro&billing_cycle=annual&pricing_id=7965¤cy=usd' ) . '"><strong>Annual Pro plan</strong><a> designed to work across ANY hosting platform.' . WPLE_Trait::wple_kses( __( 'With free version, You can download and send these SSL certificates to your hosting support asking them to install these SSL certificates.', 'wp-letsencrypt-ssl' ) ) . '</p><br /><br />';
///}
if ( get_option( 'wple_email_certs' ) == true ) {
$certificate = WPLE_Trait::wple_cert_directory() . 'certificate.crt';
if ( class_exists( 'ZipArchive' ) ) {
if ( file_exists( $certificate ) ) {
$this->wple_log( 'Emailing certs as attachment' );
$zip = new ZipArchive();
$zip->open( WPLE_Trait::wple_cert_directory() . 'certificates.zip', ZipArchive::CREATE );
$zip->addFile( $certificate, 'certificate.crt' );
$ret = $this->wple_parseCertificate( $certificate );
$certexpirydate = date( 'd-m-Y', $ret['validTo_time_t'] );
$pemfile = WPLE_Trait::wple_cert_directory() . 'private.pem';
$zip->addFile( $pemfile, 'private.pem' );
///$cabundle = WPLE_DIR . 'cabundle/ca.crt';
// if (file_exists(ABSPATH . 'keys/cabundle.crt')) {
$cabundle = WPLE_Trait::wple_cert_directory() . 'cabundle.crt';
// }
$zip->addFile( $cabundle, 'cabundle.crt' );
$zip->close();
$body .= '<p>' . esc_html__( 'Confidential: New SSL cert files have been attached to this email as per your preferences.', 'wp-letsencrypt-ssl' ) . ' ' . esc_html__( 'These certificates expires on', 'wp-letsencrypt-ssl' ) . ' <b>' . esc_html( $certexpirydate ) . '</b></p>';
if ( function_exists( 'wp_mail' ) ) {
wp_mail(
$to,
$subject,
$body,
$headers,
array(WPLE_Trait::wple_cert_directory() . 'certificates.zip')
);
}
unlink( WPLE_Trait::wple_cert_directory() . 'certificates.zip' );
} else {
$this->wple_log( 'Emailing certs skipped as certificate.crt not found.' );
if ( function_exists( 'wp_mail' ) ) {
wp_mail(
$to,
$subject,
$body,
$headers
);
}
}
}
} else {
if ( function_exists( 'wp_mail' ) ) {
wp_mail(
$to,
$subject,
$body,
$headers
);
}
}
}
/**
* Test if http verification is possible on this server
*
* @since 5.9.0
* @return void
*/
// public function wple_verify_if_http_possible($domain)
// {
// if (!wple_fs()->is__premium_only()) {
// $fpath = ABSPATH . '.well-known/acme-challenge/';
// if (!file_exists($fpath)) {
// mkdir($fpath, 0775, true);
// }
// $testfile = $fpath . 'testfile';
// if (!file_exists($testfile)) {
// file_put_contents($testfile, 'testcontent');
// }
// $testURL = 'http://' . $domain . '/.well-known/acme-challenge/testfile';
// $result = $this->wple_get_file_response($testURL);
// if ($result != 'testcontent') {
// $this->wple_log($result . ' acme-challenge directory is blocked on this server.');
// update_option('wple_http_valid', 1);
// }
// }
// }
public function wple_verify_free_order( $starthttpverification = false, $startdnsverification = false ) {
if ( !$this->order->allAuthorizationsValid() ) {
if ( !$starthttpverification && !$startdnsverification ) {
$this->wple_save_all_challenges();
$this->wple_wizard_redirections();
///$this->wple_log("HTTP Challenges --> " . json_encode($updated['challenge_files']), 'success', 'a');
///$this->wple_log("DNS Challenges --> " . json_encode($updated['dns_challenges']), 'success', 'a');
$this->wple_log( esc_html__( "Offering manual verification procedure.", 'wp-letsencrypt-ssl' ) . " \n", 'success', 'a' );
if ( FALSE != ($dlog = get_option( 'wple_send_usage' )) && $dlog ) {
$this->wple_send_usage_data();
}
update_option( 'wple_ssl_screen', 'verification' );
wp_redirect( admin_url( '/admin.php?page=wp_encryption&subdir=1' ), 302 );
exit;
} else {
//?wpleauto
if ( $starthttpverification ) {
WPLE_Trait::static_wellknown_htaccess();
$this->wple_get_pendings();
//get http challenges
}
if ( $startdnsverification ) {
$this->wple_get_pendings( true );
//get dns challenges
}
if ( !empty( $this->pendings ) ) {
foreach ( $this->pendings as $challenge ) {
if ( $challenge['type'] == 'dns-01' && stripos( $challenge['identifier'], $this->rootdomain ) !== false ) {
$this->order->verifyPendingOrderAuthorization( $challenge['identifier'], LEOrder::CHALLENGE_TYPE_DNS, false );
} else {
if ( $challenge['type'] == 'http-01' && stripos( $challenge['identifier'], $this->rootdomain ) !== false ) {
$acmefile = "http://" . $challenge['identifier'] . "/.well-known/acme-challenge/" . $challenge['filename'];
$rsponse = $this->wple_get_file_response( $acmefile );
if ( $rsponse !== trim( $challenge['content'] ) ) {
WPLE_Trait::remove_wellknown_htaccess();
///WPLE_Trait::static_wellknown_htaccess();
//re-try again
$rsponse = $this->wple_get_file_response( $acmefile );
//ultimate failure
if ( $rsponse !== trim( $challenge['content'] ) ) {
update_option( 'wple_error', 2 );
}
}
$this->order->verifyPendingOrderAuthorization( $challenge['identifier'], LEOrder::CHALLENGE_TYPE_HTTP, false );
}
}
}
} else {
$this->wple_log( esc_html__( "No pending challenges. Proceeding..", 'wp-letsencrypt-ssl' ) . " \n", 'success', 'a' );
}
}
}
}
public function wple_wizard_redirections() {
if ( $this->wizard ) {
$opts = get_option( 'wple_opts' );
if ( isset( $opts['challenge_files'] ) ) {
$fpath = ABSPATH . '.well-known/acme-challenge/';
if ( !file_exists( $fpath ) ) {
mkdir( $fpath, 0775, true );
}
foreach ( $opts['challenge_files'] as $index => $item ) {
$this->wple_log( esc_html__( 'Deploying challenge file', 'wp-letsencrypt-ssl' ) . ' ' . $item['file'], 'success', 'a' );
file_put_contents( $fpath . $item['file'], trim( $item['value'] ) );
}
update_option( 'wple_send_usage', 1 );
//straight to verification
echo json_encode( [
'success' => true,
'message' => admin_url( '/admin.php?page=wp_encryption&wpleauto=http' ),
] );
} else {
//manual verification page
echo json_encode( [
'success' => true,
'message' => admin_url( '/admin.php?page=wp_encryption&subdir=1' ),
] );
}
exit;
}
}
}