PluginProbe
Two Factor Authentication / 1.14.7
Two Factor Authentication v1.14.7
1.12.2 1.13.0 1.14.10 1.14.11 1.14.14 1.14.15 1.14.16 1.14.17 1.14.23 1.14.24 1.14.26 1.14.27 1.14.3 1.14.4 1.14.5 1.14.7 1.14.8 1.15.5 1.16.0 1.2.10 1.2.12 1.2.13 1.2.14 1.2.15 1.2.16 All 98 releases
two-factor-authentication / two-factor-login.php

two-factor-login.php in Two Factor Authentication 1.14.7, at two-factor-login.php

265 lines 10.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /*
3 Plugin Name: Two Factor Authentication
4 Plugin URI: https://www.simbahosting.co.uk/s3/product/two-factor-authentication/
5 Description: Secure your WordPress login forms with two factor authentication - including WooCommerce login forms
6 Author: David Anderson, original plugin by Oskar Hane and enhanced by Dee Nutbourne
7 Author URI: https://www.simbahosting.co.uk
8 Version: 1.14.7
9 Text Domain: two-factor-authentication
10 Domain Path: /languages
11 License: GPLv2 or later
12 */
13
14 register_activation_hook(__FILE__, 'simba_two_factor_authentication_activation');
15
16 if (!function_exists('simba_two_factor_authentication_activation')) {
17 function simba_two_factor_authentication_activation() {
18 if (!empty($GLOBALS['simba_two_factor_authentication'])) {
19 $is_2fa_plugin_active = false;
20 $installed_plugins_slugs = array_keys(get_plugins());
21 foreach ($installed_plugins_slugs as $installed_plugin_slug) {
22 if (is_plugin_active($installed_plugin_slug)) {
23 $temp_split_plugin_slug = explode('/', $installed_plugin_slug);
24 if (isset($temp_split_plugin_slug[1]) && 'two-factor-login.php' == $temp_split_plugin_slug[1]) {
25 $is_2fa_plugin_active = true;
26 break;
27 }
28 }
29 }
30
31 // We should prevent activation if and only if either the 2FA Premium or 2FA Free plugin is active.
32 // We should not prevent activation if either the AIOS plugin is active.
33 if ($is_2fa_plugin_active) {
34 if (file_exists(__DIR__.'/simba-tfa/premium/loader.php')) {
35 wp_die(__('To activate Two Factor Authentication Premium, first de-activate the free version (only one can be active at once).', SIMBA_TFA_TEXT_DOMAIN));
36 } else { // If the 2FA Premium plugin is active and tries to activate the 2FA Free Plugin, it throws a fatal error and stops activating the free version.
37 wp_die(__("You can't activate Two Factor Authentication (Free) because Two Factor Authentication Premium is active (only one can be active at once).", SIMBA_TFA_TEXT_DOMAIN));
38 }
39 }
40 }
41 }
42 }
43
44 if (!defined('SIMBA_TFA_TEXT_DOMAIN')) define('SIMBA_TFA_TEXT_DOMAIN', 'two-factor-authentication');
45 if (!class_exists('Simba_Two_Factor_Authentication')) require dirname(__FILE__).'/simba-tfa/simba-tfa.php';
46
47 if (!class_exists('Simba_Two_Factor_Authentication_Plugin')):
48 /**
49 * This parent-child relationship enables the two to be split without affecting backwards compatibility for developers making direct calls
50 *
51 * This class is for the plugin encapsulation.
52 */
53 class Simba_Two_Factor_Authentication_Plugin extends Simba_Two_Factor_Authentication {
54
55 public $version = '1.14.7';
56
57 const PHP_REQUIRED = '5.6';
58
59 /**
60 * Constructor, run upon plugin initiation
61 *
62 * @uses __FILE__
63 */
64 public function __construct() {
65
66 add_action('plugins_loaded', array($this, 'plugins_loaded_load_textdomain'));
67
68 if (version_compare(PHP_VERSION, self::PHP_REQUIRED, '<' )) {
69 add_action('all_admin_notices', array($this, 'admin_notice_insufficient_php'));
70 $abort = true;
71 }
72
73 if (!function_exists('mcrypt_get_iv_size') && !function_exists('openssl_cipher_iv_length')) {
74 add_action('all_admin_notices', array($this, 'admin_notice_missing_mcrypt_and_openssl'));
75 $abort = true;
76 }
77
78 if (!empty($abort)) return;
79
80 // Menu entries
81 add_action('admin_menu', array($this, 'menu_entry_for_admin'));
82 add_action('admin_menu', array($this, 'menu_entry_for_user'));
83 add_action('network_admin_menu', array($this, 'menu_entry_for_user'));
84
85 // Add settings link in plugin list
86 $plugin = plugin_basename(__FILE__);
87 add_filter("plugin_action_links_$plugin", array($this, 'add_plugin_settings_link'));
88 add_filter("network_admin_plugin_action_links_$plugin", array($this, 'add_plugin_settings_link'));
89
90 $this->set_user_settings_page_slug('two-factor-auth-user');
91
92 $settings_page_heading = sprintf(__('Two Factor Authentication (Version: %s) - Admin Settings', 'all-in-one-wp-security-and-firewall'), $this->version);
93 $this->set_settings_page_heading($settings_page_heading);
94
95 $this->set_plugin_translate_url('https://translate.wordpress.org/projects/wp-plugins/two-factor-authentication/');
96 $this->set_site_wide_administration_url(admin_url('options-general.php?page=two-factor-auth'));
97 $this->set_premium_version_url('https://www.simbahosting.co.uk/s3/product/two-factor-authentication/');
98 $this->set_faq_url('https://wordpress.org/plugins/two-factor-authentication/#faq');
99 parent::__construct();
100
101 }
102
103 /**
104 * Runs upon the WP filters plugin_action_links_(plugin) and network_plugin_action_links_(plugin)
105 *
106 * @param Array $links
107 *
108 * @return Array
109 */
110 public function add_plugin_settings_link($links) {
111 if (is_multisite()) {
112 $main_site_id = function_exists('get_main_site_id') ? get_main_site_id() : 1;
113 switch_to_blog($main_site_id);
114 $link = $this->get_settings_link();
115 restore_current_blog();
116 array_unshift($links, $link);
117 } else {
118 $link = $this->get_settings_link();
119 array_unshift($links, $link);
120 }
121
122 $link2 = '<a href="admin.php?page=two-factor-auth-user">'.__('User settings', 'two-factor-authentication').'</a>';
123 array_unshift($links, $link2);
124
125 return $links;
126 }
127
128 /**
129 * Get 2FA settings anchor tag link.
130 *
131 * @return string 2FA settings anchor tag link.
132 */
133 private function get_settings_link() {
134 return '<a href="'.admin_url('options-general.php').'?page=two-factor-auth">'.__('Plugin settings', 'two-factor-authentication').'</a>';
135 }
136
137 /**
138 * Runs upon the WP actions admin_menu and network_admin_menu
139 */
140 public function menu_entry_for_user() {
141
142 $this->get_totp_controller()->potentially_port_private_keys();
143
144 global $current_user;
145 if ($this->is_activated_for_user($current_user->ID)) {
146 add_menu_page(__('Two Factor Authentication', 'two-factor-authentication'), __('Two Factor Auth', 'two-factor-authentication'), 'read', 'two-factor-auth-user', array($this, 'show_dashboard_user_settings_page'), $this->includes_url().'/tfa_admin_icon_16x16.png', 72);
147 }
148 }
149
150 /**
151 * Runs upon the WP action admin_menu
152 */
153 public function menu_entry_for_admin() {
154
155 $this->get_totp_controller()->potentially_port_private_keys();
156
157 $skip_adding_options_menu_entry = (is_multisite() && (!is_super_admin() || !is_main_site()));
158
159 $skip_adding_options_menu_entry = apply_filters('simba_tfa_skip_adding_options_menu_entry', $skip_adding_options_menu_entry);
160
161 if ($skip_adding_options_menu_entry) return;
162
163 add_options_page(
164 __('Two Factor Authentication', 'two-factor-authentication'),
165 __('Two Factor Authentication', 'two-factor-authentication'),
166 $this->get_management_capability(),
167 'two-factor-auth',
168 array($this, 'show_admin_settings_page')
169 );
170 }
171
172 /**
173 * Include the admin settings page code
174 */
175 public function show_admin_settings_page() {
176 $totp_controller = $this->get_totp_controller();
177 $totp_controller->setUserHMACTypes();
178 if (!is_admin() || !current_user_can($this->get_management_capability())) return;
179
180 $admin_settings_links = array();
181 if (!class_exists('Simba_Two_Factor_Authentication_Premium')) {
182 $admin_settings_links[] = array(
183 'url' => esc_url('https://www.simbahosting.co.uk/s3/product/two-factor-authentication/'),
184 'title' => __('Premium version', SIMBA_TFA_TEXT_DOMAIN),
185 );
186 }
187 $simba_tfa_support_url = apply_filters('simba_tfa_support_url', esc_url('https://wordpress.org/support/plugin/two-factor-authentication/'));
188
189 $admin_settings_links[] = array(
190 'url' => $simba_tfa_support_url,
191 'title' => __('Support', SIMBA_TFA_TEXT_DOMAIN),
192 );
193 $admin_settings_links[] = array(
194 'url' => esc_url('https://profiles.wordpress.org/davidanderson#content-plugins'),
195 'title' => __('More free plugins', SIMBA_TFA_TEXT_DOMAIN),
196 );
197 $admin_settings_links[] = array(
198 'url' => esc_url('http://updraftplus.com'),
199 'title' => 'UpdraftPlus - '.__('WordPress backups', SIMBA_TFA_TEXT_DOMAIN),
200 );
201 $admin_settings_links[] = array(
202 'url' => esc_url('https://www.simbahosting.co.uk/s3/shop/'),
203 'title' => __('More premium plugins', SIMBA_TFA_TEXT_DOMAIN),
204 );
205 $admin_settings_links[] = array(
206 'url' => esc_url('https://twitter.com/updraftplus'),
207 'title' => __('Twitter', SIMBA_TFA_TEXT_DOMAIN),
208 );
209 $admin_settings_links[] = array(
210 'url' => esc_url('http://david.dw-perspective.org.uk'),
211 'title' => __('Lead developer\'s homepage', SIMBA_TFA_TEXT_DOMAIN),
212 );
213
214 $admin_settings_links = apply_filters('simba_tfa_admin_settings_links', $admin_settings_links);
215
216 $this->include_template('admin-settings.php', array(
217 'totp_controller' => $totp_controller,
218 'settings_page_heading' => $this->get_settings_page_heading(),
219 'admin_settings_links' => $admin_settings_links,
220 ));
221 }
222
223 /**
224 * Runs conditionally on the WP action all_admin_notices
225 */
226 public function admin_notice_insufficient_php() {
227 $this->show_admin_warning('<strong>'.__('Higher PHP version required', 'two-factor-authentication').'</strong><br> '.sprintf(__('The Two Factor Authentication plugin requires PHP version %s or higher - your current version is only %s.', 'two-factor-authentication'), self::PHP_REQUIRED, PHP_VERSION), 'error');
228 }
229
230 /**
231 * Runs conditionally on the WP action all_admin_notices
232 */
233 public function admin_notice_missing_mcrypt_and_openssl() {
234 $this->show_admin_warning('<strong>'.__('PHP OpenSSL or mcrypt module required', 'two-factor-authentication').'</strong><br> '.__('The Two Factor Authentication plugin requires either the PHP openssl (preferred) or mcrypt module to be installed. Please ask your web hosting company to install one of them.', 'two-factor-authentication'), 'error');
235 }
236
237 /**
238 * Run upon the WP plugins_loaded action. This method is called even if main loading aborts - so don't put anything else in it (use a separate method).
239 */
240 public function plugins_loaded_load_textdomain() {
241 load_plugin_textdomain(
242 'two-factor-authentication',
243 false,
244 dirname(plugin_basename(__FILE__)).'/languages/'
245 );
246 }
247 }
248 endif;
249
250 $GLOBALS['simba_two_factor_authentication'] = new Simba_Two_Factor_Authentication_Plugin();
251
252 if (file_exists(__DIR__.'/simba-tfa/premium/loader.php') && empty($GLOBALS['simba_two_factor_authentication_premium'])) {
253 if (!class_exists('Simba_Two_Factor_Authentication_Premium')) include_once(__DIR__.'/simba-tfa/premium/loader.php');
254
255 $GLOBALS['simba_two_factor_authentication_premium'] = new Simba_Two_Factor_Authentication_Premium($GLOBALS['simba_two_factor_authentication']);
256
257 if (!class_exists('Updraft_Manager_Updater_1_8')) require_once(plugin_dir_path(__FILE__).'vendor/davidanderson684/simba-plugin-manager-updater/class-udm-updater.php');
258
259 try {
260 new Updraft_Manager_Updater_1_8('https://www.simbahosting.co.uk/s3', 1, 'two-factor-authentication-premium/two-factor-login.php', array('require_login' => false));
261 } catch (Exception $e) {
262 error_log($e->getMessage());
263 }
264 }
265