|
|
@@ -0,0 +1,76 @@
|
|
|
+import bcrypt from "bcryptjs";
|
|
|
+import { db } from "../db/knex.js";
|
|
|
+
|
|
|
+async function recordFailedAttempt(_login) {}
|
|
|
+
|
|
|
+function formatarUsuario(usuario) {
|
|
|
+ return {
|
|
|
+ Id: usuario.Id,
|
|
|
+ Nome: usuario.Nome,
|
|
|
+ Login: usuario.Login,
|
|
|
+ Email: usuario.Email,
|
|
|
+ Status: usuario.Status,
|
|
|
+ Nivel: usuario.Nivel,
|
|
|
+ Setor: usuario.Setor
|
|
|
+ };
|
|
|
+}
|
|
|
+
|
|
|
+export const UsuarioController = {
|
|
|
+ Login: async function (req, res, next) {
|
|
|
+ try {
|
|
|
+ const { Login, login, Senha, senha, RemenberMe = false } = req.body ?? {};
|
|
|
+ const userAgent = req.headers["user-agent"] || "unknown";
|
|
|
+ void RemenberMe;
|
|
|
+ void userAgent;
|
|
|
+
|
|
|
+ const loginBody = Login ?? login;
|
|
|
+ const senhaBody = Senha ?? senha;
|
|
|
+
|
|
|
+ if (!loginBody || !senhaBody) {
|
|
|
+ return res.status(401).send({ status: false, msg: "Informacoes faltando para Login!" });
|
|
|
+ }
|
|
|
+
|
|
|
+ const loginInformado = String(loginBody).trim();
|
|
|
+ const senhaInformada = String(senhaBody);
|
|
|
+
|
|
|
+ const usuario = await db("usuarios")
|
|
|
+ .where(loginInformado.includes("@") ? { Email: loginInformado } : { Login: loginInformado })
|
|
|
+ .first();
|
|
|
+
|
|
|
+ if (!usuario) {
|
|
|
+ await recordFailedAttempt(loginInformado);
|
|
|
+ return res.status(401).send({ status: false, msg: "Usuario não localizado!" });
|
|
|
+ }
|
|
|
+
|
|
|
+ if (String(usuario.Status) === "0") {
|
|
|
+ return res.status(401).send({ status: false, msg: "Usuario inativo!" });
|
|
|
+ }
|
|
|
+
|
|
|
+ const passwordIsValid = bcrypt.compareSync(senhaInformada, String(usuario.Senha ?? ""));
|
|
|
+ if (!passwordIsValid) {
|
|
|
+ await recordFailedAttempt(loginInformado);
|
|
|
+ return res.status(401).send({ status: false, msg: "Combinacao de usuario e senho invalida!" });
|
|
|
+ }
|
|
|
+
|
|
|
+ return res.status(200).send({
|
|
|
+ status: true,
|
|
|
+ msg: "Login realizado com sucesso!",
|
|
|
+ usuario: formatarUsuario(usuario)
|
|
|
+ });
|
|
|
+ } catch (error) {
|
|
|
+ return next(error);
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ Logout: async function (_req, res, next) {
|
|
|
+ try {
|
|
|
+ return res.status(200).send({ status: true, msg: "Logout realizado com sucesso!" });
|
|
|
+ } catch (error) {
|
|
|
+ return next(error);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+};
|
|
|
+
|
|
|
+export default UsuarioController;
|