PluginProbe ʕ •ᴥ•ʔ
Wordfence Security – Firewall, Malware Scan, and Login Security / 7.3.2
Wordfence Security – Firewall, Malware Scan, and Login Security v7.3.2
8.2.2 8.2.1 8.2.0 3.7.1 3.7.2 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.8.6 3.8.7 3.8.8 3.8.9 3.9.1 4.0.1 4.0.2 4.0.3 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.0.9 5.1.1 5.1.2 5.1.4 5.1.5 5.1.6 5.1.7 5.1.8 5.1.9 5.2.1 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 5.2.7 5.2.8 5.2.9 5.3.1 5.3.10 5.3.11 5.3.12 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.3.8 5.3.9 6.0.1 6.0.10 6.0.11 6.0.12 6.0.14 6.0.15 6.0.16 6.0.17 6.0.18 6.0.19 6.0.2 6.0.20 6.0.21 6.0.22 6.0.23 6.0.24 6.0.25 6.0.3 6.0.4 6.0.5 6.0.6 6.0.7 6.0.8 6.0.9 6.1.1 6.1.10 6.1.11 6.1.12 6.1.14 6.1.15 6.1.16 6.1.17 6.1.2 6.1.3 6.1.4 6.1.5 6.1.6 6.1.7 6.1.8 6.1.9 6.2.0 6.2.1 6.2.10 6.2.2 6.2.3 6.2.4 6.2.5 6.2.6 6.2.7 6.2.8 6.2.9 6.3.0 6.3.1 6.3.10 6.3.11 6.3.12 6.3.14 6.3.15 6.3.16 6.3.17 6.3.18 6.3.19 6.3.2 6.3.20 6.3.21 6.3.22 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.3.8 6.3.9 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1.0 7.1.1 7.1.10 7.1.11 7.1.12 7.1.14 7.1.15 7.1.16 7.1.17 7.1.18 7.1.19 7.1.2 7.1.20 7.1.3 7.1.4 7.1.5 7.1.6 7.1.7 7.1.8 7.1.9 7.10.0 7.10.1 7.10.2 7.10.3 7.10.4 7.10.5 7.10.6 7.10.7 7.11.0 7.11.1 7.11.2 7.11.3 7.11.4 7.11.5 7.11.6 7.11.7 7.2.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3.1 7.3.2 7.3.3 7.3.4 7.3.5 7.3.6 7.4.0 7.4.1 7.4.10 7.4.11 7.4.12 7.4.14 7.4.2 7.4.3 trunk 7.4.4 1.1 7.4.5 1.2 7.4.6 1.3 7.4.7 1.3.1 7.4.8 1.3.2 7.4.9 1.3.3 7.5.0 1.4.2 7.5.1 1.4.3 7.5.10 1.4.4 7.5.11 1.4.5 7.5.2 1.4.6 7.5.3 1.4.7 7.5.4 1.4.8 7.5.5 1.5.1 7.5.6 1.5.2 7.5.7 1.5.3 7.5.8 1.5.4 7.5.9 1.5.5 7.6.0 1.5.6 7.6.1 2.0.1 7.6.2 2.0.2 7.7.0 2.0.3 7.7.1 2.0.5 7.8.0 2.0.6 7.8.1 2.0.7 7.8.2 2.1.0 7.9.0 2.1.1 7.9.1 2.1.2 7.9.2 2.1.3 7.9.3 2.1.4 8.0.0 2.1.5 8.0.1 3.0.2 8.0.2 3.0.3 8.0.3 3.0.4 8.0.4 3.0.5 8.0.5 3.0.6 8.1.0 3.0.7 8.1.1 3.0.8 8.1.2 3.0.9 8.1.3 3.1.0 8.1.4 3.1.1 v1.4.1 3.1.2 3.1.4 3.1.6 3.2.1 3.2.3 3.2.4 3.2.5 3.2.6 3.2.7 3.3.2 3.3.3 3.3.4 3.3.5 3.3.6 3.3.7 3.4.1 3.4.4 3.4.5 3.5.1 3.5.2 3.6.1 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.6.8 3.6.9
wordfence / lib / wfOnboardingController.php
wordfence / lib Last commit date
Diff 8 years ago dashboard 7 years ago rest-api 7 years ago .htaccess 7 years ago Diff.php 14 years ago GeoLite2-Country.mmdb 7 years ago IPTraf.php 8 years ago IPTrafList.php 7 years ago WFLSPHP52Compatability.php 7 years ago compat.php 8 years ago conntest.php 7 years ago cronview.php 8 years ago dbview.php 8 years ago diffResult.php 8 years ago email_genericAlert.php 7 years ago email_newIssues.php 7 years ago email_unlockRequest.php 8 years ago email_unsubscribeRequest.php 7 years ago flags.php 7 years ago live_activity.php 8 years ago menu_dashboard.php 7 years ago menu_dashboard_options.php 7 years ago menu_firewall.php 7 years ago menu_firewall_blocking.php 7 years ago menu_firewall_blocking_options.php 8 years ago menu_firewall_waf.php 7 years ago menu_firewall_waf_options.php 7 years ago menu_options.php 7 years ago menu_scanner.php 7 years ago menu_scanner_credentials.php 8 years ago menu_scanner_options.php 8 years ago menu_support.php 7 years ago menu_tools.php 7 years ago menu_tools_diagnostic.php 7 years ago menu_tools_importExport.php 7 years ago menu_tools_livetraffic.php 7 years ago menu_tools_twoFactor.php 7 years ago menu_tools_whois.php 8 years ago menu_wordfence_central.php 7 years ago noc1.key 7 years ago sysinfo.php 8 years ago unknownFiles.php 8 years ago viewFullActivityLog.php 8 years ago wf503.php 7 years ago wfAPI.php 7 years ago wfActivityReport.php 7 years ago wfAdminNoticeQueue.php 8 years ago wfArray.php 7 years ago wfBrowscap.php 8 years ago wfBrowscapCache.php 7 years ago wfBulkCountries.php 7 years ago wfCache.php 9 years ago wfCentralAPI.php 7 years ago wfConfig.php 7 years ago wfCrawl.php 8 years ago wfCredentialsController.php 7 years ago wfCrypt.php 7 years ago wfDB.php 7 years ago wfDashboard.php 7 years ago wfDateLocalization.php 8 years ago wfDiagnostic.php 7 years ago wfDict.php 8 years ago wfDirectoryIterator.php 7 years ago wfHelperBin.php 11 years ago wfHelperString.php 11 years ago wfIPWhitelist.php 7 years ago wfImportExportController.php 7 years ago wfIssues.php 7 years ago wfJWT.php 7 years ago wfLockedOut.php 7 years ago wfLog.php 7 years ago wfMD5BloomFilter.php 8 years ago wfModuleController.php 7 years ago wfNotification.php 8 years ago wfOnboardingController.php 7 years ago wfPersistenceController.php 8 years ago wfRESTAPI.php 7 years ago wfScan.php 7 years ago wfScanEngine.php 7 years ago wfSchema.php 7 years ago wfStyle.php 7 years ago wfSupportController.php 7 years ago wfUnlockMsg.php 7 years ago wfUpdateCheck.php 8 years ago wfUtils.php 7 years ago wfVersionCheckController.php 8 years ago wfView.php 10 years ago wfViewResult.php 8 years ago wordfenceClass.php 7 years ago wordfenceConstants.php 7 years ago wordfenceHash.php 7 years ago wordfenceScanner.php 7 years ago wordfenceURLHoover.php 7 years ago
wfOnboardingController.php
197 lines
1 <?php
2
3 class wfOnboardingController {
4 const ONBOARDING_FIRST_EMAILS = 'emails'; //New install, first attempt onboarding, part 1 completed
5 const ONBOARDING_FIRST_LICENSE = 'license'; //New install, first attempt onboarding, part 2 completed
6 const ONBOARDING_FIRST_SKIPPED = 'skipped'; //New install, first attempt onboarding was skipped
7
8 const ONBOARDING_SECOND_EMAILS = 'emails'; //New install, second attempt onboarding, part 1 completed
9 const ONBOARDING_SECOND_LICENSE = 'license'; //New install, second attempt onboarding, part 2 completed
10 const ONBOARDING_SECOND_SKIPPED = 'skipped'; //New install, second attempt onboarding was skipped
11
12 const ONBOARDING_THIRD_EMAILS = 'emails'; //New install, third attempt onboarding, part 1 completed
13 const ONBOARDING_THIRD_LICENSE = 'license'; //New install, third attempt onboarding, part 2 completed
14
15 const TOUR_DASHBOARD = 'dashboard';
16 const TOUR_FIREWALL = 'firewall';
17 const TOUR_SCAN = 'scan';
18 const TOUR_BLOCKING = 'blocking';
19 const TOUR_LIVE_TRAFFIC = 'livetraffic';
20 const TOUR_LOGIN_SECURITY = 'loginsecurity';
21
22 /**
23 * Sets the appropriate initial settings for an existing install so it's not forced through onboarding.
24 */
25 public static function migrateOnboarding() {
26 $alertEmails = wfConfig::getAlertEmails();
27 $onboardingAttempt1 = wfConfig::get('onboardingAttempt1');
28 if (!empty($alertEmails) && empty($onboardingAttempt1)) {
29 wfConfig::set('onboardingAttempt1', self::ONBOARDING_FIRST_LICENSE); //Mark onboarding as done
30
31 $keys = array(self::TOUR_DASHBOARD, self::TOUR_FIREWALL, self::TOUR_SCAN, self::TOUR_BLOCKING, self::TOUR_LIVE_TRAFFIC);
32 foreach ($keys as $k) {
33 wfConfig::set('needsNewTour_' . $k, 0);
34 wfConfig::set('needsUpgradeTour_' . $k, 1);
35 }
36 }
37 }
38
39 /**
40 * Initializes the onboarding hooks.
41 *
42 * Only called if (is_admin() && wfUtils::isAdmin()) is true.
43 */
44 public static function initialize() {
45 $willShowAnyTour = (self::shouldShowNewTour(self::TOUR_DASHBOARD) || self::shouldShowUpgradeTour(self::TOUR_DASHBOARD) ||
46 self::shouldShowNewTour(self::TOUR_FIREWALL) || self::shouldShowUpgradeTour(self::TOUR_FIREWALL) ||
47 self::shouldShowNewTour(self::TOUR_SCAN) || self::shouldShowUpgradeTour(self::TOUR_SCAN) ||
48 self::shouldShowNewTour(self::TOUR_BLOCKING) || self::shouldShowUpgradeTour(self::TOUR_BLOCKING) ||
49 self::shouldShowNewTour(self::TOUR_LIVE_TRAFFIC) || self::shouldShowUpgradeTour(self::TOUR_LIVE_TRAFFIC) ||
50 self::shouldShowNewTour(self::TOUR_LOGIN_SECURITY) || self::shouldShowUpgradeTour(self::TOUR_LOGIN_SECURITY));
51 if (!self::shouldShowAttempt1() && !self::shouldShowAttempt2() && !self::shouldShowAttempt3() && !$willShowAnyTour) {
52 return;
53 }
54
55 add_action('in_admin_header', 'wfOnboardingController::_admin_header'); //Called immediately after <div id="wpcontent">
56 add_action('pre_current_active_plugins', 'wfOnboardingController::_pre_plugins'); //Called immediately after <hr class="wp-header-end">
57 add_action('admin_enqueue_scripts', 'wfOnboardingController::_enqueue_scripts');
58 }
59
60 /**
61 * Enqueues the scripts and styles we need globally on the backend for onboarding.
62 */
63 public static function _enqueue_scripts() {
64 $willShowAnyPluginOnboarding = (self::shouldShowAttempt1() || self::shouldShowAttempt2());
65 $willShowAnyTour = (self::shouldShowNewTour(self::TOUR_DASHBOARD) || self::shouldShowUpgradeTour(self::TOUR_DASHBOARD) ||
66 self::shouldShowNewTour(self::TOUR_FIREWALL) || self::shouldShowUpgradeTour(self::TOUR_FIREWALL) ||
67 self::shouldShowNewTour(self::TOUR_SCAN) || self::shouldShowUpgradeTour(self::TOUR_SCAN) ||
68 self::shouldShowNewTour(self::TOUR_BLOCKING) || self::shouldShowUpgradeTour(self::TOUR_BLOCKING) ||
69 self::shouldShowNewTour(self::TOUR_LIVE_TRAFFIC) || self::shouldShowUpgradeTour(self::TOUR_LIVE_TRAFFIC) ||
70 self::shouldShowNewTour(self::TOUR_LOGIN_SECURITY) || self::shouldShowUpgradeTour(self::TOUR_LOGIN_SECURITY));
71
72 if (wfUtils::isAdmin() &&
73 (($willShowAnyPluginOnboarding && preg_match('~(?:^|/)wp-admin(?:/network)?/plugins\.php~i', $_SERVER['REQUEST_URI'])) ||
74 (isset($_GET['page']) &&
75 (preg_match('/^Wordfence/', @$_GET['page']) ||
76 ($willShowAnyTour && preg_match('/^WFLS/', @$_GET['page']))
77 )
78 )
79 )
80 ) {
81 wp_enqueue_style('wordfence-font', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/wf-roboto-font.css'), '', WORDFENCE_VERSION);
82 wp_enqueue_style('wordfence-ionicons-style', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/wf-ionicons.css'), '', WORDFENCE_VERSION);
83 wp_enqueue_style('wordfenceOnboardingCSS', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/wf-onboarding.css'), '', WORDFENCE_VERSION);
84 wp_enqueue_style('wordfence-colorbox-style', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/wf-colorbox.css'), '', WORDFENCE_VERSION);
85
86 wp_enqueue_script('jquery.wfcolorbox', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/jquery.colorbox-min.js'), array('jquery'), WORDFENCE_VERSION);
87 }
88 }
89
90 /**
91 * Outputs the onboarding overlay if it needs to be shown on the plugins page.
92 */
93 public static function _admin_header() {
94 $willShowAnyTour = (self::shouldShowNewTour(self::TOUR_DASHBOARD) || self::shouldShowUpgradeTour(self::TOUR_DASHBOARD) ||
95 self::shouldShowNewTour(self::TOUR_FIREWALL) || self::shouldShowUpgradeTour(self::TOUR_FIREWALL) ||
96 self::shouldShowNewTour(self::TOUR_SCAN) || self::shouldShowUpgradeTour(self::TOUR_SCAN) ||
97 self::shouldShowNewTour(self::TOUR_BLOCKING) || self::shouldShowUpgradeTour(self::TOUR_BLOCKING) ||
98 self::shouldShowNewTour(self::TOUR_LIVE_TRAFFIC) || self::shouldShowUpgradeTour(self::TOUR_LIVE_TRAFFIC) ||
99 self::shouldShowNewTour(self::TOUR_LOGIN_SECURITY) || self::shouldShowUpgradeTour(self::TOUR_LOGIN_SECURITY));
100
101 $screen = get_current_screen();
102 if ($screen->base == 'plugins' && self::shouldShowAttempt1()) {
103 register_shutdown_function('wfOnboardingController::_markAttempt1Shown');
104 $freshInstall = wfView::create('onboarding/fresh-install')->render();
105
106 echo wfView::create('onboarding/overlay', array(
107 'contentHTML' => $freshInstall,
108 ))->render();
109 }
110 else if (preg_match('/wordfence/i', $screen->base) && $willShowAnyTour) {
111 echo wfView::create('onboarding/tour-overlay')->render();
112 }
113 }
114
115 public static function _markAttempt1Shown() {
116 wfConfig::set('onboardingAttempt1', self::ONBOARDING_FIRST_SKIPPED); //Only show it once, default to skipped after outputting the first time
117 }
118
119 public static function shouldShowAttempt1() { //Overlay on plugin page
120 if (wfConfig::get('onboardingAttempt3') == self::ONBOARDING_THIRD_LICENSE) {
121 return false;
122 }
123
124 switch (wfConfig::get('onboardingAttempt1')) {
125 case self::ONBOARDING_FIRST_LICENSE:
126 case self::ONBOARDING_FIRST_SKIPPED:
127 return false;
128 }
129 return true;
130 }
131
132 public static function _pre_plugins() {
133 if (self::shouldShowAttempt2()) {
134 echo wfView::create('onboarding/plugin-header')->render();
135 }
136 }
137
138 public static function shouldShowAttempt2() { //Header on plugin page
139 if (wfConfig::get('onboardingAttempt3') == self::ONBOARDING_THIRD_LICENSE) {
140 return false;
141 }
142
143 $alertEmails = wfConfig::getAlertEmails();
144 $show = !wfConfig::get('onboardingAttempt2') && empty($alertEmails); //Unset defaults to true, all others false
145 return $show;
146 }
147
148 public static function shouldShowAttempt3() {
149 if (isset($_GET['page']) && preg_match('/^Wordfence/', $_GET['page'])) {
150 $alertEmails = wfConfig::getAlertEmails();
151 return empty($alertEmails);
152 }
153
154 return false;
155 }
156
157 /**
158 * Whether or not to pop up attempt 3 at page load or wait for user interaction.
159 *
160 * @return bool
161 */
162 public static function shouldShowAttempt3Automatically() {
163 static $_shouldShowAttempt3Automatically = null;
164 if ($_shouldShowAttempt3Automatically !== null) { //We cache this so the answer remains the same for the whole request
165 return $_shouldShowAttempt3Automatically;
166 }
167
168 if (!self::shouldShowAttempt3()) {
169 $_shouldShowAttempt3Automatically = false;
170 return false;
171 }
172
173 $_shouldShowAttempt3Automatically = (!wfConfig::get('onboardingAttempt3Initial'));
174 return (!wfConfig::get('onboardingAttempt3Initial'));
175 }
176
177 public static function willShowNewTour($page) {
178 $key = 'needsNewTour_' . $page;
179 return wfConfig::get($key);
180 }
181
182 public static function shouldShowNewTour($page) {
183 $key = 'needsNewTour_' . $page;
184 return (!self::shouldShowAttempt3Automatically() && !wfConfig::get('touppPromptNeeded') && wfConfig::get($key));
185 }
186
187 public static function willShowUpgradeTour($page) {
188 $key = 'needsUpgradeTour_' . $page;
189 return wfConfig::get($key);
190 }
191
192 public static function shouldShowUpgradeTour($page) {
193 $key = 'needsUpgradeTour_' . $page;
194 return (!self::shouldShowAttempt3Automatically() && !wfConfig::get('touppPromptNeeded') && wfConfig::get($key));
195 }
196 }
197