From bf9b20499b18ede4da8375bc3e0ee9fd50c65534 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ernesto=20Canales=20Pere=C3=B1a?= Date: Sun, 18 Jun 2023 20:46:04 +0200 Subject: [PATCH] Files added to repository --- ArchivosCompartidos/id.txt | 1 + README.md | 24 +++++ cert/cert.pem | 21 +++++ cert/key.pem | 27 ++++++ config/config.js | 3 + config/services.js | 13 +++ controllers/CompartidosController.js | 112 ++++++++++++++++++++++ controllers/DatosController.js | 57 ++++++++++++ controllers/UsuarioController.js | 133 +++++++++++++++++++++++++++ index.js | 61 ++++++++++++ middlewares/auth.js | 74 +++++++++++++++ middlewares/log.js | 52 +++++++++++ package.json | 33 +++++++ public/home.html | 7 ++ routes/compartidos.js | 19 ++++ routes/datos.js | 13 +++ routes/usuario.js | 15 +++ 17 files changed, 665 insertions(+) create mode 100755 ArchivosCompartidos/id.txt create mode 100755 README.md create mode 100755 cert/cert.pem create mode 100755 cert/key.pem create mode 100755 config/config.js create mode 100755 config/services.js create mode 100755 controllers/CompartidosController.js create mode 100755 controllers/DatosController.js create mode 100755 controllers/UsuarioController.js create mode 100755 index.js create mode 100755 middlewares/auth.js create mode 100755 middlewares/log.js create mode 100755 package.json create mode 100755 public/home.html create mode 100755 routes/compartidos.js create mode 100755 routes/datos.js create mode 100755 routes/usuario.js diff --git a/ArchivosCompartidos/id.txt b/ArchivosCompartidos/id.txt new file mode 100755 index 0000000..573541a --- /dev/null +++ b/ArchivosCompartidos/id.txt @@ -0,0 +1 @@ +0 diff --git a/README.md b/README.md new file mode 100755 index 0000000..ee97ec0 --- /dev/null +++ b/README.md @@ -0,0 +1,24 @@ + +## Versions + +* Node 14.15.4 +* npm 6.14.10 + +## Deploy in developer mode + +```bash +git clone http://git.wacanal.cloud/ernie/api-secure-databank.git +cd api-secure-databank +``` + +## Install dependencies + +```bash +npm install +``` + +## Run + +```bash +npm start +``` diff --git a/cert/cert.pem b/cert/cert.pem new file mode 100755 index 0000000..e7d05b1 --- /dev/null +++ b/cert/cert.pem @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDizCCAnMCFGFRXtJkI+531C6b760kiL1eW2mIMA0GCSqGSIb3DQEBCwUAMIGB +MQswCQYDVQQGEwJFUzERMA8GA1UECAwIQWxpY2FudGUxETAPBgNVBAcMCEFsaWNh +bnRlMQswCQYDVQQKDAJVQTELMAkGA1UECwwCVUExETAPBgNVBAMMCEdydXBvNEVT +MR8wHQYJKoZIhvcNAQkBFhBhanByM0BhbHUudWEbWzJ+MB4XDTIxMDQxNzEzNTIx +NFoXDTQ4MDkwMTEzNTIxNFowgYExCzAJBgNVBAYTAkVTMREwDwYDVQQIDAhBbGlj +YW50ZTERMA8GA1UEBwwIQWxpY2FudGUxCzAJBgNVBAoMAlVBMQswCQYDVQQLDAJV +QTERMA8GA1UEAwwIR3J1cG80RVMxHzAdBgkqhkiG9w0BCQEWEGFqcHIzQGFsdS51 +YRtbMn4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDzJWGtpDhOynpI +tdQcO2PjwoRRal2fbRnN3rzxWoxfJCZ+IQIld7pf3dOYKe7SfBJuCrt6AEKvbRmS +exSheMPV+G3dz8z+TZZKj60vI5KTTF8f+TKhOXYeUVI42ysiSXWZGsh6LcxN8hds +qKqj1qDO4Lb02Jlfbp5JfEumMwUdagvHiiSHyv13J0aYcnZrXk5ZwoFEBYt3ntvE +YhY+EyfPLAv+3VyReXKod9Kj+H+elnokz7C/By+69mBRPZPenA9ItjUzUGof65wV +zZlMosF7UeLda9vA1yvuZqV5o+Q8fjktT7S7FRSyT3WPpBZpZYVJxGSwYSw6IXR6 +U79ppob5AgMBAAEwDQYJKoZIhvcNAQELBQADggEBAFtrDeezbHusnGQfD+py4nIf +9WLDv8+o5ttWiSNtfIJ7nXzmCVMHxWWbknYGgrRqllw16cuJd7AjiwPqMFmgCc4X +uUFUDEqcbaCj4DXL1VEwt/3WMxX1vSwb6JWc+6reR+B3uuUPk6PYtTOuMPFG0DDk +DF+znAV3mufWofm5AHUVyGqR6znw/xccSJn5FXU05eTVeS5Q6pii+fUuPUhyMlc+ +AV8gC57YCrEi693z8lNliCVTWn4oG+VeKVfAF2aBiZIZJqAu2QY/1/p6B9JIG43o +WlqxV/Sl3x23eI+ASTBc1DS+9Oiv2htgjQlxqOHJBJVhlXGQ8mHK6ajK/P6su1Y= +-----END CERTIFICATE----- diff --git a/cert/key.pem b/cert/key.pem new file mode 100755 index 0000000..9f8dfd6 --- /dev/null +++ b/cert/key.pem @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEA8yVhraQ4Tsp6SLXUHDtj48KEUWpdn20Zzd688VqMXyQmfiEC +JXe6X93TmCnu0nwSbgq7egBCr20ZknsUoXjD1fht3c/M/k2WSo+tLyOSk0xfH/ky +oTl2HlFSONsrIkl1mRrIei3MTfIXbKiqo9agzuC29NiZX26eSXxLpjMFHWoLx4ok +h8r9dydGmHJ2a15OWcKBRAWLd57bxGIWPhMnzywL/t1ckXlyqHfSo/h/npZ6JM+w +vwcvuvZgUT2T3pwPSLY1M1BqH+ucFc2ZTKLBe1Hi3WvbwNcr7maleaPkPH45LU+0 +uxUUsk91j6QWaWWFScRksGEsOiF0elO/aaaG+QIDAQABAoIBAFzsDlZkCjjiXLVo +9/UKJXSnpBXRRpJlCZWJ6D980WSS1jshtkZHaWy1w+XFMMY0MH7pjxhi/Rk54qn+ +a7YCByXA2YwJnFgborJAEnmPaLbuWvRHMjg3U5LmlTuxVty1okGu4KsA0bGAMb+O +/he7MJ2fd4w/Mu4rwkZnQCn2GaBRZhiGc2hM3Bk5PyRfuV3mAVPwgZtrzrMtqJuo +vB2AUJ9ERAADAT8Kwq/UbiYFMIrl0OmlQU04iMlQbG2YU66ErK1xPPyI2xQcYnlm +Vy5Q+e8OGhUI1U7foPgROf8nBBztao/ZGV6Wa1TUFpNwsmx5U2cggZU1L0iq0iUa +e2AQZ5kCgYEA+mAHjpeTs6ktvL9K3Hfiz0todJOqGXtG0Lnv5DdpsjPhm085+hpj +jsr7LBgNw9e5Lcxf+fEdojw646oqk2px4UBWNtLI+421cIHu/L5KL+iieIEEdJef +dAb/PZsBS5fAx3db/r3zC1o+7bYXHiO/MlSsw4Uf04qujP7en9HTnJsCgYEA+JvG +k+gosDhX2xxRzA8q9hJ7maPPwt287bFIeY0wW4GGOKFWtnufp3Ovp5BmjBqx6+Ii +c98A+sgWdUsOKhDaHX5eibG6USUIyDrVrBshjj2VTIYeEpgGuDayrIgiD+JwoH2O +DxR1unwmvLf4pCj99jnhwbIbF/yY6zQbcBG0IfsCgYBA2cS7U1mHjIdzPx0V09uk +k8SfhWvmo76o67BOLWgsJzIFd1TuCg3Fe5/pQOW311V4nloxtBlX3z/lnjre6hBL +Js3t71Ttizv2w0DyqBsxI5GJoulThb5gYDuWamLAgLMHN0xVxD+CrkJkcei0/s9U +KwiAsCeZNG+Xx6BERyYHhwKBgQCeSJ/v/7oYKGdXa/pwT5/st+vV8EQRL5hgRaV9 +LnWBbUAFwkMxQBhwRumpZ/jCbySkqH+DApLfGJGj8Dt+cOhOKu0KAgw8KbYjtcHh +KAz/QRpTdHilIgH1O24bBzmYn3VR2V6fH0mth+op8X/vFOJM6KFh74HsjbjW14A4 +pCzqDQKBgQD0JAgR1+Q+i04Vcsxn3dlmQyDQ8R1YuzzlL06xjKfZDUPHh8f7eqKX +tLPl+n0ZTUvuwckIZfPc6NRsGxCqVvcOpkfGcoknE/7+hIfIp0sU3jGX7+ztQMIY +Ne28jrw+sKx4TtEnwXReUaVwYBF+k+p8nj4Be7UeAAyy5q5VUULtdg== +-----END RSA PRIVATE KEY----- diff --git a/config/config.js b/config/config.js new file mode 100755 index 0000000..02a80e2 --- /dev/null +++ b/config/config.js @@ -0,0 +1,3 @@ +module.exports = { + TOKEN_SECRET: process.env.TOKEN_SECRET || "Master2023" //Clave para codificar token +}; diff --git a/config/services.js b/config/services.js new file mode 100755 index 0000000..8947310 --- /dev/null +++ b/config/services.js @@ -0,0 +1,13 @@ +const jwt = require('jwt-simple'); +const moment = require('moment'); +const config = require('./config'); + +exports.createToken = function(user, TFA) { + var payload = { + sub: user, + TFA: TFA, + iat: moment().unix(), + exp: moment().add(5, 'm').unix(), //5 minutillos + }; + return jwt.encode(payload, config.TOKEN_SECRET, 'HS512'); +}; diff --git a/controllers/CompartidosController.js b/controllers/CompartidosController.js new file mode 100755 index 0000000..4c53ccd --- /dev/null +++ b/controllers/CompartidosController.js @@ -0,0 +1,112 @@ +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 { + if (err) { + throw err; + } + log.serverActionInfo(req,"Carpeta Archivos Compartidos del usuario creada"); + }); + //creación carpeta usuario y sus archivos + fs.mkdir(path.join(__dirname, '../UsuariosRegistrados/' + nombre), + { recursive: true }, async (err) => { + if (err) { + throw err; + } + console.log('Carpeta usuario creada!'); + const hashPassword = CryptoJS.SHA512(req.body.contraseña).toString(); + await fsp.writeFile('UsuariosRegistrados/' + nombre + '/datos.json.enc', req.body.fichero); + await fsp.writeFile('UsuariosRegistrados/' + nombre + '/contraseña.enc', hashPassword); + await fsp.writeFile('UsuariosRegistrados/' + nombre + '/clavePublica.enc', req.body.clavePublica); + await fsp.writeFile('UsuariosRegistrados/' + nombre + '/clavePrivada.enc', req.body.clavePrivada); + let newId = new mongoose.mongo.ObjectId(); + let user = nombre + '-' + newId.toString(); + token = service.createToken(user); + log.serverActionInfo(req,"Carpeta del usuario y sus archivos creados"); + res.status(200).send({result:{status:'Usuario creado correctamente',token: token},error:null}); + }); + + }catch (err){ + console.log(err); + log.errorMensaje(req,"Error al crear usuario"); + res.status(200).send({result:null,error:"Error al crear usuario"}); + } +}; + + +usuarioController.iniciarSesion = async function (req, res) { + let nombre = req.body.usuario; + let newId = new mongoose.mongo.ObjectId(); + let user = nombre + '-' + newId.toString(); + if (!fs.existsSync(path.join(__dirname, '../UsuariosRegistrados/' + nombre))){ + log.errorMensaje(req,"No existe el usuario"); + return res.status(200).send({result:null,error:"No existe el usuario"}); //400 + } + let contraseña = fs.readFileSync('UsuariosRegistrados/' + nombre + '/contraseña.enc', 'utf-8'); + const hashPassword = CryptoJS.SHA512(req.body.contraseña).toString(); + if(contraseña !== hashPassword){ + log.errorMensaje(req,"Contraseña incorrecta"); + return res.status(200).send({result:null,error:"Error Contraseña"}); + } + //let datos = fs.readFileSync('UsuariosRegistrados/' + nombre + '/datos.json.enc', 'utf-8'); + + //Check TOTP + if(fs.existsSync(path.join(__dirname, '../UsuariosRegistrados/' + nombre + '/secreto.enc'))){ + token = service.createToken(user,1); + return res.status(200).send({result:{status:'ok', token: token, TFA: 1},error:null}); + } + else{ + token = service.createToken(user,0); + return res.status(200).send({result:{status:'ok', token: token, TFA: 0},error:null}); + } + +}; + +usuarioController.iniciarSesionFA = async function (req, res) { + let user = req.usuario; + token = service.createToken(user,0); + log.serverActionInfo(req,"Inicia sesión"); + let dataTFA; + if(fs.existsSync(path.join(__dirname, '../UsuariosRegistrados/' + user + '/secreto.enc'))){ + dataTFA = fs.readFileSync( + "UsuariosRegistrados/" + user + "/secreto.enc", + "utf-8" + ); + var verified = speakeasy.totp.verify({ secret: dataTFA, + token: req.body.tokSecret }); + if(verified){ + let urlQR = speakeasy.otpauthURL({ secret: dataTFA, label: 'ES' }); + return res.status(200).send({result:{status:'ok', token: token, TFA: 1, urlQR: urlQR},error:null}); + } + else{ + return res.status(200).send({result:null,error:"Prueba otra vez"}); + } + + } + else{ + return res.status(200).send({result:null,error:"Error doble factor no activo"}); + } +} + +usuarioController.activar2FA = async function (req, res) { + let nombre = req.usuario; + if (fs.existsSync(path.join(__dirname, '../UsuariosRegistrados/' + nombre + '/secreto.enc'))){ + log.errorMensaje(req,"Ya esta activado el doble factor"); + return res.status(200).send({result:null,error:"Ya existe el doble factor para esta cuenta"}); //400 + } + + //const hashsecreto = CryptoJS.SHA512(req.body.secreto).toString(); + await fsp.writeFile('UsuariosRegistrados/' + nombre + '/secreto.enc', req.body.secreto); + let dataTFA = fs.readFileSync( + "UsuariosRegistrados/" + nombre + "/secreto.enc", + "utf-8" + ); + let urlQR = speakeasy.otpauthURL({ secret: dataTFA, label: 'ES' }); + return res.status(200).send({result:{status:'Activación completa', TFA: 1, urlQR: urlQR},error:null}); +}; + + +/* + * Other actions + */ + +module.exports = usuarioController; \ No newline at end of file diff --git a/index.js b/index.js new file mode 100755 index 0000000..e1d404a --- /dev/null +++ b/index.js @@ -0,0 +1,61 @@ +'use strict' + + +const port = process.env.PORT || 4000; //Puerto + +const https = require('https'); ///HTTPS +const fs = require('fs'); + +const OPTIONS_HTTPS = { + key: fs.readFileSync('./cert/key.pem'), + cert: fs.readFileSync('./cert/cert.pem') +}; + + +const express = require('express'); +var cors = require('cors'); //Peticiones cruzadas, por si +const logger = require('morgan'); + +const app = express(); + +// protege la aplicación de algunas vulnerabilidades web conocidas mediante el establecimiento correcto de cabeceras HTTP. +const helmet = require('helmet'); +app.use(helmet()); + +//Archivos estaticos +app.use(express.static('public')); + +//declaracion +app.use(logger('dev')); //opciones : tiny, short, dev, common, combined +app.use(express.urlencoded({ extended: false })); //body generado desde form o postman +app.use(express.json()); // body con objetos json + + +var usuarios = require('./routes/usuario'); +app.use('/', usuarios); + +var datos = require('./routes/datos'); +app.use('/', datos); + +var compartidos = require('./routes/compartidos'); +app.use('/', compartidos); + + + +app.get('*', (req, res, next) => { + res.writeHead(301, + {Location: `https://192.168.10.2:${port}/home.html`} + ); + res.end(); +}); + + //HTTPS + https.createServer(OPTIONS_HTTPS, app).listen(port, '0.0.0.0', () => { + console.log(`API REST ejecutándose en https://localhost:${port}/`); +}) + + +// Iniciamos la aplicación +/*app.listen(port, 'localhost', () => { + console.log(`API REST ejecutándose en http://localhost:${port}/`); +});*/ diff --git a/middlewares/auth.js b/middlewares/auth.js new file mode 100755 index 0000000..87a53f4 --- /dev/null +++ b/middlewares/auth.js @@ -0,0 +1,74 @@ +const jwt = require('jwt-simple'); +const config = require('../config/config'); +const moment = require('moment'); + + +exports.Authenticated = function(req, res, next) { + if(req.headers.authorization === "") { + res.status(401); + return res.json({error: "No has iniciado sesión"}); + } + + let token = req.headers.authorization; + + try{ + let payload = jwt.decode(token, config.TOKEN_SECRET, 'HS512'); + if(payload.exp < moment().unix()){ + return res.json({error: "Sesión Finalizada"}); + } + req.usuario = payload.sub.split('-')[0]; + req.TFA = payload.TFA; + if(payload.TFA){ + throw new Error("TOken no valid"); + } + next(); + } + catch(error){ + res.status(401); + return res.json({error: "Token no válido"}); + } +} + +exports.AuthenticatedFA = function(req, res, next) { + if(req.headers.authorization === "") { + res.status(401); + return res.json({error: "No has iniciado sesión"}); + } + + let token = req.headers.authorization; + + try{ + let payload = jwt.decode(token, config.TOKEN_SECRET, 'HS512'); + if(payload.exp < moment().unix()){ + return res.json({error: "Sesión Finalizada"}); + } + if(!payload.TFA){ + throw new Error("TOken no valid"); + } + req.usuario = payload.sub.split('-')[0]; + next(); + } + catch(error){ + res.status(401); + return res.json({error: "Token no válido"}); + } +} + +/*exports.AlreadyToken = function(req, res, next) { + if(req.headers.authorization === "") { + next(); + } + + let token = req.headers.authorization; + + try{ + let payload = jwt.decode(token, config.TOKEN_SECRET, 'HS512'); //Nueva version, ahora no suelta una excepcion cuando expira el token... + if(payload.exp < moment().unix()){ + throw Error(); + } + return res.status(204).end(); + } + catch(error){ + next(); + } +}*/ \ No newline at end of file diff --git a/middlewares/log.js b/middlewares/log.js new file mode 100755 index 0000000..de1d030 --- /dev/null +++ b/middlewares/log.js @@ -0,0 +1,52 @@ +let winston = require('winston'); + +var loggerW = winston.createLogger({ + level: 'info', + format: winston.format.combine( + winston.format.timestamp(), + winston.format.printf(info => { + return `${info.timestamp} ${info.level}: ${info.message}`; + }, + error => { + return `${error.timestamp} ${error.level}: ${error.message}`; + }) + ), + transports: [ + //new winston.transports.Console(), + new winston.transports.File({ filename: 'combined.log' }) + ] +}); + +exports.errorMensaje=function (req,er){ + let usuario = req.usuario; + if(req.body.usuario){ + usuario= req.body.usuario; + } + let ipUsuario=req.headers['user-agent'] ||null; + //console.log(ipUsuario+" ip"); + let mensaje = "ERROR--"+er+"--ERROR El usuario: |"+usuario +"| solicita "+req.originalUrl+" en el Dispositivo: "+ipUsuario; + loggerW.error(mensaje); +} +exports.serverActionInfo=function (req,serverAction){ + let usuario = req.usuario; + if(req.body.usuario){ + usuario= req.body.usuario; + } + let ipUsuario=req.headers['user-agent'] ||null; + let mensaje = "ACCION DEL SERVIDOR--"+serverAction+"-- Para el usuario: |"+usuario +"|" +" en el Dispositivo: "+ipUsuario; + loggerW.info(mensaje); +} + +exports.log = function(req, res, next) { + let usuario = req.usuario; + if(req.body.usuario){ + usuario= req.body.usuario; + } + let ipUsuario=req.headers['user-agent'] ||null; + //console.log(ipUsuario+" ip"); +; + let mensaje = "El usuario: |"+usuario +"| solicita "+req.originalUrl+" en el Dispositivo: "+ipUsuario; + loggerW.info(mensaje); + //loggerW.error(mensaje); + next(); +} diff --git a/package.json b/package.json new file mode 100755 index 0000000..12ce09f --- /dev/null +++ b/package.json @@ -0,0 +1,33 @@ +{ + "name": "es", + "version": "1.0.0", + "description": "Proyecto practicas ES", + "main": "index.js", + "scripts": { + "start": "nodemon index.js", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [ + "node", + "express" + ], + "author": "SAE", + "license": "ISC", + "dependencies": { + "bcrypt": "^5.0.1", + "cors": "^2.8.5", + "crypto-js": "^4.0.0", + "express": "^4.17.1", + "helmet": "^4.4.1", + "jwt-simple": "^0.5.6", + "moment": "^2.29.1", + "mongoose": "^5.12.3", + "morgan": "^1.10.0", + "nodejs-base64-encode": "^1.1.0", + "speakeasy": "^2.0.0", + "winston": "^3.0.0-rc3" + }, + "devDependencies": { + "nodemon": "^2.0.7" + } +} diff --git a/public/home.html b/public/home.html new file mode 100755 index 0000000..1290b3b --- /dev/null +++ b/public/home.html @@ -0,0 +1,7 @@ + + + ES + +

ES

+ + \ No newline at end of file diff --git a/routes/compartidos.js b/routes/compartidos.js new file mode 100755 index 0000000..a8126c7 --- /dev/null +++ b/routes/compartidos.js @@ -0,0 +1,19 @@ +var express = require('express'); +var router = express.Router(); +const auth = require('../middlewares/auth'); +const log = require('../middlewares/log'); + + + +var compartidos = require('../controllers/CompartidosController.js'); + + +router.get('/listaUsuarios', auth.Authenticated,log.log, compartidos.listaUsuarios); +router.get('/listaCompartidos', auth.Authenticated,log.log, compartidos.listaCompartidos); +router.get('/listaCompartidosConmigo', auth.Authenticated,log.log, compartidos.listaCompartidosConmigo); +router.get('/recuperarFicheroCompartido', auth.Authenticated,log.log, compartidos.recuperarFicheroCompartido); +router.post('/guardarArchivoCompartido', auth.Authenticated,log.log, compartidos.guardarArchivoCompartido); +router.post('/obtenerPublicas', auth.Authenticated,log.log, compartidos.obtenerPublicas); + + +module.exports = router; \ No newline at end of file diff --git a/routes/datos.js b/routes/datos.js new file mode 100755 index 0000000..ef86fec --- /dev/null +++ b/routes/datos.js @@ -0,0 +1,13 @@ +var express = require('express'); +var router = express.Router(); +const auth = require('../middlewares/auth'); +const log = require('../middlewares/log'); + + + +var datos = require('../controllers/DatosController.js'); + +router.get('/recuperarDatos', auth.Authenticated,log.log, datos.recuperarDatos); +router.post('/subirDatos', auth.Authenticated,log.log, datos.subirDatos); + +module.exports = router; \ No newline at end of file diff --git a/routes/usuario.js b/routes/usuario.js new file mode 100755 index 0000000..99b0516 --- /dev/null +++ b/routes/usuario.js @@ -0,0 +1,15 @@ +var express = require('express'); +var router = express.Router(); +const auth = require('../middlewares/auth'); +const log = require('../middlewares/log'); + + + +var usuario = require('../controllers/UsuarioController.js'); + +router.post('/registrar', log.log,usuario.registrar); +router.post('/iniciarSesion', log.log,usuario.iniciarSesion); +router.post('/iniciarSesionFA', auth.AuthenticatedFA, log.log,usuario.iniciarSesionFA); +router.post('/activar2FA', auth.Authenticated, log.log,usuario.activar2FA); + +module.exports = router; \ No newline at end of file