138 lines
3.3 KiB
JavaScript
138 lines
3.3 KiB
JavaScript
const express = require("express");
|
|
const router = express.Router();
|
|
const jwt = require("jsonwebtoken");
|
|
const bcrypt = require("bcrypt");
|
|
const User = require("../models/user");
|
|
const {loadImage,deleteImageCloud,scaleImage} = require("../utils/cloudinary");
|
|
|
|
const { checkAuth } = require("../middlewares/authentication");
|
|
const {uploadFile} = require('../utils/uploadfiles')
|
|
const fs = require("fs-extra");
|
|
|
|
//AUTH
|
|
|
|
router.get("/users", checkAuth, async (req, res) => {
|
|
var Users;
|
|
|
|
Users = await User.find({});
|
|
|
|
return res.send({
|
|
status: "ok",
|
|
data: Users,
|
|
});
|
|
});
|
|
|
|
if (process.env.REGISTER == "true") {
|
|
router.post("/register", uploadFile,async (req, res) => {
|
|
const { name, email, password } = JSON.parse(req.body.user);
|
|
const passEncrypted = bcrypt.hashSync(password, 10);
|
|
|
|
const newUser = new User({
|
|
name: name,
|
|
email: email,
|
|
password: password,
|
|
});
|
|
|
|
const emailUser = await User.findOne({ email: email });
|
|
if (emailUser) {
|
|
deleteImage(req)
|
|
return res
|
|
.status(500)
|
|
.json({ status: "fail", error: "email already exists" });
|
|
}
|
|
|
|
try {
|
|
newUser.password = await newUser.encryptPassword(password);
|
|
|
|
if (req.files.File) {
|
|
console.log(req.files.File.tempFilePath);
|
|
const result = await loadImage(req.files.File.tempFilePath);
|
|
newUser.image = {
|
|
public_id: result.public_id,
|
|
secure_url: result.secure_url,
|
|
};
|
|
deleteImage(req)
|
|
|
|
}
|
|
await newUser.save();
|
|
|
|
res.json({
|
|
status: "ok",
|
|
msg: "Usuario creado",
|
|
});
|
|
} catch (error) {
|
|
deleteImage(req)
|
|
return res
|
|
.status(500)
|
|
.json({ status: "fail", error: `internal error:${error}` });
|
|
}
|
|
});
|
|
} else {
|
|
router.post("/register", (req, res) => {
|
|
deleteImage(req)
|
|
return res
|
|
.status(500)
|
|
.json({
|
|
status: "faill",
|
|
error: `No tiene permitido crear usuarios nuevos`,
|
|
});
|
|
});
|
|
}
|
|
|
|
router.post("/login", async (req, res) => {
|
|
const { email, password } = req.body;
|
|
|
|
var user = await User.findOne({ email: email });
|
|
if (!user) {
|
|
res
|
|
.status(401)
|
|
.json({ status: "fail", error: "Invalid credentials email" });
|
|
return;
|
|
}
|
|
|
|
if (!(await user.matchPassword(password))) {
|
|
return res
|
|
.status(401)
|
|
.json({ status: "fail", error: "Invalid credentials pass" });
|
|
}
|
|
user.set("password", undefined, { strict: false });
|
|
const token = jwt.sign(
|
|
{
|
|
userData: user,
|
|
},
|
|
"api finanzas mdchaparror @4050#",
|
|
{ expiresIn: 60 * 60 * 24 * 30 }
|
|
);
|
|
const toSend = {
|
|
status: "ok",
|
|
userData: user,
|
|
token: token,
|
|
};
|
|
res.json(toSend);
|
|
});
|
|
|
|
router.delete("/user", checkAuth, async (req, res) => {
|
|
try {
|
|
const id = req.query.id;
|
|
const userDelete = await User.findOne({ _id: id })
|
|
|
|
const resultado = await User.deleteOne({ _id: id });
|
|
if(userDelete.image.public_id)
|
|
await deleteImageCloud(userDelete.image.public_id).catch(console.error("No existe imagen para borrar"));
|
|
return res.json({ status: "ok", data: resultado });
|
|
|
|
} catch (error) {
|
|
console.error(error);
|
|
return res.status(500).json({ status: "fail", error: error });
|
|
}
|
|
});
|
|
//CRUD USER
|
|
|
|
const deleteImage = async (req)=>{
|
|
if (req.files.File) {
|
|
await fs.unlink(req.files.File.tempFilePath);
|
|
}
|
|
}
|
|
|
|
module.exports = router;
|