PluginProbe
Two Factor Authentication / 1.14.4
Two Factor Authentication v1.14.4
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.4, at two-factor-login.php

260 lines 10.5 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.4
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 AIOWPS 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.4';
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 switch_to_blog(1);
113 $link = $this->get_settings_link();
114 restore_current_blog();
115 array_unshift($links, $link);
116 } else {
117 $link = $this->get_settings_link();
118 array_unshift($links, $link);
119 }
120
121 $link2 = '<a href="admin.php?page=two-factor-auth-user">'.__('User settings', 'two-factor-authentication').'</a>';
122 array_unshift($links, $link2);
123
124 return $links;
125 }
126
127 /**
128 * Get 2FA settings anchor tag link.
129 *
130 * @return string 2FA settings anchor tag link.
131 */
132 private function get_settings_link() {
133 return '<a href="'.admin_url('options-general.php').'?page=two-factor-auth">'.__('Plugin settings', 'two-factor-authentication').'</a>';
134 }
135
136 /**
137 * Runs upon the WP actions admin_menu and network_admin_menu
138 */
139 public function menu_entry_for_user() {
140
141 $this->get_totp_controller()->potentially_port_private_keys();
142
143 global $current_user;
144 if ($this->is_activated_for_user($current_user->ID)) {
145 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);
146 }
147 }
148
149 /**
150 * Runs upon the WP action admin_menu
151 */
152 public function menu_entry_for_admin() {
153
154 $this->get_totp_controller()->potentially_port_private_keys();
155
156 if (is_multisite() && (!is_super_admin() || !is_main_site())) return;
157
158 add_options_page(
159 __('Two Factor Authentication', 'two-factor-authentication'),
160 __('Two Factor Authentication', 'two-factor-authentication'),
161 $this->get_management_capability(),
162 'two-factor-auth',
163 array($this, 'show_admin_settings_page')
164 );
165 }
166
167 /**
168 * Include the admin settings page code
169 */
170 public function show_admin_settings_page() {
171 $totp_controller = $this->get_totp_controller();
172 $totp_controller->setUserHMACTypes();
173 if (!is_admin() || !current_user_can($this->get_management_capability())) return;
174
175 $admin_settings_links = array();
176 if (!class_exists('Simba_Two_Factor_Authentication_Premium')) {
177 $admin_settings_links[] = array(
178 'url' => esc_url('https://www.simbahosting.co.uk/s3/product/two-factor-authentication/'),
179 'title' => __('Premium version', SIMBA_TFA_TEXT_DOMAIN),
180 );
181 }
182 $simba_tfa_support_url = apply_filters('simba_tfa_support_url', esc_url('https://wordpress.org/support/plugin/two-factor-authentication/'));
183
184 $admin_settings_links[] = array(
185 'url' => $simba_tfa_support_url,
186 'title' => __('Support', SIMBA_TFA_TEXT_DOMAIN),
187 );
188 $admin_settings_links[] = array(
189 'url' => esc_url('https://profiles.wordpress.org/davidanderson#content-plugins'),
190 'title' => __('More free plugins', SIMBA_TFA_TEXT_DOMAIN),
191 );
192 $admin_settings_links[] = array(
193 'url' => esc_url('http://updraftplus.com'),
194 'title' => 'UpdraftPlus - '.__('WordPress backups', SIMBA_TFA_TEXT_DOMAIN),
195 );
196 $admin_settings_links[] = array(
197 'url' => esc_url('https://www.simbahosting.co.uk/s3/shop/'),
198 'title' => __('More premium plugins', SIMBA_TFA_TEXT_DOMAIN),
199 );
200 $admin_settings_links[] = array(
201 'url' => esc_url('https://twitter.com/updraftplus'),
202 'title' => __('Twitter', SIMBA_TFA_TEXT_DOMAIN),
203 );
204 $admin_settings_links[] = array(
205 'url' => esc_url('http://david.dw-perspective.org.uk'),
206 'title' => __('Lead developer\'s homepage', SIMBA_TFA_TEXT_DOMAIN),
207 );
208
209 $admin_settings_links = apply_filters('simba_tfa_admin_settings_links', $admin_settings_links);
210
211 $this->include_template('admin-settings.php', array(
212 'totp_controller' => $totp_controller,
213 'settings_page_heading' => $this->get_settings_page_heading(),
214 'admin_settings_links' => $admin_settings_links,
215 ));
216 }
217
218 /**
219 * Runs conditionally on the WP action all_admin_notices
220 */
221 public function admin_notice_insufficient_php() {
222 $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');
223 }
224
225 /**
226 * Runs conditionally on the WP action all_admin_notices
227 */
228 public function admin_notice_missing_mcrypt_and_openssl() {
229 $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');
230 }
231
232 /**
233 * 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).
234 */
235 public function plugins_loaded_load_textdomain() {
236 load_plugin_textdomain(
237 'two-factor-authentication',
238 false,
239 dirname(plugin_basename(__FILE__)).'/languages/'
240 );
241 }
242 }
243 endif;
244
245 $GLOBALS['simba_two_factor_authentication'] = new Simba_Two_Factor_Authentication_Plugin();
246
247 if (file_exists(__DIR__.'/simba-tfa/premium/loader.php') && empty($GLOBALS['simba_two_factor_authentication_premium'])) {
248 if (!class_exists('Simba_Two_Factor_Authentication_Premium')) include_once(__DIR__.'/simba-tfa/premium/loader.php');
249
250 $GLOBALS['simba_two_factor_authentication_premium'] = new Simba_Two_Factor_Authentication_Premium($GLOBALS['simba_two_factor_authentication']);
251
252 if (!class_exists('Updraft_Manager_Updater_1_8')) require_once(plugin_dir_path(__FILE__).'vendor/davidanderson684/simba-plugin-manager-updater/class-udm-updater.php');
253
254 try {
255 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));
256 } catch (Exception $e) {
257 error_log($e->getMessage());
258 }
259 }
260