From 286685d1575fbbe23e5fe748226e241730187a15 Mon Sep 17 00:00:00 2001 From: WeeXnes Date: Thu, 27 Feb 2025 03:20:54 +0100 Subject: [PATCH] added some logging --- core/logger.ts | 31 +++++++++++++++++++++++++++++++ server/api/auth.ts | 5 +++-- server/api/controlVM.ts | 8 +++++--- server/api/getVMs.ts | 2 -- server/api/login.ts | 7 +++---- server/plugins/init.ts | 7 ++++--- 6 files changed, 46 insertions(+), 14 deletions(-) create mode 100644 core/logger.ts diff --git a/core/logger.ts b/core/logger.ts new file mode 100644 index 0000000..34ca073 --- /dev/null +++ b/core/logger.ts @@ -0,0 +1,31 @@ +class Logger { + private static getTimestamp(): string { + const now = new Date(); + const year = now.getFullYear(); + const month = String(now.getMonth() + 1).padStart(2, '0'); + const day = String(now.getDate()).padStart(2, '0'); + const hours = String(now.getHours()).padStart(2, '0'); + const minutes = String(now.getMinutes()).padStart(2, '0'); + const seconds = String(now.getSeconds()).padStart(2, '0'); + + return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; + } + + static error(message: string): void { + console.error(`[${this.getTimestamp()}] [ERROR] ${message}`); + } + + static warning(message: string): void { + console.warn(`[${this.getTimestamp()}] [WARNING] ${message}`); + } + + static info(message: string): void { + console.log(`[${this.getTimestamp()}] [INFO] ${message}`); + } + + static success(message: string): void { + console.log(`[${this.getTimestamp()}] [SUCCESS] ${message}`); + } +} + +export default Logger; diff --git a/server/api/auth.ts b/server/api/auth.ts index 235d126..dc231dd 100644 --- a/server/api/auth.ts +++ b/server/api/auth.ts @@ -1,11 +1,12 @@ import { defineEventHandler, getCookie, createError } from 'h3'; import jwt from 'jsonwebtoken'; import {jwt_globals} from "~/core/globals"; +import Logger from "~/core/logger"; export default defineEventHandler(async (event) => { try { const token = getCookie(event, 'token'); - console.log("Checking token " + token); + Logger.info("Checking token " + token); if (!token) { throw createError({ statusCode: 401, statusMessage: 'Unauthorized' }); } @@ -19,7 +20,7 @@ export default defineEventHandler(async (event) => { if (!decoded?.userId) { throw createError({ statusCode: 401, statusMessage: 'Invalid token' }); } - console.log("user has been authed, hash: " + decoded.userId); + Logger.success("user has been authed, password: " + decoded.userId); return { success: true }; } catch (error: any) { return createError({ diff --git a/server/api/controlVM.ts b/server/api/controlVM.ts index 2776cc0..5636008 100644 --- a/server/api/controlVM.ts +++ b/server/api/controlVM.ts @@ -1,4 +1,5 @@ import { exec } from 'child_process'; +import Logger from "~/core/logger"; export default defineEventHandler(async (event) => { const body = await readBody(event); @@ -12,13 +13,14 @@ export default defineEventHandler(async (event) => { await new Promise((resolve, reject) => { exec(command, (error, stdout, stderr) => { - if (error || stderr) { - reject(`Error: ${stderr || error?.message}`); + if (error || stderr) {; + Logger.error(`Error: ${stderr || error?.message}`); + reject(`Error: ${stderr || error?.message}`) } resolve(stdout); }); }); - + Logger.info(action + ": " + vm.name); return { status: 'success', message: `VM ${action} successful`, vm }; } catch (error) { return { status: 'error', message: `Failed to ${action} VM`, error: error }; diff --git a/server/api/getVMs.ts b/server/api/getVMs.ts index 9ee54ba..77f2001 100644 --- a/server/api/getVMs.ts +++ b/server/api/getVMs.ts @@ -4,8 +4,6 @@ import {VM} from "~/types/VM"; import {settings} from "~/panel.config"; export default defineEventHandler(() => { - - let vmNames = ["Gameserver", "Ubuntu_VM1"] const virtualMachines: VM[] = []; settings.qemu_vms.forEach(vm => { diff --git a/server/api/login.ts b/server/api/login.ts index 67b6af0..3635e2c 100644 --- a/server/api/login.ts +++ b/server/api/login.ts @@ -3,21 +3,20 @@ import { sendError, createError } from 'h3'; import jwt from 'jsonwebtoken'; import {settings} from "~/panel.config"; import {jwt_globals} from "~/core/globals"; +import Logger from "~/core/logger"; export default defineEventHandler(async (event) => { try { const { password } = await readBody(event); if (!password) { - console.log("password is required"); + Logger.error("password is required"); return sendError(event, createError({ statusCode: 400, message: 'password is required' })); } - - const isMatch = await bcrypt.compare(password, settings.password.hash); if (!isMatch) { - console.log("Invalid credentials! password"); + Logger.error("Invalid credentials! password"); return sendError(event, createError({ statusCode: 400, message: 'Invalid credentials!' })); } diff --git a/server/plugins/init.ts b/server/plugins/init.ts index 47ffa21..5e45a31 100644 --- a/server/plugins/init.ts +++ b/server/plugins/init.ts @@ -2,12 +2,13 @@ import { defineNitroPlugin } from "#imports"; import { reactive } from "vue"; import * as crypto from 'crypto'; import {jwt_globals} from "~/core/globals"; +import Logger from "~/core/logger"; export default defineNitroPlugin((nitroApp) => { - console.log("Running init..."); - console.log("Generating jwt secret...") + Logger.info("Running init..."); + Logger.info("Generating jwt secret...") jwt_globals.secret = crypto.randomBytes(32).toString('base64'); - console.log("secret: " + jwt_globals.secret) + Logger.success("secret: " + jwt_globals.secret) });