odoo-next-backend/dist/controllers/authController.js
2026-01-22 21:21:56 +05:30

132 lines
5.6 KiB
JavaScript

"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.resetPassword = exports.forgotPassword = exports.getMe = exports.signup = exports.login = void 0;
const User_1 = __importDefault(require("../models/User"));
const bcryptjs_1 = __importDefault(require("bcryptjs"));
const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
const email_1 = require("../utils/email");
const crypto_1 = __importDefault(require("crypto"));
const JWT_SECRET = process.env.JWT_SECRET || 'your_super_secret_jwt_key';
const login = (req, res) => __awaiter(void 0, void 0, void 0, function* () {
try {
const { email, password } = req.body;
const user = yield User_1.default.findOne({ email });
if (!user) {
return res.status(401).json({ error: 'Invalid credentials' });
}
const isMatch = yield bcryptjs_1.default.compare(password, user.password);
if (!isMatch) {
return res.status(401).json({ error: 'Invalid credentials' });
}
const token = jsonwebtoken_1.default.sign({ userId: user._id, role: user.role, name: user.name }, JWT_SECRET, { expiresIn: '1d' });
res.json({
message: 'Login successful',
token,
user: { id: user._id, name: user.name, email: user.email, role: user.role }
});
}
catch (error) {
res.status(500).json({ error: error.message });
}
});
exports.login = login;
const signup = (req, res) => __awaiter(void 0, void 0, void 0, function* () {
try {
const { name, email, password, role } = req.body;
const userExists = yield User_1.default.findOne({ email });
if (userExists) {
return res.status(400).json({ error: 'User already exists' });
}
const hashedPassword = yield bcryptjs_1.default.hash(password, 10);
const user = yield User_1.default.create({
name,
email,
password: hashedPassword,
role: role || 'admin'
});
const token = jsonwebtoken_1.default.sign({ userId: user._id, role: user.role, name: user.name }, JWT_SECRET, { expiresIn: '1d' });
res.status(201).json({
message: 'User created successfully',
token,
user: { id: user._id, name: user.name, email: user.email, role: user.role }
});
}
catch (error) {
res.status(500).json({ error: error.message });
}
});
exports.signup = signup;
const getMe = (req, res) => __awaiter(void 0, void 0, void 0, function* () {
try {
const user = yield User_1.default.findById(req.user.userId).select('-password');
if (!user) {
return res.status(404).json({ error: 'User not found' });
}
res.json(user);
}
catch (error) {
res.status(500).json({ error: error.message });
}
});
exports.getMe = getMe;
const forgotPassword = (req, res) => __awaiter(void 0, void 0, void 0, function* () {
try {
const { email } = req.body;
const user = yield User_1.default.findOne({ email });
if (!user) {
return res.status(404).json({ error: 'User not found' });
}
const resetToken = crypto_1.default.randomBytes(20).toString('hex');
user.resetPasswordToken = resetToken;
user.resetPasswordExpires = Date.now() + 3600000; // 1 hour
yield user.save();
const resetUrl = `http://localhost:3000/auth/reset-password?token=${resetToken}`;
const message = `
<h2>Password Reset</h2>
<p>You requested a password reset. Please click the link below to reset your password:</p>
<a href="${resetUrl}">${resetUrl}</a>
<p>This link will expire in 1 hour.</p>
`;
yield (0, email_1.sendEmail)(user.email, 'Password Reset Request', message);
res.json({ message: 'Reset link sent to your email' });
}
catch (error) {
res.status(500).json({ error: error.message });
}
});
exports.forgotPassword = forgotPassword;
const resetPassword = (req, res) => __awaiter(void 0, void 0, void 0, function* () {
try {
const { token, password } = req.body;
const user = yield User_1.default.findOne({
resetPasswordToken: token,
resetPasswordExpires: { $gt: Date.now() }
});
if (!user) {
return res.status(400).json({ error: 'Invalid or expired token' });
}
const hashedPassword = yield bcryptjs_1.default.hash(password, 10);
user.password = hashedPassword;
user.resetPasswordToken = undefined;
user.resetPasswordExpires = undefined;
yield user.save();
res.json({ message: 'Password reset successful' });
}
catch (error) {
res.status(500).json({ error: error.message });
}
});
exports.resetPassword = resetPassword;