1<!DOCTYPE html> 2<html lang="en"> 3 4<head> 5 <meta charset="utf-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1"> 7 <title>SBA Temple Devotee Portal Log in</title> 8 <link rel="icon" type="image/x-icon" href="https://devotee.sbat.org/public/images/favicon.png"> 9 <!-- Google Font: Source Sans Pro --> 10 <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700&display=fallback"> 11 <!-- Font Awesome --> 12 <link rel="stylesheet" href="https://devotee.sbat.org/public/css/all.min.css"> 13 <!-- icheck bootstrap --> 14 <link rel="stylesheet" href="https://devotee.sbat.org/public/css/icheck-bootstrap.min.css"> 15 <!-- Theme style --> 16 <link rel="stylesheet" href="https://devotee.sbat.org/public/css/adminlte.min.css"> 17 <!-- SweetAlert2 --> 18 <link rel="stylesheet" href="https://devotee.sbat.org/public/css/sweetalert2.min.css">
vendor: 69 bytes, lines 18-20
18 19 <script src='https://www.google.com/recaptcha/api.js'></script> 20
20<style> 21 .login-box-msg, 22 .register-box-msg { 23 padding: 0; 24 } 25 26 .submitbutton { 27 background-color: #7E4555; 28 } 29 30 .submitbutton:hover { 31 background-color: #EE4D23; 32 } 33 34body .modal-dialog { margin-left: 0; } 35 </style> 36</head> 37 38<body class="hold-transition login-page"> 39 40<!--- popup ---> 41<div class="modal fade" id="exampleModal" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true"> 42 <div class="modal-dialog modal-md" role="document"> 43 <div class="modal-content"> 44 <div class="modal-header"> 45 <button type="button" class="close" data-dismiss="modal" aria-label="Close" style="position:absolute;z-index: 999"> 46 <span aria-hidden="true">×</span> 47 </button> 48 <h5 class="col-12 modal-title text-center" id="exampleModalLabel">Important Announcement </h5> 49 </div> 50 <div class="modal-body" style="text-align: justify"> 51 52<a class="d-none" href="#"><img style="width:95%" alt="Devotee Portal" src="https://devotee.sbat.org/public/assets/uploads/devotee_portal.jpeg" /></a> 53 54 <div class="row p1"> 55 <div class="col-sm-12 p-1 text-left"> 56Temple has sent 2022 CY Tax Statement to the registered email address. This tax statement was emailed to you between 5th February 2023 - 8th February 2023 57For families that have contributed using different email addresses, please check all email address for donation statements. 58<ul class="list-group d-none"> 59 <li class="list-group-item">Click on Create Account</li> 60 <li class="list-group-item"></i>Enter your Name, Email and Phone number and click on register</li> 61 <li class="list-group-item">Check your email for the activation or password reset link (check your spam folder)</li> 62 <li class="list-group-item">If you see message, "Your email is already registered...", click on Reset Password link to generate a new password</li> 63</ul> 64 65 </div> 66 </div> 67 68 </div> 69 </div> 70 </div> 71</div> 72 73<!-- Login with Mobile OTP --> 74<div class="modal fade" id="mobileOtpModal" tabindex="-1" role="dialog" aria-labelledby="mobileOtpModalLabel" aria-hidden="true" data-backdrop="static"> 75 <div class="modal-dialog modal-dialog-centered" role="document" style="margin-left: auto; margin-right: auto; max-width: 420px;"> 76 <div class="modal-content"> 77 <div class="modal-header"> 78 <h5 class="modal-title" id="mobileOtpModalLabel">Login with Mobile OTP</h5> 79 <button type="button" class="close" data-dismiss="modal" aria-label="Close"> 80 <span aria-hidden="true">×</span> 81 </button> 82 </div> 83 <div class="modal-body"> 84 <div class="alert d-none" id="otpAlert" role="alert"></div> 85 86 <!-- Step 1: mobile number --> 87 <form id="otpStepMobile" novalidate> 88 <label for="otpMobile">Mobile number</label> 89 <div class="input-group mb-1"> 90 <input type="tel" class="form-control" id="otpMobile" name="mobile" autocomplete="tel" placeholder="(301) 555-1234" required> 91 <div class="input-group-append"> 92 <div class="input-group-text"><span class="fas fa-mobile-alt"></span></div> 93 </div> 94 </div> 95 <small class="form-text text-muted mb-3">US numbers: 10 digits. Other countries: start with + and the country code.</small> 96 <div class="mb-3" id="otpCaptcha"></div> 97 <button type="submit" class="btn submitbutton btn-block text-white" id="btnSendOtp">Send OTP</button> 98 </form> 99 100 <!-- Step 2: OTP --> 101 <form id="otpStepCode" class="d-none" novalidate> 102 <p class="mb-2" id="otpSentTo"></p> 103 <label for="otpCode">Enter OTP</label> 104 <input type="text" class="form-control mb-3" id="otpCode" name="otp" inputmode="numeric" autocomplete="one-time-code" maxlength="10" placeholder="6 digit code" required> 105 <button type="submit" class="btn submitbutton btn-block text-white" id="btnVerifyOtp">Verify OTP</button> 106 <div class="d-flex justify-content-between mt-3"> 107 <a href="#" id="otpChangeMobile" style="color: #EE4D23;">Change number</a> 108 <a href="#" id="otpResend" style="color: #EE4D23;">Resend OTP</a> 109 </div> 110 </form> 111 112 <!-- Step 3: basic details for a new mobile number --> 113 <form id="otpStepRegister" class="d-none" novalidate> 114 <p class="mb-3">Your mobile number is verified. Please enter your details to continue.</p> 115 <div class="form-group"> 116 <label for="otpFirstName">First name</label> 117 <input type="text" class="form-control" id="otpFirstName" name="first_name" maxlength="50" autocomplete="given-name" required> 118 </div> 119 <div class="form-group"> 120 <label for="otpLastName">Last name</label> 121 <input type="text" class="form-control" id="otpLastName" name="last_name" maxlength="50" autocomplete="family-name" required> 122 </div> 123 <div class="form-group"> 124 <label for="otpEmail">Email</label> 125 <input type="email" class="form-control" id="otpEmail" name="email" maxlength="100" autocomplete="email" required> 126 </div> 127 <button type="submit" class="btn submitbutton btn-block text-white" id="bt
127nOtpRegister">Continue</button> 128 </form> 129 </div> 130 </div> 131 </div> 132</div> 133 134 <div class="login-box"> 135 <div class="login-logo"> 136 <h1><img src="https://devotee.sbat.org/public/images/logo.png" style="width: 346px;" /></h1> 137 </div> 138 <!-- /.login-logo --> 139 <div class="card card-outline card-orange"> 140 <div class=" card-header text-center"> 141 <div class="login-box-msg parent"> 142 <div class="center fill-remaining-space">Login</div> 143 </div> 144 </div> 145 <div class="card-body login-card-body"> 146 <!-- <p class="login-box-msg">Sign in to start your session</p> --> 147 <form action="https://devotee.sbat.org/login" method="post" class="needs-validation" novalidate> 148 149 <div class="input-group mb-3"> 150 <input type="email" required class="form-control" name="email" data-toggle="popover" data-trigger="hover" data-placement="bottom" data-content="Email(Registered with the temple, if you have already registered)" autocomplete="off" id="email" value="" placeholder="Email"> 151 <div class="input-group-append"> 152 <div class="input-group-text"> 153 <span class="fas fa-envelope"></span> 154 </div> 155 </div> 156 <div class="invalid-feedback">Please enter a valid email address.</div> 157 </div> 158 <div class="input-group mb-3"> 159 <input type="password" class="form-control" required placeholder="Password" name="password" value=""> 160 <div class="input-group-append"> 161 <div class="input-group-text"> 162 <span class="fas fa-lock"></span> 163 </div> 164 </div> 165 <div class="invalid-feedback">Please enter password.</div> 166 </div> 167 <div class="input-group mb-3"> 168 <div class="g-recaptcha" data-sitekey="6LenQ_0UAAAAANQFoQ7JdbzMuPVvYWppoxiT2_zb"></div> 169 </div> 170 171 <div class="col-4"> 172 <input type="submit" name="submit" class="btn submitbutton btn-block" value="Sign In"> 173 </div> 174 175 </form> 176 177 <div class="text-center text-muted my-2">OR</div> 178 <button type="button" class="btn btn-outline-secondary btn-block" id="btnMobileOtp"> 179 <i class="fas fa-mobile-alt mr-1"></i> Login with Mobile OTP 180 </button> 181 182<hr> 183 184<div class="row"> 185 <div class="col-12 mb-2" style="padding-right: 3.5rem;"> 186 <div class="d-flex"> 187 <a href="https://devotee.sbat.org/resetpassword" style="float: right; color: #EE4D23;">Forgot password?</a> 188 </div> 189 </div> 190 191 192<div class="d-flex justify-content-between align-items-center p-2"> 193 194 195 196 197 198 <div class='d-none'> 199 <a href="https://devotee.sbat.org/guest" style="color: #EE4D23; margin-right: 10px;">Continue As Guest</a> 200 </div> 201 <div> 202 <a href="https://devotee.sbat.org/register" style="color: #EE4D23; margin-left: 10px;">Create Account</a> 203 </div> 204</div> 205 206</div> 207 208 209 <!-- /.social-auth-links --> 210 211 <!-- <p class="mb-0"> 212 <a href="register.html" class="text-center">Register a new membership</a> 213 </p> --> 214 </div> 215 <!-- /.login-card-body --> 216 </div> 217 </div> 218 <!-- /.login-box --> 219 220 <!-- jQuery --> 221
221<script src="https://devotee.sbat.org/public/js/jquery.min.js"></script>
221 222 <!-- Bootstrap 4 --> 223
223<script src="https://devotee.sbat.org/public/js/bootstrap.bundle.min.js"></script>
223 224 <!-- AdminLTE App --> 225
225<script src="https://devotee.sbat.org/public/js/adminlte.min.js"></script>
225 226
226<script src="https://devotee.sbat.org/public/js/sweetalert2.min.js"></script>
226 227
227<script type="text/javascript"> 228 (function() { 229 'use strict'; 230 window.addEventListener('load', function() { 231 // Fetch all the forms we want to apply custom Bootstrap validation styles to 232 var forms = document.getElementsByClassName('needs-validation'); 233 234 // Loop over them and prevent submission 235 var validation = Array.prototype.filter.call(forms, function(form) { 236 form.addEventListener('submit', function(event) { 237 if (form.checkValidity() === false) { 238 event.preventDefault(); 239 event.stopPropagation(); 240 } 241 form.classList.add('was-validated'); 242 }, false); 243 }); 244 }, false); 245 })(); 246 </script>
246 247
247<script> 248 $('#email').popover(); 249 </script>
249 250
250<script type="text/javascript"> 251 /** Login with Mobile OTP */ 252 (function() { 253 var otpCaptchaId = null; 254 var resendTimer = null; 255 var $modal = $('#mobileOtpModal'); 256 var $alert = $('#otpAlert'); 257 258 function showAlert(type, message) { 259 $alert.removeClass('d-none alert-danger alert-success alert-warning alert-info') 260 .addClass('alert-' + type).text(message); 261 } 262 263 function hideAlert() { 264 $alert.addClass('d-none').text(''); 265 } 266 267 function showStep(step) { 268 $('#otpStepMobile, #otpStepCode, #otpStepRegister').addClass('d-none'); 269 $(step).removeClass('d-none'); 270 } 271 272 function resetCaptcha() { 273 if (otpCaptchaId !== null && window.grecaptcha) { 274 grecaptcha.reset(otpCaptchaId); 275 } 276 } 277 278 function startResendTimer(seconds) { 279 var $link = $('#otpResend'); 280 clearInterval(resendTimer); 281 $link.addClass('disabled').css('pointer-events', 'none'); 282 resendTimer = setInterval(function() { 283 seconds--; 284 if (seconds <= 0) { 285 clearInterval(resendTimer); 286 $link.removeClass('disabled').css('pointer-events', '').text('Resend OTP'); 287 } else { 288 $link.text('Resend OTP in ' + seconds + 's'); 289 } 290 }, 1000); 291 $link.text('Resend OTP in ' + seconds + 's'); 292 } 293 294 function post(url, data, $button) { 295 var label = $button.text(); 296 $button.prop('disabled', true).text('Please wait...'); 297 return $.ajax({ 298 url: url, 299 method: 'POST', 300 data: data, 301 dataType: 'json' 302 }).always(function() { 303 $button.prop('disabled', false).text(label); 304 }).fail(function() { 305 showAlert('danger', 'Something went wrong. Please try again.'); 306 }); 307 } 308 309 function handleCommon(res) { 310 if (res.status === 'success' && res.redirect) { 311 window.location.href = res.redirect; 312 return true; 313 } 314 if (res.status === 'landline') { 315 showStep('#otpStepMobile'); 316 resetCaptcha(); 317 showAlert('warning', res.message); 318 return true; 319 } 320 if (res.status === 'expired') { 321 showStep('#otpStepMobile'); 322 resetCaptcha(); 323 showAlert('danger', res.message); 324 return true; 325 } 326 return false; 327 } 328 329 $('#btnMobileOtp').on('click', function() { 330 hideAlert(); 331 showStep('#otpStepMobile'); 332 $modal.modal('show'); 333 }); 334 335 $modal.on('shown.bs.modal', function() { 336 if (otpCaptchaId === null && window.grecaptcha && grecaptcha.render) { 337 otpCaptchaId = grecaptcha.render('otpCaptcha', { 338 sitekey: '6LenQ_0UAAAAANQFoQ7JdbzMuPVvYWppoxiT2_zb' 339 }); 340 } 341 $('#otpMobile').trigger('focus'); 342 }); 343 344 function sendOtp($button) { 345 hideAlert(); 346 var mobile = $.trim($('#otpMobile').val()); 347 if (!mobile) { 348 showAlert('danger', 'Please enter your mobile number.'); 349 return; 350 } 351 var captcha = otpCaptchaId !== null ? grecaptcha.getResponse(otpCaptchaId) : ''; 352 if (!captcha) { 353 showAlert('danger', 'Please check the captcha checkbox.'); 354 return; 355 } 356 post('https://devotee.sbat.org/login/sendOtp', { 357 mobile: mobile, 358 'g-recaptcha-response': captcha 359 }, $button).done(function(res) { 360 if (handleCommon(res)) return; 361 if (res.status === 'sent') { 362 $('#otpSentTo').text(res.message); 363 $('#otpCode').val(''); 364 showStep('#otpStepCode'); 365 startResendTimer(res.resendAfter || 30); 366 $('#otpCode').trigger('focus'); 367 return; 368 } 369 if (res.resetCaptcha) resetCaptcha(); 370 showAlert('danger', res.message); 371 }); 372 } 373 374 $('#otpStepMobile').on('submit', function(e) { 375 e.preventDefault(); 376 sendOtp($('#btnSendOtp')); 377 }); 378 379 $('#otpResend').on('click', function(e) { 380 e.preventDefault(); 381 // A new OTP needs a fresh captcha 382 hideAlert(); 383 resetCaptcha(); 384 showStep('#otpStepMobile'); 385 showAlert('info', 'Please complete the captcha and click Send OTP to get a new code.'); 386 }); 387
388 $('#otpChangeMobile').on('click', function(e) { 389 e.preventDefault(); 390 hideAlert(); 391 resetCaptcha(); 392 showStep('#otpStepMobile'); 393 $('#otpMobile').trigger('focus').select(); 394 }); 395 396 $('#otpStepCode').on('submit', function(e) { 397 e.preventDefault(); 398 hideAlert(); 399 var otp = $.trim($('#otpCode').val()); 400 if (!otp) { 401 showAlert('danger', 'Please enter the OTP sent to your mobile number.'); 402 return; 403 } 404 post('https://devotee.sbat.org/login/verifyOtp', { 405 otp: otp 406 }, $('#btnVerifyOtp')).done(function(res) { 407 if (handleCommon(res)) return; 408 if (res.status === 'register') { 409 showStep('#otpStepRegister'); 410 showAlert('success', res.message); 411 $('#otpFirstName').trigger('focus'); 412 return; 413 } 414 showAlert('danger', res.message); 415 }); 416 }); 417 418 $('#otpStepRegister').on('submit', function(e) { 419 e.preventDefault(); 420 hideAlert(); 421 if (this.checkValidity() === false) { 422 $(this).addClass('was-validated'); 423 showAlert('danger', 'Please enter your first name, last name and a valid email.'); 424 return; 425 } 426 post('https://devotee.sbat.org/login/otpRegister', { 427 first_name: $.trim($('#otpFirstName').val()), 428 last_name: $.trim($('#otpLastName').val()), 429 email: $.trim($('#otpEmail').val()) 430 }, $('#btnOtpRegister')).done(function(res) { 431 if (handleCommon(res)) return; 432 showAlert('danger', res.message); 433 }); 434 }); 435 })(); 436 </script>
436 437
437<script type="text/javascript"> 438 /** Code for when user in after click on back button it will not go to login page */ 439 window.history.pushState(null, null, window.location.href); 440 window.onpopstate = function() { 441 window.history.go(1); 442 }; 443 </script>
443 444 445 </body>
446<script type="text/javascript"> 447 $(window).on('load', function() { 448 $('#exampleModal').modal('hide'); 449 }); 450</script>
450 451 452</html>
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.