From 8a331d18a655032c4a9d11af1045777f84ad5724 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ernesto=20Canales=20Pere=C3=B1a?= Date: Sun, 18 Jun 2023 21:12:32 +0200 Subject: [PATCH] Files added to repository --- README.md | 12 + background.js | 5 + content.js | 0 estilo.css | 325 +++++++ icon128.png | Bin 0 -> 2443 bytes icon16.png | Bin 0 -> 500 bytes icon32.png | Bin 0 -> 749 bytes icon48.png | Bin 0 -> 1059 bytes index.html | 72 ++ manifest.json | 32 + script.js | 1378 +++++++++++++++++++++++++++++ scripts/contraseñaSeguras.js | 75 ++ scripts/html.js | 252 ++++++ scripts/modales/modalCompartir.js | 26 + scripts/modales/modalCrear.js | 130 +++ scripts/modales/modalesEditar.js | 151 ++++ scripts/plantillas.js | 75 ++ scripts/plog.js | 173 ++++ scripts/qrcode.js | 614 +++++++++++++ scripts/seguridad.js | 158 ++++ 20 files changed, 3478 insertions(+) create mode 100644 README.md create mode 100644 background.js create mode 100644 content.js create mode 100644 estilo.css create mode 100644 icon128.png create mode 100644 icon16.png create mode 100644 icon32.png create mode 100644 icon48.png create mode 100644 index.html create mode 100644 manifest.json create mode 100644 script.js create mode 100644 scripts/contraseñaSeguras.js create mode 100644 scripts/html.js create mode 100644 scripts/modales/modalCompartir.js create mode 100644 scripts/modales/modalCrear.js create mode 100644 scripts/modales/modalesEditar.js create mode 100644 scripts/plantillas.js create mode 100644 scripts/plog.js create mode 100644 scripts/qrcode.js create mode 100644 scripts/seguridad.js diff --git a/README.md b/README.md new file mode 100644 index 0000000..4a066e6 --- /dev/null +++ b/README.md @@ -0,0 +1,12 @@ +# DataBank-Extension + + +1. Clone this repository + +```bash +git clone http://git.wacanal.cloud/ernie/databank-extension.git +``` + +2. Open Google Chrome and go to the option "Extensions->Manage Extensions" +3. Once in the extension manager, select "Load unpacked" +4. Select the cloned repository diff --git a/background.js b/background.js new file mode 100644 index 0000000..f8931c0 --- /dev/null +++ b/background.js @@ -0,0 +1,5 @@ +chrome.browserAction.onClicked.addListener(function(tab){ + chrome.tabs.create({ + url: ("index.html") + }); +}); \ No newline at end of file diff --git a/content.js b/content.js new file mode 100644 index 0000000..e69de29 diff --git a/estilo.css b/estilo.css new file mode 100644 index 0000000..e121f9d --- /dev/null +++ b/estilo.css @@ -0,0 +1,325 @@ +/* +Al cuerpo de la +pagina se aplica el tamaño de fuente + */ + html{ + overflow: scroll; + } + body { + font-size: 12px; + background-size: cover; + background: linear-gradient(rgba(255,255,255,0.7), rgba(255, 255, 255, 0.7)), url("https://images-ext-2.discordapp.net/external/I4WDr_mFwmEPpd1gYZpWqmZ8Fod844njMPCXgLycCfk/https/www.incimages.com/uploaded_files/image/1920x1080/getty_913017342_415366.jpg?width=1191&height=670"); + background-size: 1850px 850px; + font-family: 'Varela Round', sans-serif; + font-size: 13px; + +} +/** + * se aplica el ancho, margen centrado + * borde de un pixel con redondeado, y rellenado + * a la izquierda y derecha + */ +#Contenedor{ + width: 400px; + margin: 50px auto; + height: 400px; + border-radius:8px; + padding: 0px 9px 0px 9px; +} + +/** + * Aplicando al icono de usuario el color de fondo, + * rellenado de 20px y un redondeado de 120px en forma + * de un circulo + */ +.Icon span{ + background: #A8A6A6; + padding: 20px; + border-radius: 120px; +} +/** + * Se aplica al contenedor madre un margen de tamaño 10px hacia la cabecera y pie, + * color de fuente blanco,un tamaño de fuente 50px y texto centrado. + */ +.Icon{ + margin-top: 10px; + margin-bottom:10px; + color: #FFF; + font-size: 50px; + text-align: center; +} +/** + * Se aplica al contenedor donde muestra en el pie + * la opción de olvidaste tu contraseña? + */ +.opcioncontra{ + text-align: center; + margin-top: 20px; + font-size: 14px; +} + +/** + * En las siguientes lineas + * se define el diseño adaptable, para que + * se muestre en los dispositivos móviles + */ + +/******************************************/ +/*** DISEÑO PARA MOVILES 320 ****/ +/******************************************/ +@media only screen and (max-width:320px){ + #Contenedor{ + width: 100%; + height: auto; + margin: 0px; + } +} + +/******************************************/ +/*** DISEÑO PARA MOVILES 240 ****/ +/******************************************/ +@media only screen and (max-width:240px){ + +} + +.buttonAddPass { + position: relative; + top: 100px; + left: 1217px; +} + +.buttonAddUser { + text-align: center; +} + + + + /* Modal styles */ + .modal .modal-dialog { + max-width: 450px; + } + .modal .modal-header, .modal .modal-body, .modal .modal-footer { + padding: 20px 30px; + } + .modal .modal-content { + border-radius: 3px; + } + .modal .modal-footer { + background: #ecf0f1; + border-radius: 0 0 3px 3px; + } + .modal .modal-title { + display: inline-block; + } + .modal .form-control { + border-radius: 2px; + box-shadow: none; + border-color: #dddddd; + } + .modal textarea.form-control { + resize: vertical; + } + .modal .btn { + border-radius: 2px; + min-width: 100px; + } + .modal form label { + font-weight: normal; + } + + + /* Table styles */ + .table-responsive { + margin: 30px 0; + } + .table-wrapper { + min-width: 1000px; + background: #fff; + padding: 20px 25px; + border-radius: 3px; + box-shadow: 0 1px 1px rgba(0,0,0,.05); + } + .table-title { + padding-bottom: 15px; + background: #435d7d; + color: #fff; + padding: 16px 30px; + margin: -20px -25px 10px; + border-radius: 3px 3px 0 0; + } + .table-title h2 { + margin: 5px 0 0; + font-size: 24px; + } + .table-title .btn-group { + float: right; + } + .table-title .btn { + color: #fff; + float: right; + font-size: 13px; + border: none; + min-width: 50px; + border-radius: 2px; + border: none; + outline: none !important; + margin-left: 10px; + } + .table-title .btn i { + float: left; + font-size: 21px; + margin-right: 5px; + } + .table-title .btn span { + float: left; + margin-top: 2px; + } + table.table tr th, table.table tr td { + border-color: #e9e9e9; + padding: 12px 15px; + vertical-align: middle; + } + table.table tr th:first-child { + width: 250px; + } + table.table tr th:last-child { + width: 130px; + } + table.table-striped tbody tr:nth-of-type(odd) { + background-color: #fcfcfc; + } + table.table-striped.table-hover tbody tr:hover { + background: #f5f5f5; + } + table.table th i { + font-size: 13px; + margin: 0 5px; + cursor: pointer; + } + table.table td:last-child i { + opacity: 0.9; + font-size: 22px; + margin: 0 5px; + } + table.table td a { + font-weight: bold; + color: #566787; + display: inline-block; + text-decoration: none; + outline: none !important; + } + table.table td a:hover { + color: #2196F3; + } + table.table td a.edit { + color: #FFC107; + } + table.table td a.delete { + color: #F44336; + } + table.table td i { + font-size: 19px; + } + table.table .avatar { + border-radius: 50%; + vertical-align: middle; + margin-right: 10px; + } + + a { + cursor:pointer; + } + + .passCaja{ + color:transparent; + cursor:default; + } + + .ojo{ + cursor:pointer; + color: #7e9ac7 ; + } + + #opcionesContraseña{ + height: 45px; + } + + .nav_menu{ + margin-top: 30px; + } + + .nav_menu_tabs{ + display: inline-block; + } + + .nav_menu_botones{ + float: right; + } + + /*mostrar y ocultar tablas compartido y privado*/ + .archivosOcultos{ + display:none !important; + } + + .modal-compartir{ + /*text-align: center;*/ + } + + .multiselect-container{ + overflow:scroll; + max-height: 200px; + } + + .isDisabled { + color: currentColor; + cursor: not-allowed; + opacity: 0.5; + text-decoration: none; + pointer-events: none; + } + + #archivosCompartidosList{ + overflow:scroll; + max-height: 200px; + } + + #archivosCompartidosConmigoList{ + overflow:scroll; + max-height: 200px; + } + + + .qrCode{ + display: block; + margin: auto; + margin-top: 50px; + } + + .badgebox + { + opacity: 0; + } + + .badgebox + .badge + { + /* Move the check mark away when unchecked */ + text-indent: -999999px; + /* Makes the badge's width stay the same checked and unchecked */ + width: 27px; + } + + .badgebox:focus + .badge + { + /* Set something to make the badge looks focused */ + /* This really depends on the application, in my case it was: */ + + /* Adding a light border */ + box-shadow: inset 0px 0px 5px; + /* Taking the difference out of the padding */ + } + + .badgebox:checked + .badge + { + /* Move the check mark back when checked */ + text-indent: 0; + } \ No newline at end of file diff --git a/icon128.png b/icon128.png new file mode 100644 index 0000000000000000000000000000000000000000..7e819bcb88c467c221a0a4cc3f6cc7cfbf862508 GIT binary patch literal 2443 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 literal 0 HcmV?d00001 diff --git a/index.html b/index.html new file mode 100644 index 0000000..8f3adf9 --- /dev/null +++ b/index.html @@ -0,0 +1,72 @@ + + + + Proyecto ES + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+
+ + +
+
+
+ + + +
+ + +
+
+
+
+ + +
+ + + + + + + \ No newline at end of file diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..aff41a3 --- /dev/null +++ b/manifest.json @@ -0,0 +1,32 @@ +{ + "manifest_version": 2, + "name": "SE", + "version": "1.0.0", + "description": "Extension for SecureDataBank", + "icons": { + "128": "icon128.png", + "32": "icon32.png", + "48": "icon48.png" + }, + "browser_action": { + "default_icon": { + "16": "icon16.png", + "32": "icon32.png" + }, + "default_title": "Extension for SecureDataBank" + }, + "content_security_policy": "script-src 'self' https://unpkg.com/ https://fonts.googleapis.com/ https://cdn.datatables.net/ https://maxcdn.bootstrapcdn.com/ https://ajax.googleapis.com/ https://cdnjs.cloudflare.com/; object-src 'self'", + "background": + { + "scripts": ["background.js"], + "persistent": false + }, + "content_scripts": [ + { + "matches": [""], + "js": ["content.js"], + "run_at": "document_end" + } + ] +} + diff --git a/script.js b/script.js new file mode 100644 index 0000000..8a3d0cd --- /dev/null +++ b/script.js @@ -0,0 +1,1378 @@ + +import {rellenarContraseña} from './scripts/contraseñaSeguras.js'; +import {bodyHTML, bodyFA} from './scripts/html.js'; +import {modal} from './scripts/modales/modalCrear.js'; +import {modalCompartir} from './scripts/modales/modalCompartir.js'; +import {modalEUsuario,modalENota,modalEditTarjetaCredito,modalEditCuentaBancaria} from './scripts/modales/modalesEditar.js'; +import {plantillaUsuario,plantillaNota,plantillaTarjetaCredito,plantillaCuentaBancaria} from './scripts/plantillas.js' +import {sha512, sha256, cifrar,descifrar,utf8_to_b64,b64_to_utf8,generarParDeClaves,exportarClave,importarClavePublica,importarClavePrivada,cifrarConPublica,descifrarConPrivada,CodificarDatos,DecodificarDatos} from './scripts/seguridad.js' + + +//const baseDominio = '...'; +//const portTLS = '..'; +//const portTLS = '..'; +const baseDominio = '192.168.10.2'; +const portTLS = '4000'; +var time; + +// Creamos el almacenamiento. De momento el único almacenamiento persistente es +// LocalStorage, pero es fácil definir alternativas basadas en WebSQL, IndexedDB, etc. +/*var storage = new plog.storages.LocalStorage({maxSize: 200}) + +// Configuramos plog para que use el almacenamiento que acabamos de crear +plog.useStorage(storage); + +plog.setLevel(plog.level.INFO); + +// Escribimos mensajes en el log +plog.debug('debug message'); +plog.info('info message'); +plog.warn('warn message'); +plog.error('error message'); +plog.fatal('fatal message'); + +var events = storage.getEvents(); +console.log(events);*/ + + +/** + * funcion que devulve una columna (td) con los botones de borrar y editar, a la que le pasamos las funciones manejadoras de eventos, nombre de la tabla y variable i de esa tabla + * @param {*} i variable i del bucle para indicar el número del usuario + * @param {*} funcionBorrar funcion manejadora del evento click del boton borrar + * @param {*} funcionEditar funcion manejadora del evento click del boton editar + * @param {*} nombreTabla nombre de la tabla a la que se quiere añadir los botones + * @returns devuelve la columna (td) con los botones y sus manejadores añadidos + */ +function botonesEditarBorrar(i, funcionBorrar, funcionEditar, nombreTabla){ + + let columna = document.createElement('td'); + let buttonEditar = document.createElement('a'); //Boton editar + buttonEditar.innerHTML = ``; + buttonEditar.id = 'Editar'+nombreTabla+'-' + i; + buttonEditar.className = "edit"; + buttonEditar.setAttribute("data-index", i); + let buttonBorrar = document.createElement('a'); //Boton borrar + buttonBorrar.innerHTML = ``; + buttonBorrar.id = 'Borra'+nombreTabla+'-' + i; + buttonBorrar.classList.add("delete"); + + + //Evento Borrar + buttonBorrar.addEventListener("click", funcionBorrar, false); + //Evento Editar Usuario + buttonEditar.addEventListener("click", funcionEditar, false); + + + columna.appendChild(buttonEditar); + columna.appendChild( document.createTextNode( '\u00A0' ) ); //Espacio + columna.appendChild(buttonBorrar); + + return columna; +} + +/** + * Funcion que le pasas el nombre del id (sin #) de la tabla y le añade el dataTables de JQuery + * @param {*} idTabla es el id (sin el #) de la tabla a la que se le quiere añadir las funcionalidades de las Data Tables + */ +function dataTablesJQuery(idTabla) { + jQuery(document).ready(function($){ + $('#'+idTabla).DataTable({ + language: { + lengthMenu: "Filtro _MENU_", + info: "Página _PAGE_ de _PAGES_", + search: "Buscar", + zeroRecords: "No encontrado", + infoEmpty: "No hay contenido", + infoFiltered: "(de _MAX_ registros)", + paginate: { + first: "Primero", + last: "Último", + next: "Siguiente", + previous: "Anterior" + } + }, + lengthMenu: [ 5, 10, 25, 50, 75, 100 ] + }); + }); +} + +/** + * La función a partir del objeto de la sesion actual, crea la tabla del tipo de dato pasado (en plural), con la funcion editar y borrar pasada + * @param {*} objetoJS objeto de la sesion actual + * @param {*} tipoDato indica el tipo de dato (en plural y string) del cual se va a rellenar la tabla + * @param {*} esUsuario booleano que indica si la tabla es de tipo usuario (true), o de otro tipo (false) + * @param {*} funcionEditar funcion manejadora del evento click en editar del dato + * @param {*} funcionBorrar funcion manejadora del evento click en borrar del dato + */ +function rellenarTabla(objetoJS,tipoDato,esUsuario,funcionEditar,funcionBorrar, compartido=false) { + let tabla; + if(!compartido){ + tabla = document.querySelector('#'+tipoDato+'Table'); + } + else{ + tabla = document.querySelector('#'+tipoDato+'TableCompartidos'); + } + + let fila; let columna; let valores; + for(let i = 0; i + `; + + let divCheck = document.createElement('span'); + divCheck.classList.add("form-check", "form-check-inline"); + divCheck.innerHTML = htmlCheck; + columna.appendChild( document.createTextNode( '\u00A0' ) ); //Espacio + columna.appendChild(divCheck); + } + + fila.appendChild(columna); + tabla.appendChild(fila); + } +} +function cambioPrivateToShareAndReverse(event){ + var ul=event.target.parentNode.parentNode,liPrivate=ul.querySelector("#aPrivate").parentNode, liShare=ul.querySelector("#aShare").parentNode; + var li2FA=ul.querySelector("#a2FA").parentNode; + var divPrivate=document.querySelector("#divPrivate"), divShare=document.querySelector("#divShare"), div2FA=document.querySelector("#div2FA"); + var cambiar=false; + var cambiar2FA=false; + let buttonSubirDatos = document.querySelector('#subirDatos'); + let compartir = document.querySelector('#compartirDatosButton'); + let archivosCompartidosButton = document.querySelector('#archivosCompartidosButton'); + let archivosCompartidosConmigoButton = document.querySelector('#archivosCompartidosConmigoButton'); + + if(event.target.getAttribute("href")=="#divPrivate" && event.target.parentNode.classList.contains("active")===false){ + liPrivate.classList.toggle("active"); + li2FA.className = ""; + liShare.className = ""; + ocultarDiv(divShare,compartir,archivosCompartidosButton,archivosCompartidosConmigoButton,div2FA); + mostrarDiv(divPrivate,buttonSubirDatos); + + } + if(event.target.getAttribute("href")=="#divShare" && event.target.parentNode.classList.contains("active")===false){ + liShare.classList.toggle("active"); + liPrivate.className = ""; + li2FA.className = ""; + ocultarDiv(divPrivate,buttonSubirDatos,div2FA); + mostrarDiv(divShare,compartir,archivosCompartidosButton,archivosCompartidosConmigoButton); + + } + if(event.target.getAttribute("href")=="#div2FA" && event.target.parentNode.classList.contains("active")===false){ + li2FA.classList.toggle("active"); + liPrivate.className = ""; + liShare.className = ""; + ocultarDiv(divPrivate,divShare,buttonSubirDatos,compartir,archivosCompartidosButton,archivosCompartidosConmigoButton); + mostrarDiv(div2FA); + let TFA = sessionStorage.getItem('TFA'); + let checkBox2FA = document.querySelector('#act2FA'); + if(TFA==1){ + checkBox2FA.checked = true; + checkBox2FA.setAttribute('disabled', true); + } + if(sessionStorage.getItem('urlQR')){ + let urlQR = sessionStorage.getItem('urlQR'); + generateQR(urlQR); + } + else{ + generateQR(); + } + } + + //window.scroll(0,0); + setTimeout(function(){ window.scroll(0,0);}, 10); +} + +function ocultarDiv(){ + for (var i = 0; i < arguments.length; i++) { + arguments[i].classList.add("archivosOcultos"); + } +} + +function mostrarDiv(){ + for (var i = 0; i < arguments.length; i++) { + arguments[i].classList.remove("archivosOcultos"); + } +} + + +function generateQR(urlQR){ + var qrcode = new QRCode(document.getElementById("qrcode"), { + width : 800, + height : 800, + useSVG: true + }); + + if(urlQR){ + qrcode.makeCode(urlQR); + return; + } + qrcode.makeCode("https://ernestocanales.es"); +} + +function rellenarBody(){ + let cuerpo = document.querySelector('body'); + cuerpo.style.cssText = 'background:linear-gradient(rgba(255,255,255,0.9), rgba(255, 255, 255, 0.9)), url("https://images-ext-2.discordapp.net/external/I4WDr_mFwmEPpd1gYZpWqmZ8Fod844njMPCXgLycCfk/https/www.incimages.com/uploaded_files/image/1920x1080/getty_913017342_415366.jpg?width=1191&height=670");'; + document.body.innerHTML = bodyHTML(); + + document.body.innerHTML += modal(); + document.body.innerHTML += modalCompartir(); + document.body.innerHTML += modalEUsuario(); + document.body.innerHTML += modalENota(); + document.body.innerHTML += modalEditTarjetaCredito(); + document.body.innerHTML += modalEditCuentaBancaria(); + + + //Evento mostrarCompartidosConmigo + let buttonCompartidoConmigo = document.querySelector('#archivosCompartidosConmigoButton'); + buttonCompartidoConmigo.addEventListener("click", listaCompartidosConmigo, false); + //Evento mostrarCompartidos + let buttonCompartido = document.querySelector('#archivosCompartidosButton'); + buttonCompartido.addEventListener("click", listaCompartidos, false); + //Evento mostrarUsuarios + $('#multiSelect').multiselect(); + let buttonSelect = document.querySelector('#multiSelect'); + buttonSelect = buttonSelect.nextElementSibling.firstElementChild; + buttonSelect.addEventListener("click", listaUsuarios, false); + ///Evento compartirDatos + let botonCompartirDatos = document.querySelector('#compartirDatos'); + botonCompartirDatos.addEventListener("click", compartirDatos, false); + //Evento inactividad + inactividad(); + ///Evento SubirDatos + let botonSubirDatos = document.querySelector('#subirDatos'); + botonSubirDatos.addEventListener("click", subirDatos, false); + ///Evento CerrarSesion + let botonCerrarSesion = document.querySelector('#cerrarSesion'); + botonCerrarSesion.addEventListener("click", cerrarSesion, false); + ///Evento AñadirNuevo Modal + let botonA = document.querySelector('#añadirModal'); + botonA.addEventListener("click", nuevoRegistro, false); + ///Eventos generar contraseñas + let c = document.querySelector("#generarContraseña"); + c.addEventListener("click", contraseñaSegura, false); + let v = document.querySelector("#verContraseña"); + v.addEventListener("click", verContraseña, false); + ///Evento editarUsuario Modal + let botonEditarU = document.querySelector('#modalConfirmacionEditarUsuario'); + botonEditarU.addEventListener("click", editarUsuario, false); + ///Evento editarNota Modal + let botonEditarN = document.querySelector('#modalConfirmacionEditarNota'); + botonEditarN.addEventListener("click", editarNota, false); + ///Evento editarTarjetas Modal + let botonEditarT = document.querySelector('#modalConfirmacionEditarTarjetaCredito'); + botonEditarT.addEventListener("click", editarTarejetaCredito, false); + ///Evento editarCuentas Modal + let botonEditarC = document.querySelector('#modalConfirmacionEditarCuentaBancaria'); + botonEditarC.addEventListener("click", editarCuentaBancaria, false); + + ///Evento activar 2FA + let checkBox2FA = document.querySelector('#act2FA'); + checkBox2FA.addEventListener("click", activar2FA, false); + + //Evento archivos privados + let botonesPrivateShare =document.querySelector('#aPrivate'); + botonesPrivateShare.addEventListener("click", cambioPrivateToShareAndReverse, false) + //Evento archivos compartidos + botonesPrivateShare = document.querySelector('#aShare'); + botonesPrivateShare.addEventListener("click", cambioPrivateToShareAndReverse, false); + //Evento 2FA + botonesPrivateShare = document.querySelector('#a2FA'); + botonesPrivateShare.addEventListener("click", cambioPrivateToShareAndReverse, false); + //botonesPrivateShare.addEventListener("click", subirDatosCompartidos, false) + + + + let objetoJS = JSON.parse(sessionStorage.getItem('Objeto')); //Obtenemos el objeto de la sesion actual + + + + + ////Rellenamos tabla, informacion mas botones con sus eventos. + //Tabla usuarios + let funcionEditarUsuario = function () { + let index = $(this).data('index'); + document.querySelector("#editarUsuarioModal").setAttribute("data-index", index); + $('#editarUsuarioModal').modal('show'); //JQUERY + let objetoJS = JSON.parse(sessionStorage.getItem('Objeto')); //Obtenemos el objeto de la sesion actual + $('#DescripcionModalEditarUsuario').attr("placeholder", objetoJS.usuarios[index].descripcion); + $('#URLModalEditarUsuario').attr("placeholder", objetoJS.usuarios[index].url); + $('#UsuarioModalEditarUsuario').attr("placeholder", objetoJS.usuarios[index].usuario); + $('#ContraseñaModalEditarUsuario').attr("placeholder", "*******"); + }; + //rellenar tabla usuarios + rellenarTabla(objetoJS,"usuarios",true,funcionEditarUsuario,borrarUsuario); + + ///////////////////////Tabla notass + + let funcionEditarNota = function () { + let index = $(this).data('index'); + document.querySelector("#editarNotaModal").setAttribute("data-index", index); + $('#editarNotaModal').modal('show'); //JQUERY + let objetoJS = JSON.parse(sessionStorage.getItem('Objeto')); //Obtenemos el objeto de la sesion actual + $('#EditarNombreNota').attr("placeholder", objetoJS.notas[index].nombre); + $('#EditartextoNota').attr("placeholder", objetoJS.notas[index].textoNota); + }; + //rellenar tabla notas + rellenarTabla(objetoJS,"notas",false,funcionEditarNota,borrarNota); + + ///////////////////////Tabla tarjeta de crédito + + let funcionEditarTarjetaCredito = function () { + let index = $(this).data('index'); + document.querySelector("#editarTarjetaCreditoModal").setAttribute("data-index", index); + $('#editarTarjetaCreditoModal').modal('show'); //JQUERY + let objetoJS = JSON.parse(sessionStorage.getItem('Objeto')); //Obtenemos el objeto de la sesion actual + $('#nombreEntidadModalEditarTarjetaCredito').attr("placeholder", objetoJS.tarjetas[index].nombreEntidad); + $('#numTarjetaModalEditarTarjetaCredito').attr("placeholder", objetoJS.tarjetas[index].numTarjeta); + document.querySelector('#fechaCaducidadModalEditarTarjetaCredito').value=objetoJS.tarjetas[index].fechaCaducidad; + $('#nombreTitularModalEditarTarjetaCredito').attr("placeholder", objetoJS.tarjetas[index].nombreTitular); + $('#codigoDeSeguridadModalEditarTarjetaCredito').attr("placeholder", objetoJS.tarjetas[index].codigoDeSeguridad); + }; + //rellenar tabla tarjetas + rellenarTabla(objetoJS,"tarjetas",false,funcionEditarTarjetaCredito,borrarTarjetaCredito); + + ///////////////////////Tabla cuenta bancaria + let funcionEditarCuentaBancaria = function () { + let index = $(this).data('index'); + document.querySelector("#editarCuentaBancariaModal").setAttribute("data-index", index); + $('#editarCuentaBancariaModal').modal('show'); //JQUERY + let objetoJS = JSON.parse(sessionStorage.getItem('Objeto')); //Obtenemos el objeto de la sesion actual + $('#nombreEntidadBancariaModalEditarCuentaBancaria').attr("placeholder", objetoJS.cuentas[index].nombreEntidadBancaria); + $('#IBANModalEditarCuentaBancaria').attr("placeholder", objetoJS.cuentas[index].IBAN); + $('#usuarioBancarioModalEditarCuentaBancaria').attr("placeholder", objetoJS.cuentas[index].usuarioBancario); + $('#contraseñaBancarioModalEditarCuentaBancaria').attr("placeholder", "*******"); + }; + //rellenar tabla cuentas + rellenarTabla(objetoJS,"cuentas",true,funcionEditarCuentaBancaria,borrarCuentaBancaria); + + + //dataTables + $('[data-toggle="tooltip"]').tooltip(); + dataTablesJQuery("tablaUsuarios"); + dataTablesJQuery("tablaNotas"); + dataTablesJQuery("tablaTarjetasCredito"); + dataTablesJQuery("tablaCuentasBancarias"); + + + // Un poco de css dinamico. Eventos para el div de la contraseña + $('.ojo').mouseover(function(){ + var id = $(this).attr("id"); + id = id.split('-')[1]; + $('#contraseñaTablaO' + id).css('color','#373a74'); + }); + $('.ojo').mouseleave(function(){ + var id = $(this).attr("id"); + id = id.split('-')[1]; + $('#contraseñaTablaO' + id).css('color','transparent'); + }); +} + + +///////////////////////////////// +///Evento activar 2FA + +async function activar2FA(event){ + if(event.currentTarget.checked){ + let contraseñaRandom = utf8_to_b64(rellenarContraseña(15)); //Secreto TOTP solucionar esto por dios + let token = sessionStorage.getItem('token'); + + const payload= {'secreto' : contraseñaRandom.toString()}; + + let cabeceras= { + 'Content-Type': 'application/json', + 'Accept': 'application/json', + 'authorization': token + } + + const request = { + method: 'POST', + headers: cabeceras, + body: JSON.stringify(payload), + }; + + let act = await fetch(`https://${baseDominio}:${portTLS}/activar2FA`, request) + .then(function(response) { + if (!response.ok) { + throw Error(response.statusText); + } + return response.json(); + }) + .then(function(responseAsObject) { + if(responseAsObject.error !== null){ + alert(responseAsObject.error) + } + else{ + sessionStorage.setItem('TFA', responseAsObject.result.TFA); + sessionStorage.setItem('urlQR', responseAsObject.result.urlQR); + generateQR(responseAsObject.result.urlQR); + return responseAsObject.result.status; + } + }) + .catch(function(error) { + alert('Ha habido un problema: ' + error); + return null; + }); + + } +} + + +///////////////////////////////// +///Añadir nuevos usuarios y notas, borrar y editar (CRUD) + +function nuevoDatoSimple(tipoDato,esFemenino,objetoDePlantillaDato) { + + let objetoJSONMemoria = sessionStorage.getItem('Objeto'); + let objetoJS = JSON.parse(objetoJSONMemoria); + objetoJS[tipoDato].push(objetoDePlantillaDato); + let objetoNuevosDatosJSON = JSON.stringify(objetoJS); + let key = sessionStorage.getItem('key'); let usuario = sessionStorage.getItem('Usuario'); + //let ficheroCifradoJSON = cifrar(objetoNuevosDatosJSON,key,IV); + //localStorage.setItem(usuario + '_config.json', ficheroCifradoJSON); + sessionStorage.setItem('Objeto', objetoNuevosDatosJSON); + + let tipoDatoSingular=tipoDato.slice(0, -1); + let nuevo="Nuevo", guardado="guardado"; + if(esFemenino){nuevo="Nueva", guardado="guardada";} + alert(nuevo+" "+tipoDatoSingular+" "+guardado+" correctamente"); + rellenarBody(); +} + +function nuevoUsuario(){ + let u = new plantillaUsuario(document.querySelector('#DescripcionModal').value, document.querySelector('#URLModal').value, + document.querySelector('#UsuarioModal').value, document.querySelector('#ContraseñaModal').value); + + nuevoDatoSimple("usuarios",false,u); +} + +function nuevaNota(){ + let n = new plantillaNota(document.querySelector('#NombreNota').value, document.querySelector('#textoNota').value); + + nuevoDatoSimple("notas",true,n); + +} +function nuevaTarjetaCredito(){ + let t = new plantillaTarjetaCredito(document.querySelector('#nombreEntidad').value, document.querySelector('#numTarjeta').value, + document.querySelector('#fechaCaducidad').value, document.querySelector('#nombreTitular').value, document.querySelector('#codigoDeSeguridad').value); + + nuevoDatoSimple("tarjetas",true,t); + +} +function nuevaCuentaBancaria(){ + let c = new plantillaCuentaBancaria(document.querySelector('#nombreEntidadBancaria').value, document.querySelector('#IBAN').value, + document.querySelector('#usuarioBancario').value, document.querySelector('#contraseñaBancario').value); + + nuevoDatoSimple("cuentas",true,c); + +} + +function nuevoRegistro(){ + if (document.querySelector("#NuevoUsuarioTab.active")) { + nuevoUsuario(); + } else if(document.querySelector("#NuevaNotaTab.active")){ + nuevaNota(); + } + else if(document.querySelector("#NuevaTarjetaDeCréditoTab.active")){ + nuevaTarjetaCredito(); + } + else{ + nuevaCuentaBancaria(); + } +} + +function borrarDatoSimple(event,tipoDato, esFemenino) { + let confirmacion = confirm("¿Estas seguro?"); + if(confirmacion){ + let index = event.currentTarget.id; + //let expressionRegular = /\b[a-z]+/ig; //Con expresiones regulares, si no se utiliza un - + index = parseInt(index.split('-')[1], 10); + let objetoJSONMemoria = sessionStorage.getItem('Objeto'); //Seleccionamos el objeto de la sesion actual + let objetoJS = JSON.parse(objetoJSONMemoria); //Lo convertimos a objeto JS + objetoJS[tipoDato].splice(index, 1); //Borramos el elemento + let objetoNuevosDatosJSON = JSON.stringify(objetoJS); //Lo convertimos a JSON de nuevo pero con los nuevos valores + let key = sessionStorage.getItem('key'); let usuario = sessionStorage.getItem('Usuario'); + //let ficheroCifradoJSON = cifrar(objetoNuevosDatosJSON,key,IV); //Ciframos el JSON + //localStorage.setItem(usuario + '_config.json', ficheroCifradoJSON); //Guardamos el fichero json cifrado en memoria (sobrescribe) + sessionStorage.setItem('Objeto', objetoNuevosDatosJSON); //Guardamos en la sesion actual el objeto sin cifrar en JSON (sobrescribe) + + let tipoDatoSingular; + tipoDatoSingular=tipoDato.charAt(0).toUpperCase() + tipoDato.slice(1); + tipoDatoSingular=tipoDatoSingular.slice(0, -1); + let eliminado="eliminado"; function getMessageEncoding() { + const messageBox = document.querySelector("#rsa-oaep-message"); + let message = messageBox.value; + let enc = new TextEncoder(); + return enc.encode(message); + } + if(esFemenino){eliminado="eliminada";} + + alert(tipoDatoSingular+" "+eliminado+" correctamente"); + rellenarBody(); + } +} + +function borrarUsuario(event){ + borrarDatoSimple(event,"usuarios",false); +} + +function borrarNota(event){ + borrarDatoSimple(event,"notas",false); +} +function borrarTarjetaCredito(event){ + borrarDatoSimple(event,"tarjetas",true); +} +function borrarCuentaBancaria(event){ + borrarDatoSimple(event,"cuentas",true); +} + + function editarUsuario(){ //assign hecho + + let descripcion = document.querySelector('#DescripcionModalEditarUsuario'); descripcion = descripcion.value; + let url = document.querySelector('#URLModalEditarUsuario'); url = url.value; + let usuarioC = document.querySelector('#UsuarioModalEditarUsuario'); usuarioC = usuarioC.value; + let contraseña = document.querySelector('#ContraseñaModalEditarUsuario'); contraseña = contraseña.value; + let index = $('#editarUsuarioModal').data('index'); + let objetoJSONMemoria = sessionStorage.getItem('Objeto'); + let objetoJS = JSON.parse(objetoJSONMemoria); + let u = new plantillaUsuario(descripcion, url, usuarioC, contraseña); + objetoJS.usuarios.splice(index, 1, Object.assign(objetoJS.usuarios[index], u)); //indice, eliminamos 1 objeto y hacemos un assign para copiar + let objetoNuevosDatosJSON = JSON.stringify(objetoJS); + let key = sessionStorage.getItem('key'); let usuario = sessionStorage.getItem('Usuario'); + //let ficheroCifradoJSON = cifrar(objetoNuevosDatosJSON,key,IV); + //localStorage.setItem(usuario + '_config.json', ficheroCifradoJSON); + sessionStorage.setItem('Objeto', objetoNuevosDatosJSON); + alert("Usuario actualizado correctamente"); + rellenarBody(); +} + +function editarNota(){ + + let nombre = document.querySelector('#EditarNombreNota'); nombre = nombre.value; + let textoNota = document.querySelector('#EditartextoNota'); textoNota = textoNota.value; + let index = $('#editarNotaModal').data('index'); + let objetoJSONMemoria = sessionStorage.getItem('Objeto'); + let objetoJS = JSON.parse(objetoJSONMemoria); + let n = new plantillaNota(nombre, textoNota); + objetoJS.notas.splice(index, 1, Object.assign(objetoJS.notas[index], n)); //indice, eliminamos 1 objeto y hacemos un assign para copiar + let objetoNuevosDatosJSON = JSON.stringify(objetoJS); + let key = sessionStorage.getItem('key'); let usuario = sessionStorage.getItem('Usuario'); + //let ficheroCifradoJSON = cifrar(objetoNuevosDatosJSON,key,IV); + //localStorage.setItem(usuario + '_config.json', ficheroCifradoJSON); + sessionStorage.setItem('Objeto', objetoNuevosDatosJSON); + alert("Nota actualizada correctamente"); + rellenarBody(); +} + +function editarTarejetaCredito(){ + + let nombreEntidad = document.querySelector('#nombreEntidadModalEditarTarjetaCredito'); nombreEntidad = nombreEntidad.value; + let numTarjeta = document.querySelector('#numTarjetaModalEditarTarjetaCredito'); numTarjeta = numTarjeta.value; + let fechaCaducidad = document.querySelector('#fechaCaducidadModalEditarTarjetaCredito'); fechaCaducidad = fechaCaducidad.value; + let nombreTitular = document.querySelector('#nombreTitularModalEditarTarjetaCredito'); nombreTitular = nombreTitular.value; + let codigoDeSeguridad =document.querySelector('#codigoDeSeguridadModalEditarTarjetaCredito'); codigoDeSeguridad=codigoDeSeguridad.value; + + let index = $('#editarTarjetaCreditoModal').data('index'); + let objetoJSONMemoria = sessionStorage.getItem('Objeto'); + let objetoJS = JSON.parse(objetoJSONMemoria); + + let u = new plantillaTarjetaCredito(nombreEntidad, numTarjeta, fechaCaducidad, nombreTitular,codigoDeSeguridad); + objetoJS.tarjetas.splice(index, 1, Object.assign(objetoJS.tarjetas[index], u)); //indice, eliminamos 1 objeto y hacemos un assign para copiar + let objetoNuevosDatosJSON = JSON.stringify(objetoJS); + let key = sessionStorage.getItem('key'); let usuario = sessionStorage.getItem('Usuario'); + //let ficheroCifradoJSON = cifrar(objetoNuevosDatosJSON,key,IV); + //localStorage.setItem(usuario + '_config.json', ficheroCifradoJSON); + sessionStorage.setItem('Objeto', objetoNuevosDatosJSON); + alert("Tarjeta actualizada correctamente"); + rellenarBody(); +} + +function editarCuentaBancaria(){ + + let nombreEntidadBancaria = document.querySelector('#nombreEntidadBancariaModalEditarCuentaBancaria'); nombreEntidadBancaria = nombreEntidadBancaria.value; + let IBAN = document.querySelector('#IBANModalEditarCuentaBancaria'); IBAN = IBAN.value; + let usuarioBancario = document.querySelector('#usuarioBancarioModalEditarCuentaBancaria'); usuarioBancario = usuarioBancario.value; + let contraseñaBancario = document.querySelector('#contraseñaBancarioModalEditarCuentaBancaria'); contraseñaBancario = contraseñaBancario.value; + + let index = $('#editarCuentaBancariaModal').data('index'); + let objetoJSONMemoria = sessionStorage.getItem('Objeto'); + let objetoJS = JSON.parse(objetoJSONMemoria); + + let u = new plantillaCuentaBancaria(nombreEntidadBancaria, IBAN, usuarioBancario, contraseñaBancario); + objetoJS.cuentas.splice(index, 1, Object.assign(objetoJS.cuentas[index], u)); //indice, eliminamos 1 objeto y hacemos un assign para copiar + let objetoNuevosDatosJSON = JSON.stringify(objetoJS); + let key = sessionStorage.getItem('key'); let usuario = sessionStorage.getItem('Usuario'); + //let ficheroCifradoJSON = cifrar(objetoNuevosDatosJSON,key,IV); + //localStorage.setItem(usuario + '_config.json', ficheroCifradoJSON); + sessionStorage.setItem('Objeto', objetoNuevosDatosJSON); + alert("Cuenta actualizada correctamente"); + rellenarBody(); +} + +function arrayRemove(arr, value) { + + return arr.filter(function(ele){ + return ele != value; + }); +} + +window.onload = function() { //CUando se refresca la sesion no borra los datos de la sessionStorage por lo que controlamos el evento. + if(localStorage.getItem("Inactivo")){ + sessionStorage.clear(); + localStorage.removeItem("Inactivo"); + alert("Sesión caducada por inactividad"); + } + else if(localStorage.getItem("Cerrar")){ + sessionStorage.clear(); + localStorage.removeItem("Cerrar"); + } + else if(sessionStorage.getItem("Usuario") && !sessionStorage.getItem("page2FA")){ + rellenarBody(); + } + else if(sessionStorage.getItem("page2FA")){ + // + } + else{ + sessionStorage.clear(); + //localStorage.clear(); + } +}; + +function inactividad(){ + time = new Date().getTime(); + $(document).bind("mousemove keypress", function(e) { + time = new Date().getTime(); + }); + + setTimeout(refresh, 10000); +} + +function refresh() { + if(new Date().getTime() - time >= 150000){ + window.location.reload(); + localStorage.setItem("Inactivo", true); + } + else{ + setTimeout(refresh, 10000); + } +} + + +async function listaUsuarios(){ + let token = sessionStorage.getItem('token'); + let cabeceras= { + 'Content-Type': 'application/json', + 'Accept': 'application/json', + 'authorization': token, + } + const request = { + method: 'GET', + headers: cabeceras, + }; + let select = document.querySelector('#multiSelect'); + if(select.length === 0){ + fetch(`https://${baseDominio}:${portTLS}/listaUsuarios`, request) + .then(function(response) { + if (!response.ok) { + throw Error(response.statusText); + } + return response.json(); + }) + .then(function(responseAsObject) { + if(responseAsObject.error && responseAsObject.error !== null){ + throw Error(responseAsObject.error); + } + let usuarioActual = sessionStorage.getItem('Usuario'); + let arrayRemoveUser = arrayRemove(responseAsObject.usuarios, usuarioActual); + for(let i = 0; i${arrayRemoveUser[i]}`); + $('#multiSelect').multiselect('rebuild'); + } + + }) + .catch(function(error) { + localStorage.setItem("Cerrar", true); + window.location.reload(); + alert(error); + }); + } +} + +async function listaCompartidos(){ + let token = sessionStorage.getItem('token'); + let usuario = sessionStorage.getItem('Usuario'); + let cabeceras= { + 'Content-Type': 'application/json', + 'Accept': 'application/json', + 'authorization': token, + } + const request = { + method: 'GET', + headers: cabeceras, + }; + + + let list = document.querySelector('#archivosCompartidosList'); + list.innerHTML = ""; + if(list.firstElementChild === null){ + fetch(`https://${baseDominio}:${portTLS}/listaCompartidos`, request) + .then(function(response) { + if (!response.ok) { + throw Error(response.statusText); + } + return response.json(); + }) + .then(function(responseAsObject) { + if(responseAsObject.error && responseAsObject.error !== null){ + throw Error(responseAsObject.error); + } + for(let i = 0; i { + for (let i = array.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); + const temp = array[i]; + array[i] = array[j]; + array[j] = temp; + } + } + + +function rellenarContraseña(longitud){ + + longitud_contraseña = longitud; + cantidad(); + let index = {index : 0}; //Para poder pasar por referencia + + relleno(caracteresEspeciales_cantidad, caracteres_especiales, index); + relleno(numeros_cantidad, numeros, index); + relleno(mayusculas_cantidad, mayusculas, index); + relleno(minusculas_cantidad, minusculas, index); + + if(contraseña.length < longitud_contraseña){ + let diferencia = longitud_contraseña - contraseña.length; + relleno(diferencia,cadenaAleatoria, index); + } + + shuffleArray(contraseña); + let cadena = contraseña.toString(); + cadena = cadena.replaceAll(',', ''); + return cadena; + +} + +function cantidad(){ + caracteresEspeciales_cantidad = Math.floor(Math.random()*(20-15+1)+15) * (longitud_contraseña/100); + numeros_cantidad = Math.floor(Math.random()*(25-20+1)+20) * (longitud_contraseña/100); + mayusculas_cantidad = Math.floor(Math.random()*(25-20+1)+20) * (longitud_contraseña/100); + minusculas_cantidad = Math.floor(Math.random()*(30-25+1)+25) * (longitud_contraseña/100); + + + caracteresEspeciales_cantidad = caracteresEspeciales_cantidad % 1 < 0.5 ? Math.trunc(caracteresEspeciales_cantidad) : Math.ceil(caracteresEspeciales_cantidad); + numeros_cantidad = numeros_cantidad % 1 < 0.5 ? Math.trunc(numeros_cantidad) : Math.ceil(numeros_cantidad); + mayusculas_cantidad = mayusculas_cantidad % 1 < 0.5 ? Math.trunc(mayusculas_cantidad) : Math.ceil(mayusculas_cantidad); + minusculas_cantidad = minusculas_cantidad % 1 < 0.5 ? Math.trunc(minusculas_cantidad) : Math.ceil(minusculas_cantidad); + +} + +function relleno(cantidad, cadena, index){ + + let longitud = cadena.length-1; + let i = index.index; + while(cantidad !== 0){ //Se puede hacer ya que cantidad no se pasa por referencia si no por valor. + contraseña.push(cadena.charAt(Math.floor(Math.random()*(longitud-0+1)+0))); + i++; + cantidad--; + } + index.index = i; +} + +export { rellenarContraseña } \ No newline at end of file diff --git a/scripts/html.js b/scripts/html.js new file mode 100644 index 0000000..7a54b3f --- /dev/null +++ b/scripts/html.js @@ -0,0 +1,252 @@ +/** + * HTML de las tablas de los datos guardados + * @returns devuelve el HTML con las tablas de los datos guardados + */ + export function bodyHTML(){ + var html= + ` + +
+
+
+
+
+
+
+

Usuarios

+
+
+ +
+
+
+ + + + + + + + + + + + +
DescripcionUrlUsuarioPasswordAcciones
+
+
+
+ +
+
+
+
+
+
+

Notas

+
+
+ +
+
+
+ + + + + + + + + + +
NombreDescripcionAcciones
+
+
+
+ + +
+
+
+
+
+
+

Tarjetas de Crédito

+
+
+ +
+
+
+ + + + + + + + + + + + + +
Nombre EntidadNúmero de TarjetaFecha de CaducidadNombre del TitularCódigo De SeguridadAcciones
+
+
+
+ +
+
+
+
+
+
+

Cuentas Bancarias

+
+
+ +
+
+
+ + + + + + + + + + + + +
Nombre EntidadIBANUsuario Banca OnlineContraseña Banca OnlineAcciones
+
+
+
+ +
+ +
+
+
+
+
+
+
+

Usuarios

+
+
+ +
+
+
+ + + + + + + + + + + + +
DescripcionUrlUsuarioPasswordAcciones
+
+
+
+ +
+
+
+
+
+
+

Notas

+
+
+ +
+
+
+ + + + + + + + + + +
NombreDescripcionAcciones
+
+
+
+
+ +
+
+

Active y escane el código QR para aplicar el doble factor TOTP

+ + + + +
+
+ + `; + return html; + } + + + export function bodyFA(){ + let html = `
+
+ + +
+
+ + +
+
+ +
` + + return html; + } \ No newline at end of file diff --git a/scripts/modales/modalCompartir.js b/scripts/modales/modalCompartir.js new file mode 100644 index 0000000..82ab3a4 --- /dev/null +++ b/scripts/modales/modalCompartir.js @@ -0,0 +1,26 @@ +export function modalCompartir(){ + // + var html= ` + + `; + return html; +} \ No newline at end of file diff --git a/scripts/modales/modalCrear.js b/scripts/modales/modalCrear.js new file mode 100644 index 0000000..a3aa5d1 --- /dev/null +++ b/scripts/modales/modalCrear.js @@ -0,0 +1,130 @@ +export function modal(){ + + var html = ` +