| @@ -4,60 +4,10 @@ | ||
| 4 | 4 | die('HACKING ATTEMPT!'); |
| 5 | 5 | } |
| 6 | 6 | |
| 7 | 7 | include_once(LOGINIZER_DIR.'/lib/IPv6/IPv6.php'); |
| 8 | +include_once(LOGINIZER_DIR .'/common.php'); | |
| 8 | 9 | |
| 9 | -// Get the client IP | |
| 10 | -function _lz_getip(){ | |
| 11 | - if(isset($_SERVER["REMOTE_ADDR"])){ | |
| 12 | - return $_SERVER["REMOTE_ADDR"]; | |
| 13 | - }elseif(isset($_SERVER["HTTP_X_FORWARDED_FOR"])){ | |
| 14 | - return $_SERVER["HTTP_X_FORWARDED_FOR"]; | |
| 15 | - }elseif(isset($_SERVER["HTTP_CLIENT_IP"])){ | |
| 16 | - return $_SERVER["HTTP_CLIENT_IP"]; | |
| 17 | - } | |
| 18 | -} | |
| 19 | - | |
| 20 | -// Get the client IP | |
| 21 | -function lz_getip(){ | |
| 22 | - | |
| 23 | - global $loginizer; | |
| 24 | - | |
| 25 | - // Just so that we have something | |
| 26 | - $ip = _lz_getip(); | |
| 27 | - | |
| 28 | - $loginizer['ip_method'] = (int) @$loginizer['ip_method']; | |
| 29 | - | |
| 30 | - if(isset($_SERVER["REMOTE_ADDR"])){ | |
| 31 | - $ip = $_SERVER["REMOTE_ADDR"]; | |
| 32 | - } | |
| 33 | - | |
| 34 | - if(isset($_SERVER["HTTP_X_FORWARDED_FOR"]) && @$loginizer['ip_method'] == 1){ | |
| 35 | - if(strpos($_SERVER["HTTP_X_FORWARDED_FOR"], ',')){ | |
| 36 | - $temp_ip = explode(',', $_SERVER["HTTP_X_FORWARDED_FOR"]); | |
| 37 | - $ip = trim($temp_ip[0]); | |
| 38 | - }else{ | |
| 39 | - $ip = $_SERVER["HTTP_X_FORWARDED_FOR"]; | |
| 40 | - } | |
| 41 | - } | |
| 42 | - | |
| 43 | - if(isset($_SERVER["HTTP_CLIENT_IP"]) && @$loginizer['ip_method'] == 2){ | |
| 44 | - $ip = $_SERVER["HTTP_CLIENT_IP"]; | |
| 45 | - } | |
| 46 | - | |
| 47 | - if(@$loginizer['ip_method'] == 3 && isset($_SERVER[@$loginizer['custom_ip_method']])){ | |
| 48 | - $ip = $_SERVER[@$loginizer['custom_ip_method']]; | |
| 49 | - } | |
| 50 | - | |
| 51 | - // Hacking fix for X-Forwarded-For | |
| 52 | - if(!lz_valid_ip($ip)){ | |
| 53 | - return ''; | |
| 54 | - } | |
| 55 | - | |
| 56 | - return $ip; | |
| 57 | - | |
| 58 | -} | |
| 59 | - | |
| 60 | 10 | // Execute a select query and return an array |
| 61 | 11 | function lz_selectquery($query, $array = 0){ |
| 62 | 12 | global $wpdb; |
| 63 | 13 | |
| @@ -69,58 +19,8 @@ | ||
| 69 | 19 | return $result; |
| 70 | 20 | } |
| 71 | 21 | } |
| 72 | 22 | |
| 73 | -// Check if an IP is valid | |
| 74 | -function lz_valid_ip($ip){ | |
| 75 | - | |
| 76 | - if(empty($ip)){ | |
| 77 | - return false; | |
| 78 | - } | |
| 79 | - | |
| 80 | - // IPv6 | |
| 81 | - if(lz_valid_ipv6($ip)){ | |
| 82 | - return true; | |
| 83 | - } | |
| 84 | - | |
| 85 | - // IPv4 | |
| 86 | - if(!ip2long($ip) || !lz_valid_ipv4($ip)){ | |
| 87 | - return false; | |
| 88 | - } | |
| 89 | - | |
| 90 | - return true; | |
| 91 | -} | |
| 92 | - | |
| 93 | -function lz_valid_ipv4($ip){ | |
| 94 | - if(!preg_match('/^(\d){1,3}\.(\d){1,3}\.(\d){1,3}\.(\d){1,3}$/is', $ip) || substr_count($ip, '.') != 3){ | |
| 95 | - return false; | |
| 96 | - } | |
| 97 | - | |
| 98 | - $r = explode('.', $ip); | |
| 99 | - | |
| 100 | - foreach($r as $v){ | |
| 101 | - $v = (int) $v; | |
| 102 | - if($v > 255 || $v < 0){ | |
| 103 | - return false; | |
| 104 | - } | |
| 105 | - } | |
| 106 | - | |
| 107 | - return true; | |
| 108 | - | |
| 109 | -} | |
| 110 | - | |
| 111 | -function lz_valid_ipv6($ip){ | |
| 112 | - | |
| 113 | - $pattern = '/^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/'; | |
| 114 | - | |
| 115 | - if(!preg_match($pattern, $ip)){ | |
| 116 | - return false; | |
| 117 | - } | |
| 118 | - | |
| 119 | - return true; | |
| 120 | - | |
| 121 | -} | |
| 122 | - | |
| 123 | 23 | // Check if a field is posted via POST else return default value |
| 124 | 24 | function lz_optpost($name, $default = ''){ |
| 125 | 25 | |
| 126 | 26 | if(!empty($_POST[$name])){ |
| @@ -244,9 +144,9 @@ | ||
| 244 | 144 | if(empty($error)){ |
| 245 | 145 | return true; |
| 246 | 146 | } |
| 247 | 147 | |
| 248 | - $error_string = '<b>Please fix the below error(s) :</b> <br />'; | |
| 148 | + $error_string = '<b>'.__('Please fix the below error(s)', 'loginizer').' :</b> <br />'; | |
| 249 | 149 | |
| 250 | 150 | foreach($error as $ek => $ev){ |
| 251 | 151 | $error_string .= '* '.$ev.'<br />'; |
| 252 | 152 | } |
| @@ -251,9 +151,9 @@ | ||
| 251 | 151 | $error_string .= '* '.$ev.'<br />'; |
| 252 | 152 | } |
| 253 | 153 | |
| 254 | 154 | echo '<div id="message" class="error"><p>' |
| 255 | - . __($error_string, 'loginizer') | |
| 155 | + . $error_string | |
| 256 | 156 | . '</p></div>'; |
| 257 | 157 | } |
| 258 | 158 | |
| 259 | 159 | // Report a notice |
| @@ -271,9 +171,9 @@ | ||
| 271 | 171 | }else{ |
| 272 | 172 | $notice_class = 'updated'; |
| 273 | 173 | } |
| 274 | 174 | |
| 275 | - $notice_string = '<b>Please check the below notice(s) :</b> <br />'; | |
| 175 | + $notice_string = '<b>'.__('Please check the below notice(s)', 'loginizer').' :</b> <br />'; | |
| 276 | 176 | |
| 277 | 177 | foreach($notice as $ek => $ev){ |
| 278 | 178 | $notice_string .= '* '.$ev.'<br />'; |
| 279 | 179 | } |
| @@ -278,9 +178,9 @@ | ||
| 278 | 178 | $notice_string .= '* '.$ev.'<br />'; |
| 279 | 179 | } |
| 280 | 180 | |
| 281 | 181 | echo '<div id="message" class="'.$notice_class.'"><p>' |
| 282 | - . __($notice_string, 'loginizer') | |
| 182 | + . $notice_string | |
| 283 | 183 | . '</p></div>'; |
| 284 | 184 | } |
| 285 | 185 | |
| 286 | 186 | // Convert an objext to array |
| @@ -491,9 +391,9 @@ | ||
| 491 | 391 | } |
| 492 | 392 | |
| 493 | 393 | // ------ HTML STARTS HERE -------- // |
| 494 | 394 | |
| 495 | - $style = 'full'; | |
| 395 | + $style = 'icon'; | |
| 496 | 396 | $shape = 'square'; |
| 497 | 397 | $position = 'below'; |
| 498 | 398 | if(!empty($loginizer['social_settings'])){ |
| 499 | 399 | $social_settings = $loginizer['social_settings']; |
| @@ -498,10 +398,10 @@ | ||
| 498 | 398 | if(!empty($loginizer['social_settings'])){ |
| 499 | 399 | $social_settings = $loginizer['social_settings']; |
| 500 | 400 | |
| 501 | 401 | // Setting Button Style |
| 502 | - if(!empty($social_settings[$page_type]['button_style']) && $social_settings[$page_type]['button_style'] === 'icon'){ | |
| 503 | - $style = 'icon'; | |
| 402 | + if(!empty($social_settings[$page_type]['button_style']) && $social_settings[$page_type]['button_style'] === 'full'){ | |
| 403 | + $style = 'full'; | |
| 504 | 404 | } |
| 505 | 405 | |
| 506 | 406 | // Setting Button Shape |
| 507 | 407 | if(!empty($social_settings[$page_type]['button_shape']) && $social_settings[$page_type]['button_shape'] !== 'square'){ |
| @@ -513,8 +413,11 @@ | ||
| 513 | 413 | $position = $social_settings[$page_type]['button_position']; |
| 514 | 414 | } |
| 515 | 415 | } |
| 516 | 416 | |
| 417 | + $container_alignment = isset($loginizer['social_settings'][$page_type]['alignment']) ? $loginizer['social_settings'][$page_type]['alignment'] : 'auto'; | |
| 418 | + $button_alignment = isset($loginizer['social_settings'][$page_type]['button_alignment']) ? $loginizer['social_settings'][$page_type]['button_alignment'] : 'center'; | |
| 419 | + | |
| 517 | 420 | // Shortcode style |
| 518 | 421 | if(!empty($short_atts['type'])){ |
| 519 | 422 | $style = esc_html($short_atts['type']); |
| 520 | 423 | } |
| @@ -522,8 +425,18 @@ | ||
| 522 | 425 | // Shortcode Shape square or circle |
| 523 | 426 | if(!empty($short_atts['shape'])){ |
| 524 | 427 | $shape = esc_html($short_atts['shape']); |
| 525 | 428 | } |
| 429 | + | |
| 430 | + // Shortcode for Container alignment | |
| 431 | + if(!empty($short_atts['container_alignment'])){ | |
| 432 | + $container_alignment = esc_html($short_atts['container_alignment']); | |
| 433 | + } | |
| 434 | + | |
| 435 | + // Shortcode for Button alignment | |
| 436 | + if(!empty($short_atts['button_alignment'])){ | |
| 437 | + $button_alignment = esc_html($short_atts['button_alignment']); | |
| 438 | + } | |
| 526 | 439 | |
| 527 | 440 | // Setting divider position |
| 528 | 441 | $divider_pos = ''; |
| 529 | 442 | if(!empty($short_atts['divider']) && $short_atts['divider'] == 'above'){ |
| @@ -542,9 +455,9 @@ | ||
| 542 | 455 | 'above' => 'bottom', |
| 543 | 456 | 'below' => 'top' |
| 544 | 457 | ]; |
| 545 | 458 | |
| 546 | - $social_buttons = '<div id="lz-social-login-btns" class="'.($style == 'icon' ? 'lz-social-login-btns-icon' : 'lz-social-login-btns-full').' '.($position == 'above' || $position == 'below' ? 'lz-social-'.$padding[$position].'-padding' : '').'">'; | |
| 459 | + $social_buttons = '<div id="lz-social-login-btns" class="'.($style == 'icon' ? 'lz-social-login-btns-icon' : 'lz-social-login-btns-full').' '.($position == 'above' || $position == 'below' ? 'lz-social-'.$padding[$position].'-padding' : '').'" style="justify-self:'.esc_attr($container_alignment).'; justify-content:'.esc_attr($button_alignment).';">'; | |
| 547 | 460 | |
| 548 | 461 | // HTML of the divider in case the buttons are below the login fields |
| 549 | 462 | if(!empty($divider_pos) && $divider_pos == 'above'){ |
| 550 | 463 | $social_buttons .= '<div class="loginizer-social-divider">OR</div><br>'; |
| @@ -579,9 +492,9 @@ | ||
| 579 | 492 | $img_url = LOGINIZER_URL .'/assets/images/social/'.$provider.'-'.$btn_style.'.png'; |
| 580 | 493 | } |
| 581 | 494 | } |
| 582 | 495 | |
| 583 | - $social_buttons .= '<div class="loginizer-social-button '.($style == 'icon' ? 'lz-social-button-icon' : 'lz-social-button-btn').' '.($shape == 'circle' ? 'lz-social-button-icon-circle' : 'lz-social-button-icon-square').'" onclick="loginizer_auth_popup(\''.esc_js($provider).'\')" style="'.((!empty($loginizer_login_providers[$provider]['styles']) && !empty($loginizer_login_providers[$provider]['styles'][$btn_style])) ? esc_attr($loginizer_login_providers[$provider]['styles'][$btn_style]) : esc_attr('background-color:'. esc_attr($color)). '; color:#FFF;') .'"> | |
| 496 | + $social_buttons .= '<div class="loginizer-social-button '.($style == 'icon' ? 'lz-social-button-icon' : 'lz-social-button-btn').' '.($shape == 'circle' ? 'lz-social-button-icon-circle' : 'lz-social-button-icon-square').'" onclick="loginizer_auth_popup(\''.esc_js($provider).'\', '.esc_js(!empty($settings['loginizer_social_key']) ? true : 0).')" style="'.((!empty($loginizer_login_providers[$provider]['styles']) && !empty($loginizer_login_providers[$provider]['styles'][$btn_style])) ? esc_attr($loginizer_login_providers[$provider]['styles'][$btn_style]) : esc_attr('background-color:'. esc_attr($color)). '; color:#FFF;') .'"> | |
| 584 | 497 | <div class="loginizer-social-btn-logo"> |
| 585 | 498 | <img src="'.esc_url($img_url).'" height="24" alt="'.esc_attr($name).' Icon"/> |
| 586 | 499 | </div>'; |
| 587 | 500 | |
| @@ -592,9 +505,9 @@ | ||
| 592 | 505 | } |
| 593 | 506 | |
| 594 | 507 | $social_buttons .= '</div>'; |
| 595 | 508 | } |
| 596 | - | |
| 509 | + | |
| 597 | 510 | if(empty($social_buttons)){ |
| 598 | 511 | $social_buttons .= esc_html__('No Auth Provider configured', 'loginizer'); |
| 599 | 512 | } |
| 600 | 513 | |
| @@ -641,14 +554,24 @@ | ||
| 641 | 554 | |
| 642 | 555 | wp_register_script('loginizer-social-js', '', ['jquery'], LOGINIZER_VERSION, ['strategy' => false, 'in_footer' => true]); |
| 643 | 556 | wp_enqueue_script('loginizer-social-js'); |
| 644 | 557 | wp_add_inline_script('loginizer-social-js', ' |
| 558 | + | |
| 559 | + | |
| 645 | 560 | |
| 646 | 561 | let lz_form = document.querySelectorAll("#loginform, #registerform, .woocommerce-form-login, .woocommerce-form-register, #front-login-form, #setupform"), |
| 647 | 562 | lz_social_btns = document.querySelectorAll("#lz-social-login-btns"), |
| 648 | 563 | lz_target_window = "'.esc_html($target_window).'", |
| 649 | 564 | lz_is_interim = "'.(!empty($_GET['interim-login']) ? '&interim-login=0' : '').'"; // as for interim it should only open a popup |
| 565 | + | |
| 566 | + if(lz_target_window == "same"){ | |
| 567 | + let loader = "<style>#loginizer-social-loader-wrap{display:none; align-items:center; justify-content:center; position:fixed; top:0; left:0; width:100%; height:100vh; background-color:rgba(0, 0, 0, 0.2);} .loginizer-social-loader{width:48px;height:48px;border:5px solid #fff;border-bottom-color:transparent;border-radius:50%;display:inline-block;box-sizing:border-box;animation:1s linear infinite rotation}@keyframes rotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}</style>"; | |
| 568 | + loader += "<div id=\"loginizer-social-loader-wrap\"><div class=\"loginizer-social-loader\"></div></div>"; | |
| 650 | 569 | |
| 570 | + jQuery("body").append(loader); | |
| 571 | + } | |
| 572 | + | |
| 573 | + | |
| 651 | 574 | lz_social_btns.forEach((btns) => { |
| 652 | 575 | btns.style.display="flex"; |
| 653 | 576 | }); |
| 654 | 577 | |
| @@ -660,11 +583,28 @@ | ||
| 660 | 583 | } |
| 661 | 584 | }); |
| 662 | 585 | } |
| 663 | 586 | |
| 664 | - function loginizer_auth_popup(provider) { | |
| 587 | + function loginizer_auth_popup(provider, isAPI) { | |
| 588 | + let target_url = "'.esc_url(wp_login_url()).'?social_security='.esc_html($social_nonce).'&lz_social_provider=" + provider+lz_is_interim; | |
| 589 | + | |
| 590 | + if(isAPI){ | |
| 591 | + target_url += "&lz_api=1"; | |
| 592 | + } | |
| 593 | + | |
| 594 | + let redirect_to = "'.(!empty($_GET['redirect_to']) ? wp_validate_redirect(esc_url($_GET['redirect_to'])) : '') .'"; | |
| 595 | + | |
| 596 | + if(redirect_to.length){ | |
| 597 | + target_url += "&ref="+redirect_to; | |
| 598 | + } else { | |
| 599 | + target_url += "&ref='.esc_url((is_ssl() ? 'https://' : 'http://').$_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']).'" | |
| 600 | + } | |
| 601 | + | |
| 665 | 602 | if(lz_target_window == "same"){ |
| 666 | - window.location.href = "'.esc_url(wp_login_url()).'?social_security='.esc_html($social_nonce).'&lz_social_provider="+ provider +"&ref='.esc_url($_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']).'"; | |
| 603 | + jQuery("#loginizer-social-loader-wrap").css("display", "flex"); | |
| 604 | + | |
| 605 | + window.location.href = target_url; | |
| 606 | + | |
| 667 | 607 | return; |
| 668 | 608 | } |
| 669 | 609 | |
| 670 | 610 | let screen_x = window.screenX !== undefined ? window.screenX : window.screenLeft, |
| @@ -686,9 +626,9 @@ | ||
| 686 | 626 | attributes.push("left=" + left); |
| 687 | 627 | attributes.push("top=" + right); |
| 688 | 628 | attributes.push("scrollbars=1"); |
| 689 | 629 | |
| 690 | - var auth_window = window.open("'.esc_url(wp_login_url()).'?social_security='.esc_html($social_nonce).'&lz_social_provider=" + provider+lz_is_interim+"&ref='.esc_url($_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']).'", "authWindow", attributes.join(",")); | |
| 630 | + var auth_window = window.open(target_url, "authWindow", attributes.join(",")); | |
| 691 | 631 | |
| 692 | 632 | if(window.focus){ |
| 693 | 633 | auth_window.focus(); |
| 694 | 634 | } |
| @@ -729,5 +669,5 @@ | ||
| 729 | 669 | |
| 730 | 670 | // Cleaning the error data |
| 731 | 671 | delete_site_transient($error_identifier); // Deleting the data |
| 732 | 672 | //setcookie('lz_social_error', '', time() - 300, COOKIEPATH, COOKIE_DOMAIN, is_ssl(), true); // have to delete |
| 733 | -} | |
| 673 | +} | |