83 lines
2.7 KiB
JavaScript
83 lines
2.7 KiB
JavaScript
"use strict";
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.generateToken = generateToken;
|
|
exports.verifyToken = verifyToken;
|
|
exports.authMiddleware = authMiddleware;
|
|
exports.optionalAuthMiddleware = optionalAuthMiddleware;
|
|
exports.generateId = generateId;
|
|
exports.getCurrentTimestamp = getCurrentTimestamp;
|
|
const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
|
|
const db_1 = require("../db");
|
|
const schema_1 = require("../db/schema");
|
|
const drizzle_orm_1 = require("drizzle-orm");
|
|
const JWT_SECRET = process.env.JWT_SECRET || 'your-super-secret-jwt-key-change-in-production';
|
|
const JWT_EXPIRES_IN = '7d';
|
|
function generateToken(payload) {
|
|
return jsonwebtoken_1.default.sign(payload, JWT_SECRET, { expiresIn: JWT_EXPIRES_IN });
|
|
}
|
|
function verifyToken(token) {
|
|
try {
|
|
return jsonwebtoken_1.default.verify(token, JWT_SECRET);
|
|
}
|
|
catch {
|
|
return null;
|
|
}
|
|
}
|
|
async function authMiddleware(req, res, next) {
|
|
const authHeader = req.headers.authorization;
|
|
if (!authHeader || !authHeader.startsWith('Bearer ')) {
|
|
res.status(401).json({
|
|
error: {
|
|
code: 'UNAUTHORIZED',
|
|
message: 'Missing or invalid authorization header',
|
|
},
|
|
});
|
|
return;
|
|
}
|
|
const token = authHeader.slice(7);
|
|
const payload = verifyToken(token);
|
|
if (!payload) {
|
|
res.status(401).json({
|
|
error: {
|
|
code: 'UNAUTHORIZED',
|
|
message: 'Invalid or expired token',
|
|
},
|
|
});
|
|
return;
|
|
}
|
|
const user = await db_1.db.select({ id: schema_1.users.id }).from(schema_1.users).where((0, drizzle_orm_1.eq)(schema_1.users.id, payload.userId)).limit(1);
|
|
if (user.length === 0) {
|
|
res.status(401).json({
|
|
error: {
|
|
code: 'UNAUTHORIZED',
|
|
message: 'User no longer exists, please log in again',
|
|
},
|
|
});
|
|
return;
|
|
}
|
|
req.user = payload;
|
|
next();
|
|
}
|
|
function optionalAuthMiddleware(req, res, next) {
|
|
const authHeader = req.headers.authorization;
|
|
if (authHeader && authHeader.startsWith('Bearer ')) {
|
|
const token = authHeader.slice(7);
|
|
const payload = verifyToken(token);
|
|
if (payload) {
|
|
req.user = payload;
|
|
}
|
|
}
|
|
next();
|
|
}
|
|
function generateId(prefix = '') {
|
|
const timestamp = Date.now().toString(36);
|
|
const random = Math.random().toString(36).slice(2, 10);
|
|
return `${prefix}${prefix ? '_' : ''}${timestamp}${random}`;
|
|
}
|
|
function getCurrentTimestamp() {
|
|
return Date.now();
|
|
}
|
|
//# sourceMappingURL=auth.js.map
|