api-secure-databank/controllers/CompartidosController.js

112 lines
4.3 KiB
JavaScript
Executable File

const mongoose = require('mongoose');
const fsp = require("fs/promises");
const fs = require("fs");
const path = require("path");
const service = require('../config/services');
const { type } = require('os');
const log = require('../middlewares/log');
/*function plantillaUsuarios(usuario, listUsuarios){
if(usuario != ""){
this.usuario = usuario;
}
if(listUsuarios != ""){
this.listUsuarios = listUsuarios;
}
}*/
var compartidosController = {};
compartidosController.listaUsuarios = async function (req, res) {
let usuarios = {usuarios: []};
fs.readdirSync(path.join(__dirname, '../UsuariosRegistrados/')).forEach(file => {
usuarios.usuarios.push(file);
});
log.serverActionInfo(req,"Listar los usuarios de la aplicación");
return res.status(200).send(usuarios);
};
compartidosController.listaCompartidos = async function (req, res) {
//let nombre = req.query.usuario;
let nombre = req.usuario;
let ficheros = {ficheros: []};
fs.readdirSync(path.join(__dirname, '../ArchivosCompartidos/Usuarios/' + nombre + '/')).forEach(file => {
if(file.split('-')[1].split('.')[0] === nombre){
ficheros.ficheros.push(file);
}
});
log.serverActionInfo(req,"Listar los archivos compartidos");
return res.status(200).send(ficheros);
};
compartidosController.listaCompartidosConmigo = async function (req, res) {
//let nombre = req.query.usuario;
let nombre = req.usuario;
let ficheros = {ficheros: []};
fs.readdirSync(path.join(__dirname, '../ArchivosCompartidos/Usuarios/' + nombre + '/')).forEach(file => {
if(file.split('-')[1].split('.')[0] !== nombre){
ficheros.ficheros.push(file);
}
});
log.serverActionInfo(req,"Listar los archivos compartidos conmigo");
return res.status(200).send(ficheros);
};
compartidosController.guardarArchivoCompartido = async function (req, res) {
let ficheroCompartido=req.body.ficheroCompartido;
let objetoContraseñas=req.body.contraseñas;
//let usuario=req.body.usuario;
let usuario = req.usuario;
if(!fs.existsSync(path.join(__dirname, '../ArchivosCompartidos/Usuarios/' + usuario))){
log.errorMensaje(req,"No existe la carpeta archivos compartidos del usuario");
return res.status(200).send({result:null,error:"No existe la carpeta archivos compartidos del usuario"});
}
try{
let id = fs.readFileSync('ArchivosCompartidos/id.txt', 'utf-8');
let idNuevo = parseInt(id);
idNuevo ++;
await fsp.writeFile('ArchivosCompartidos/id.txt', idNuevo.toString());
await fsp.writeFile('ArchivosCompartidos/Ficheros/' + id + '-' + usuario + '.enc', ficheroCompartido);
for (const propiedad in objetoContraseñas) {
await fsp.writeFile('ArchivosCompartidos/Usuarios/' + propiedad + '/' + id + '-' + usuario + '.enc', objetoContraseñas[propiedad]);
}
log.serverActionInfo(req,"Archivo compartido guardado");
res.status(200).send({result:{status:'Archivo compartido correctamente'},error:null});
}catch (err){
console.log(err);
log.errorMensaje(req,"Error al compartir archivo");
res.status(200).send({result:null,error:"Error al compartir archivo"});
}
};
compartidosController.obtenerPublicas = async function (req, res) {
let publicas = {};
for(let i = 0; i<req.body.usuarios.length; i++){
let publica = fs.readFileSync('UsuariosRegistrados/' + req.body.usuarios[i] + '/clavePublica.enc', 'utf-8');
publicas[req.body.usuarios[i]] = publica;
}
log.serverActionInfo(req,"Listado claves públicas devuelto");
res.status(200).send({result:publicas,error:null});
};
compartidosController.recuperarFicheroCompartido = async function (req, res) {
let fichero = req.query.fichero;
let usuario = req.usuario;
let privada = fs.readFileSync('UsuariosRegistrados/' + usuario + '/clavePrivada.enc', 'utf-8');
let claveRandom = fs.readFileSync('ArchivosCompartidos/Usuarios/' + usuario + '/' + fichero , 'utf-8');
let ficheroA = fs.readFileSync('ArchivosCompartidos/Ficheros/' + fichero , 'utf-8');
log.serverActionInfo(req,"Fichero compartido y claves devueltas");
res.status(200).send({privada:privada,claveRandom:claveRandom, fichero: ficheroA });
};
/*
* Other actions
*/
module.exports = compartidosController;