Files
codatendechat/backend/src/controllers/SessionController.ts
2025-04-30 13:14:27 -06:00

82 lines
2.0 KiB
TypeScript

import { Request, Response } from "express";
import AppError from "../errors/AppError";
import { getIO } from "../libs/socket";
import AuthUserService from "../services/UserServices/AuthUserService";
import { SendRefreshToken } from "../helpers/SendRefreshToken";
import { RefreshTokenService } from "../services/AuthServices/RefreshTokenService";
import FindUserFromToken from "../services/AuthServices/FindUserFromToken";
import User from "../models/User";
export const store = async (req: Request, res: Response): Promise<Response> => {
const { email, password } = req.body;
const { token, serializedUser, refreshToken } = await AuthUserService({
email,
password
});
SendRefreshToken(res, refreshToken);
const io = getIO();
io.to(`user-${serializedUser.id}`).emit(`company-${serializedUser.companyId}-auth`, {
action: "update",
user: {
id: serializedUser.id,
email: serializedUser.email,
companyId: serializedUser.companyId
}
});
return res.status(200).json({
token,
user: serializedUser
});
};
export const update = async (
req: Request,
res: Response
): Promise<Response> => {
const token: string = req.cookies.jrt;
if (!token) {
throw new AppError("ERR_SESSION_EXPIRED", 401);
}
const { user, newToken, refreshToken } = await RefreshTokenService(
res,
token
);
SendRefreshToken(res, refreshToken);
return res.json({ token: newToken, user });
};
export const me = async (req: Request, res: Response): Promise<Response> => {
const token: string = req.cookies.jrt;
const user = await FindUserFromToken(token);
const { id, profile, super: superAdmin } = user;
if (!token) {
throw new AppError("ERR_SESSION_EXPIRED", 401);
}
return res.json({ id, profile, super: superAdmin });
};
export const remove = async (
req: Request,
res: Response
): Promise<Response> => {
const { id } = req.user;
const user = await User.findByPk(id);
await user.update({ online: false });
res.clearCookie("jrt");
return res.send();
};