1379 lines
49 KiB
JavaScript
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"></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);
|