| @@ -3,15 +3,82 @@ | ||
| 3 | 3 | if(!defined('ABSPATH')){ |
| 4 | 4 | die('Hacking Attempt!'); |
| 5 | 5 | } |
| 6 | 6 | |
| 7 | -// HOOKS | |
| 8 | -add_action('admin_menu', 'loginizer_admin_menu'); | |
| 9 | -add_action('admin_notices', 'loginizer_social_login_url_alert'); | |
| 10 | -add_action('admin_footer', 'loginizer_social_interim_js'); | |
| 11 | -add_action('admin_init', 'loginizer_admin_actions'); | |
| 12 | -//add_filter("plugin_action_links_plugin_loginizer", 'loginizer_plugin_action_links'); | |
| 7 | +function loginizer_admin_hooks(){ | |
| 8 | + add_action('admin_menu', 'loginizer_admin_menu'); | |
| 9 | + add_action('admin_notices', 'loginizer_social_login_url_alert'); | |
| 10 | + add_action('admin_footer', 'loginizer_social_interim_js'); | |
| 11 | + add_action('admin_init', 'loginizer_admin_actions'); | |
| 12 | + // add_filter("plugin_action_links_plugin_loginizer", 'loginizer_plugin_action_links'); | |
| 13 | + | |
| 14 | + loginizer_admin_promo_hooks(); | |
| 15 | +} | |
| 13 | 16 | |
| 17 | +function loginizer_admin_promo_hooks(){ | |
| 18 | + global $loginizer; | |
| 19 | + | |
| 20 | + if(!current_user_can('activate_plugins') || defined('SITEPAD')){ | |
| 21 | + return; | |
| 22 | + } | |
| 23 | + | |
| 24 | + // Is the premium features there ? | |
| 25 | + if(!defined('LOGINIZER_PREMIUM')){ | |
| 26 | + // The promo time | |
| 27 | + $loginizer['promo_time'] = get_option('loginizer_promo_time'); | |
| 28 | + if(empty($loginizer['promo_time'])){ | |
| 29 | + $loginizer['promo_time'] = time(); | |
| 30 | + update_option('loginizer_promo_time', $loginizer['promo_time']); | |
| 31 | + } | |
| 32 | + | |
| 33 | + // Are we to show the loginizer promo | |
| 34 | + if(!empty($loginizer['promo_time']) && $loginizer['promo_time'] > 0 && $loginizer['promo_time'] < (time() - (30*24*3600))){ | |
| 35 | + add_action('admin_notices', 'loginizer_promo'); | |
| 36 | + } | |
| 37 | + | |
| 38 | + if(!empty($loginizer['csrf_promo']) && $loginizer['csrf_promo'] > 0 && $loginizer['csrf_promo'] < (time() - 86400)){ | |
| 39 | + add_action('admin_notices', 'loginizer_csrf_promo'); | |
| 40 | + } | |
| 41 | + | |
| 42 | + // Are we to disable the promo | |
| 43 | + if(isset($_GET['loginizer_promo']) && (int)$_GET['loginizer_promo'] == 0){ | |
| 44 | + update_option('loginizer_promo_time', (0 - time()) ); | |
| 45 | + die('DONE'); | |
| 46 | + } | |
| 47 | + | |
| 48 | + $loginizer['backuply_promo'] = get_option('loginizer_backuply_promo_time'); | |
| 49 | + if(empty($loginizer['backuply_promo'])){ | |
| 50 | + $loginizer['backuply_promo'] = abs($loginizer['promo_time']); | |
| 51 | + update_option('loginizer_backuply_promo_time', $loginizer['backuply_promo']); | |
| 52 | + } | |
| 53 | + | |
| 54 | + // Setting CSRF Promo time | |
| 55 | + $loginizer['csrf_promo'] = get_option('loginizer_csrf_promo_time'); | |
| 56 | + | |
| 57 | + if(empty($loginizer['csrf_promo'])){ | |
| 58 | + $loginizer['csrf_promo'] = abs($loginizer['promo_time']); | |
| 59 | + update_option('loginizer_csrf_promo_time', $loginizer['csrf_promo']); | |
| 60 | + } | |
| 61 | + } | |
| 62 | + | |
| 63 | + // === Plugin Update Notice === // | |
| 64 | + $plugin_update_notice = get_option('softaculous_plugin_update_notice', []); | |
| 65 | + $available_update_list = get_site_transient('update_plugins'); | |
| 66 | + | |
| 67 | + if( | |
| 68 | + !empty($available_update_list) && | |
| 69 | + is_object($available_update_list) && | |
| 70 | + !empty($available_update_list->response) && | |
| 71 | + !empty($available_update_list->response['loginizer/loginizer.php']) && | |
| 72 | + (empty($plugin_update_notice) || empty($plugin_update_notice['loginizer/loginizer.php']) || (!empty($plugin_update_notice['loginizer/loginizer.php']) && | |
| 73 | + version_compare($plugin_update_notice['loginizer/loginizer.php'], $available_update_list->response['loginizer/loginizer.php']->new_version, '<'))) | |
| 74 | + ){ | |
| 75 | + add_action('admin_notices', 'loginizer_plugin_update_notice'); | |
| 76 | + add_filter('softaculous_plugin_update_notice', 'loginizer_update_notice_filter'); | |
| 77 | + } | |
| 78 | + // === Plugin Update Notice === // | |
| 79 | +} | |
| 80 | + | |
| 14 | 81 | function loginizer_admin_actions(){ |
| 15 | 82 | global $loginizer; |
| 16 | 83 | |
| 17 | 84 | if(defined('LOGINIZER_PREMIUM') && !defined('SITEPAD') && current_user_can('activate_plugins') && isset($_GET['page']) && strpos($_GET['page'], 'loginizer') !== FALSE){ |
| @@ -392,9 +459,9 @@ | ||
| 392 | 459 | } |
| 393 | 460 | </script> |
| 394 | 461 | |
| 395 | 462 | <hr /> |
| 396 | - <a href="http://loginizer.com" target="_blank">Loginizer</a> '.__('v'.LOGINIZER_VERSION.'. You can report any bugs ','loginizer').'<a href="http://wordpress.org/support/plugin/loginizer" target="_blank">'.__('here','loginizer').'</a>.'; | |
| 463 | + <a href="http://loginizer.com" target="_blank">Loginizer</a> v'.LOGINIZER_VERSION.'. '.__('You can report any bugs ','loginizer').'<a href="http://wordpress.org/support/plugin/loginizer" target="_blank">'.__('here','loginizer').'</a>.'; | |
| 397 | 464 | |
| 398 | 465 | } |
| 399 | 466 | |
| 400 | 467 | echo ' |
| @@ -481,11 +548,19 @@ | ||
| 481 | 548 | // Rename Login |
| 482 | 549 | add_submenu_page('loginizer', __('Security Settings', 'loginizer'), __('Rename Login', 'loginizer'), 'activate_plugins', 'loginizer', 'loginizer_security_settings'); |
| 483 | 550 | |
| 484 | 551 | } |
| 485 | - | |
| 552 | + | |
| 486 | 553 | // Brute Force |
| 487 | 554 | add_submenu_page('loginizer', __('Brute Force Settings', 'loginizer'), __('Brute Force', 'loginizer'), 'activate_plugins', 'loginizer_brute_force', 'loginizer_brute_force_settings'); |
| 555 | + | |
| 556 | + if(defined('LOGINIZER_PREMIUM')){ | |
| 557 | + // WAF Security Firewall | |
| 558 | + $expiry_date = strtotime('2026-03-01'); | |
| 559 | + $tag_new = time() < $expiry_date ? '<span style="display: inline-block; margin-left: 10px; padding: 0px 5px; color: #fff; background-color: #d63638; border-radius: 2px;">'.__('New', 'loginizer').'</span>' : ''; | |
| 560 | + | |
| 561 | + add_submenu_page('loginizer', __('Country Block', 'loginizer'), __('Country Block', 'loginizer').' '.$tag_new, 'activate_plugins', 'loginizer_firewall', 'loginizer_firewall_settings'); | |
| 562 | + } | |
| 488 | 563 | |
| 489 | 564 | // PasswordLess |
| 490 | 565 | add_submenu_page('loginizer', __($loginizer['prefix'].'PasswordLess Settings', 'loginizer'), __('PasswordLess', 'loginizer'), 'activate_plugins', 'loginizer_passwordless', 'loginizer_passwordless_settings'); |
| 491 | 566 | |
| @@ -497,21 +572,21 @@ | ||
| 497 | 572 | |
| 498 | 573 | } |
| 499 | 574 | |
| 500 | 575 | // reCaptcha |
| 501 | - add_submenu_page('loginizer', __($loginizer['prefix'].'reCAPTCHA Settings', 'loginizer'), __('reCAPTCHA', 'loginizer'), 'activate_plugins', 'loginizer_recaptcha', 'loginizer_recaptcha_settings'); | |
| 576 | + add_submenu_page('loginizer', $loginizer['prefix'].__('reCAPTCHA Settings', 'loginizer'), __('reCAPTCHA', 'loginizer'), 'activate_plugins', 'loginizer_recaptcha', 'loginizer_recaptcha_settings'); | |
| 502 | 577 | |
| 503 | 578 | // Temporary Login |
| 504 | - add_submenu_page('loginizer', __($loginizer['prefix'].'SSO', 'loginizer'), __('Single Sign On', 'loginizer'). ((time() < strtotime('30 November 2023')) ? ' <span style="color:yellow;">Update</span>' : ''), 'activate_plugins', 'loginizer_sso', 'loginizer_sso_settings'); | |
| 579 | + add_submenu_page('loginizer', $loginizer['prefix'].__('SSO', 'loginizer'), __('Single Sign On', 'loginizer'). ((time() < strtotime('30 November 2023')) ? ' <span style="color:yellow;">Update</span>' : ''), 'activate_plugins', 'loginizer_sso', 'loginizer_sso_settings'); | |
| 505 | 580 | |
| 506 | 581 | // Social Login |
| 507 | - $hook_name = add_submenu_page('loginizer', __($loginizer['prefix'].'social_login', 'loginizer'), __('Social Login', 'loginizer') . ((time() < strtotime('30 July 2024')) ? ' <span style="color:red;">New</span>' : ''), 'activate_plugins', 'loginizer_social_login', 'loginizer_social_login_settings'); | |
| 582 | + $hook_name = add_submenu_page('loginizer', $loginizer['prefix']. __('Social Login', 'loginizer'), __('Social Login', 'loginizer') . (defined('LOGINIZER_PREMIUM') && (time() < strtotime('30 June 2025')) ? ' <span style="color:yellow;font-size:12px;">Updated</span>' : ''), 'activate_plugins', 'loginizer_social_login', 'loginizer_social_login_settings'); | |
| 508 | 583 | |
| 509 | 584 | // Security Settings |
| 510 | 585 | if(!defined('SITEPAD')){ |
| 511 | 586 | |
| 512 | 587 | // Security Settings |
| 513 | - add_submenu_page('loginizer', __($loginizer['prefix'].'Security Settings', 'loginizer'), __('Security Settings', 'loginizer'), 'activate_plugins', 'loginizer_security', 'loginizer_security_settings'); | |
| 588 | + add_submenu_page('loginizer', $loginizer['prefix'].__('Security Settings', 'loginizer'), __('Security Settings', 'loginizer'), 'activate_plugins', 'loginizer_security', 'loginizer_security_settings'); | |
| 514 | 589 | |
| 515 | 590 | // File Checksums |
| 516 | 591 | add_submenu_page('loginizer', __('Loginizer File Checksums', 'loginizer'), __('File Checksums', 'loginizer'), 'activate_plugins', 'loginizer_checksums', 'loginizer_checksums_settings'); |
| 517 | 592 | |
| @@ -681,9 +756,8 @@ | ||
| 681 | 756 | } |
| 682 | 757 | |
| 683 | 758 | function loginizer_dashboard(){ |
| 684 | 759 | include_once LOGINIZER_DIR . '/main/settings/dashboard.php'; |
| 685 | - | |
| 686 | 760 | loginizer_page_dashboard(); |
| 687 | 761 | } |
| 688 | 762 | |
| 689 | 763 | function loginizer_sso_settings(){ |
| @@ -697,8 +771,13 @@ | ||
| 697 | 771 | |
| 698 | 772 | loginizer_social_login(); |
| 699 | 773 | } |
| 700 | 774 | |
| 775 | +function loginizer_firewall_settings(){ | |
| 776 | + include_once LOGINIZER_PRO_DIR . 'main/settings/waf.php'; | |
| 777 | + loginizer_pro_firewall(); | |
| 778 | +} | |
| 779 | + | |
| 701 | 780 | // Hides the interim login poup after successful login. |
| 702 | 781 | function loginizer_social_interim_js(){ |
| 703 | 782 | |
| 704 | 783 | if(isset($_GET['interim_login']) && $_GET['interim_login'] === 'lz' && is_user_logged_in()){ |
| @@ -716,10 +795,11 @@ | ||
| 716 | 795 | // We want to show this error to user which has sufficient privilage |
| 717 | 796 | if(!current_user_can('activate_plugins')){ |
| 718 | 797 | return; |
| 719 | 798 | } |
| 720 | - | |
| 721 | - if(get_option('loginizer_social_login_url', '') === wp_login_url()){ | |
| 799 | + | |
| 800 | + $set_login_url = get_option('loginizer_social_login_url', ''); | |
| 801 | + if(empty($set_login_url) || $set_login_url === wp_login_url()){ | |
| 722 | 802 | return; |
| 723 | 803 | } |
| 724 | 804 | |
| 725 | 805 | $provider_settings = get_option('loginizer_provider_settings', []); |
| @@ -730,14 +810,23 @@ | ||
| 730 | 810 | return; |
| 731 | 811 | } |
| 732 | 812 | |
| 733 | 813 | $has_enabled = false; |
| 814 | + $has_non_login_auth = false; | |
| 734 | 815 | foreach($provider_settings as $provider){ |
| 735 | - if($provider['enabled']){ | |
| 816 | + if(empty($provider['loginizer_social_key']) && !empty($provider['enabled'])){ | |
| 817 | + $has_non_login_auth = true; | |
| 818 | + } | |
| 819 | + | |
| 820 | + if(!empty($provider['enabled'])){ | |
| 736 | 821 | $has_enabled = true; |
| 737 | - break; | |
| 738 | 822 | } |
| 739 | 823 | } |
| 824 | + | |
| 825 | + // We will only show this error if the user is using key based config | |
| 826 | + if(empty($has_non_login_auth)){ | |
| 827 | + return; | |
| 828 | + } | |
| 740 | 829 | |
| 741 | 830 | // If we have no Provider enabled then just show the warning on the social login page. |
| 742 | 831 | if(empty($has_enabled) && (empty($_GET['page']) || $_GET['page'] !== 'loginizer_social_login')){ |
| 743 | 832 | return; |
| @@ -743,9 +832,9 @@ | ||
| 743 | 832 | return; |
| 744 | 833 | } |
| 745 | 834 | |
| 746 | 835 | echo '<div class="notice notice-error"> |
| 747 | - <h4>'.esc_html__('Your changed login slug!', 'loginizer').'</h4> | |
| 836 | + <h4>'.esc_html__('You changed login slug!', 'loginizer').'</h4> | |
| 748 | 837 | <p>'.esc_html__('You changed the login slug and have some social login apps enabled. These social login apps use the login URL as the redirect URI. This means that since the login URL has changed, the social login will now break.', 'loginizer').'</p> |
| 749 | 838 | |
| 750 | 839 | <h4>'.esc_html__('How to fix:', 'loginizer').'</h4> |
| 751 | 840 | <p>'.esc_html__('When you created secret keys for the social apps, you also provided a Redirect URI. To fix this issue, you need to update that Redirect URI.', 'loginizer').'<br/> |
| @@ -871,5 +960,53 @@ | ||
| 871 | 960 | var admin_url = "'.admin_url().'"+"admin-ajax.php"; |
| 872 | 961 | jQuery.post(admin_url, data, function(response){ |
| 873 | 962 | }); |
| 874 | 963 | });'); |
| 875 | -} | |
| 964 | +} | |
| 965 | + | |
| 966 | +function loginizer_update_notice_filter($plugins = []){ | |
| 967 | + $plugins['loginizer/loginizer.php'] = 'Loginizer'; | |
| 968 | + | |
| 969 | + return $plugins; | |
| 970 | +} | |
| 971 | + | |
| 972 | +function loginizer_plugin_update_notice(){ | |
| 973 | + if(defined('SOFTACULOUS_PLUGIN_UPDATE_NOTICE')){ | |
| 974 | + return; | |
| 975 | + } | |
| 976 | + | |
| 977 | + $to_update_plugins = apply_filters('softaculous_plugin_update_notice', []); | |
| 978 | + | |
| 979 | + if(empty($to_update_plugins)){ | |
| 980 | + return; | |
| 981 | + } | |
| 982 | + | |
| 983 | + /* translators: %1$s is replaced with a "string" of name of plugins, and %2$s is replaced with "string" which can be "is" or "are" based on the count of the plugin */ | |
| 984 | + $msg = sprintf(__('New versions of %1$s %2$s available. Updating ensures better performance, security, and access to the latest features.', 'loginizer'), '<b>'.esc_html(implode(', ', $to_update_plugins)).'</b>', (count($to_update_plugins) > 1 ? 'are' : 'is')) . ' <a class="button button-primary" href='.esc_url(admin_url('plugins.php?plugin_status=upgrade')).'>Update Now</a>'; | |
| 985 | + | |
| 986 | + define('SOFTACULOUS_PLUGIN_UPDATE_NOTICE', true); // To make sure other plugins don't return a Notice | |
| 987 | + echo '<div class="notice notice-info is-dismissible" id="loginizer-plugin-update-notice"> | |
| 988 | + <p>'.$msg. '</p> | |
| 989 | + </div>'; | |
| 990 | + | |
| 991 | + wp_register_script('loginizer-update-notice', '', ['jquery'], '', true); | |
| 992 | + wp_enqueue_script('loginizer-update-notice'); | |
| 993 | + wp_add_inline_script('loginizer-update-notice', 'jQuery("#loginizer-plugin-update-notice").on("click", function(e){ | |
| 994 | + let target = jQuery(e.target); | |
| 995 | + | |
| 996 | + if(!target.hasClass("notice-dismiss")){ | |
| 997 | + return; | |
| 998 | + } | |
| 999 | + | |
| 1000 | + var data; | |
| 1001 | + | |
| 1002 | + // Hide it | |
| 1003 | + jQuery("#loginizer-plugin-update-notice").hide(); | |
| 1004 | + | |
| 1005 | + // Save this preference | |
| 1006 | + jQuery.post("'.admin_url('admin-ajax.php?action=loginizer_close_update_notice').'&security='.wp_create_nonce('loginizer_promo_nonce').'", data, function(response) { | |
| 1007 | + //alert(response); | |
| 1008 | + }); | |
| 1009 | + });'); | |
| 1010 | +} | |
| 1011 | + | |
| 1012 | +loginizer_admin_hooks(); | |