| 1 |
(function($) { |
| 2 |
|
| 3 |
var wtotem_add_captcha_token = function() { |
| 4 |
if (typeof grecaptcha === 'object') { |
| 5 |
grecaptcha.ready(function () { |
| 6 |
grecaptcha.execute(wtotem_login_vars.recaptcha_site_key, {action: 'login'}).then(function (token) { |
| 7 |
var tokenField = $('#wtotem-recaptcha-token'); |
| 8 |
if (tokenField.length) { |
| 9 |
tokenField.val(token); |
| 10 |
} else { |
| 11 |
tokenField = $('<input type="hidden" name="wtotem-recaptcha-token" id="wtotem-recaptcha-token" />'); |
| 12 |
tokenField.val(token); |
| 13 |
$('#loginform').append(tokenField); |
| 14 |
} |
| 15 |
}); |
| 16 |
}); |
| 17 |
} else { |
| 18 |
var tokenField = $('#wtotem-recaptcha-token'); |
| 19 |
if (tokenField.length) { |
| 20 |
tokenField.val('grecaptcha-missing'); |
| 21 |
} else { |
| 22 |
tokenField = $('<input type="hidden" name="wtotem-recaptcha-token" id="wtotem-recaptcha-token" />'); |
| 23 |
tokenField.val('grecaptcha-missing'); |
| 24 |
$('#loginform').append(tokenField); |
| 25 |
} |
| 26 |
} |
| 27 |
} |
| 28 |
|
| 29 |
if (parseInt(wtotem_login_vars.recaptcha_is_enabled)) { |
| 30 |
wtotem_add_captcha_token(); |
| 31 |
} |
| 32 |
|
| 33 |
var wtotem_login_ajax = function() { |
| 34 |
|
| 35 |
var form = $("#loginform"); |
| 36 |
var data = form.serialize(); |
| 37 |
data += '&action=wtotem_ajax&ajax_action=authenticate'; |
| 38 |
|
| 39 |
$.ajax({ |
| 40 |
type: 'POST', |
| 41 |
url: wtotem_login_vars.ajaxurl, |
| 42 |
dataType: 'json', |
| 43 |
data: data, |
| 44 |
success: function(response) { |
| 45 |
form.data('wtotemLoggingIn', 0); |
| 46 |
if (response.hasOwnProperty('error')) { |
| 47 |
showLoginMessage(response.error, 'error'); |
| 48 |
$('#wtotem-token').val(''); |
| 49 |
|
| 50 |
if (parseInt(wtotem_login_vars.recaptcha_is_enabled)) { |
| 51 |
wtotem_add_captcha_token(); |
| 52 |
} |
| 53 |
} |
| 54 |
else if (response.hasOwnProperty('login')) { |
| 55 |
if (parseInt(wtotem_login_vars.recaptcha_is_enabled)) { |
| 56 |
wtotem_add_captcha_token(); |
| 57 |
} |
| 58 |
if (response.hasOwnProperty('2fa')) { |
| 59 |
|
| 60 |
if (!$('#wtotem-token').length) { |
| 61 |
|
| 62 |
form.css('position', 'relative').append(response.content); |
| 63 |
|
| 64 |
$('#wtotem-token-submit').on( 'click', function(e) { |
| 65 |
e.preventDefault(); |
| 66 |
e.stopPropagation(); |
| 67 |
|
| 68 |
form.data('wtotemLoggingIn', 1); |
| 69 |
$('#wp-submit').trigger('click'); |
| 70 |
}); |
| 71 |
|
| 72 |
$('#wtotem-token').focus(); |
| 73 |
} |
| 74 |
|
| 75 |
} else { |
| 76 |
form.data('wtotemLoggingIn', 1); |
| 77 |
$('#wp-submit').trigger('click'); |
| 78 |
} |
| 79 |
|
| 80 |
} |
| 81 |
} |
| 82 |
}); |
| 83 |
}; |
| 84 |
|
| 85 |
|
| 86 |
jQuery(document).ready(function ($) { |
| 87 |
$("#loginform").on('submit', function(e) { |
| 88 |
|
| 89 |
var wtotemloggingIn = !!parseInt($(this).data('wtotemLoggingIn')); |
| 90 |
$(this).data('wtotemLoggingIn', 0); |
| 91 |
|
| 92 |
if (wtotemloggingIn) { return; } |
| 93 |
|
| 94 |
if (parseInt(wtotem_login_vars.recaptcha_is_enabled)) { |
| 95 |
wtotem_add_captcha_token(); |
| 96 |
} |
| 97 |
|
| 98 |
if (parseInt(wtotem_login_vars.two_factor_is_enabled)){ |
| 99 |
e.preventDefault(); |
| 100 |
e.stopPropagation(); |
| 101 |
|
| 102 |
wtotem_login_ajax(); |
| 103 |
} |
| 104 |
|
| 105 |
}); |
| 106 |
}); |
| 107 |
|
| 108 |
function showLoginMessage(messageHtml, type) { |
| 109 |
var heading = $('#login > h1'); |
| 110 |
if (heading.length > 0) { |
| 111 |
var dom = (type === 'error' ? $('<div id="login_error">') : $('<p class="message">')); |
| 112 |
dom.addClass('wtotem-login-message'); |
| 113 |
dom.html(messageHtml); |
| 114 |
heading.after(dom); |
| 115 |
dom.get(0).scrollIntoView(); |
| 116 |
return; |
| 117 |
} |
| 118 |
|
| 119 |
var messageModal = $('<div>') |
| 120 |
.attr('id', 'wtotem-login-modal') |
| 121 |
.css({ |
| 122 |
position: 'fixed', |
| 123 |
top: 0, |
| 124 |
right: 0, |
| 125 |
bottom: 0, |
| 126 |
left: 0, |
| 127 |
'background-color': 'rgba(0,0,0,0.5)', |
| 128 |
'z-index': 99999, |
| 129 |
display: 'flex', |
| 130 |
'align-items': 'center', |
| 131 |
'justify-content': 'center', |
| 132 |
padding: '16px' |
| 133 |
}) |
| 134 |
.appendTo($('body')); |
| 135 |
messageModal.append( |
| 136 |
$('<div>') |
| 137 |
.css({ |
| 138 |
'background-color': '#FFF', |
| 139 |
'border-radius': '4px', |
| 140 |
padding: '16px', |
| 141 |
'text-align': 'center' |
| 142 |
}) |
| 143 |
.append( |
| 144 |
$('<p>').html(messageHtml) |
| 145 |
) |
| 146 |
.append( |
| 147 |
$('<button>').text('Dismiss') |
| 148 |
.on('click', function() { |
| 149 |
messageModal.remove(); |
| 150 |
}) |
| 151 |
) |
| 152 |
); |
| 153 |
} |
| 154 |
|
| 155 |
})(jQuery); |