File: /home/agritom/public_html/wp-content/plugins/really-simple-ssl/onboarding/class-onboarding.php
<?php
defined('ABSPATH') or die();
require_once(rsssl_path . 'class-installer.php');
class rsssl_onboarding {
private static $_this;
private $hardening = [
'disable_file_editing',
'hide_wordpress_version',
'block_code_execution_uploads',
'disable_login_feedback',
'disable_user_enumeration',
'disable_indexing',
];
function __construct() {
if ( isset( self::$_this ) ) {
wp_die( sprintf( __( '%s is a singleton class and you cannot create a second instance.', 'really-simple-ssl' ), get_class( $this ) ) );
}
self::$_this = $this;
add_action( 'rest_api_init', array($this, 'onboarding_rest_route'), 10 );
add_action( 'admin_init', array( $this, 'maybe_redirect_to_settings_page'), 40);
add_filter("rsssl_run_test", array($this, 'handle_onboarding_request'), 10, 3);
add_filter("rsssl_do_action", array($this, 'handle_onboarding_action'), 10, 3);
}
static function this() {
return self::$_this;
}
public function handle_onboarding_request($response, $test, $data){
if ( ! rsssl_user_can_manage() ) {
return false;
}
// delete_option('rsssl_network_activation_status');
// delete_option("rsssl_onboarding_dismissed");
switch( $test ){
case 'activate_ssl':
$data['is_rest_request'] = true;
$response = RSSSL()->admin->activate_ssl($data);
break;
case 'activate_ssl_networkwide':
$response = RSSSL()->multisite->process_ssl_activation_step();
break;
default:
return $response;
}
return $response;
}
/**
* @param $data
* @param $action
* @param $request
*
* @return array|bool[]|false|mixed
*/
public function handle_onboarding_action($response, $action, $data){
if ( ! rsssl_user_can_manage() ) {
return false;
}
$error = false;
$next_action = 'none';
switch( $action ){
case 'get_modal_status':
$response = ["dismissed" => !$this->show_onboarding_modal()];
break;
case 'dismiss_modal':
$this->dismiss_modal($data);
break;
case 'override_ssl_detection':
$response = $this->override_ssl_detection($data);
break;
case 'install_plugin':
require_once(rsssl_path . 'class-installer.php');
$plugin = new rsssl_installer(sanitize_title($data['id']));
$success = $plugin->download_plugin();
$response = [
'next_action' => 'activate',
'success' => $success
];
break;
case 'activate':
require_once(rsssl_path . 'class-installer.php');
$plugin = new rsssl_installer(sanitize_title($data['id']));
$success = $plugin->activate_plugin();
$response = [
'next_action' => 'completed',
'success' => $success
];
break;
case 'activate_setting':
foreach ($this->hardening as $h ){
rsssl_update_option($h, true);
}
$response = [
'next_action' => 'none',
'success' => true,
];
break;
default:
return $response;
}
return $response;
}
/**
* Toggle modal status
*
* @param array $data
*
* @return void
*/
public function dismiss_modal($data){
if (!rsssl_user_can_manage()) return;
$dismiss = $data['dismiss'] ?? false;
update_option("rsssl_onboarding_dismissed", (bool) $dismiss, false);
}
public function maybe_redirect_to_settings_page() {
if ( get_transient('rsssl_redirect_to_settings_page' ) ) {
delete_transient('rsssl_redirect_to_settings_page' );
if ( !RSSSL()->admin->is_settings_page() ) {
wp_redirect( add_query_arg(array('page' => 'really-simple-security'), rsssl_admin_url() ) );
exit;
}
}
}
/**
* Check if any of the recommended features has been disabled
* @return bool
*/
public function all_recommended_hardening_features_enabled(){
foreach ($this->hardening as $h ){
if ( rsssl_get_option($h)!=1 ) {
return false;
}
}
return true;
}
public function onboarding_rest_route() {
register_rest_route( 'reallysimplessl/v1', 'onboarding', array(
'methods' => 'GET',
'callback' => 'rsssl_rest_api_onboarding',
'permission_callback' => function () {
return rsssl_user_can_manage();
}
) );
}
/**
* Update SSL detection overridden option
*/
public function override_ssl_detection($request) {
if ( ! rsssl_user_can_manage() ) {
return false;
}
$data = $request->get_params();
$override_ssl = isset($data['overrideSSL']) ? $data['overrideSSL']===true : false;
if ($override_ssl) {
update_option('rsssl_ssl_detection_overridden', true, false );
} else {
delete_option('rsssl_ssl_detection_overridden' );
}
return ['success'=>true];
}
/**
* Logic if the activation notice should be shown
*/
function show_onboarding_modal() {
if ( get_option("rsssl_onboarding_dismissed") ) {
return false;
}
//ensure the checks have been run
if ( !RSSSL()->admin->configuration_loaded ) {
RSSSL()->admin->detect_configuration();
}
if ( RSSSL()->admin->do_wpconfig_loadbalancer_fix() && !RSSSL()->admin->wpconfig_has_fixes() ) {
return false;
}
//for multisite environments, we check if the activation process was started but not completed.
if ( is_multisite() && RSSSL()->multisite->ssl_activation_started_but_not_completed() ){
return true;
}
$is_upgrade = get_option('rsssl_show_onboarding');
if ( rsssl_get_option('ssl_enabled') && !$is_upgrade ) {
return false;
}
if ( defined( "RSSSL_DISMISS_ACTIVATE_SSL_NOTICE" ) && RSSSL_DISMISS_ACTIVATE_SSL_NOTICE ) {
return false;
}
//don't show in our Let's Encrypt wizard
if ( isset( $_GET['letsencrypt'] ) ) {
return false;
}
if ( ! RSSSL()->admin->wpconfig_ok() ) {
return false;
}
if ( ! rsssl_user_can_manage() ) {
return false;
}
return true;
}
}