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;