Spaces:
Runtime error
Runtime error
| import jwt from "jsonwebtoken"; | |
| import User from "../model/UserModel.js"; | |
| import { compare } from "bcrypt"; | |
| import { renameSync, unlinkSync } from "fs"; | |
| const maxAge = 3 * 24 * 60 * 60 * 1000; | |
| // Update createToken to include role in the token payload | |
| const createToken = (email, userId, role) => { | |
| return jwt.sign({ email, userId, role }, process.env.JWT_KEY, { | |
| expiresIn: maxAge, | |
| }); | |
| }; | |
| export const signup = async (req, res, next) => { | |
| try { | |
| const { email, password, role } = req.body; // Extract role from the request body | |
| if (email && password) { | |
| const user = await User.create({ email, password, role }); // Include role in the User creation | |
| res.cookie("jwt", createToken(email, user.id, role), { // Pass role to createToken | |
| maxAge, | |
| secure: true, | |
| sameSite: "None", | |
| }); | |
| return res.status(201).json({ | |
| user: { | |
| id: user?.id, | |
| email: user?.email, | |
| firstName: user.firstName, | |
| lastName: user.lastName, | |
| image: user.image, | |
| profileSetup: user.profileSetup, | |
| role: user.role, // Return role in the response | |
| }, | |
| }); | |
| } else { | |
| return res.status(400).send("Email and Password Required"); | |
| } | |
| } catch (err) { | |
| console.log(err); | |
| return res.status(500).send("Internal Server Error"); | |
| } | |
| }; | |
| export const login = async (req, res, next) => { | |
| try { | |
| const { email, password } = req.body; | |
| if (email && password) { | |
| const user = await User.findOne({ email }); | |
| if (!user) { | |
| return res.status(404).send("User not found"); | |
| } | |
| const auth = await compare(password, user.password); | |
| if (!auth) { | |
| return res.status(400).send("Invalid Password"); | |
| } | |
| res.cookie("jwt", createToken(email, user.id, user.role), { // Include role in token creation | |
| maxAge, | |
| secure: true, | |
| sameSite: "None", | |
| }); | |
| return res.status(200).json({ | |
| user: { | |
| id: user?.id, | |
| email: user?.email, | |
| firstName: user.firstName, | |
| lastName: user.lastName, | |
| image: user.image, | |
| profileSetup: user.profileSetup, | |
| role: user.role, // Include role in response | |
| }, | |
| }); | |
| } else { | |
| return res.status(400).send("Email and Password Required"); | |
| } | |
| } catch (err) { | |
| return res.status(500).send("Internal Server Error"); | |
| } | |
| }; | |
| export const getUserInfo = async (request, response, next) => { | |
| try { | |
| if (request.userId) { | |
| const userData = await User.findById(request.userId); | |
| if (userData) { | |
| return response.status(200).json({ | |
| id: userData?.id, | |
| email: userData?.email, | |
| firstName: userData.firstName, | |
| lastName: userData.lastName, | |
| image: userData.image, | |
| profileSetup: userData.profileSetup, | |
| color: userData.color, | |
| role: userData.role, // Return role in the user info | |
| }); | |
| } else { | |
| return response.status(404).send("User with the given id not found."); | |
| } | |
| } else { | |
| return response.status(404).send("User id not found."); | |
| } | |
| } catch (error) { | |
| console.log({ error }); | |
| return response.status(500).send("Internal Server Error"); | |
| } | |
| }; | |
| export const logout = async (request, response, next) => { | |
| try { | |
| response.cookie("jwt", "", { maxAge: 1, secure: true, sameSite: "None" }); | |
| return response.status(200).send("Logout successful"); | |
| } catch (err) { | |
| return response.status(500).send("Internal Server Error"); | |
| } | |
| }; | |
| export const updateProfile = async (request, response, next) => { | |
| try { | |
| const { userId } = request; | |
| const { firstName, lastName, color } = request.body; | |
| if (!userId) { | |
| return response.status(400).send("User ID is required."); | |
| } | |
| if (!firstName || !lastName) { | |
| return response.status(400).send("Firstname and Last name is required."); | |
| } | |
| const userData = await User.findByIdAndUpdate( | |
| userId, | |
| { | |
| firstName, | |
| lastName, | |
| color, | |
| profileSetup: true, | |
| }, | |
| { | |
| new: true, | |
| runValidators: true, | |
| } | |
| ); | |
| return response.status(200).json({ | |
| id: userData.id, | |
| email: userData.email, | |
| firstName: userData.firstName, | |
| lastName: userData.lastName, | |
| image: userData.image, | |
| profileSetup: userData.profileSetup, | |
| color: userData.color, | |
| role: userData.role, // Include role in the updated profile response | |
| }); | |
| } catch (error) { | |
| return response.status(500).send("Internal Server Error."); | |
| } | |
| }; | |
| export const addProfileImage = async (request, response, next) => { | |
| try { | |
| if (request.file) { | |
| const date = Date.now(); | |
| let fileName = "uploads/profiles/" + date + request.file.originalname; | |
| renameSync(request.file.path, fileName); | |
| const updatedUser = await User.findByIdAndUpdate( | |
| request.userId, | |
| { image: fileName }, | |
| { | |
| new: true, | |
| runValidators: true, | |
| } | |
| ); | |
| return response.status(200).json({ image: updatedUser.image }); | |
| } else { | |
| return response.status(404).send("File is required."); | |
| } | |
| } catch (error) { | |
| console.log({ error }); | |
| return response.status(500).send("Internal Server Error."); | |
| } | |
| }; | |
| export const removeProfileImage = async (request, response, next) => { | |
| try { | |
| const { userId } = request; | |
| if (!userId) { | |
| return response.status(400).send("User ID is required."); | |
| } | |
| const user = await User.findById(userId); | |
| if (!user) { | |
| return response.status(404).send("User not found."); | |
| } | |
| if (user.image) { | |
| unlinkSync(user.image); | |
| } | |
| user.image = null; | |
| await user.save(); | |
| return response | |
| .status(200) | |
| .json({ message: "Profile image removed successfully." }); | |
| } catch (error) { | |
| console.log({ error }); | |
| return response.status(500).send("Internal Server Error."); | |
| } | |
| }; | |