This commit is contained in:
2022-01-02 22:07:03 -03:00
parent 0232b1dcf1
commit edd044b742
32 changed files with 11579 additions and 0 deletions

4
taller6/backend/.env Normal file
View File

@@ -0,0 +1,4 @@
SECRET_TOKEN="suclave"
CLUSTER="cluster0-wxfwq.mongodb.net/UBB202001"
USERBD="danielbustos86"
PASSBD="daniel123"

View File

@@ -0,0 +1,129 @@
'use strict'
var Usuario = require('../models/usuario.js');
const bcrypt = require('bcrypt-nodejs');
const service = require('../services/index')
function list_usuarios(req, res) {
Usuario.find({}, (err, usuario) => {
if (err) {
return res.status(500).send({ message: 'Error: Could not get usuarios!' });
}
res.status(200).send({ usuario });
})
}
function show_usuario(req, res) {
let usuario_to_find = { 'mail': req.params.mail };
Usuario.find(usuario_to_find, (err, usuario) => {
if (err) {
return res.status(500).send({ message: 'Error: Could not get usuario!' });
}
res.status(200).send({ usuario });
})
}
function new_usuario(req, res) {
try{
let usuario = new Usuario();
usuario.nombre = req.body.nombre;
usuario.mail = req.body.mail;
usuario.pass = req.body.pass;
usuario.activo = req.body.activo;
usuario.save((err, usuarioSave) => {
if (err) {
return res.status(400).send({ message: `Error: Could not save usuario to database!> ${err}` });
}
res.status(200).send({ usuario: usuarioSave });
})
}
catch (error) {
res.status(500).send({ message: `error: ` + error });
}
}
function modify_usuario(req, res) {
let usuario = new Usuario();
usuario._id = req.params.id;
usuario.nombre = req.body.nombre;
usuario.mail = req.body.mail;
usuario.pass = req.body.pass;
usuario.activo = req.body.activo;
Usuario.updateOne({ '_id': usuario._id }, usuario, (err, updatedUsuario) => {
if (err) {
return res.status(400).send({ message: `Error: Could not save usuario to database!> ${err}` });
}
if (updatedUsuario.nModified == 1) {
res.status(200).send({ message: `Usuario modified!` });
}
else {
res.status(400).send({ message: `Error: Usuario could not be modified!` });
}
});
}
function delete_usuario(req, res) {
let id = { '_id': req.params.id };
Usuario.deleteOne(id, (err, usuario) => {
if (err) {
return res.status(400).send({ message: `Error: Could not delete usuario from database!> ${err}` });
}
if (usuario.deletedCount == 1) {
res.status(200).send({ message: `Usuario deleted!` });
}
else {
res.status(400).send({ message: `Error: Usuario could not be deleted!` });
}
});
}
function validar_usuario(req, res) {
var password = req.body.pass;
Usuario.findOne({'mail': req.body.mail}, (err, user) => {
if (err) {
return res.status(500).send({ mensaje: 'error al realizar la peticion' });
}
if (!user) {
return res.status(401).send({ mensaje: 'Error: usuario no existe' });
}
if (!user.activo) {
return res.status(401).send({ 'mensaje': 'usuario no está activo'});
}
bcrypt.compare(password, user.pass, function(error, isMatch) {
if (error) {
res.status(500).send(`Error al validar usuario> ${error}`);
}
else if (!isMatch) {
res.status(401).send({ 'mensaje': 'incorrecto'});
}
else {
res.status(200).send({ 'mensaje': 'correcto', 'token': service.createToken(user)});
}
});
})
}
const validar_vigencia = (req, res) =>{
Usuario.findById(req.usuario, function (err, usuario) {
if (err) {
return res.status(401).send({'mensaje': 'usuario no autorizado'});
}
if (!usuario.activo) {
return res.status(401).send({'mensaje': 'usuario no es activo'});
}
return res.status(200).send({'usuario': usuario.mail});
});
}
module.exports = {
list_usuarios,
show_usuario,
new_usuario,
modify_usuario,
delete_usuario,
validar_usuario,
validar_vigencia
};

42
taller6/backend/index.js Normal file
View File

@@ -0,0 +1,42 @@
'use strict'
require('dotenv').config();
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
var cors = require('cors');
app.use(cors());
app.options('*', cors());
var usuario_route = require('./routes/usuarioRoute');
const mongoose = require('mongoose');
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use('/api', usuario_route);
const options = {
useNewUrlParser: true,
useCreateIndex: true,
autoIndex: true,
keepAlive: true,
poolSize: 10,
bufferMaxEntries: 0,
connectTimeoutMS: 10000,
socketTimeoutMS: 45000,
family: 4,
useFindAndModify: false,
useUnifiedTopology: true
}
mongoose.connect(`mongodb://192.99.144.232:27017/grupo12?security=false`, options)
.then(() => console.log('> Successfully connected to DB'))
.catch(err => console.log(err));
app.listen(5000, () => {
console.log('> Service running on port 5000');
})
module.exports = app;

View File

@@ -0,0 +1,33 @@
'use strict'
const jwt = require('jwt-simple');
const moment = require('moment');
require('dotenv').config();
function isAuth(req, res, next) {
if (!req.headers.authorization) {
return res.status(403).send({ message: 'No tienes autorizacion' });
}
const token = req.headers.authorization.split(" ")[1]
try {
const payload = jwt.decode(token, process.env.SECRET_TOKEN);
if (payload.exp < moment().unix()) {
return res.status(401).send({ message: 'El token ha expirado' });
}
req.usuario = payload.sub
}
catch (err) {
return res.status(401).send({ message: 'El token no es valido' });
}
next();
}
module.exports = {
isAuth
};

View File

@@ -0,0 +1,36 @@
'use strict'
const bcrypt = require('bcrypt-nodejs');
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const UsuarioSchema = Schema({
nombre: String,
mail: String,
pass: String,
activo: Boolean
});
UsuarioSchema.pre('save', function(next) {
const usuario = this;
if (!usuario.isModified('pass')) {
return next();
}
if (usuario.activo == null) {
usuario.activo = false;
}
bcrypt.genSalt(10, (err, salt) => {
if (err) {
next(err);
}
bcrypt.hash(usuario.pass, salt, null, (err, hash) => {
if (err) {
next(err);
}
usuario.pass = hash;
next();
});
})
})
module.exports = mongoose.model('usuario', UsuarioSchema);

View File

@@ -0,0 +1,25 @@
{
"name": "backend",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "nodemon index.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"bcrypt-nodejs": "0.0.3",
"body-parser": "^1.19.1",
"cors": "^2.8.5",
"dotenv": "^10.0.0",
"express": "^4.17.1",
"jwt-simple": "^0.5.6",
"moment": "^2.29.1",
"mongoose": "5.9.24"
},
"devDependencies": {
"nodemon": "^2.0.15"
}
}

View File

@@ -0,0 +1,17 @@
'use strict'
var express = require('express');
var usuarioController = require('../controllers/usuarioController');
const auth = require('../middlewares/auth');
var api = express.Router();
api.get('/usuario', auth.isAuth, usuarioController.list_usuarios);
api.get('/usuario/:mail', auth.isAuth, usuarioController.show_usuario);
api.post('/usuario', usuarioController.new_usuario);
api.post('/usuario/validar', usuarioController.validar_usuario);
api.post('/usuario/vigencia', auth.isAuth, usuarioController.validar_vigencia);
api.put('/usuario/:id', auth.isAuth, usuarioController.modify_usuario);
api.delete('/usuario/:id', auth.isAuth, usuarioController.delete_usuario);
module.exports = api;

View File

@@ -0,0 +1,19 @@
'use strict'
const jwt = require('jwt-simple');
const moment = require('moment');
require('dotenv').config();
function createToken(user) {
const payload ={
sub: user._id,
iat: moment().unix(),
exp: moment().add(14,'days').unix(),
};
return jwt.encode(payload, process.env.SECRET_TOKEN);
}
module.exports = {
createToken
};

1408
taller6/backend/yarn.lock Normal file

File diff suppressed because it is too large Load Diff