<?php if (!defined('WORDFENCE_VERSION')) { exit; } /** * @var string $subpage */ $stepContent = array( 1 => __('Testing initial communication with Wordfence Central.', 'wordfence'), 2 => __('Passing public key to Wordfence Central.', 'wordfence'), 3 => __('Testing public key authentication with Wordfence Central.', 'wordfence'), 4 => __('Testing that Wordfence Central is able to communicate with this site.', 'wordfence'), 5 => __('Retrieving access token using authorization grant.', 'wordfence'), 6 => __('Redirecting back to Wordfence Central.', 'wordfence'), ); $connected = wfCentral::isConnected(); $partialConnection = wfCentral::isPartialConnection(); ?> <?php if (!wfOnboardingController::shouldShowAttempt3() && wfConfig::get('touppPromptNeeded')) { echo wfView::create('gdpr/disabled-overlay')->render(); echo wfView::create('gdpr/banner')->render(); } if (function_exists('network_admin_url') && is_multisite()) { $wordfenceURL = network_admin_url('admin.php?page=Wordfence'); } else { $wordfenceURL = admin_url('admin.php?page=Wordfence'); } ?> <div class="wrap wordfence"> <div class="wf-container-fluid"> <div class="wf-row"> <div class="wf-col-xs-12"> <div class="wp-header-end"></div> <?php echo wfView::create('common/section-title', array( 'title' => __('Wordfence Central', 'wordfence'), 'showIcon' => true, ))->render(); ?> </div> <?php if ($connected): ?> <div class="wf-col-xs-12 wf-central-connected"> <div class="wf-flex-row wf-flex-grow-all"> <div class="wf-flex-row-1 wf-block wf-active"> <div class="wf-central-dashboard"> <img class="wf-central-dashboard-logo" src="<?php echo wfUtils::getBaseURL() ?>images/wf-central-logo.svg" alt="Wordfence Central"> <div class="wf-central-dashboard-copy"> <p><strong><?php esc_html_e('Wordfence Central', 'wordfence') ?></strong></p> <p><?php esc_html_e('Wordfence Central allows you to manage Wordfence on multiple sites from one location. It makes security monitoring and configuring Wordfence easier.', 'wordfence') ?></p> <p class="wf-right-lg"><a href="https://www.wordfence.com/central" target="_blank" rel="noopener noreferrer"><strong><?php esc_html_e('Visit Wordfence Central', 'wordfence') ?></strong><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a></p> </div> </div> </div> <div class="wf-flex-row-1 wf-block wf-active"> <p><strong><?php esc_html_e('Wordfence Central Status', 'wordfence') ?></strong></p> <p><?php echo esc_html(sprintf( /* translators: 1. Email address. 2. Localized date. */ __('Activated - connected by %1$s on %2$s', 'wordfence'), wfConfig::get('wordfenceCentralConnectEmail'), date_i18n('F j, Y', (int) wfConfig::get('wordfenceCentralConnectTime')))) ?></p> <p class="wf-right-lg"><a href="<?php echo esc_url($wordfenceURL); ?>"><strong><?php esc_html_e('Disconnect This Site', 'wordfence') ?></strong></a></p> </div> </div> </div> <?php elseif (isset($_GET['grant'])): ?> <div class="wf-col-xs-12"> <div class="wf-block wf-active"> <div class="wf-block-header"> <div class="wf-block-header-content"> <strong><?php esc_html_e('Wordfence Central Installation Process', 'wordfence') ?></strong> </div> </div> <div class="wf-block-content"> <ul class="wf-block-list" id="wf-central-progress"> <?php for ($i = 1; $i <= 6; $i++): ?> <li id="wf-central-progress-step<?php echo $i ?>" class="pending"> <div class="wf-central-progress-icon"> <div class="wf-step-pending"></div> <div class="wf-step-running"> <?php echo wfView::create('common/indeterminate-progress', array( 'size' => 50, ))->render(); ?> </div> <div class="wf-step-complete-success"></div> <div class="wf-step-complete-warning"></div> </div> <div class="wf-central-progress-content"> <p><?php echo esc_html($stepContent[$i]) ?></p> </div> </li> <?php endfor ?> </ul> </div> </div> </div> <?php elseif ($partialConnection): ?> <div class="wf-center-lg"> <p><?php esc_html_e('It looks like you\'ve tried to connect this site to Wordfence Central, but the installation did not finish.', 'wordfence') ?></p> <p> <a href="<?php echo WORDFENCE_CENTRAL_URL_SEC ?>/sites/connection-issues?complete-setup=<?php echo esc_attr(wfConfig::get('wordfenceCentralSiteID')) ?>" class="wf-btn wf-btn-primary" ><?php esc_html_e('Resume Installation', 'wordfence') ?></a> <a href="<?php echo esc_url($wordfenceURL); ?>" class="wf-btn wf-btn-warning"><?php esc_html_e('Disconnect Site', 'wordfence') ?></a> </p> </div> <?php else: ?> <div class="wf-center-lg"> <p><?php esc_html_e('Wordfence Central allows you to manage Wordfence on multiple sites from one location. It makes security monitoring and configuring Wordfence easier.', 'wordfence') ?></p> <p><?php esc_html_e('To connect your site your site to Wordfence Central, use the link below:', 'wordfence') ?></p> <p class="wf-center"> <a href="<?php echo WORDFENCE_CENTRAL_URL_SEC ?>?newsite=<?php echo esc_attr(home_url()) ?>" class="wf-btn wf-btn-primary"><?php esc_html_e('Connect Site', 'wordfence') ?></a> </p> </div> <?php endif ?> </div> </div> </div> <script> (function($) { var authGrant = '<?php echo esc_js(isset($_GET['grant']) ? $_GET['grant'] : '') ?>'; var currentStep = <?php echo json_encode(wfConfig::getInt('wordfenceCentralCurrentStep', 1)) ?>; var connected = <?php echo json_encode($connected) ?>; function wfConnectError(error) { WFAD.colorboxError(error); } function wfCentralStepAjax(step, action, data, cb, cbErr, noLoading) { var el = $('#wf-central-progress-' + step); el.removeClass('pending') .addClass('running'); WFAD.ajax(action, data, function(response) { if (response && response.success) { el.removeClass('running') .addClass('complete-success'); cb && cb(response); } else if (response && response.err) { el.removeClass('running') .addClass('complete-warning'); } }, function(response) { el.removeClass('running') .addClass('complete-warning'); cbErr && cbErr(response); }, noLoading); } var WFCentralInstaller = {}; window.WFCentralInstaller = WFCentralInstaller; // Step 1: Makes GET request to `/central/api/site/access-token` endpoint authenticated with the auth grant supplied by the user. // - Receives site GUID, public key, short lived JWT. WFCentralInstaller.step1 = function() { wfCentralStepAjax('step1', 'wordfence_wfcentral_step1', { 'auth-grant': authGrant }, function(response) { $(window).trigger('step2', response); }, wfConnectError); }; // Step 2: Makes PATCH request to `/central/api/wf/site/<guid>` endpoint passing in the new public key. // Uses JWT from auth grant endpoint as auth. WFCentralInstaller.step2 = function() { wfCentralStepAjax('step2', 'wordfence_wfcentral_step2', {}, function(response) { $(window).trigger('step3', response); }, wfConnectError); }; $(window).on('step2', WFCentralInstaller.step2); // Step 3: Makes GET request to `/central/api/wf/site/<guid>` endpoint signed using Wordfence plugin private key. // - Expects 200 response with site data. WFCentralInstaller.step3 = function() { wfCentralStepAjax('step3', 'wordfence_wfcentral_step3', {}, function(response) { var callback = function() { $(window).trigger('step4') }; var interval = setInterval(callback, 4000); $(window).on('step3-clearInterval', function() { clearInterval(interval); }); callback(); }, wfConnectError); }; $(window).on('step3', WFCentralInstaller.step3); // Step 4: Poll for PUT request at `/wp-json/wp/v2/wordfence-auth-grant/` endpoint signed using Wordfence Central private key with short lived JWT. // - Expects verifiable signature of incoming request from Wordfence Central. // - Stores auth grant JWT. WFCentralInstaller.step4 = function() { wfCentralStepAjax('step4', 'wordfence_wfcentral_step4', {}, function(response) { if (response && response.success) { $(window).trigger('step3-clearInterval'); $(window).trigger('step5'); } }, wfConnectError); }; $(window).on('step4', WFCentralInstaller.step4); // Step 5: Makes GET request to `/central/api/site/<guid>/access-token` endpoint signed using Wordfence plugin private key with auth grant JWT. // - Expects 200 response with access token. WFCentralInstaller.step5 = function() { wfCentralStepAjax('step5', 'wordfence_wfcentral_step5', { 'auth-grant': authGrant }, function(response) { $(window).trigger('step6', response); }, wfConnectError); }; $(window).on('step5', WFCentralInstaller.step5); // Step 6: Installation complete. Redirect user back to Wordfence Central with access token. WFCentralInstaller.step6 = function(response) { wfCentralStepAjax('step6', 'wordfence_wfcentral_step6', {}, function(response) { document.location.href = response['redirect-url']; }, wfConnectError); }; $(window).on('step6', WFCentralInstaller.step6); var self = this; $(function() { // if (!authGrant) { // wfConnectError('Auth grant not found.'); // return; // } if (!connected && authGrant) { for (var i = 0; i < currentStep; i++) { var el = $('#wf-central-progress-step' + i); el.removeClass('pending') .addClass('complete-success'); } WFCentralInstaller['step' + currentStep](); } }); })(jQuery); </script>
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
Diff | Folder | 0755 |
|
|
audit-log | Folder | 0755 |
|
|
dashboard | Folder | 0755 |
|
|
rest-api | Folder | 0755 |
|
|
.htaccess | File | 354 B | 0644 |
|
Diff.php | File | 5.63 KB | 0644 |
|
GeoLite2-Country.mmdb | File | 7.46 MB | 0644 |
|
IPTraf.php | File | 1.17 KB | 0644 |
|
IPTrafList.php | File | 2.98 KB | 0644 |
|
WFLSPHP52Compatability.php | File | 1.27 KB | 0644 |
|
compat.php | File | 425 B | 0644 |
|
diffResult.php | File | 2.81 KB | 0644 |
|
email_genericAlert.php | File | 1.39 KB | 0644 |
|
email_newIssues.php | File | 8.82 KB | 0644 |
|
email_unlockRequest.php | File | 2.34 KB | 0644 |
|
email_unsubscribeRequest.php | File | 1.05 KB | 0644 |
|
flags.php | File | 6.62 KB | 0644 |
|
live_activity.php | File | 580 B | 0644 |
|
menu_dashboard.php | File | 28 KB | 0644 |
|
menu_dashboard_options.php | File | 15.21 KB | 0644 |
|
menu_firewall.php | File | 2.12 KB | 0644 |
|
menu_firewall_blocking.php | File | 10.25 KB | 0644 |
|
menu_firewall_blocking_options.php | File | 4.63 KB | 0644 |
|
menu_firewall_waf.php | File | 19.96 KB | 0644 |
|
menu_firewall_waf_options.php | File | 11.09 KB | 0644 |
|
menu_install.php | File | 1.73 KB | 0644 |
|
menu_options.php | File | 24.7 KB | 0644 |
|
menu_scanner.php | File | 21.53 KB | 0644 |
|
menu_scanner_credentials.php | File | 2.77 KB | 0644 |
|
menu_scanner_options.php | File | 8.41 KB | 0644 |
|
menu_support.php | File | 17.82 KB | 0644 |
|
menu_tools.php | File | 1.49 KB | 0644 |
|
menu_tools_auditlog.php | File | 16.43 KB | 0644 |
|
menu_tools_diagnostic.php | File | 49.35 KB | 0644 |
|
menu_tools_importExport.php | File | 1.28 KB | 0644 |
|
menu_tools_livetraffic.php | File | 39.43 KB | 0644 |
|
menu_tools_twoFactor.php | File | 19.6 KB | 0644 |
|
menu_tools_whois.php | File | 4.61 KB | 0644 |
|
menu_wordfence_central.php | File | 9.66 KB | 0644 |
|
noc1.key | File | 1.64 KB | 0644 |
|
sodium_compat_fast.php | File | 185 B | 0644 |
|
sysinfo.php | File | 1.47 KB | 0644 |
|
viewFullActivityLog.php | File | 1.47 KB | 0644 |
|
wf503.php | File | 9.63 KB | 0644 |
|
wfAPI.php | File | 9.73 KB | 0644 |
|
wfActivityReport.php | File | 20.45 KB | 0644 |
|
wfAdminNoticeQueue.php | File | 5.2 KB | 0644 |
|
wfAlerts.php | File | 7.37 KB | 0644 |
|
wfArray.php | File | 1.77 KB | 0644 |
|
wfAuditLog.php | File | 47.13 KB | 0644 |
|
wfBrowscap.php | File | 3.9 KB | 0644 |
|
wfBrowscapCache.php | File | 256.83 KB | 0644 |
|
wfBulkCountries.php | File | 9.77 KB | 0644 |
|
wfCache.php | File | 6.02 KB | 0644 |
|
wfCentralAPI.php | File | 25.8 KB | 0644 |
|
wfConfig.php | File | 122.49 KB | 0644 |
|
wfCrawl.php | File | 6.56 KB | 0644 |
|
wfCredentialsController.php | File | 5.16 KB | 0644 |
|
wfCrypt.php | File | 4.05 KB | 0644 |
|
wfCurlInterceptor.php | File | 1.02 KB | 0644 |
|
wfDB.php | File | 11.49 KB | 0644 |
|
wfDashboard.php | File | 8.2 KB | 0644 |
|
wfDateLocalization.php | File | 352.13 KB | 0644 |
|
wfDeactivationOption.php | File | 2.13 KB | 0644 |
|
wfDiagnostic.php | File | 66.87 KB | 0644 |
|
wfDict.php | File | 738 B | 0644 |
|
wfDirectoryIterator.php | File | 1.89 KB | 0644 |
|
wfFileUtils.php | File | 2.72 KB | 0644 |
|
wfHelperBin.php | File | 1.97 KB | 0644 |
|
wfHelperString.php | File | 2.13 KB | 0644 |
|
wfIPWhitelist.php | File | 1.56 KB | 0644 |
|
wfImportExportController.php | File | 3.23 KB | 0644 |
|
wfInaccessibleDirectoryException.php | File | 303 B | 0644 |
|
wfInvalidPathException.php | File | 266 B | 0644 |
|
wfIpLocation.php | File | 1.73 KB | 0644 |
|
wfIpLocator.php | File | 2.74 KB | 0644 |
|
wfIssues.php | File | 27.91 KB | 0644 |
|
wfJWT.php | File | 5.33 KB | 0644 |
|
wfLicense.php | File | 10.43 KB | 0644 |
|
wfLockedOut.php | File | 9.73 KB | 0644 |
|
wfLog.php | File | 57.1 KB | 0644 |
|
wfMD5BloomFilter.php | File | 5.2 KB | 0644 |
|
wfModuleController.php | File | 754 B | 0644 |
|
wfNotification.php | File | 6.41 KB | 0644 |
|
wfOnboardingController.php | File | 9.22 KB | 0644 |
|
wfPersistenceController.php | File | 819 B | 0644 |
|
wfRESTAPI.php | File | 377 B | 0644 |
|
wfScan.php | File | 15.92 KB | 0644 |
|
wfScanEngine.php | File | 133.31 KB | 0644 |
|
wfScanEntrypoint.php | File | 1.04 KB | 0644 |
|
wfScanFile.php | File | 1.01 KB | 0644 |
|
wfScanFileLink.php | File | 403 B | 0644 |
|
wfScanFileListItem.php | File | 408 B | 0644 |
|
wfScanFileProperties.php | File | 1.07 KB | 0644 |
|
wfScanMonitor.php | File | 4.05 KB | 0644 |
|
wfScanPath.php | File | 1.77 KB | 0644 |
|
wfSchema.php | File | 10.91 KB | 0644 |
|
wfStyle.php | File | 1.21 KB | 0644 |
|
wfSupportController.php | File | 24.18 KB | 0644 |
|
wfUnlockMsg.php | File | 1.14 KB | 0644 |
|
wfUpdateCheck.php | File | 27.23 KB | 0644 |
|
wfUtils.php | File | 124.11 KB | 0644 |
|
wfVersionCheckController.php | File | 19.27 KB | 0644 |
|
wfVersionSupport.php | File | 535 B | 0644 |
|
wfView.php | File | 2.22 KB | 0644 |
|
wfViewResult.php | File | 1.42 KB | 0644 |
|
wfWebsite.php | File | 1.75 KB | 0644 |
|
wordfenceClass.php | File | 435.98 KB | 0644 |
|
wordfenceConstants.php | File | 3.56 KB | 0644 |
|
wordfenceHash.php | File | 42.7 KB | 0644 |
|
wordfenceScanner.php | File | 30.47 KB | 0644 |
|
wordfenceURLHoover.php | File | 18.36 KB | 0644 |
|