diff --git a/src/util/jwtUtils.js b/src/util/jwtUtils.js
index 115c9c5..9031631 100644
--- a/src/util/jwtUtils.js
+++ b/src/util/jwtUtils.js
@@ -1,6 +1,7 @@
import {existsSync} from 'fs';
import {readFile, writeFile} from "node:fs/promises";
import {generateKeyPairSync, createHash, createPublicKey, createPrivateKey} from 'node:crypto';
+import jwt from "jsonwebtoken";
let privateKey, publicKey, fingerprint;
@@ -10,6 +11,8 @@ export async function initJwt() {
throw new Error('JWT secret path is not defined in environment variables, or the directory does not exist.');
}
+ console.log(`[JWT] Initializing JWT with secret path: ${secretPath}`);
+
const privateKeyPath = `${secretPath}/jwt.key`;
const publicKeyPath = `${secretPath}/jwt.key.pub`;
@@ -55,9 +58,40 @@ const jwtOptions = {
}
export async function generateJwtToken(user) {
+ if (!privateKey) {
+ throw new Error('JWT private key is not initialized. Please call initJwt() first.');
+ }
+
+ const payload = {
+ sub: user._id.toString(),
+ username: user.username,
+ type: user.type,
+ iat: Math.floor(Date.now() / 1000)
+ };
+ return new Promise((resolve, reject) => {
+ jwt.sign(payload, privateKey, jwtOptions, (err, token) => {
+ if (err) {
+ console.error('[JWT] Error generating token:', err);
+ return reject(err);
+ }
+ resolve(token);
+ });
+ });
}
export async function validateJwtToken(token) {
+ if (!publicKey) {
+ throw new Error('JWT public key is not initialized. Please call initJwt() first.');
+ }
+ return new Promise((resolve, reject) => {
+ jwt.verify(token, publicKey, jwtOptions, (err, decoded) => {
+ if (err) {
+ console.error('[JWT] Token validation failed:', err);
+ return reject(err);
+ }
+ resolve(decoded);
+ });
+ });
}
\ No newline at end of file
|