File: /var/www/html/breadsecret.com/wp-content/plugins/login-with-ajax/2FA/2FA.min.js
jQuery(document).ready(function($){let modal=$("#lwa-2FA-modal");let container=modal.find(".lwa-2FA");let timeouts={};const LWA_TwoFA={isWPLogin:false,current:{method:{},methods:[],nonce:"",user:"",id:"",verifier:null},loginResult:function(event){let response=event.detail.response;let form=event.detail.form;let statusElement=event.detail.statusElement;LWA_TwoFA.isWPLogin=form.matches("body.login.wp-core-ui #loginform");if(response.result&&"TwoFA"in response&&form.classList.contains("lwa-form")){LWA_TwoFA.current=response.TwoFA;modal.hide();container.find(".lwa-status").remove();container.find('.lwa-2FA-method input[name="2FA_code"]').val("");if(!form.getAttribute("id")){form.setAttribute("id","lwa-login-form-"+Math.floor(Math.random()*1e4))}container.attr("data-bound-form","#"+form.getAttribute("id"));container.find(".lwa-2FA-method, form.lwa-2FA-method-selection").attr("data-bound-form","#"+form.getAttribute("id"));container.find(".lwa-2FA-data-id").val(response.TwoFA.id);if(response.TwoFA.methods){let method_types=Object.keys(response.TwoFA.methods);if(method_types.length>1){method_types.forEach(function(type){let method=response.TwoFA.methods[type];container.find("form.lwa-2FA-method-selection .lwa-2FA-method-"+type).addClass("available").find(".lwa-2FA-method-desc").html(method.text.select)})}else if(method_types.length===1){container.addClass("single-method")}if("method"in response.TwoFA&&response.TwoFA.method){LWA_TwoFA.current.method=response.TwoFA.method;LWA_TwoFA.selectMethod(response.TwoFA.method)}else{container.find(".lwa-2FA-select-method").click()}if("timeout_time"in response.TwoFA&&response.TwoFA.timeout_time>0){if(response.TwoFA.method in timeouts){clearInterval(timeouts[response.TwoFA.method])}timeouts[response.TwoFA.method]=LWA_TwoFA.setTimeout(container,response.TwoFA.timeout_time,response.TwoFA.timeout_error)}LoginWithAJAX.handleStatus(response,statusElement);modal.addClass("active").find(".lwa-modal-popup").addClass("active")}else{container.addClass("hidden");container.siblings(".setup-loader").removeClass("hidden");container.load(response.TwoFA.setup_url,function(){container.removeClass("hidden");container.siblings(".setup-loader").addClass("hidden");let setup=container.find(".lwa-2FA-setup").attr("data-bound-form","#"+form.getAttribute("id"));let loginForm=LWA_TwoFA.getLoginForm(setup);let formData=setup.find(".lwa-2FA-formdata").empty().hide();loginForm.find("*[name]").filter(':not([name="login-with-ajax"])').filter(':not(input[type="submit"])').clone().appendTo(formData);lwa_init_2FA_setup(container);LoginWithAJAX.handleStatus(response,statusElement);modal.addClass("active").find(".lwa-modal-popup").addClass("active")})}}},selectMethod:async function(method_type){let method=this.current.methods[method_type];this.current.method=method_type;let methodSelectForm=container.find("form.lwa-2FA-method-selection");methodSelectForm.find(".lwa-status").remove();methodSelectForm.find('input[name="2FA"]').prop("checked",false);container.find(".lwa-2FA-method-forms .lwa-2FA-method").removeClass("active");let methodForm=container.find(".lwa-2FA-method-forms .lwa-2FA-method.lwa-2FA-method-"+method_type).addClass("active");methodForm.find(".lwa-status").remove();if(method.text.form){methodForm.find(".lwa-2FA-message").html(method.text.form)}methodSelectForm.hide();container.find(".lwa-2FA-method-forms").show();container.find(".lwa-2FA-select-method").show();methodSelectForm.find('input[name="2FA"]').prop("checked",false);let loginForm=this.getLoginForm(methodForm);let formData=methodForm.find(".lwa-2FA-formdata").empty().hide();loginForm.find("*[name]").filter(':not([name="login-with-ajax"])').filter(':not(input[type="submit"])').clone().appendTo(formData);if(!this.isMethodValid(method)){method=await this.requestMethodForm(methodForm);if(method.result){methodSelectForm.find(".lwa-status").remove()}else{var statusElement=LoginWithAJAX.addStatusElement(methodForm);if("restart"in method&&method.restart){LWA_TwoFA.handleVerifyResponse(response,methodForm[0])}return LoginWithAJAX.handleStatus(method,statusElement)}}else if("resend"in method&&method.resend){let countdown=methodForm.find(".lwa-2FA-resend-timer");LWA_TwoFA.setCountdown(countdown,method.resend)}if(method.timeout){let countdown=methodForm.find(".method-countdown");if(countdown.length===0){countdown=null}LWA_TwoFA.setTimeout(methodForm,method.timeout,method.text.timeout,countdown)}if(method.verification==="authorize"){LWA_TwoFA.verifier=function(){LoginWithAJAX.submit(methodForm,{socket:true},null,{spinner:false}).then(function(response){if(methodForm.attr("data-method")!==LWA_TwoFA.current.method)return;if(!response.result){if("skip"in response&&response.skip&&typeof LWA_TwoFA.verifier==="function"){setTimeout(LWA_TwoFA.verifier,2500)}}LWA_TwoFA.handleVerifyResponse(response,methodForm[0])})};LWA_TwoFA.verifier()}jQuery(document).triggerHandler("lwa_2FA_method_"+method_type,[this.current,methodForm])},isMethodValid:function(method){let result=true;if(!method)return false;if(!("result"in method&&method.result)){result=false}else if(!("requested"in method&&method.requested)){result=false}else if("verification"in method&&method.verification==="direct"){result=true}else if("resend"in method&&method.resend&&method.resend<Date.now()/1e3){result=false}return result},requestMethodForm:async function(methodForm){form=$(methodForm);let method_type=form.attr("data-method");form.find("button, .button").prop("disabled",true).addClass("disabled inactive");let method=await this.request(method_type);if(method.result){this.current.methods[method_type]=method}form.find("button, .button").prop("disabled",false).removeClass("disabled inactive");if(method.resend){let countdown=form.find(".lwa-2FA-resend-timer");if(countdown.length>0){LWA_TwoFA.setCountdown(countdown,method.resend)}}return method},request:async function(method){let data={lwa:1,"login-with-ajax":"2FA","2FA_request":"request","2FA_id":this.current.id,"2FA":method,nonce:this.current.nonce,log:this.current.user};return fetch(LWA.ajaxurl,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"},body:new URLSearchParams(data).toString()}).then(function(response){if(response.ok){return response.json()}return Promise.reject(response)}).catch(function(err){console.log("Error with AJAX Request - %o",err);return{result:false,message:"There was an error, see message console for more info."}})},getLoginForm:function(form){let $form=jQuery(form);return jQuery($form.attr("data-bound-form"))},setCountdown:function(countdown,timeout){countdown.closest(".lwa-2FA-resend").prop("style","background:#fefefe !important; border-color: #ccc !important; text-shadow:none !important; color:#aaa !important;").addClass("inactive");clearInterval(countdown.data("countdown"));let timer=timeout-Date.now()/1e3;let interval=function(){timer-=1;let minutes=Math.floor(timer%(60*60)/60);let seconds=String(Math.floor(timer%60)).padStart(2,"0");if(minutes<0)minutes=0;if(seconds<0)seconds="00";countdown.html("("+minutes+": "+seconds+")");if(timer<0){clearInterval(x);countdown.empty();countdown.closest(".lwa-2FA-resend").prop("style","").removeClass("inactive")}};interval();let x=setInterval(interval,1e3);countdown.data("countdown",x)},setTimeout:function(form,timeout,error_txt,countdown=null){let timer=timeout-Date.now()/1e3;let timer_interval=countdown?1e3:timer*1e3;let interval=function(){timer-=timer_interval/1e3;let minutes=Math.floor(timer%(60*60)/60);let seconds=String(Math.floor(timer%60)).padStart(2,"0");if(minutes<0)minutes=0;if(seconds<0)seconds="00";if(countdown){countdown.html(minutes+":"+seconds)}if(timer<=0){clearInterval(x);if(form.hasClass("lwa-2FA-method")){if(form.hasClass("active")){form.find(".lwa-status").remove();form.prepend($('<span class="lwa-status lwa-status-invalid" role="alert">'+error_txt+"</span>"))}}else{form.prepend($('<span class="lwa-status lwa-status-invalid" role="alert">'+error_txt+"</span>"));LWA_TwoFA.handleVerifyResponse({result:false,restart:true},form[0])}}};if(countdown){interval()}let x=setInterval(interval,timer_interval);return x},handleVerifyResponse:function(response,methodForm){if(!response.result&&"restart"in response&&response.restart){let form=LWA_TwoFA.getLoginForm(methodForm)[0];let wrapper=form.closest(".lwa");let status=methodForm.querySelector(".lwa-status");wrapper.querySelectorAll(".lwa-status").forEach(el=>el.remove());form.querySelectorAll(".lwa-status").forEach(el=>el.remove());if(LWA_TwoFA.isWPLogin){status.classList.add("message","login","error");let newStatus=document.createElement("div");wrapper.prepend(newStatus);newStatus.outerHTML=status.outerHTML.replace("<span","<div").replace("</span","</div");status.remove()}else{form.prepend(status)}modal.removeClass("active").find(".lwa-modal-popup").removeClass("active")}}};var lwa_init_2FA_setup=function(container){let intro=container.find(".lwa-2FA-setup-intro");let success=container.find(".lwa-2FA-setup-success");let setup=container.find(".lwa-2FA-setup-form");container.on("change",".lwa-2FA-method-enable",function(e){e.preventDefault();let method=jQuery(this).closest(".lwa-2FA-method");let content=method.find(".lwa-2FA-method-content");if(this.checked){content.slideDown(400);method.addClass("enabled")}else{content.slideUp(400,function(){method.removeClass("enabled")})}});container.on("click",".lwa-2FA-method:not(.enabled)",function(e){if(e.target.matches("label, button, input")||e.target.parentElement.matches("label"))return true;e.preventDefault();e.stopPropagation();this.querySelector(".lwa-2FA-method-title label").click()});container.on("click",".lwa-2FA-method-setup-reset",function(e){e.preventDefault();let method=jQuery(this).closest(".lwa-2FA-method");let setup=method.find(".lwa-2FA-method-setup");let button=this;if(this.innerHTML===this.dataset.modifyTxt){method.attr("data-previous-status",method.attr("data-status"));method.removeAttr("data-status");method.find(".lwa-2FA-method-setup-reset").html(button.dataset.cancelTxt)}else{method.attr("data-status",method.attr("data-previous-status"));let status=method.find(".lwa-2FA-method-status");status.find(".lwa-2FA-method-setup-reset").html(button.dataset.modifyTxt)}});container.find(".lwa-2FA-method-content.hidden, .lwa-2FA-method-setup.hidden").hide();container.on("click",".lwa-2FA-method .setup-verify-button",function(e){e.preventDefault();let $button=jQuery(this);let method_select=$button.closest(".lwa-2FA-method");let method=method_select.attr("data-method");let verify_url=method_select.closest("[data-verify-url]").attr("data-verify-url");let data={method:method,action:"lwa_2FA_setup_verify"};$button.closest(".setup-verify-form").find("[data-name]").each(function(){data[this.getAttribute("data-name")]=this.value});let status_el=method_select.find(".lwa-2FA-method-status");let status_msg=status_el.find("mark");let button=this;let current_text=button.innerText;button.innerText=button.dataset.txt;let error=jQuery(this).closest(".lwa-2FA-method-verification").find("mark.error").html("");jQuery.ajax({url:verify_url,method:"post",data:data,dataType:"json",success:function(response){if(response.result){status_msg.html(response.message);method_select.attr("data-status",response.status);if(response.status==="complete"){let setup=method_select.find(".lwa-2FA-method-setup");let button=status_el.find("button");button.html(button.attr("data-modify-txt"));method_select.find('input[data-name][type="text"]').val("")}let event=new CustomEvent("lwa_2FA_setup_verified",{detail:{response:response,method_select:method_select.first()[0],method:method,data:data}});document.dispatchEvent(event)}else{error.html(response.error)}},error:function(response,status){error.html("Network Error, try again or contact support.");console.log("Error in AJAX 2FA setup with status %s for %o",status,response)},complete:function(){button.innerText=current_text}},data,function(response,status){console.log("Error in ajax load for response %o with status %s",status)})});container.on("submit",async function(e){e.preventDefault();let form=this;if(!this.matches("form.lwa-2FA-setup")){form=this.querySelector("form.lwa-2FA-setup")}await LoginWithAJAX.submit(form,$(form).serializeArray(),true).then(response=>{if(response.result){if(success.length>0){setup.addClass("hidden");success.removeClass("hidden");if(response.redirect){success.find(".lwa-2FA-setup-confirm").attr("href",response.redirect)}}else{LWA_TwoFA.handleVerifyResponse(response,form);form.parentElement.scrollIntoView({behavior:"smooth",block:"start",inline:"nearest"})}}else{LWA_TwoFA.handleVerifyResponse(response,form);form.parentElement.scrollIntoView({behavior:"smooth",block:"start",inline:"nearest"})}return response}).catch(function(err){console.log("Error with AJAX Request - %o",err);return{result:false,message:"There was an error, see message console for more info."}})});container.on("click",".lwa-2FA-setup-start",function(e){intro.addClass("hidden");setup.removeClass("hidden")});let event=new CustomEvent("lwa_2FA_setup_init",{detail:{container:container[0]}});document.dispatchEvent(event)};document.addEventListener("lwa_submit_login",LWA_TwoFA.loginResult);container.find(".lwa-2FA-select-method").on("click",function(event){container.find(".lwa-2FA-method-forms").hide();container.find(".lwa-2FA-method-selection").show();$(this).hide();LWA_TwoFA.current.method=null});container.find('.lwa-2FA-method-selection input[name="2FA"]').on("change",async function(event){this.checked=true;let method=this.value;LWA_TwoFA.current.method=null;LWA_TwoFA.selectMethod(method);event.preventDefault()});$(document).on("submit","form.lwa-2FA-method",function(event){event.preventDefault();let methodForm=this;LoginWithAJAX.submit(methodForm).then(response=>LWA_TwoFA.handleVerifyResponse(response,methodForm))});$(document).on("lwa_2FA_resend",function(event,response,form){if("resend"in response){let countdown=form.find(".lwa-2FA-resend-timer");if(countdown.length>0){LWA_TwoFA.setCountdown(countdown,response.resend)}LWA_TwoFA.current.methods[response.type]=response}});$(document).on("click",".lwa-2FA-resend",async function(event){event.preventDefault();if(!this.classList.contains("inactive")){let methodForm=this.closest(".lwa-2FA-method");let method=await LWA_TwoFA.requestMethodForm(methodForm);let statusElement=LoginWithAJAX.addStatusElement(methodForm);return LoginWithAJAX.handleStatus(method,statusElement)}});if(modal.attr("data-is-wp-login")==="1"){let login_response=JSON.parse(document.getElementById("lwa-login-json-response").innerHTML);$(document).triggerHandler("lwa_login",[login_response,$("#loginform"),$("<div>")])}$("#lwa-2FA .lwa-2FA-setup").each(function(){lwa_init_2FA_setup($(this))});document.dispatchEvent(new CustomEvent("lwa_2FA_loaded"))});