databank-extension/script.js

1379 lines
49 KiB
JavaScript

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 = `<i class="material-icons" data-toggle="tooltip" title="Edit">&#xE254;</i>`;
buttonEditar.id = 'Editar'+nombreTabla+'-' + i;
buttonEditar.className = "edit";
buttonEditar.setAttribute("data-index", i);
let buttonBorrar = document.createElement('a'); //Boton borrar
buttonBorrar.innerHTML = `<i class="material-icons" data-toggle="tooltip" title="" data-original-title="Eliminar"></i>`;
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<objetoJS[tipoDato].length; i++){
fila = document.createElement('tr');
valores = Object.values(objetoJS[tipoDato][i]);
for(let j = 0; j<valores.length; j++){
if(j+1 === valores.length && esUsuario){ //Contraseñas de usuarios guardados
let cajaMostrarContraseña = document.createElement('div');
cajaMostrarContraseña.classList.add("passCaja");
cajaMostrarContraseña.id = 'contraseñaTablaO' + i;
cajaMostrarContraseña.textContent = valores[j];
let columnaContraseña = document.createElement('td');
columnaContraseña.appendChild(cajaMostrarContraseña);
fila.appendChild(columnaContraseña);
}
else{
columna = document.createElement('td');
columna.textContent = valores[j];
fila.appendChild(columna);
}
}
let tipoDatoSingular=tipoDato.slice(0, -1);
//Botones
if(!compartido){
columna = botonesEditarBorrar(i,funcionBorrar,funcionEditar,tipoDatoSingular);
}
else{
columna = document.createElement('td');
}
//Ojo
if(esUsuario){
let ojo = document.createElement('span');
ojo.classList.add("material-icons", "ojo");
ojo.textContent = "remove_red_eye";
ojo.id = "ojo-" + i; ojo.setAttribute("data-toggle", "tooltip"); ojo.setAttribute("data-original-title", "Mostar");
columna.appendChild( document.createTextNode( '\u00A0' ) ); //Espacio
columna.appendChild(ojo);
}
if(!compartido && tipoDato !== 'tarjetas' && tipoDato !== 'cuentas'){
var htmlCheck = `
<input class="form-check-input" type="checkbox" id="${tipoDato}-${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.length; i++){
$("#multiSelect").append(`<option value='${arrayRemoveUser[i]}'>${arrayRemoveUser[i]}</option>`);
$('#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<responseAsObject.ficheros.length; i++){
let nuevoNodo = document.createElement('li');
let nuevoEnlace = document.createElement('a');
nuevoEnlace.setAttribute("data-valor", responseAsObject.ficheros[i]);
nuevoEnlace.text = responseAsObject.ficheros[i].split('.')[0];
nuevoEnlace.addEventListener("click", recuperarCompartido, false);
nuevoNodo.appendChild(nuevoEnlace);
list.appendChild(nuevoNodo);
}
})
.catch(function(error) {
localStorage.setItem("Cerrar", true);
window.location.reload();
alert(error);
});
}
}
async function listaCompartidosConmigo(){
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('#archivosCompartidosConmigoList');
list.innerHTML = "";
if(list.firstElementChild === null){
fetch(`https://${baseDominio}:${portTLS}/listaCompartidosConmigo`, 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<responseAsObject.ficheros.length; i++){
let nuevoNodo = document.createElement('li');
let nuevoEnlace = document.createElement('a');
nuevoEnlace.setAttribute("data-valor", responseAsObject.ficheros[i]);
nuevoEnlace.text = responseAsObject.ficheros[i].split('.')[0];
nuevoEnlace.addEventListener("click", recuperarCompartido, false);
nuevoNodo.appendChild(nuevoEnlace);
list.appendChild(nuevoNodo);
}
})
.catch(function(error) {
localStorage.setItem("Cerrar", true);
window.location.reload();
alert(error);
});
}
}
async function recuperarCompartido(event){
let fichero = event.target.dataset.valor;
let enlace = event.target;
let tablaUsuarios = document.querySelector('#usuariosTableCompartidos');
let tablaNotas = document.querySelector('#notasTableCompartidos');
let desactivadoActual = document.querySelector('.isDisabled');
if(desactivadoActual){
desactivadoActual.classList.remove('isDisabled');
}
tablaUsuarios.innerHTML = "";
tablaNotas.innerHTML = "";
enlace.classList.add('isDisabled');
let token = sessionStorage.getItem('token');
let cabeceras= {
'Content-Type': 'application/json',
'Accept': 'application/json',
'authorization': token,
}
const request = {
method: 'GET',
headers: cabeceras,
};
let objeto = await fetch(`https://${baseDominio}:${portTLS}/recuperarFicheroCompartido?fichero=${fichero}`, 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);
}
return responseAsObject;
})
.catch(function(error) {
localStorage.setItem("Cerrar", true);
window.location.reload();
alert(error);
});
let keyData = sessionStorage.getItem('key');
let clavePrivadaDescifrada = descifrar(objeto.privada, keyData);
let importadaClavePrivada = await importarClavePrivada(JSON.parse(clavePrivadaDescifrada));
let claveRandomDescifrada = await descifrarConPrivada(importadaClavePrivada, new Uint8Array(JSON.parse(objeto.claveRandom)));
let claveRandomDescifradayDecodificada = DecodificarDatos(claveRandomDescifrada); //Devuelve un la clave random hasheada
let d = descifrar(objeto.fichero, claveRandomDescifradayDecodificada)
let objetoCompartidoDescifrado = JSON.parse(d);
rellenarTabla(objetoCompartidoDescifrado, 'usuarios', true, '', '', true);
rellenarTabla(objetoCompartidoDescifrado, "notas", false, '', '', true);
// 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');
});
}
async function compartirDatos(){
let resultado = await subirDatos("", true); //Primer parametro cadena vacia debido a que esta funcion esta asociada a un manejador.
//Segundo parametro para saber si se trata de datos compartidos.
if(resultado === null){
return 0;
}
var objetosACompartir = {
usuarios: [],
notas: []
};
let textinputs = document.querySelectorAll('td input[type=checkbox]');
let checkboxSelected = [].filter.call( textinputs, function( el ) {
return el.checked
});
for(let i = 0; i<checkboxSelected.length; i++){
checkboxSelected[i].checked = false;
}
let objetoActualJS = JSON.parse(sessionStorage.getItem('Objeto'));
if(checkboxSelected !== null){
for(let i = 0; i<checkboxSelected.length; i++){
let tipo = checkboxSelected[i].id.split('-')[0];
let indice = checkboxSelected[i].id.split('-')[1];
if(tipo === 'usuarios'){
objetosACompartir.usuarios.push(objetoActualJS.usuarios[indice]);
}
else{
objetosACompartir.notas.push(objetoActualJS.notas[indice]);
}
}
}
let arrayUsuariosACompartir = $('select#multiSelect').val();
if(arrayUsuariosACompartir === 0 || (objetosACompartir.usuarios.length === 0 && objetosACompartir.notas.length === 0)){
return;
}
let usuarioActual = sessionStorage.getItem('Usuario');
arrayUsuariosACompartir.push(usuarioActual);
///COmenzamos con el cifrado
let contraseñaRandom = rellenarContraseña(25); //Contraseña que cifrar
let contraseñaHash = await sha256(contraseñaRandom);
let objetoJSON = JSON.stringify(objetosACompartir);
let ficheroCifrado = cifrar(objetoJSON, contraseñaHash);//Fichero listo para subir
//Peticion claves publicas usuarios
const payload= {'usuarios' : arrayUsuariosACompartir};
let token = sessionStorage.getItem('token');
let cabeceras= {
'Content-Type': 'application/json',
'Accept': 'application/json',
'authorization': token
}
const request = {
method: 'POST',
headers: cabeceras,
body: JSON.stringify(payload),
};
let publicas = await fetch(`https://${baseDominio}:${portTLS}/obtenerPublicas`, 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{
return responseAsObject.result;
}
})
.catch(function(error) {
alert('Ha habido un problema: ' + error);
return null;
});
if(publicas === null){
return;
}
let contraseñasCifradas = {};
for(let i = 0; i<arrayUsuariosACompartir.length; i++){
let clavePublicaImportada = await importarClavePublica(JSON.parse(publicas[arrayUsuariosACompartir[i]]));
let contraseñaCifrada = await cifrarConPublica(clavePublicaImportada ,CodificarDatos(contraseñaHash));
contraseñasCifradas[arrayUsuariosACompartir[i]] = new Uint8Array(contraseñaCifrada);
contraseñasCifradas[arrayUsuariosACompartir[i]] = JSON.stringify(Array.from(contraseñasCifradas[arrayUsuariosACompartir[i]]));
}
//SUbir contraseñas y fichero cifrado
const payloadS = {'ficheroCompartido' : ficheroCifrado.toString(),
'contraseñas' : contraseñasCifradas};
let cabecerasS= {
'Content-Type': 'application/json',
'Accept': 'application/json',
'authorization': token
}
const requestS = {
method: 'POST',
headers: cabecerasS,
body: JSON.stringify(payloadS),
};
fetch(`https://${baseDominio}:${portTLS}/guardarArchivoCompartido`, requestS)
.then(function(response) {
if (!response.ok) {
throw Error(response.statusText);
}
return response.json();
})
.then(function(responseAsObject) {
if(responseAsObject.error !== null){
alert(responseAsObject.error)
}
else{
alert(responseAsObject.result.status);
}
})
.catch(function(error) {
alert('Ha habido un problema: ' + error);
});
}
async function registro(){
let usuario = document.querySelector('#Usuario').value;
let contraseña = document.querySelector('#Contraseña').value;
let datos = usuario+contraseña;
let datosHash = await sha512(datos);
let keyLogin = datosHash.substr(0,64);
let keyData = datosHash.substr(64,64);
/*Clave publica y privada*/
const keyPair = await generarParDeClaves();
let clavePublica = await exportarClave(keyPair.publicKey);
let clavePrivada = await exportarClave(keyPair.privateKey);
let clavePrivadaJSON = JSON.stringify(clavePrivada);
let clavePublicaJSON = JSON.stringify(clavePublica);
let clavePrivadaCifrada = cifrar(clavePrivadaJSON, keyData);
var objetoJS = {
usuarios: [],
notas: [],
tarjetas: [],
cuentas: []
};
var objetoJSON = JSON.stringify(objetoJS);
let ficheroCifrado = cifrar(objetoJSON, keyData);
const payload= {'usuario' : usuario,
'contraseña': utf8_to_b64(keyLogin),
'fichero' : ficheroCifrado.toString(),
'clavePrivada' : clavePrivadaCifrada.toString(),
'clavePublica' : clavePublicaJSON};
let cabeceras= {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
const request = {
method: 'POST',
headers: cabeceras,
body: JSON.stringify(payload),
};
fetch(`https://${baseDominio}:${portTLS}/registrar`, 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{
alert(responseAsObject.result.status);
/*localStorage.setItem('currentUser', JSON.stringify({ token: responseAsObject.result.token, usuario: usuario, key: keyData, IV: IV, datos: ficheroCifrado.toString()}));*/
sessionStorage.setItem('Objeto', objetoJSON);
sessionStorage.setItem('Usuario', usuario);
sessionStorage.setItem('key', keyData);
sessionStorage.setItem('token', responseAsObject.result.token);
rellenarBody();
}
})
.catch(function(error) {
alert('Ha habido un problema: ' + error);
});
}
async function iniciarSesion(){
let usuario = document.querySelector('#Usuario').value;
let contraseña = document.querySelector('#Contraseña').value;
/*
const keyPair = await generarParDeClaves();
let h = "hola";
console.log(CodificarDatos(h));
let cifrado = await cifrarConPublica(keyPair.publicKey, CodificarDatos(h));
console.log(cifrado);
console.log(new Uint8Array(cifrado).toString());
let descifrar = await descifrarConPrivada(keyPair.privateKey, new Uint8Array(cifrado));
console.log(DecodificarDatos(descifrar));
*/
let datos = usuario+contraseña;
let datosHash = await sha512(datos);
let keyLogin = datosHash.substr(0,64);
let keyData = datosHash.substr(64,64);
const payload= {'usuario' : usuario,
'contraseña': utf8_to_b64(keyLogin)};
let cabeceras= {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
const request = {
method: 'POST',
headers: cabeceras,
body: JSON.stringify(payload),
};
let tokenA = "";
await fetch(`https://${baseDominio}:${portTLS}/iniciarSesion`, request)
.then(function(response) {
if (!response.ok) {
throw Error(response.statusText);
}
return response.json();
})
.then(function(responseAsObject) {
if(responseAsObject.error !== null){
throw Error(responseAsObject.error);
}
sessionStorage.setItem('TFA', responseAsObject.result.TFA);
tokenA = responseAsObject.result.token;
if(responseAsObject.result.TFA && responseAsObject.result.TFA==1){
sessionStorage.setItem('token', tokenA);
sessionStorage.setItem('Usuario', usuario);
sessionStorage.setItem('key', keyData);
sessionStorage.setItem('page2FA', 1);
document.body.innerHTML = bodyFA();
let buttonCheckFA = document.querySelector('#checkcodeFA');
buttonCheckFA.addEventListener("click", iniciarSesion2, false);
return;
}
else{
recuperarDatos(tokenA, usuario, keyData, cabeceras);
}
})
.catch(function(error) {
alert(error);
});
}
async function iniciarSesion2(event){
let cabeceras= {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
cabeceras.authorization = sessionStorage.getItem('token');
let tokSecret = document.querySelector('#secret').value;
const payload= {'tokSecret' : tokSecret};
const request = {
method: 'POST',
headers: cabeceras,
body: JSON.stringify(payload),
};
await fetch(`https://${baseDominio}:${portTLS}/iniciarSesionFA`, request)
.then(function(response) {
if (!response.ok) {
throw Error(response.statusText);
}
return response.json();
})
.then(function(responseAsObject) {
if(responseAsObject.error !== null){
console.log(responseAsObject.error);
throw Error(responseAsObject.error);
}
let usuario = sessionStorage.getItem('Usuario');
let keyData = sessionStorage.getItem('key');
sessionStorage.setItem('urlQR',responseAsObject.result.urlQR);
let cabeceras= {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
recuperarDatos(responseAsObject.result.token, usuario, keyData, cabeceras);
})
.catch(function(error) { //Mejorar esto
if(error != "Error: Prueba otra vez"){
localStorage.setItem("Cerrar", true);
window.location.reload();
alert(error);
}
else{
alert(error);
}
});
}
function recuperarDatos(tokenA, usuario, keyData, cabeceras){
cabeceras.authorization = tokenA;
const requestRecuperarDatos = {
method: 'GET',
headers: cabeceras
};
fetch(`https://${baseDominio}:${portTLS}/recuperarDatos`, requestRecuperarDatos)
.then(function(response) {
if (!response.ok) {
throw Error(response.statusText);
}
return response.json();
})
.then(function(responseAsObject) {
if(responseAsObject.error !== null){
throw Error(responseAsObject.error);
}
let objetoJsonDescifrado = descifrar(responseAsObject.result.datos, keyData); //Fichero descifrado
/*localStorage.setItem('currentUser', JSON.stringify({ token: tokenA, usuario: usuario, key: keyData, IV: IV, datos: responseAsObject.result.datos }));*/
sessionStorage.setItem('Objeto', objetoJsonDescifrado);
sessionStorage.setItem('Usuario', usuario);
sessionStorage.setItem('key', keyData);
sessionStorage.setItem('token', tokenA);
rellenarBody();
})
.catch(function(error) {
alert(error);
});
}
async function subirDatos(event, compartir){
let usuario = sessionStorage.getItem('Usuario');
let ficheroSinCifrarJSON = sessionStorage.getItem('Objeto');
let key = sessionStorage.getItem('key'); let token = sessionStorage.getItem('token');
let cifrado = cifrar(ficheroSinCifrarJSON, key);
const payload= {'fichero' : cifrado.toString()};
let cabeceras= {
'Content-Type': 'application/json',
'Accept': 'application/json',
'authorization': token
}
const request = {
method: 'POST',
headers: cabeceras,
body: JSON.stringify(payload),
};
let resultado = await fetch(`https://${baseDominio}:${portTLS}/subirDatos`, request)
.then(function(response) {
if (!response.ok) {
throw Error(response.statusText);
}
return response.json();
})
.then(function(responseAsObject) {
if(responseAsObject.error !== null){
throw Error(responseAsObject.error);
}
if(!compartir){
alert("Datos actualizados correctamente");
}
return 'ok';
})
.catch(function(error) {
localStorage.setItem("Cerrar", true);
window.location.reload();
alert(error);
return null;
});
return resultado;
}
async function cerrarSesion(){
localStorage.setItem("Cerrar", true);
window.location.reload();
}
function contraseñaSegura(){
let contraseña = rellenarContraseña(25);
let input_contraseña = document.querySelector('#Contraseña');
if(document.querySelector('#ContraseñaModal')){
input_contraseña = document.querySelector('#ContraseñaModal');
}
input_contraseña.value = contraseña;
//input_contraseña.type = 'text';
input_contraseña.select();
document.execCommand("copy");
if(document.querySelector('#Contraseña')){
alert("Contraseña copiada al portapapeles");
}
}
function verContraseña(){
let v = document.querySelector("#verContraseña");
let input_contraseña = document.querySelector('#Contraseña');
if(document.querySelector('#ContraseñaModal')){
input_contraseña = document.querySelector('#ContraseñaModal');
}
if(v.text === "Ver"){
input_contraseña.type = 'text';
v.text = "Ocultar";
}
else{
v.text = "Ver";
input_contraseña.type = 'password';
}
}
async function init() {
let e = document.querySelector("#IngresoLog");
e.addEventListener("click", iniciarSesion, false);
let r = document.querySelector("#RegistroLog");
r.addEventListener("click", registro, false);
let c = document.querySelector("#generarContraseña");
c.addEventListener("click", contraseñaSegura, false);
let v = document.querySelector("#verContraseña");
v.addEventListener("click", verContraseña, false);
}
document.addEventListener("DOMContentLoaded", init, false);