1 2<!DOCTYPE html> 3<html lang="es"> 4 5 6<!-- Mirrored from codescandy.com/geeks-bootstrap-5/pages/sign-in.html by HTTrack Website Copier/3.x [XR&CO'2014], Tue, 17 May 2022 19:21:58 GMT --> 7<head> 8 <!-- Required meta tags --> 9 <meta charset="utf-8"> 10 <meta name="viewport" content="width=device-width, initial-scale=1"> 11 <meta name="description" 12 content="Geeks is a fully responsive and yet modern premium bootstrap 5 template & snippets. Geek is feature-rich components and beautifully designed pages that help you create the best possible website and web application projects. Bootstrap Snippet "/> 13 <meta name="keywords" 14 content="Geeks UI, bootstrap, bootstrap 5, Course, Sass, landing, Marketing, admin themes, bootstrap admin, bootstrap dashboard, ui kit, web app, multipurpose"/> 15 16 17 <!-- Favicon icon--> 18 <link rel="shortcut icon" type="image/x-icon" href="/static/images/logo_casa_grande.png"> 19 20 21 <!-- Libs CSS --> 22 <link href="/static/geeks/assets/fonts/feather/feather.css" rel="stylesheet"> 23 <link href="/static/geeks/assets/libs/bootstrap-icons/font/bootstrap-icons.css" rel="stylesheet"/> 24 <link href="/static/geeks/assets/libs/dragula/dist/dragula.min.css" rel="stylesheet"/>
25 <link href="/static/geeks/assets/libs/%2540mdi/font/css/materialdesignicons.min.css" rel="stylesheet"/> 26 <link href="/static/geeks/assets/libs/dropzone/dist/dropzone.css" rel="stylesheet"/> 27 <link href="/static/geeks/assets/libs/magnific-popup/dist/magnific-popup.css" rel="stylesheet"/> 28 <link href="/static/geeks/assets/libs/bootstrap-select/dist/css/bootstrap-select.min.css" rel="stylesheet"> 29 <link href="/static/geeks/assets/libs/%2540yaireo/tagify/dist/tagify.css" rel="stylesheet"> 30 <link href="/static/geeks/assets/libs/tiny-slider/dist/tiny-slider.css" rel="stylesheet"> 31 <link href="/static/geeks/assets/libs/tippy.js/dist/tippy.css" rel="stylesheet"> 32 <link href="/static/geeks/assets/libs/datatables.net-bs5/css/dataTables.bootstrap5.min.css" rel="stylesheet"> 33 <link href="/static/geeks/assets/libs/prismjs/themes/prism-okaidia.min.css" rel="stylesheet"> 34 <link href="/static/geeks/assets/libs/simplebar/dist/simplebar.min.css" rel="stylesheet"> 35 <link href="/static/geeks/assets/libs/nouislider/dist/nouislider.min.css" rel="stylesheet"> 36 <link href="/static/geeks/assets/libs/glightbox/dist/css/glightbox.min.css" rel="stylesheet"> 37 <link href="/static/vendor/toastr/css/toastr.min.css" rel="stylesheet"> 38 39 <style> 40 :root { 41 --upse-navy: #c9d4dd; /* azul oscuro del héroe */ 42 --upse-orange: #f39c12; /* naranja para acento y botón */ 43 --upse-gray: #f7f7f9; /* gris muy claro para el fondo del panel */ 44 } 45 46 .login-wrap .hero { 47 background: var(--upse-navy); 48 position: relative; 49 min-height: 100vh; 50 overflow: hidden; 51 } 52 53 /* imagen recortada del graduado (PNG con fondo transparente) */ 54 .login-wrap .hero-figure { 55 position: absolute; 56 left: 3rem; 57 bottom: 0; 58 width: min(26rem, 40vw); 59 height: auto; 60 pointer-events: none; 61 user-select: none; 62 } 63 64 /* copy grande del lado izquierdo */ 65 .login-wrap .hero-copy { 66 color: #fff; 67 max-width: 36rem; 68 margin-left: min(34rem, 41vw); 69 padding: 0 2rem; 70 } 71 72 .login-wrap .hero-copy h1 { 73 font-weight: 800; 74 line-height: 1.05; 75 font-size: clamp(1.8rem, 3.8vw + 1rem, 3.6rem); 76 margin-bottom: .5rem; 77 } 78 79 .login-wrap .hero-copy .accent { 80 color: var(--upse-orange); 81 font-style: italic; 82 font-weight: 900; 83 } 84 85 .login-wrap .hero-copy .bar { 86 width: .25rem; 87 height: 3.5rem; 88 background: var(--upse-orange); 89 margin-right: 1rem; 90 border-radius: .25rem; 91 } 92 93 /* panel derecho */ 94 .login-panel { 95 background: #fff; 96 min-height: 100vh; 97 display: flex; 98 align-items: center; 99 justify-content: center; 100 padding: 2rem 1rem; 101 } 102 103 .login-card { 104 width: 100%; 105 max-width: 420px; 106 background: #fff; 107 border-radius: 1rem; 108 } 109 110 .login-card .card-body { 111 padding: 2.25rem; 112 } 113 114 .brand { 115 text-align: center; 116 margin-bottom: 1rem; 117 } 118 119 .brand img { 120 height: 48px; 121 width: auto; 122 } 123 124 .brand .title { 125 font-weight: 800; 126 letter-spacing: .06em; 127 font-size: 1.75rem; 128 line-height: 1.1; 129 } 130 131 .form-control { 132 height: 48px; 133 } 134 135 .btn-upse { 136 background: var(--upse-orange); 137 border: none; 138 } 139 140 .btn-upse:hover { 141 filter: brightness(.95); 142 } 143 144 .helper-links a { 145 font-size: .875rem; 146 } 147 148 /* responsive tweaks */ 149 @media (max-width: 991.98px) { 150 .login-wrap .hero { 151 min-height: 56vh; 152 } 153 154 .login-wrap .hero-figure { 155 left: 1rem; 156 width: 16rem; 157 opacity: .95; 158 } 159 160 .login-wrap .hero-copy { 161 margin: 0; 162 padding: 3rem 1.5rem 4rem; 163 } 164 } 165 </style> 166 <style> 167 /* Aumenta tamaño del logo con respuesta fluida */ 168 .login-card .brand img { 169 height: clamp(80px, 10vw, 80px); /* mÃnimo 80px, crece hasta 140px */ 170 width: auto; 171 display: block; /* elimina espacio extra debajo de la imagen */ 172 margin-inline: auto; /* centrado */ 173 } 174 175 /* Opcional: en pantallas muy pequeñas, un poco menos grande */ 176 @media (max-width: 576px) { 177 .login-card .brand img { 178 height: 42px; 179 } 180 } 181 </style> 182 <style> 183 /* OVERRIDE: el banner ocupa 100% del panel izquierdo */ 184 .login-wrap .hero{ 185 position: relative; 186 min-height: 100vh; 187 } 188 189 .login-wrap .hero-figure{ 190 position: absolute; 191 inset: 0; /* top:0; right:0; bottom:0; left:0 */ 192 width: 100%; 193 height: 100%; 194 object-fit: cover; /* recorte proporcional para llenar */ 195 object-position: center; 196 margin: 0; 197 pointer-events: none; 198 user-select: none; 199 } 200</style> 201 202
202<script> 203 function alertaSuccess(mensaje, time = 10000) { 204 Swal.fire({ 205 toast: true, 206 position: 'top-end', 207 type: 'success', 208 title: mensaje, 209 showConfirmButton: false, 210 timer: time 211 }) 212 } 213 214 function alertaWarning(mensaje, time = 5000) { 215 Swal.fire({ 216 toast: true, 217 position: 'top-end', 218 type: 'warning', 219 title: mensaje, 220 showConfirmButton: false, 221 timer: time 222 }) 223 } 224 225 function alertaDanger(mensaje, time = 5000) { 226 Swal.fire({ 227 toast: true, 228 position: 'top-end', 229 type: 'error', 230 title: mensaje, 231 showConfirmButton: false, 232 timer: time 233 }) 234 } 235 236 function alertaInfo(mensaje, time = 5000) { 237 Swal.fire({ 238 toast: true, 239 position: 'top-end', 240 type: 'info', 241 title: mensaje,
242 showConfirmButton: false, 243 timer: time 244 }) 245 } 246 247 const recuperar_claves_de_acceso = () => { 248 // Limpiar el campo de cédula al abrir el primer modal 249 document.getElementById('cedulaInput').value = ''; 250 // Mostrar el primer modal 251 const modalCedula = new bootstrap.Modal(document.getElementById('modalCedula')); 252 modalCedula.show(); 253 } 254 255 256 async function validarCedula() { 257 const identificacion = document.getElementById('cedulaInput').value.trim(); 258 ; 259 if (!identificacion) { 260 alertaDanger("Por favor, ingrese un número de cédula válido."); 261 return; 262 } 263 264 try { 265 // Simular una petición POST al servidor para validar la cédula 266 const response = await fetch('/validar_cedula', { 267 method: 'POST', 268 headers: { 269 'Content-Type': 'application/json', 270 'X-CSRFToken': getCookie('csrftoken') // Si usas Django o un sistema con CSRF 271 }, 272 body: JSON.stringify({identificacion: identificacion}) 273 }); 274 275 if (!response.ok) { 276 throw new Error("Error al validar la cédula"); 277 } 278 279 const data = await response.json(); 280 281 if (data.result === 'ok') { 282 // Mostrar el nombre de usuario en el segundo modal 283 document.getElementById('usuarioLabel').textContent = data.usuario; 284 285 const modalCedula = bootstrap.Modal.getInstance(document.getElementById('modalCedula')); 286 modalCedula.hide(); 287 288 const modalNacimiento = new bootstrap.Modal(document.getElementById('modalNacimiento')); 289 modalNacimiento.show(); 290 } else { 291 alertaSuccess(data.mensaje || "No se encontró un usuario con esta cédula."); 292 } 293 } catch (error) { 294 console.error(error); 295 alertaDanger("Ocurrió un error al validar la cédula."); 296 } 297 } 298 299 async function cambiarClave() { 300 const fechaNacimiento = document.getElementById('nacimientoInput').value; 301 const cedula = document.getElementById('cedulaInput').value.trim(); 302 ; 303 if (!fechaNacimiento) { 304 alertaDanger("Por favor, ingrese una fecha de nacimiento válida."); 305 return; 306 } 307 308 try { 309 // Simular una petición POST al servidor para cambiar la clave 310 const response = await fetch('/cambiar_clave', { 311 method: 'POST', 312 headers: { 313 'Content-Type': 'application/json', 314 'X-CSRFToken': getCookie('csrftoken') 315 }, 316 body: JSON.stringify({cedula: cedula, fechaNacimiento: fechaNacimiento}) 317 }); 318 319 if (!response.ok) { 320 throw new Error("Error al cambiar la clave"); 321 } 322 323 const data = await response.json(); 324 325 if (data.result === 'ok') { 326 alertaSuccess("¡Su contraseña es su número de identificación: " + document.getElementById('cedulaInput').value); 327 // Limpiar los campos y cerrar el modal 328 document.getElementById('cedulaInput').value = ''; 329 document.getElementById('nacimientoInput').value = ''; 330 331 // Cerrar el segundo modal 332 const modalNacimiento = bootstrap.Modal.getInstance(document.getElementById('modalNacimiento')); 333 modalNacimiento.hide(); 334 } else { 335 alertaInfo(data.mensaje || "No se pudo cambiar la clave."); 336 } 337 } catch (error) { 338 console.error(error); 339 alertaDanger("Ocurrió un error al cambiar la clave."); 340 } 341 } 342 343 function getCookie(name) { 344 let cookieValue = null; 345 if (document.cookie && document.cookie !== '') { 346 const cookies = document.cookie.split(';'); 347 for (let i = 0; i < cookies.length; i++) { 348 const cookie = cookies[i].trim(); 349 if (cookie.substring(0, name.length + 1) === (name + '=')) { 350 cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); 351 break; 352 } 353 } 354 } 355 return cookieValue; 356 } 357 </script>
357 358 359 <!-- Theme CSS --> 360 <link rel="stylesheet" href="/static/geeks/assets/css/theme.min.css"> 361 <title>Login</title> 362</head> 363 364<body> 365<!-- Modal 1: Solicitar número de cédula --> 366<div class="modal fade" id="modalCedula" tabindex="-1" aria-labelledby="modalCedulaLabel" aria-hidden="true"> 367 <div class="modal-dialog"> 368 <div class="modal-content"> 369 <div class="modal-header"> 370 <h5 class="modal-title" id="modalCedulaLabel">Recuperar datos de cuenta</h5> 371 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> 372 </div> 373 <div class="modal-body"> 374 <p>Ingrese su número de documento para validar su cuenta:</p> 375 <input type="text" id="cedulaInput" class="form-control" placeholder="Ingrese su número de cédula/RUC"> 376 </div> 377 <div class="modal-footer"> 378 <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cerrar</button> 379 <button type="button" class="btn btn-warning" onclick="validarCedula()">Resetear</button> 380 </div> 381 </div> 382 </div> 383</div> 384 385<!-- Modal 2: Solicitar fecha de nacimiento --> 386<div class="modal fade" id="modalNacimiento" tabindex="-1" aria-labelledby="modalNacimientoLabel" aria-hidden="true"> 387 <div class="modal-dialog"> 388 <div class="modal-content"> 389 <div class="modal-header"> 390 <h5 class="modal-title" id="modalNacimientoLabel">Datos de cuenta</h5> 391 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> 392 </div> 393 <div class="modal-body"> 394 <p>Su nombre de usuario es: <strong id="usuarioLabel">[Cargando...]</strong></p> 395 <p>Registre su fecha de nacimiento para poder resetear su clave:</p> 396 <p>¿Desea recuperar su contraseña?</p> 397 <input type="date" id="nacimientoInput" class="form-control" placeholder="dd/mm/aaaa"> 398 </div> 399 <div class="modal-footer"> 400 <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cerrar</button> 401 <button type="button" class="btn btn-warning" onclick="cambiarClave()">Validar</button> 402 </div> 403 </div> 404 </div> 405</div> 406 407 408<div class="login-wrap"> 409 <div class="row g-0 min-vh-100"> 410 <!-- LADO IZQUIERDO (HÃROE) --> 411 <div class="col-lg-9 hero d-none d-lg-block"> 412 <img class="hero-figure" 413 src="/media/logo/UCG-portada.jpg" 414 alt="Graduado UPSE"> 415 <div class="hero-copy d-flex align-items-start gap-3"> 416 <div> 417 418 </div> 419 </div> 420 </div> 421 422 <!-- LADO DERECHO (LOGIN) --> 423 <div class="col-lg-3 login-panel"> 424 <div class="login-card shadow-sm border-0"> 425 <div class="card-body"> 426 <div class="brand"> 427 <!-- usa tu logo o deja el texto --> 428 <img src="/static/images/logo_casa_grande.png" alt="Postgrado UPSE"> 429 </div> 430 431 <h2 class="text-center mb-4" >Iniciar sesión</h2> 432 <p class="text-muted text-center mb-0" style="font-size:.8rem"> 433 <b>¡Bienvenido/a a tu plataforma académica! </b> </p> 434 <p class="text-muted text-center mb-0" style="font-size:.8rem"> <b>Por favor, inicia sesión con tus credenciales. </p> 435 <form action="index.html"> 436 <div class="mb-4"> 437 <label class="mb-1 text-black">Usuario:</label> 438 <input type="email" id="username" class="form-control" value=""> 439 </div> 440 <div class="mb-4"> 441 <label class="mb-1 text-black">Contraseña:</label> 442 <input type="password" id="password" class="form-control" value=""> 443 </div> 444 445 <div class="text-center mb-4"> 446 <a href="javascript:;" id="login" class="btn btn-warning text-white btn-block w-100 py-2 btn-lg">Iniciar sesión</a> 447 </div> 448 <p class="text-center">¿No tienes usuario y clave para ingresar? 449 <a target="_blank" class="btn-link text-primary" 450 href="https://www.casagrande.edu.ec/posgrado/">RegÃstrate aquÃ</a> 451 </p> 452 <p class="text-center"> 453 <a class="btn-link text-primary" onclick="recuperar_claves_de_acceso()" 454 href="Javascript:void(0);">Recuperar tus credenciales de acceso aqui!</a> 455 </p> 456 457 </form> 458 459 <div class="mt-4 helper-links text-center"> 460 461 462 463 464 465 </div> 466 </div> 467 </div> 468 </div> 469 <!-- /panel --> 470 </div> 471</div> 472 473<div id="preloader" style="display:none"> 474 <div class="sk-three-bounce">
475 <div class="sk-child sk-bounce1"></div> 476 <div class="sk-child sk-bounce2"></div> 477 <div class="sk-child sk-bounce3"></div> 478 </div> 479</div> 480 481 482<!-- Scripts --> 483 484 485<!-- Libs JS -->
486<script src="/static/geeks/assets/libs/jquery/dist/jquery.min.js"></script>
486 487
488<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.blockUI/2.70/jquery.blockUI.min.js"></script>
488 489 490
491<script src="/static/geeks/assets/libs/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
vendor: 1 bytes, line 491
491
492<script src="/static/geeks/assets/libs/odometer/odometer.min.js"></script>
vendor: 1 bytes, line 492
492
493<script src="/static/geeks/assets/libs/magnific-popup/dist/jquery.magnific-popup.min.js"></script>
vendor: 1 bytes, line 493
493
494<script src="/static/geeks/assets/libs/bootstrap-select/dist/js/bootstrap-select.min.js"></script>
vendor: 1 bytes, line 494
494
495<script src="/static/geeks/assets/libs/flatpickr/dist/flatpickr.min.js"></script>
vendor: 1 bytes, line 495
495
496<script src="/static/geeks/assets/libs/inputmask/dist/jquery.inputmask.min.js"></script>
vendor: 1 bytes, line 496
496
497<script src="/static/geeks/assets/libs/apexcharts/dist/apexcharts.min.js"></script>
vendor: 1 bytes, line 497
497
498<script src="/static/geeks/assets/libs/quill/dist/quill.min.js"></script>
vendor: 1 bytes, line 498
498
499<script src="/static/geeks/assets/libs/file-upload-with-preview/dist/file-upload-with-preview.min.js"></script>
vendor: 1 bytes, line 499
499
500<script src="/static/geeks/assets/libs/dragula/dist/dragula.min.js"></script>
vendor: 1 bytes, line 500
500
501<script src="/static/geeks/assets/libs/bs-stepper/dist/js/bs-stepper.min.js"></script>
vendor: 1 bytes, line 501
501
502<script src="/static/geeks/assets/libs/dropzone/dist/min/dropzone.min.js"></script>
vendor: 1 bytes, line 502
502
503<script src="/static/geeks/assets/libs/jQuery.print/jQuery.print.js"></script>
vendor: 1 bytes, line 503
503
504<script src="/static/geeks/assets/libs/prismjs/prism.js"></script>
vendor: 1 bytes, line 504
504
505<script src="/static/geeks/assets/libs/prismjs/components/prism-scss.min.js"></script>
vendor: 1 bytes, line 505
505
506<script src="/static/geeks/assets/libs/%2540yaireo/tagify/dist/tagify.min.js"></script>
vendor: 1 bytes, line 506
506
507<script src="/static/geeks/assets/libs/tiny-slider/dist/min/tiny-slider.js"></script>
vendor: 1 bytes, line 507
507
508<script src="/static/geeks/assets/libs/%2540popperjs/core/dist/umd/popper.min.js"></script>
vendor: 1 bytes, line 508
508
509<script src="/static/geeks/assets/libs/tippy.js/dist/tippy-bundle.umd.min.js"></script>
vendor: 1 bytes, line 509
509
510<script src="/static/geeks/assets/libs/typed.js/lib/typed.min.js"></script>
vendor: 1 bytes, line 510
510
511<script src="/static/geeks/assets/libs/jsvectormap/dist/js/jsvectormap.min.js"></script>
vendor: 1 bytes, line 511
511
512<script src="/static/geeks/assets/libs/jsvectormap/dist/maps/world.js"></script>
vendor: 1 bytes, line 512
512
513<script src="/static/geeks/assets/libs/datatables.net/js/jquery.dataTables.min.js"></script>
vendor: 1 bytes, line 513
513
514<script src="/static/geeks/assets/libs/datatables.net-bs5/js/dataTables.bootstrap5.min.js"></script>
vendor: 1 bytes, line 514
514
515<script src="/static/geeks/assets/libs/datatables.net-responsive/js/dataTables.responsive.min.js"></script>
vendor: 1 bytes, line 515
515
516<script src="/static/geeks/assets/libs/datatables.net-responsive-bs5/js/responsive.bootstrap5.min.js"></script>
vendor: 1 bytes, line 516
516
517<script src="/static/geeks/assets/libs/prismjs/plugins/toolbar/prism-toolbar.min.js"></script>
vendor: 1 bytes, line 517
517
518<script src="/static/geeks/assets/libs/prismjs/plugins/copy-to-clipboard/prism-copy-to-clipboard.min.js"></script>
vendor: 1 bytes, line 518
518
519<script src="/static/geeks/assets/libs/fullcalendar/main.min.js"></script>
vendor: 1 bytes, line 519
519
520<script src="/static/geeks/assets/libs/%2540lottiefiles/lottie-player/dist/lottie-player.js"></script>
vendor: 1 bytes, line 520
520
521<script src="/static/geeks/assets/libs/simplebar/dist/simplebar.min.js"></script>
vendor: 1 bytes, line 521
521
522<script src="/static/geeks/assets/libs/nouislider/dist/nouislider.min.js"></script>
vendor: 1 bytes, line 522
522
523<script src="/static/geeks/assets/libs/wnumb/wNumb.min.js"></script>
vendor: 1 bytes, line 523
523
524<script src="/static/geeks/assets/libs/glightbox/dist/js/glightbox.min.js"></script>
vendor: 1 bytes, line 524
524
525<script src="/static/vendor/toastr/js/toastr.min.js "></script>
525 526 527 528<!-- Theme JS -->
529<script src="/static/geeks/assets/js/theme.min.js"></script>
vendor: 1 bytes, line 529
529
530<script src="/static/js/manage.js"></script>
530 531
532<script src="/static/vendor/sweetalert2/dist/sweetalert2.min.js"></script>
vendor: 1 bytes, line 532
532
533<script src="/static/js/plugins-init/sweetalert.init.js"></script>
533 534<link href="/static/sweet2/sweetalert2.css?2.0.3" rel="stylesheet"/>
535<script src="/static/sweet2/sweetalert2.js?1.0.1"></script>
vendor: 1 bytes, line 535
535
536<script type="text/javascript"> 537 $(document).ready(function () { 538 var mobile = false; 539 bloquearpantalla = function () { 540 if (typeof jQuery.blockUI !== 'function') { 541 console.warn('jquery.blockUI no está cargado'); 542 return; 543 } 544 if (!$(".blockUI").length) { 545 $.blockUI({ 546 message: $('#preloader'), 547 css: { 548 backgroundColor: 'transparent', 549 border: '0', 550 zIndex: 9999999 551 }, 552 overlayCSS: { 553 backgroundColor: '#fff', 554 opacity: 0.8, 555 zIndex: 9999990 556 } 557 }); 558 } 559 }; 560 clienteinfo = function (window) { 561 { 562 var unknown = '-'; 563 564 // screen 565 var screenSize = ''; 566 if (screen.width) { 567 width = (screen.width) ? screen.width : ''; 568 height = (screen.height) ? screen.height : ''; 569 screenSize += '' + width + " x " + height; 570 } 571 572 // browser 573 var nVer = navigator.appVersion; 574 var nAgt = navigator.userAgent; 575 var browser = navigator.appName; 576 var version = '' + parseFloat(navigator.appVersion); 577 var majorVersion = parseInt(navigator.appVersion, 10); 578 var nameOffset, verOffset, ix; 579 580 // Opera 581 if ((verOffset = nAgt.indexOf('Opera')) != -1) { 582 browser = 'Opera'; 583 version = nAgt.substring(verOffset + 6); 584 if ((verOffset = nAgt.indexOf('Version')) != -1) { 585 version = nAgt.substring(verOffset + 8); 586 } 587 } 588 // Opera Next 589 if ((verOffset = nAgt.indexOf('OPR')) != -1) { 590 browser = 'Opera'; 591 version = nAgt.substring(verOffset + 4); 592 } 593 // MSIE 594 else if ((verOffset = nAgt.indexOf('MSIE')) != -1) { 595 browser = 'Microsoft Internet Explorer'; 596 version = nAgt.substring(verOffset + 5); 597 } 598 // Chrome 599 else if ((verOffset = nAgt.indexOf('Chrome')) != -1) { 600 browser = 'Chrome'; 601 version = nAgt.substring(verOffset + 7); 602 } 603 // Safari 604 else if ((verOffset = nAgt.indexOf('Safari')) != -1) { 605 browser = 'Safari'; 606 version = nAgt.substring(verOffset + 7); 607 if ((verOffset = nAgt.indexOf('Version')) != -1) { 608 version = nAgt.substring(verOffset + 8); 609 } 610 } 611 // Firefox 612 else if ((verOffset = nAgt.indexOf('Firefox')) != -1) { 613 browser = 'Firefox'; 614 version = nAgt.substring(verOffset + 8); 615 } 616 // MSIE 11+ 617 else if (nAgt.indexOf('Trident/') != -1) { 618 browser = 'Microsoft Internet Explorer'; 619 version = nAgt.substring(nAgt.indexOf('rv:') + 3); 620 } 621 // Other browsers 622 else if ((nameOffset = nAgt.lastIndexOf(' ') + 1) < (verOffset = nAgt.lastIndexOf('/'))) { 623 browser = nAgt.substring(nameOffset, verOffset); 624 version = nAgt.substring(verOffset + 1); 625 if (browser.toLowerCase() == browser.toUpperCase()) { 626 browser = navigator.appName; 627 } 628 } 629 // trim the version string 630 if ((ix = version.indexOf(';')) != -1) version = version.substring(0, ix); 631 if ((ix = version.indexOf(' ')) != -1) version = version.substring(0, ix); 632 if ((ix = version.indexOf(')')) != -1) version = version.substring(0, ix); 633 634 majorVersion = parseInt('' + version, 10); 635 if (isNaN(majorVersion)) { 636 version = '' + parseFloat(navigator.appVersion); 637 majorVersion = parseInt(navigator.appVersion, 10); 638 } 639 640 // mobile version 641 mobile = /Mobile|mini|Fennec|Android|iP(ad|od|hone)/.test(nVer); 642 // cookie 643 var cookieEnabled = (navigator.cookieEnabled) ? true : false;
644 645 if (typeof navigator.cookieEnabled == 'undefined' && !cookieEnabled) { 646 document.cookie = 'testcookie'; 647 cookieEnabled = (document.cookie.indexOf('testcookie') != -1) ? true : false; 648 } 649 650 // system 651 var os = unknown; 652 var clientStrings = [ 653 {s: 'Windows 10', r: /(Windows 10.0|Windows NT 10.0)/}, 654 {s: 'Windows 8.1', r: /(Windows 8.1|Windows NT 6.3)/}, 655 {s: 'Windows 8', r: /(Windows 8|Windows NT 6.2)/}, 656 {s: 'Windows 7', r: /(Windows 7|Windows NT 6.1)/}, 657 {s: 'Windows Vista', r: /Windows NT 6.0/}, 658 {s: 'Windows Server 2003', r: /Windows NT 5.2/}, 659 {s: 'Windows XP', r: /(Windows NT 5.1|Windows XP)/}, 660 {s: 'Windows 2000', r: /(Windows NT 5.0|Windows 2000)/}, 661 {s: 'Windows ME', r: /(Win 9x 4.90|Windows ME)/}, 662 {s: 'Windows 98', r: /(Windows 98|Win98)/}, 663 {s: 'Windows 95', r: /(Windows 95|Win95|Windows_95)/}, 664 {s: 'Windows NT 4.0', r: /(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/}, 665 {s: 'Windows CE', r: /Windows CE/}, 666 {s: 'Windows 3.11', r: /Win16/}, 667 {s: 'Android', r: /Android/}, 668 {s: 'Open BSD', r: /OpenBSD/}, 669 {s: 'Sun OS', r: /SunOS/}, 670 {s: 'Linux', r: /(Linux|X11)/}, 671 {s: 'iOS', r: /(iPhone|iPad|iPod)/}, 672 {s: 'Mac OS X', r: /Mac OS X/}, 673 {s: 'Mac OS', r: /(MacPPC|MacIntel|Mac_PowerPC|Macintosh)/}, 674 {s: 'QNX', r: /QNX/}, 675 {s: 'UNIX', r: /UNIX/}, 676 {s: 'BeOS', r: /BeOS/}, 677 {s: 'OS/2', r: /OS\/2/}, 678 {s: 'Search Bot', r: /(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\/Teoma|ia_archiver)/} 679 ]; 680 for (var id in clientStrings) { 681 var cs = clientStrings[id]; 682 if (cs.r.test(nAgt)) { 683 os = cs.s; 684 break; 685 } 686 } 687 688 var osVersion = unknown; 689 690 if (/Windows/.test(os)) { 691 osVersion = /Windows (.*)/.exec(os)[1]; 692 os = 'Windows'; 693 } 694 695 switch (os) { 696 case 'Mac OS X': 697 osVersion = /Mac OS X (10[\.\_\d]+)/.exec(nAgt)[1]; 698 break; 699 700 case 'Android': 701 osVersion = /Android ([\.\_\d]+)/.exec(nAgt)[1]; 702 break; 703 704 case 'iOS': 705 osVersion = /OS (\d+)_(\d+)_?(\d+)?/.exec(nVer); 706 osVersion = osVersion[1] + '.' + osVersion[2] + '.' + (osVersion[3] | 0); 707 break; 708 } 709 710 // flash (you'll need to include swfobject) 711 /* script src="//ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js" */ 712 var flashVersion = 'no check'; 713 if (typeof swfobject != 'undefined') { 714 var fv = swfobject.getFlashPlayerVersion(); 715 if (fv.major > 0) { 716 flashVersion = fv.major + '.' + fv.minor + ' r' + fv.release; 717 } else { 718 flashVersion = unknown; 719 } 720 } 721 } 722 723 window.jscd = { 724 screen: screenSize, 725 browser: browser, 726 browserVersion: version, 727 browserMajorVersion: majorVersion, 728 mobile: mobile, 729 os: os, 730 osVersion: osVersion, 731 cookies: cookieEnabled, 732 flashVersion: flashVersion 733 }; 734 }; 735 736 function mensajeErrorSwal(titulo, mensaje) { 737 Swal.fire({ 738 allowOutsideClick: false, 739 allowEscapeKey: false, 740 allowEnterKey: false, 741 type: 'error', 742 customClass: { 743 confirmButton: 'btn btn-warning' 744 }, 745 title: titulo, 746 text: mensaje, 747 confirmButtonText: 'Aceptar', 748 }) 749 } 750 751 clienteinfo(window); 752 $("#username").on("input", function () { 753 if ($(this).val().length != 0) {
754 $("#invalid-username").html('').show(); 755 } 756 }); 757 $("#password").on("input", function () { 758 if ($(this).val().length != 0) { 759 $("#invalid-password").html('').show(); 760 } 761 }); 762 $('#username').keyup(function (e) { 763 if (e.keyCode == 13) { 764 $("#password").focus(); 765 } 766 }); 767 $('#password').keyup(function (e) { 768 if (e.keyCode == 13) { 769 $("#login").trigger("click"); 770 } 771 }); 772 $("#login").click(function () { 773 var usuario = $("#username").val(); 774 if (usuario.length == 0) { 775 $("#invalid-username").html('Debe Ingresar su usuario').show(); 776 $("#username").focus(); 777 return false; 778 } 779 var clave = $("#password").val(); 780 if (clave.length == 0) { 781 $("#invalid-password").html('Debe Ingresar su contraseña').show(); 782 $("#password").focus(); 783 return false; 784 } 785 $("#login").attr({"disabled": "disabled"}); 786 bloquearpantalla(); 787 $.ajax({ 788 type: "POST", 789 url: "/login", 790 dataType: "json", 791 data: {"action": "login", "usuario": usuario, "clave": clave, csrfmiddlewaretoken: 'hQ4FJAQNHHe6HUP91oS9wZH1gh5iE8zBaBZpzpW0ZGhCWSAHdgTzmcuvBBRtzcqj',}, 792 success: function (data) { 793 if (data.result == 'ok') { 794 window.location.href = data.next_url || '/'; 795 } else { 796 $.unblockUI(); 797 console.log("Bad at love") 798 mensajeErrorSwal('Login Fallido', data.mensaje); 799 800 801 802 803 } 804 }, 805 error: function () { 806 $("#login").removeAttr('disabled'); 807 $("#invalid-data").html('Error al enviar los datos').show(); 808 }, 809 }); 810 }); 811 812 813 var navegador = jscd.browser + ' ' + jscd.browserMajorVersion; 814 var os = jscd.os + ' ' + jscd.osVersion; 815 var cookies = jscd.cookies; 816 var screensize = jscd.screen; 817 818 const urlParams = new URLSearchParams(window.location.search); 819 if (urlParams.get('expired') === '1') { 820 Swal.fire({ 821 type: 'warning', 822 title: 'Sesión expirada', 823 text: 'Tu sesión ha expirado por inactividad. Por favor, inicia sesión nuevamente.', 824 confirmButtonText: 'Entendido', 825 allowOutsideClick: false 826 }); 827 } 828 829 }); 830 831 function getCookie(name) { 832 var cookieValue = null; 833 if (document.cookie && document.cookie !== '') { 834 var cookies = document.cookie.split(';'); 835 for (var i = 0; i < cookies.length; i++) { 836 var cookie = jQuery.trim(cookies[i]); 837 // Does this cookie string begin with the name we want? 838 if (cookie.substring(0, name.length + 1) === (name + '=')) { 839 cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); 840 break; 841 } 842 } 843 } 844 return cookieValue; 845 } 846 847 var csrftoken = getCookie('csrftoken'); 848 849 function csrfSafeMethod(method) { 850 return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method)); 851 } 852 853 $.ajaxSetup({ 854 beforeSend: function (xhr, settings) { 855 if (!csrfSafeMethod(settings.type) && !this.crossDomain) { 856 xhr.setRequestHeader("X-CSRFToken", csrftoken); 857 } 858 } 859 }); 860 861</script>
861 862</body> 863</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.