diff --git a/.github/workflows/build-check.yml b/.github/workflows/build-check.yml new file mode 100644 index 000000000..206a652d5 --- /dev/null +++ b/.github/workflows/build-check.yml @@ -0,0 +1,23 @@ +name: Build Check (Server) +on: + pull_request: + workflow_dispatch: + +jobs: + build-server: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Set up Node + uses: actions/setup-node@v4 + with: + node-version: 22 + + - name: Install server dependencies + working-directory: server + run: npm install + + - name: Check server formatting + working-directory: server + run: npm run build diff --git a/server/src/app.js b/server/src/app.js index 9cabda6b6..253baee88 100644 --- a/server/src/app.js +++ b/server/src/app.js @@ -1,16 +1,16 @@ import express from "express"; import path from "path"; -import { responseHandler } from "./middleware/responseHandler.js"; +import { responseHandler } from "./middleware/v1/responseHandler.js"; import cors from "cors"; import helmet from "helmet"; import compression from "compression"; import cookieParser from "cookie-parser"; -import languageMiddleware from "./middleware/languageMiddleware.js"; +import languageMiddleware from "./middleware/v1/languageMiddleware.js"; import swaggerUi from "swagger-ui-express"; -import { handleErrors } from "./middleware/handleErrors.js"; +import { handleErrors } from "./middleware/v1/handleErrors.js"; import { setupRoutes } from "./config/routes.js"; -import { generalApiLimiter } from "./middleware/rateLimiter.js"; -import { sanitizeBody, sanitizeQuery } from "./middleware/sanitization.js"; +import { generalApiLimiter } from "./middleware/v1/rateLimiter.js"; +import { sanitizeBody, sanitizeQuery } from "./middleware/v1/sanitization.js"; export const createApp = ({ services, controllers, envSettings, frontendPath, openApiSpec }) => { const allowedOrigin = envSettings.clientHost; diff --git a/server/src/config/routes.js b/server/src/config/routes.js index 5ef622f37..2068cf021 100644 --- a/server/src/config/routes.js +++ b/server/src/config/routes.js @@ -1,5 +1,5 @@ -import { verifyJWT } from "../middleware/verifyJWT.js"; -import { authApiLimiter } from "../middleware/rateLimiter.js"; +import { verifyJWT } from "../middleware/v1/verifyJWT.js"; +import { authApiLimiter } from "../middleware/v1/rateLimiter.js"; import AuthRoutes from "../routes/v1/authRoute.js"; import InviteRoutes from "../routes/v1//inviteRoute.js"; diff --git a/server/src/config/services.js b/server/src/config/services.js index b2b4ac430..c5ab7fa02 100644 --- a/server/src/config/services.js +++ b/server/src/config/services.js @@ -1,22 +1,22 @@ -import ServiceRegistry from "../service/system/serviceRegistry.js"; -import TranslationService from "../service/system/translationService.js"; -import StringService from "../service/system/stringService.js"; +import ServiceRegistry from "../service/v1/system/serviceRegistry.js"; +import TranslationService from "../service/v1/system/translationService.js"; +import StringService from "../service/v1/system/stringService.js"; import MongoDB from "../db/mongo/MongoDB.js"; -import NetworkService from "../service/infrastructure/networkService.js"; -import EmailService from "../service/infrastructure/emailService.js"; -import BufferService from "../service/infrastructure/bufferService.js"; -import StatusService from "../service/infrastructure/statusService.js"; -import NotificationUtils from "../service/infrastructure/notificationUtils.js"; -import NotificationService from "../service/infrastructure/notificationService.js"; -import ErrorService from "../service/infrastructure/errorService.js"; -import SuperSimpleQueueHelper from "../service/infrastructure/SuperSimpleQueue/SuperSimpleQueueHelper.js"; -import SuperSimpleQueue from "../service/infrastructure/SuperSimpleQueue/SuperSimpleQueue.js"; -import UserService from "../service/business/userService.js"; -import CheckService from "../service/business/checkService.js"; -import DiagnosticService from "../service/business/diagnosticService.js"; -import InviteService from "../service/business/inviteService.js"; -import MaintenanceWindowService from "../service/business/maintenanceWindowService.js"; -import MonitorService from "../service/business/monitorService.js"; +import NetworkService from "../service/v1/infrastructure/networkService.js"; +import EmailService from "../service/v1/infrastructure/emailService.js"; +import BufferService from "../service/v1/infrastructure/bufferService.js"; +import StatusService from "../service/v1/infrastructure/statusService.js"; +import NotificationUtils from "../service/v1/infrastructure/notificationUtils.js"; +import NotificationService from "../service/v1/infrastructure/notificationService.js"; +import ErrorService from "../service/v1/infrastructure/errorService.js"; +import SuperSimpleQueueHelper from "../service/v1/infrastructure/SuperSimpleQueue/SuperSimpleQueueHelper.js"; +import SuperSimpleQueue from "../service/v1/infrastructure/SuperSimpleQueue/SuperSimpleQueue.js"; +import UserService from "../service/v1/business/userService.js"; +import CheckService from "../service/v1/business/checkService.js"; +import DiagnosticService from "../service/v1/business/diagnosticService.js"; +import InviteService from "../service/v1/business/inviteService.js"; +import MaintenanceWindowService from "../service/v1/business/maintenanceWindowService.js"; +import MonitorService from "../service/v1/business/monitorService.js"; import papaparse from "papaparse"; import axios from "axios"; import got from "got"; diff --git a/server/src/controllers/v1/baseController.js b/server/src/controllers/v1/baseController.js index 314905c82..e8612cec5 100644 --- a/server/src/controllers/v1/baseController.js +++ b/server/src/controllers/v1/baseController.js @@ -1,4 +1,4 @@ -import { AppError } from "../../service/infrastructure/errorService.js"; +import { AppError } from "../../service/v1/infrastructure/errorService.js"; export const createCommonDependencies = (db, errorService, logger, stringService) => { return { diff --git a/server/src/index.js b/server/src/index.js index d1ff649eb..a4e477d5f 100755 --- a/server/src/index.js +++ b/server/src/index.js @@ -7,7 +7,7 @@ import path from "path"; import fs from "fs"; import Logger from "./utils/logger.js"; -import SettingsService from "./service/system/settingsService.js"; +import SettingsService from "./service/v1/system/settingsService.js"; import AppSettings from "./db/models/AppSettings.js"; const SERVICE_NAME = "Server"; diff --git a/server/src/middleware/handleErrors.js b/server/src/middleware/v1/handleErrors.js similarity index 71% rename from server/src/middleware/handleErrors.js rename to server/src/middleware/v1/handleErrors.js index b0ded5ab7..43671fbe2 100755 --- a/server/src/middleware/handleErrors.js +++ b/server/src/middleware/v1/handleErrors.js @@ -1,6 +1,6 @@ -import { logger } from "../utils/logger.js"; -import ServiceRegistry from "../service/system/serviceRegistry.js"; -import StringService from "../service/system/stringService.js"; +import { logger } from "../../utils/logger.js"; +import ServiceRegistry from "../../service/v1/system/serviceRegistry.js"; +import StringService from "../../service/v1/system/stringService.js"; const handleErrors = (error, req, res, next) => { const status = error.status || 500; diff --git a/server/src/middleware/isAllowed.js b/server/src/middleware/v1/isAllowed.js similarity index 87% rename from server/src/middleware/isAllowed.js rename to server/src/middleware/v1/isAllowed.js index 5d61974be..cc240f531 100755 --- a/server/src/middleware/isAllowed.js +++ b/server/src/middleware/v1/isAllowed.js @@ -1,9 +1,9 @@ import jwt from "jsonwebtoken"; const TOKEN_PREFIX = "Bearer "; const SERVICE_NAME = "allowedRoles"; -import ServiceRegistry from "../service/system/serviceRegistry.js"; -import StringService from "../service/system/stringService.js"; -import SettingsService from "../service/system/settingsService.js"; +import ServiceRegistry from "../../service/v1/system/serviceRegistry.js"; +import StringService from "../../service/v1/system/stringService.js"; +import SettingsService from "../../service/v1/system/settingsService.js"; const isAllowed = (allowedRoles) => { return (req, res, next) => { diff --git a/server/src/middleware/languageMiddleware.js b/server/src/middleware/v1/languageMiddleware.js similarity index 93% rename from server/src/middleware/languageMiddleware.js rename to server/src/middleware/v1/languageMiddleware.js index 6293dc837..819858a21 100755 --- a/server/src/middleware/languageMiddleware.js +++ b/server/src/middleware/v1/languageMiddleware.js @@ -1,4 +1,4 @@ -import { logger } from "../utils/logger.js"; +import { logger } from "../../utils/logger.js"; const languageMiddleware = (stringService, translationService) => async (req, res, next) => { try { diff --git a/server/src/middleware/rateLimiter.js b/server/src/middleware/v1/rateLimiter.js similarity index 100% rename from server/src/middleware/rateLimiter.js rename to server/src/middleware/v1/rateLimiter.js diff --git a/server/src/middleware/responseHandler.js b/server/src/middleware/v1/responseHandler.js similarity index 100% rename from server/src/middleware/responseHandler.js rename to server/src/middleware/v1/responseHandler.js diff --git a/server/src/middleware/sanitization.js b/server/src/middleware/v1/sanitization.js similarity index 100% rename from server/src/middleware/sanitization.js rename to server/src/middleware/v1/sanitization.js diff --git a/server/src/middleware/verifyJWT.js b/server/src/middleware/v1/verifyJWT.js similarity index 87% rename from server/src/middleware/verifyJWT.js rename to server/src/middleware/v1/verifyJWT.js index d01db0a97..b57391dfd 100755 --- a/server/src/middleware/verifyJWT.js +++ b/server/src/middleware/v1/verifyJWT.js @@ -1,7 +1,7 @@ import jwt from "jsonwebtoken"; -import ServiceRegistry from "../service/system/serviceRegistry.js"; -import SettingsService from "../service/system/settingsService.js"; -import StringService from "../service/system/stringService.js"; +import ServiceRegistry from "../../service/v1/system/serviceRegistry.js"; +import SettingsService from "../../service/v1/system/settingsService.js"; +import StringService from "../../service/v1/system/stringService.js"; const SERVICE_NAME = "verifyJWT"; const TOKEN_PREFIX = "Bearer "; diff --git a/server/src/middleware/verifyOwnership.js b/server/src/middleware/v1/verifyOwnership.js similarity index 88% rename from server/src/middleware/verifyOwnership.js rename to server/src/middleware/v1/verifyOwnership.js index 4431b0c26..741fb6436 100755 --- a/server/src/middleware/verifyOwnership.js +++ b/server/src/middleware/v1/verifyOwnership.js @@ -1,6 +1,6 @@ -import { logger } from "../utils/logger.js"; -import ServiceRegistry from "../service/system/serviceRegistry.js"; -import StringService from "../service/system/stringService.js"; +import { logger } from "../../utils/logger.js"; +import ServiceRegistry from "../../service/v1/system/serviceRegistry.js"; +import StringService from "../../service/v1/system/stringService.js"; import { ObjectId } from "mongodb"; const SERVICE_NAME = "verifyOwnership"; diff --git a/server/src/middleware/verifySuperAdmin.js b/server/src/middleware/v1/verifySuperAdmin.js similarity index 97% rename from server/src/middleware/verifySuperAdmin.js rename to server/src/middleware/v1/verifySuperAdmin.js index a5a93eede..41ac0a3e0 100755 --- a/server/src/middleware/verifySuperAdmin.js +++ b/server/src/middleware/v1/verifySuperAdmin.js @@ -1,5 +1,5 @@ const jwt = require("jsonwebtoken"); -const logger = require("../utils/logger"); +const logger = require("../../utils/logger.js"); const SERVICE_NAME = "verifyAdmin"; const TOKEN_PREFIX = "Bearer "; import ServiceRegistry from "../service/serviceRegistry.js"; diff --git a/server/src/middleware/verifyTeamAccess.js b/server/src/middleware/v1/verifyTeamAccess.js similarity index 100% rename from server/src/middleware/verifyTeamAccess.js rename to server/src/middleware/v1/verifyTeamAccess.js diff --git a/server/src/routes/v1/authRoute.js b/server/src/routes/v1/authRoute.js index f69f94f43..d9b036b05 100755 --- a/server/src/routes/v1/authRoute.js +++ b/server/src/routes/v1/authRoute.js @@ -1,6 +1,6 @@ import { Router } from "express"; -import { verifyJWT } from "../../middleware/verifyJWT.js"; -import { isAllowed } from "../../middleware/isAllowed.js"; +import { verifyJWT } from "../../middleware/v1/verifyJWT.js"; +import { isAllowed } from "../../middleware/v1/isAllowed.js"; import multer from "multer"; const upload = multer(); diff --git a/server/src/routes/v1/checkRoute.js b/server/src/routes/v1/checkRoute.js index 673fe51e0..78f6b8a42 100755 --- a/server/src/routes/v1/checkRoute.js +++ b/server/src/routes/v1/checkRoute.js @@ -1,6 +1,6 @@ import { Router } from "express"; -import { isAllowed } from "../../middleware/isAllowed.js"; +import { isAllowed } from "../../middleware/v1/isAllowed.js"; class CheckRoutes { constructor(checkController) { diff --git a/server/src/routes/v1/diagnosticRoute.js b/server/src/routes/v1/diagnosticRoute.js index 1b7cc06be..2cf481e08 100755 --- a/server/src/routes/v1/diagnosticRoute.js +++ b/server/src/routes/v1/diagnosticRoute.js @@ -1,6 +1,6 @@ import { Router } from "express"; -import { verifyJWT } from "../../middleware/verifyJWT.js"; -import { isAllowed } from "../../middleware/isAllowed.js"; +import { verifyJWT } from "../../middleware/v1/verifyJWT.js"; +import { isAllowed } from "../../middleware/v1/isAllowed.js"; class DiagnosticRoutes { constructor(diagnosticController) { diff --git a/server/src/routes/v1/inviteRoute.js b/server/src/routes/v1/inviteRoute.js index 74fcfeb91..a47550536 100755 --- a/server/src/routes/v1/inviteRoute.js +++ b/server/src/routes/v1/inviteRoute.js @@ -1,6 +1,6 @@ import { Router } from "express"; -import { verifyJWT } from "../../middleware/verifyJWT.js"; -import { isAllowed } from "../../middleware/isAllowed.js"; +import { verifyJWT } from "../../middleware/v1/verifyJWT.js"; +import { isAllowed } from "../../middleware/v1/isAllowed.js"; class InviteRoutes { constructor(inviteController) { diff --git a/server/src/routes/v1/logRoutes.js b/server/src/routes/v1/logRoutes.js index feabe669a..43da8b75a 100755 --- a/server/src/routes/v1/logRoutes.js +++ b/server/src/routes/v1/logRoutes.js @@ -1,5 +1,5 @@ import { Router } from "express"; -import { isAllowed } from "../../middleware/isAllowed.js"; +import { isAllowed } from "../../middleware/v1/isAllowed.js"; class LogRoutes { constructor(logController) { this.router = Router(); diff --git a/server/src/routes/v1/monitorRoute.js b/server/src/routes/v1/monitorRoute.js index dde72e256..107964f6b 100755 --- a/server/src/routes/v1/monitorRoute.js +++ b/server/src/routes/v1/monitorRoute.js @@ -1,5 +1,5 @@ import { Router } from "express"; -import { isAllowed } from "../../middleware/isAllowed.js"; +import { isAllowed } from "../../middleware/v1/isAllowed.js"; import multer from "multer"; import { fetchMonitorCertificate } from "../../controllers/v1/controllerUtils.js"; const upload = multer({ diff --git a/server/src/routes/v1/queueRoute.js b/server/src/routes/v1/queueRoute.js index 59e1cb744..c6cfa05da 100755 --- a/server/src/routes/v1/queueRoute.js +++ b/server/src/routes/v1/queueRoute.js @@ -1,5 +1,5 @@ import { Router } from "express"; -import { isAllowed } from "../../middleware/isAllowed.js"; +import { isAllowed } from "../../middleware/v1/isAllowed.js"; class QueueRoutes { constructor(queueController) { this.router = Router(); diff --git a/server/src/routes/v1/settingsRoute.js b/server/src/routes/v1/settingsRoute.js index 76556e923..e88186af2 100755 --- a/server/src/routes/v1/settingsRoute.js +++ b/server/src/routes/v1/settingsRoute.js @@ -1,5 +1,5 @@ import { Router } from "express"; -import { isAllowed } from "../../middleware/isAllowed.js"; +import { isAllowed } from "../../middleware/v1/isAllowed.js"; class SettingsRoutes { constructor(settingsController) { diff --git a/server/src/routes/v1/statusPageRoute.js b/server/src/routes/v1/statusPageRoute.js index 8300066a8..2c3b0b265 100755 --- a/server/src/routes/v1/statusPageRoute.js +++ b/server/src/routes/v1/statusPageRoute.js @@ -1,5 +1,5 @@ import { Router } from "express"; -import { verifyJWT } from "../../middleware/verifyJWT.js"; +import { verifyJWT } from "../../middleware/v1/verifyJWT.js"; import multer from "multer"; const upload = multer(); diff --git a/server/src/service/business/checkService.js b/server/src/service/v1/business/checkService.js similarity index 100% rename from server/src/service/business/checkService.js rename to server/src/service/v1/business/checkService.js diff --git a/server/src/service/business/diagnosticService.js b/server/src/service/v1/business/diagnosticService.js similarity index 100% rename from server/src/service/business/diagnosticService.js rename to server/src/service/v1/business/diagnosticService.js diff --git a/server/src/service/business/inviteService.js b/server/src/service/v1/business/inviteService.js similarity index 100% rename from server/src/service/business/inviteService.js rename to server/src/service/v1/business/inviteService.js diff --git a/server/src/service/business/maintenanceWindowService.js b/server/src/service/v1/business/maintenanceWindowService.js similarity index 100% rename from server/src/service/business/maintenanceWindowService.js rename to server/src/service/v1/business/maintenanceWindowService.js diff --git a/server/src/service/business/monitorService.js b/server/src/service/v1/business/monitorService.js similarity index 99% rename from server/src/service/business/monitorService.js rename to server/src/service/v1/business/monitorService.js index 637870b71..061234102 100644 --- a/server/src/service/business/monitorService.js +++ b/server/src/service/v1/business/monitorService.js @@ -1,4 +1,4 @@ -import { createMonitorsBodyValidation } from "../../validation/joi.js"; +import { createMonitorsBodyValidation } from "../../../validation/joi.js"; const SERVICE_NAME = "MonitorService"; class MonitorService { diff --git a/server/src/service/business/userService.js b/server/src/service/v1/business/userService.js similarity index 100% rename from server/src/service/business/userService.js rename to server/src/service/v1/business/userService.js diff --git a/server/src/service/infrastructure/SuperSimpleQueue/SuperSimpleQueue.js b/server/src/service/v1/infrastructure/SuperSimpleQueue/SuperSimpleQueue.js similarity index 100% rename from server/src/service/infrastructure/SuperSimpleQueue/SuperSimpleQueue.js rename to server/src/service/v1/infrastructure/SuperSimpleQueue/SuperSimpleQueue.js diff --git a/server/src/service/infrastructure/SuperSimpleQueue/SuperSimpleQueueHelper.js b/server/src/service/v1/infrastructure/SuperSimpleQueue/SuperSimpleQueueHelper.js similarity index 90% rename from server/src/service/infrastructure/SuperSimpleQueue/SuperSimpleQueueHelper.js rename to server/src/service/v1/infrastructure/SuperSimpleQueue/SuperSimpleQueueHelper.js index b348e2534..2833a59f5 100644 --- a/server/src/service/infrastructure/SuperSimpleQueue/SuperSimpleQueueHelper.js +++ b/server/src/service/v1/infrastructure/SuperSimpleQueue/SuperSimpleQueueHelper.js @@ -5,11 +5,11 @@ class SuperSimpleQueueHelper { /** * @param {{ - * db: import("../database").Database, - * logger: import("../logger").Logger, - * networkService: import("../networkService").NetworkService, - * statusService: import("../statusService").StatusService, - * notificationService: import("../notificationService").NotificationService + * db: import("../database.js").Database, + * logger: import("../logger.js").Logger, + * networkService: import("../networkService.js").NetworkService, + * statusService: import("../statusService.js").StatusService, + * notificationService: import("../notificationService.js").NotificationService * }} */ constructor({ db, logger, networkService, statusService, notificationService }) { diff --git a/server/src/service/infrastructure/bufferService.js b/server/src/service/v1/infrastructure/bufferService.js similarity index 100% rename from server/src/service/infrastructure/bufferService.js rename to server/src/service/v1/infrastructure/bufferService.js diff --git a/server/src/service/infrastructure/emailService.js b/server/src/service/v1/infrastructure/emailService.js similarity index 100% rename from server/src/service/infrastructure/emailService.js rename to server/src/service/v1/infrastructure/emailService.js diff --git a/server/src/service/infrastructure/errorService.js b/server/src/service/v1/infrastructure/errorService.js similarity index 100% rename from server/src/service/infrastructure/errorService.js rename to server/src/service/v1/infrastructure/errorService.js diff --git a/server/src/service/infrastructure/networkService.js b/server/src/service/v1/infrastructure/networkService.js similarity index 100% rename from server/src/service/infrastructure/networkService.js rename to server/src/service/v1/infrastructure/networkService.js diff --git a/server/src/service/infrastructure/notificationService.js b/server/src/service/v1/infrastructure/notificationService.js similarity index 100% rename from server/src/service/infrastructure/notificationService.js rename to server/src/service/v1/infrastructure/notificationService.js diff --git a/server/src/service/infrastructure/notificationUtils.js b/server/src/service/v1/infrastructure/notificationUtils.js similarity index 100% rename from server/src/service/infrastructure/notificationUtils.js rename to server/src/service/v1/infrastructure/notificationUtils.js diff --git a/server/src/service/infrastructure/statusService.js b/server/src/service/v1/infrastructure/statusService.js similarity index 99% rename from server/src/service/infrastructure/statusService.js rename to server/src/service/v1/infrastructure/statusService.js index 72fa359d7..983541cd9 100755 --- a/server/src/service/infrastructure/statusService.js +++ b/server/src/service/v1/infrastructure/statusService.js @@ -1,4 +1,4 @@ -import MonitorStats from "../../db/models/MonitorStats.js"; +import MonitorStats from "../../../db/models/MonitorStats.js"; const SERVICE_NAME = "StatusService"; class StatusService { diff --git a/server/src/service/system/serviceRegistry.js b/server/src/service/v1/system/serviceRegistry.js similarity index 100% rename from server/src/service/system/serviceRegistry.js rename to server/src/service/v1/system/serviceRegistry.js diff --git a/server/src/service/system/settingsService.js b/server/src/service/v1/system/settingsService.js similarity index 100% rename from server/src/service/system/settingsService.js rename to server/src/service/v1/system/settingsService.js diff --git a/server/src/service/system/stringService.js b/server/src/service/v1/system/stringService.js similarity index 100% rename from server/src/service/system/stringService.js rename to server/src/service/v1/system/stringService.js diff --git a/server/src/service/system/translationService.js b/server/src/service/v1/system/translationService.js similarity index 100% rename from server/src/service/system/translationService.js rename to server/src/service/v1/system/translationService.js diff --git a/server/src/service/v2/business/AuthService.ts b/server/src/service/v2/business/AuthService.ts index ae22b981d..52f586dbf 100644 --- a/server/src/service/v2/business/AuthService.ts +++ b/server/src/service/v2/business/AuthService.ts @@ -3,6 +3,45 @@ import { User, Role, ITokenizedUser } from "../../../db/models/index.js"; import ApiError from "../../../utils/ApiError.js"; import { Types } from "mongoose"; +export const PERMISSIONS = { + users: { + all: "users.*", + create: "users.create", + view: "users.view", + update: "users.update", + delete: "users.delete", + }, + + monitors: { + all: "monitors.*", + create: "monitors.create", + view: "monitors.view", + update: "monitors.update", + delete: "monitors.delete", + }, + notifications: { + all: "notifications.*", + create: "notifications.create", + view: "notifications.view", + update: "notifications.update", + delete: "notifications.delete", + }, + checks: { + all: "checks.*", + create: "checks.create", + view: "checks.view", + update: "checks.update", + delete: "checks.delete", + }, + statusPages: { + all: "statusPages.*", + create: "statusPages.create", + view: "statusPages.view", + update: "statusPages.update", + delete: "statusPages.delete", + }, +}; + export const DEFAULT_ROLES = [ { name: "SuperAdmin", @@ -13,19 +52,19 @@ export const DEFAULT_ROLES = [ { name: "Admin", description: "Admin with full permissions", - permissions: ["monitor.*", "users.*"], + permissions: [PERMISSIONS.monitors.all, PERMISSIONS.users.all], isSystem: true, }, { name: "Manager", description: "Can manage users", - permissions: ["users.create", "users.update", "monitors.*"], + permissions: [PERMISSIONS.users.create, PERMISSIONS.users.update, PERMISSIONS.monitors.all], isSystem: true, }, { name: "Member", description: "Basic team member", - permissions: ["users.update", "monitors.create", "monitors.view", "monitors.update"], + permissions: [PERMISSIONS.users.update, PERMISSIONS.monitors.create, PERMISSIONS.monitors.view, PERMISSIONS.monitors.update], isSystem: true, }, ]; @@ -126,7 +165,7 @@ class AuthService implements IAuthService { } // Check password - const isPasswordValid = await bcrypt.compare(password, user.passwordHash); + const isPasswordValid = await bcrypt.compare(password, user.password); if (!isPasswordValid) { throw new Error("Invalid email or password"); } diff --git a/server/src/types/express.d.ts b/server/src/types/express.d.ts new file mode 100644 index 000000000..7c78a053c --- /dev/null +++ b/server/src/types/express.d.ts @@ -0,0 +1,10 @@ +import { ITokenizedUser } from "../db/models/index.ts"; + +declare global { + namespace Express { + interface Request { + user?: ITokenizedUser; + resource?: any; + } + } +}