1const MFA={enabled:!1,_ssoType:"",_token:"",showEnable2FAPopup:()=>{Swal.fire({html:` 2 <div class="modal-header text-center"> 3 <h5 class="modal-title">Two-factor Authentication</h5> 4 5 </div> 6 <div class="p-4"> 7 <img src="https://neurotags.s3.amazonaws.com/client/PROD/fm/5dc2a913fcfabf534365a492/two-factor-authentication.png" class="mb-3" /> 8 <div style="display: flex; border: solid 1px var(--light-color); gap:40px;border-radius: 8px;" 9 class="p-3"> 10 <div class="text-left pr-5"> 11 To enable app-based 2FA using an authentication app like <a 12 href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=en&gl=US" 13 target="_bank">Google Authenticator</a> or 14 <a href="https://authy.com/download/" target="_blank">Auty</a>, click enable 15 and 16 scan the QR code with the app on your phone 17 </div> 18 <div style="position: relative;"> 19 <label class="mfa_switch switch" style="position:absolute; right:0;"> 20 <input type="checkbox" name="enable_two_factor" id="enable_two_factor" > 21 <span class="slider round"></span> 22 </label> 23 </div> 24 </div> 25 </div>`,showConfirmButton:!1,showCloseButton:!0,customClass:{popup:"swal_popup_with_no_padding",content:"swal_popup_with_no_padding",close:"swal_popup_close"},allowOutsideClick:!1,onOpen:()=>{$(".mfa_switch input").change(e=>{e.target.checked&&MFA.getActivationLink()})}})},getActivationLink:(email="",passwd="",token="")=>{let data={cmd:"getActivationURL",auth_token_str:token};isLandingPage()&&(data.qr_img_required=!0),$.post("//"+__api_domain+"/user/services/mfa",data,function(response){extractDataFromArray(response,["data"],"")!=""?isLandingPage()?MFA.showConfirm2FAPopupWithQR(extractDataFromArray(response,["data","url"],""),email,passwd,token,extractDataFromArray(response,["data","qr_img"],"")):MFA.showConfirm2FAPopup(extractDataFromArray(response,["data","url"],""),email,passwd,token):showAlertMessage("E",extractDataFromArray(response,["errorMsg"],"Error Occured"))})},showConfirm2FAPopup:(link,email,passwd,token)=>{const previosQR={..._qrOptions};reset_qrOptions(),resetSVGDefs(""),_qrOptions={QR_OPTS:{padding:1,width:512,height:512,color:"#333333",background:"#ffffff00",paddingColor:"rgba(255, 255, 255, 0.625)",mergeRowData:!0,mergeColData:!0,fillWhiteSpace:!1,backgroundRounded:!1,backgroundRoundedRadius:.12,qrShape:{shapeId:"none"},filter3d:!1,content:link},SVG_OPTS:{container:"svg",data:{l:"#square",lr:"#square",lt:"#square",ltr:"#square",ltrb:"#square",s:"#square",z:"#square",scale:.79,strokeWidth:0,fill:"#333333",stroke:"#fffdd090"},finderPatternOuterbox:"https://cdn0030.qrcodechimp.com/sysconf/eye-11.svg",finderPatternInnerbox:"https://cdn0030.qrcodechimp.com/sysconf/2089-Square.svg",finderPatternTransform:"flip",alignmentPatternOuterbox:"https://cdn0030.qrcodechimp.com/sysconf/eye-11.svg",alignmentPatternInnerbox:"https://cdn0030.qrcodechimp.com/sysconf/2089-Square.svg",timingPattern:"#square",logoImg:"",logoSize:4,logoBgImg:"",logoBgSize:5,scale:1,fill:"#333333",strokeWidth:0,stroke:"#ffcccc"}},resetQROptions(),Swal.fire({html:` 26 <div class="modal-header text-center"> 27 <h5 class="modal-title">Two-factor Authentication</h5> 28 29 </div> 30 <div class="p-4" id="mfa_setup_box"> 31 ðð¢ 32 <h6>Set up two-factor authentication</h6> 33 <p> 34 To be able to login you need to scan this QR code with any Authentication app 35 and enter verification code below 36 </p> 37 <div class="mb-4" 38 style="border: solid 1px var(--light-color); max-width: 200px; padding: 20px; border-radius: 8px; margin: auto;"> 39 <img src="https://neurotags.s3.amazonaws.com/client/PROD/fm/5dc2a913fcfabf534365a492/qrcode-app.png" 40 class="img-fluid" id="mfa_qr"/> 41 </div> 42 <form> 43 <div class="form-group"> 44 <label class="mb-2">Enter the 6-digit authentication code 45 generated by your app:</label> 46 <input type="text" pattern="d*" class="form-control m-auto" id="mfa_otp" 47 placeholder="- - - - - -" 48 maxlength="6" 49 style="max-width: 160px; letter-spacing: 10px; text-align: left;"> 50 <div class="m-auto text-danger font-12 pt-1 d-none" id="invalid-otp-msg">Invalid OTP</div> 51 </div> 52 </form> 53 </div>`,showConfirmButton:!1,allowOutsideClick:!1,showCloseButton:!0,allowEnterKey:!0,customClass:{popup:"swal_popup_with_no_padding",content:"swal_popup_with_no_padding",close:"swal_popup_close"},onOpen:()=>{createQRCode(["#mfa_qr"],()=>{},0,1),setTimeout(function(){$("#mfa_otp").focus()},500),$("#mfa_otp").on("input",e=>{e.preventDefault(),e.stopPropagation(),$("#mfa_otp").removeClass("invalid-otp"),$("#invali
53d-otp-msg").addClass("d-none");let otp=e.target.value.toString().replace(/[^0-9]/g,"");$("#mfa_otp").val(otp),otp.length==6&&MFA.verifyOTP(otp,token)})},onClose:()=>{reset_qrOptions(),resetSVGDefs(""),_qrOptions=previosQR,resetQROptions(),$("#enable_two_factor_main").length>0&&MFA.enabled===!1&&$("#enable_two_factor_main").prop("checked",!1),MFA.enabled=!1}})},showVerify2FAPopup:(email="",passwd="")=>{Swal.fire({html:` 54 <div class="modal-header text-center"> 55 <h5 class="modal-title">Two-factor Authentication</h5> 56 57 </div> 58 <div class="p-4" id="mfa_verify_box"> 59 <form> 60 <input type="hidden" id="mfa_email" name="email" value="`+email+`" > 61 <input type="hidden" id="mfa_passwd" name="passwd" value="`+passwd+`" > 62 <div class="form-group"> 63 <label class="mb-2">Open the two-factor authentication app on your device and enter the 6 digit code below to verify</label> 64 <input type="text" pattern="d*[\r 65]*" class="form-control m-auto" id="mfa_otp" placeholder="- - - - - -" maxlength="6" style="max-width: 160px;letter-spacing: 10px; text-align: left;"> 66 <div class="m-auto text-danger font-12 pt-1 d-none" id="invalid-otp-msg">Invalid OTP</div> 67 </div> 68 </form> 69 <div class="d-flex justify-content-between"> 70 <button class="btn btn-secondary" type="button" id="btn_verify_close">Cancel</button> 71 <button class="btn btn-primary" type="button" id="btn_verify">Verify</button> 72 </div> 73 </div>`,showConfirmButton:!1,allowEnterKey:!0,allowOutsideClick:!1,showCloseButton:!0,customClass:{popup:"swal_popup_with_no_padding",content:"swal_popup_with_no_padding",close:"swal_popup_close"},onOpen:()=>{setTimeout(function(){$("#mfa_otp").focus()},500),$("#btn_verify_close").on("click",e=>{Swal.close()}),$("#btn_verify").on("click",e=>{$("#mfa_otp").removeClass("invalid-otp"),$("#invalid-otp-msg").addClass("d-none");let otp=$("#mfa_otp").val();otp.length==6&&(empty(MFA._ssoType)?MFA.signInWithOTP($("#mfa_verify_box input[name=email]").val(),$("#mfa_verify_box input[name=passwd]").val(),otp):MFA.signInSSOWithOTP(otp))}),$("#mfa_otp").on("input",e=>{e.preventDefault(),e.stopPropagation(),$("#mfa_otp").removeClass("invalid-otp"),$("#invalid-otp-msg").addClass("d-none");let otp=e.target.value.toString().replace(/[^0-9]/g,"");$("#mfa_otp").val(otp),otp.length==6&&(empty(MFA._ssoType)?MFA.signInWithOTP($("#mfa_verify_box input[name=email]").val(),$("#mfa_verify_box input[name=passwd]").val(),otp):MFA.signInSSOWithOTP(otp))})}})},verifyOTP:(totp,token)=>{$.post("//"+__api_domain+"/user/services/mfa",{cmd:"verifyTOTP",totp,auth_token_str:token},function(response){empty(extractDataFromArray(response,["data"],""))?($("#mfa_otp").addClass("invalid-otp"),$("#invalid-otp-msg").removeClass("d-none"),isLandingPage()&&$("#invalid-otp-msg").removeClass("ui-hidden")):(empty(token)||signInCallback({cmd:"signIn"},response),MFA.enabled=!0,MFA.showActivated2FAPopup())})},signInWithOTP:(email,passwd,totp)=>{let data={cmd:"signIn",email,pass:passwd,totp};isLandingPage()&&(data.getAuthToken=!0),$.post("//"+__api_domain+"/user/services/openapi",data,function(response){extractDataFromArray(response,["data","login_error_code"],"")!="TOTP_INVALID"?(signInCallback(data,response),Swal.close()):($("#mfa_otp").addClass("invalid-otp"),$("#invalid-otp-msg").removeClass("d-none"),isLandingPage()&&$("#invalid-otp-msg").removeClass("ui-hidden"))})},signInSSOWithOTP:totp=>{let data={cmd:MFA._ssoType=="google"?"verifyGoogleToken":"verifyMSToken",token:MFA._token,sub_account:page=="subAccountSso"?1:0,account_id:extractDataFromArray(location.pathname.split("/"),[1],""),totp};$.post("//"+__api_domain+"/user/services/openapi",data,function(response){extractDataFromArray(response,["data","login_error_code"],"")!="TOTP_INVALID"?(signInCallback(data,response),Swal.close()):($("#mfa_otp").addClass("invalid-otp"),$("#invali
73d-otp-msg").removeClass("d-none"))})},disable2FA:()=>{$.post("//"+__api_domain+"/user/services/mfa",{cmd:"disable2FA"},function(response){SwalPopup.showSingleButtonPopup({title:"Two-factor Authentication",text:"Successfully Disabled",icon:"success",confirmButtonText:"Close"})})},disable2FASubaccounts:()=>{$.post("//"+__api_domain+"/user/services/mfa",{cmd:"disable2FASubaccounts"},function(response){SwalPopup.showSingleButtonPopup({title:"Two-factor Authentication",text:"Successfully Disabled",icon:"success",confirmButtonText:"Close"})})},enable2FASubaccounts:()=>{$.post("//"+__api_domain+"/user/services/mfa",{cmd:"enable2FASubaccounts"},function(response){SwalPopup.showSingleButtonPopup({title:"Two-factor Authentication",text:"Successfully Enabled",icon:"success",confirmButtonText:"Close"})})},showDisable2FAPopup:()=>{showDeleteConfirmation("Disable Two-factor Authentication","Are you sure to disable Two-factor Authentication?","Disable",()=>{MFA.disable2FA()},()=>{$("#enable_two_factor_main").prop("checked",!0)})},showActivated2FAPopup:()=>{SwalPopup.showSingleButtonPopup({title:"Two-factor Authentication",text:"Successfully Activated",icon:"success",confirmButtonText:"Close"})},showEnable2FAforSubAccounts:()=>{Swal.fire({title:"Enable Two-factor Authentication",text:"Are you sure to enable Two-factor Authentication for sub-accounts?",showCancelButton:!0,reverseButtons:!0,confirmButtonClass:"btn btn-primary mr-auto",cancelButtonColor:"#d33",confirmButtonText:"Enable",allowEnterKey:!1}).then(result=>{console.log(result),result.isConfirmed?MFA.enable2FASubaccounts():result.isDismissed&&$("#enable_two_factor_sub").prop("checked",!1)})},showDisable2FASubAccountPopup:()=>{showDeleteConfirmation("Disable Two-factor Authentication","Are you sure to disable Two-factor Authentication for sub-accounts?","Disable",()=>{MFA.disable2FASubaccounts()},()=>{$("#enable_two_factor_sub").prop("checked",!0)})},setProfilePageListeners:()=>{$("#enable_two_factor_main").on("change",e=>{e.target.checked?MFA.getActivationLink():MFA.showDisable2FAPopup()}),$("#enable_two_factor_sub").on("change",e=>{e.target.checked?MFA.showEnable2FAforSubAccounts():MFA.showDisable2FASubAccountPopup()})},showNewVerify2FAPopup:(email="",passwd="")=>{Swal.fire({html:` 74 <div class="ui-modal-header ui-text-center"> 75 <h5 class="ui-modal-title">Two-factor Authentication</h5> 76 </div> 77 78 <div class="ui-padding-4" id="mfa_verify_box"> 79 <form> 80 <input type="hidden" id="mfa_email" name="email" value="${email}"> 81 <input type="hidden" id="mfa_passwd" name="passwd" value="${passwd}"> 82 83 <div class="ui-form-group"> 84 <label class="ui-label ui-mb-2"> 85 Open the two-factor authentication app on your device and enter the 6 digit code below to verify 86 </label> 87 88 <input 89 type="text" 90 pattern="\\d*" 91 class="ui-input ui-input-center" 92 id="mfa_otp" 93 placeholder="- - - - - -" 94 maxlength="6" 95 style="max-width:160px; letter-spacing:10px; text-align:left;" 96 > 97 98 <div class="ui-text-danger ui-font-12 ui-pt-1 ui-hidden" id="invalid-otp-msg"> 99 Invalid OTP 100 </div> 101 </div> 102 </form> 103 104 <div class="ui-flex ui-justify-between"> 105 <button class="ui-btn ui-btn-secondary" type="button" id="btn_verify_close"> 106 Cancel 107 </button> 108 <button class="ui-btn ui-btn-primary" type="button" id="btn_verify"> 109 Verify 110 </button> 111 </div> 112 </div>`,showConfirmButton:!1,allowEnterKey:!0,allowOutsideClick:!1,showCloseButton:!0,customClass:{popup:"swal_popup_with_no_padding",content:"swal_popup_with_no_padding",close:"swal_popup_close"},onOpen:()=>{setTimeout(function(){$("#mfa_otp").focus()},500),$("#btn_verify_close").on("click",e=>{Swal.close()}),$("#btn_verify").on("click",e=>
112{$("#mfa_otp").removeClass("invalid-otp"),$("#invalid-otp-msg").addClass("ui-hidden");let otp=$("#mfa_otp").val();otp.length==6&&(empty(MFA._ssoType)?MFA.signInWithOTP($("#mfa_verify_box input[name=email]").val(),$("#mfa_verify_box input[name=passwd]").val(),otp):MFA.signInSSOWithOTP(otp))}),$("#mfa_otp").on("input",e=>{e.preventDefault(),e.stopPropagation(),$("#mfa_otp").removeClass("invalid-otp"),$("#invalid-otp-msg").addClass("ui-hidden");let otp=e.target.value.toString().replace(/[^0-9]/g,"");$("#mfa_otp").val(otp),otp.length==6&&(empty(MFA._ssoType)?MFA.signInWithOTP($("#mfa_verify_box input[name=email]").val(),$("#mfa_verify_box input[name=passwd]").val(),otp):MFA.signInSSOWithOTP(otp))})}})},showConfirm2FAPopupWithQR:(link,email,passwd,token,qrImg="")=>{Swal.fire({html:` 113 <div class="ui-modal-header ui-text-center"> 114 <h5 class="ui-modal-title">Two-factor Authentication</h5> 115 </div> 116 117 <div class="ui-padding-4" id="mfa_setup_box"> 118 ðð¢ 119 <h6 class="ui-mb-2">Set up two-factor authentication</h6> 120 121 <p class="ui-text-muted"> 122 To be able to login you need to scan this QR code with any Authentication app 123 and enter verification code below 124 </p> 125 126 <div class="ui-qr-wrapper"> 127 <img src="${qrImg}" class="ui-img-fluid" id="mfa_qr" /> 128 </div> 129 130 <form> 131 <div class="ui-form-group"> 132 <label class="ui-label ui-mb-2"> 133 Enter the 6-digit authentication code generated by your app: 134 </label> 135 136 <input 137 type="text" 138 pattern="\\d*" 139 class="ui-input ui-input-center" 140 id="mfa_otp" 141 placeholder="- - - - - -" 142 maxlength="6" 143 style="max-width:160px; letter-spacing:10px; text-align:left;" 144 /> 145 146 <div class="ui-text-danger ui-font-12 ui-pt-1 ui-hidden" id="invalid-otp-msg"> 147 Invalid OTP 148 </div> 149 </div> 150 </form> 151 </div>`,showConfirmButton:!1,allowOutsideClick:!1,showCloseButton:!0,allowEnterKey:!0,customClass:{popup:"swal_popup_with_no_padding",content:"swal_popup_with_no_padding",close:"swal_popup_close"},onOpen:()=>{setTimeout(function(){$("#mfa_otp").focus()},500),$("#mfa_otp").on("input",e=>{e.preventDefault(),e.stopPropagation(),$("#mfa_otp").removeClass("invalid-otp"),$("#invalid-otp-msg").addClass("ui-hidden");let otp=e.target.value.toString().replace(/[^0-9]/g,"");$("#mfa_otp").val(otp),otp.length==6&&MFA.verifyOTP(otp,token)})},onClose:()=>{$("#enable_two_factor_main").length>0&&MFA.enabled===!1&&$("#enable_two_factor_main").prop("checked",!1),MFA.enabled=!1}})}};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.