This commit is contained in:
Cassio Santos
2020-05-23 17:19:42 -03:00
commit 47f152a145
48 changed files with 19316 additions and 0 deletions

View File

@@ -0,0 +1,60 @@
const { validationResult } = require("express-validator");
const bcrypt = require("bcryptjs");
const jwt = require("jsonwebtoken");
const User = require("../models/User");
exports.signup = async (req, res, next) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
const error = new Error("Validation failed");
error.statusCode = 422;
error.data = errors.array();
throw error;
}
const { name, password, email } = req.body;
try {
const hashedPw = await bcrypt.hash(password, 12);
const user = User.build({
email: email,
password: hashedPw,
name: name,
});
const result = await user.save();
res.status(201).json({ message: "User created!", userId: result.id });
} catch (err) {
next(err);
}
};
exports.login = async (req, res, next) => {
const { email, password } = req.body;
let loadedUser;
try {
const user = await User.findOne({ where: { email: email } });
if (!user) {
const error = new Error("Usuário não encontrado");
error.statusCode = 401;
throw error;
}
loadedUser = user;
const isEqual = await bcrypt.compare(password, user.password);
if (!isEqual) {
const error = new Error("Senha incorreta");
error.statusCode = 401;
throw error;
}
const token = jwt.sign(
{ email: loadedUser.email, userId: loadedUser.id },
"mysecret",
{ expiresIn: "1h" }
);
return res
.status(200)
.json({ token: token, username: loadedUser.name, userId: loadedUser.id });
} catch (err) {
next(err);
}
};

View File

@@ -0,0 +1,18 @@
const Contact = require("../models/Contact");
const Message = require("../models/Message");
// const io = require("../socket");
exports.getContacts = async (req, res) => {
// const contacts = await Contact.findAll();
const contacts = await Contact.findAll({
include: {
model: Message,
where: {
read: false,
},
required: false,
},
});
return res.json(contacts);
};

View File

@@ -0,0 +1,55 @@
const Message = require("../models/Message");
const Contact = require("../models/Contact");
const io = require("../socket");
const wbot = require("./wbot");
exports.getContactMessages = async (req, res) => {
const { contactId } = req.params;
const contact = await Contact.findByPk(contactId);
const contactMessages = await contact.getMessages();
return res.json(contactMessages);
};
exports.postCreateContactMessage = async (req, res) => {
const { contactId } = req.params;
const message = req.body;
const contact = await Contact.findByPk(contactId);
const newMessage = await contact.createMessage(message);
if (!newMessage) {
return res.status(500).json({ message: "A mensagem não foi criada" });
}
wbot.getWbot().sendMessage(`${contact.number}@c.us`, message.messageBody);
io.getIO().emit("appMessage", {
action: "create",
message: newMessage.dataValues,
});
return res.json(newMessage);
};
exports.postUpdateMessageStatus = async (req, res) => {
const { messagesToSetRead } = req.body;
await Promise.all(
messagesToSetRead.map(async message => {
await Message.update(
{ read: 1 },
{
where: {
id: message.id,
},
}
);
})
);
res.json({ message: "Mensagens lidas!" });
};

View File

@@ -0,0 +1 @@
{"WABrowserId":"\"ynZiZqR67F6o3M5nCIE3Ig==\"","WASecretBundle":"{\"key\":\"3kFQ7T0G4sbiCrb3ZwzDKzDdKLo6hObbUfygGby91H0=\",\"encKey\":\"ezpzST8/4752gQLd+Lj+yfZGqwzFqBlkvpelptnJ5dI=\",\"macKey\":\"3kFQ7T0G4sbiCrb3ZwzDKzDdKLo6hObbUfygGby91H0=\"}","WAToken1":"\"9g0Q+hqE6PdVX8yf2m2poDqpN+VB1NDbsSF3bp0xxE0=\"","WAToken2":"\"1@DnfzCyncYsMRZnUA+PnrZfYpux6mUSqrGPAFBgkU8b7NS6mge9SuJ4QDKUvt8HthVmH9mvovbb26zQ==\""}

View File

@@ -0,0 +1,48 @@
const path = require("path");
const qrCode = require("qrcode-terminal");
const fs = require("fs");
const { Client } = require("whatsapp-web.js");
let wbot;
module.exports = {
init: () => {
const SESSION_FILE_PATH = path.join(__dirname, "/session.json");
let sessionCfg;
if (fs.existsSync(SESSION_FILE_PATH)) {
sessionCfg = require(SESSION_FILE_PATH);
}
wbot = new Client({
session: sessionCfg,
});
wbot.initialize();
wbot.on("qr", qr => {
qrCode.generate(qr, { small: true });
});
wbot.on("authenticated", session => {
console.log("AUTHENTICATED");
sessionCfg = session;
fs.writeFile(SESSION_FILE_PATH, JSON.stringify(sessionCfg), function (
err
) {
if (err) {
console.error(err);
}
});
});
wbot.on("auth_failure", msg => {
console.error("AUTHENTICATION FAILURE", msg);
});
wbot.on("ready", () => {
console.log("READY");
});
return wbot;
},
getWbot: () => {
if (!wbot) {
throw new Error("Wbot not initialized");
}
return wbot;
},
};

View File

@@ -0,0 +1,42 @@
const io = require("../socket");
const Contact = require("../models/Contact");
const wbot = require("./wbot");
const wbotMessageListener = () => {
wbot.getWbot().on("message", async msg => {
const msgContact = await msg.getContact();
try {
let contact = await Contact.findOne({
where: { number: msgContact.number },
});
if (!contact) {
try {
contact = await Contact.create({
name: msgContact.number.toString(),
number: msgContact.number,
imageUrl: "",
});
io.getIO().emit("contact", {
action: "create",
contact: contact.dataValues,
});
} catch (err) {
console.log(err);
}
}
const newMessage = await contact.createMessage({
messageBody: msg.body,
});
io.getIO().emit("appMessage", {
action: "create",
message: newMessage.dataValues,
});
} catch (err) {
console.log(err);
}
});
};
module.exports = wbotMessageListener;