From f07d155d969347f49dd50990b65eb9f339725514 Mon Sep 17 00:00:00 2001 From: Matthew R Date: Mon, 9 Aug 2021 14:18:40 -0400 Subject: [PATCH] logging --- src/class/Route.ts | 304 ++++++++++++++++++++++----------------------- 1 file changed, 152 insertions(+), 152 deletions(-) diff --git a/src/class/Route.ts b/src/class/Route.ts index 95d713f..9136609 100644 --- a/src/class/Route.ts +++ b/src/class/Route.ts @@ -1,152 +1,152 @@ -/* eslint-disable consistent-return */ -import { Request, Response, NextFunction, Router as router } from 'express'; -import { Server } from '.'; - -export default class Route { - public server: Server; - - public router: router; - - public conf: { path: string, deprecated?: boolean, maintenance?: boolean }; - - protected constructor(server: Server, conf: { path: string, deprecated?: boolean, maintenance?: boolean }) { - this.conf = { - path: null, - deprecated: false, - maintenance: false, - }; - this.server = server; - this.router = router(); - this.conf = conf; - } - - public bind() {} - - public deprecated(): void { - this.router.all('*', (_req, res) => { - res.status(501).json({ code: this.constants.codes.DEPRECATED, message: this.constants.messages.DEPRECATED }); - }); - } - - public maintenance(): void { - this.router.all('*', (_req, res) => { - res.status(503).json({ code: this.constants.codes.MAINTENANCE_OR_UNAVAILABLE, message: this.constants.messages.MAINTENANCE_OR_UNAVAILABLE }); - }); - } - - public init(): void { - this.router.all('*', (req, res, next) => { - this.server.client.signale.log(`'${req.method}' request from '${req.ip}' to '${req.hostname}${req.path}'.`); - if (this.conf.maintenance === true) res.status(503).json({ code: this.constants.codes.MAINTENANCE_OR_UNAVAILABLE, message: this.constants.messages.MAINTENANCE_OR_UNAVAILABLE }); - else if (this.conf.deprecated === true) res.status(501).json({ code: this.constants.codes.DEPRECATED, message: this.constants.messages.DEPRECATED }); - else next(); - }); - } - - /** - * This function checks for the presense of a Bearer token with Security.extractBearer(), - * then it will attempt to validate it with Security.checkBearer(). - * If it can authenticate the request, it'll add a custom property on Request called - * `account`, which will hold an the bearer token's account owner. The account is of the - * type `AccountInterface`. - * @param req The Request object from Express. - * @param res The Response object from Express. - * @param next The NextFunction from Express. - * @example Security.authorize(req, res, next); - */ - public async authorize(req: Request, res: Response, next: NextFunction) { - const account = await this.server.security.checkBearer(this.server.security.extractBearer(req)); - if (!account) return res.status(401).json({ code: this.constants.codes.UNAUTHORIZED, message: this.constants.messages.UNAUTHORIZED }); - Object.defineProperty(req, 'account', { value: account, writable: true, enumerable: true, configurable: true }); - next(); - } - - /** - * This function calls Util.handleError() internally, however it also sends a generic - * response to the user. - * @param error The Error object. - * @param res The Response object from Express. - */ - public handleError(error: Error, res: Response): void { - this.server.client.util.handleError(error); - res.status(500).json({ code: this.constants.codes.SERVER_ERROR, message: this.constants.messages.SERVER_ERROR }); - } - - get constants() { - return { - codes: { - /** - * SUCCESS 100 - * Used if the request was processed successfully. - */ - SUCCESS: 100, - /** - * UNAUTHORIZED 101 - * Used if the client calling the request couldn't be correctly authenticated. - */ - UNAUTHORIZED: 101, - /** - * PERMISSION DENIED 103 - * Used if the client calling the request doesn't have access to the resource specified. - */ - PERMISSION_DENIED: 103, - /** - * NOT FOUND 104 - * Used if the resource the client requested doesn't exist. - */ - NOT_FOUND: 104, - /** - * ACCOUNT NOT FOUND 1041 - * Used if the account specified by the client couldn't be found. - */ - ACCOUNT_NOT_FOUND: 1041, - /** - * CLIENT ERROR 1044 - * Used in cases of user error. Examples are incorrect parameters, incorrect headers, or an invalid request. - */ - CLIENT_ERROR: 1044, - /** - * SERVER ERROR 105 - * Used in cases of an internal error that caused the bind() function to throw. - */ - SERVER_ERROR: 105, - /** - * DEPRECATED 1051 - * Returned back to the user if the resource requested is deprecated. - */ - DEPRECATED: 1051, - /** - * MAINTENANCE OR UNAVAILABLE 1053 - * Used if the resource requested is currently in maintenance, not finished, or temporarily disabled. - */ - MAINTENANCE_OR_UNAVAILABLE: 1053, - }, - messages: { - /** - * The credentials you supplied are invalid. - */ - UNAUTHORIZED: ['CREDENTIALS_INVALID', 'The credentials you supplied are invalid.'], - /** - * You do not have valid credentials to access this resource. - */ - PERMISSION_DENIED: ['PERMISSION_DENIED', 'You do not have valid credentials to access this resource.'], - /** - * The resource you requested cannot be located. - */ - NOT_FOUND: ['NOT_FOUND', 'The resource you requested cannot be located.'], - /** - * An internal error has occurred, Engineers have been notified. - */ - SERVER_ERROR: ['INTERNAL_ERROR', 'An internal error has occurred, Engineers have been notified.'], - /** - * The endpoint or resource you\'re trying to access has been deprecated. - */ - DEPRECATED: ['ENDPOINT_OR_RESOURCE_DEPRECATED', 'The endpoint or resource you\'re trying to access has been deprecated.'], - /** - * The endpoint or resource you\'re trying to access is either in maintenance or is not available. - */ - MAINTENANCE_OR_UNAVAILABLE: ['SERVICE_UNAVAILABLE', 'The endpoint or resource you\'re trying to access is either in maintenance or is not available.'], - }, - }; - } -} +/* eslint-disable consistent-return */ +import { Request, Response, NextFunction, Router as router } from 'express'; +import { Server } from '.'; + +export default class Route { + public server: Server; + + public router: router; + + public conf: { path: string, deprecated?: boolean, maintenance?: boolean }; + + protected constructor(server: Server, conf: { path: string, deprecated?: boolean, maintenance?: boolean }) { + this.conf = { + path: null, + deprecated: false, + maintenance: false, + }; + this.server = server; + this.router = router(); + this.conf = conf; + } + + public bind() {} + + public deprecated(): void { + this.router.all('*', (_req, res) => { + res.status(501).json({ code: this.constants.codes.DEPRECATED, message: this.constants.messages.DEPRECATED }); + }); + } + + public maintenance(): void { + this.router.all('*', (_req, res) => { + res.status(503).json({ code: this.constants.codes.MAINTENANCE_OR_UNAVAILABLE, message: this.constants.messages.MAINTENANCE_OR_UNAVAILABLE }); + }); + } + + public init(): void { + this.router.all('*', (req, res, next) => { + // this.server.client.signale.log(`'${req.method}' request from '${req.ip}' to '${req.hostname}${req.path}'.`); + if (this.conf.maintenance === true) res.status(503).json({ code: this.constants.codes.MAINTENANCE_OR_UNAVAILABLE, message: this.constants.messages.MAINTENANCE_OR_UNAVAILABLE }); + else if (this.conf.deprecated === true) res.status(501).json({ code: this.constants.codes.DEPRECATED, message: this.constants.messages.DEPRECATED }); + else next(); + }); + } + + /** + * This function checks for the presense of a Bearer token with Security.extractBearer(), + * then it will attempt to validate it with Security.checkBearer(). + * If it can authenticate the request, it'll add a custom property on Request called + * `account`, which will hold an the bearer token's account owner. The account is of the + * type `AccountInterface`. + * @param req The Request object from Express. + * @param res The Response object from Express. + * @param next The NextFunction from Express. + * @example Security.authorize(req, res, next); + */ + public async authorize(req: Request, res: Response, next: NextFunction) { + const account = await this.server.security.checkBearer(this.server.security.extractBearer(req)); + if (!account) return res.status(401).json({ code: this.constants.codes.UNAUTHORIZED, message: this.constants.messages.UNAUTHORIZED }); + Object.defineProperty(req, 'account', { value: account, writable: true, enumerable: true, configurable: true }); + next(); + } + + /** + * This function calls Util.handleError() internally, however it also sends a generic + * response to the user. + * @param error The Error object. + * @param res The Response object from Express. + */ + public handleError(error: Error, res: Response): void { + this.server.client.util.handleError(error); + res.status(500).json({ code: this.constants.codes.SERVER_ERROR, message: this.constants.messages.SERVER_ERROR }); + } + + get constants() { + return { + codes: { + /** + * SUCCESS 100 + * Used if the request was processed successfully. + */ + SUCCESS: 100, + /** + * UNAUTHORIZED 101 + * Used if the client calling the request couldn't be correctly authenticated. + */ + UNAUTHORIZED: 101, + /** + * PERMISSION DENIED 103 + * Used if the client calling the request doesn't have access to the resource specified. + */ + PERMISSION_DENIED: 103, + /** + * NOT FOUND 104 + * Used if the resource the client requested doesn't exist. + */ + NOT_FOUND: 104, + /** + * ACCOUNT NOT FOUND 1041 + * Used if the account specified by the client couldn't be found. + */ + ACCOUNT_NOT_FOUND: 1041, + /** + * CLIENT ERROR 1044 + * Used in cases of user error. Examples are incorrect parameters, incorrect headers, or an invalid request. + */ + CLIENT_ERROR: 1044, + /** + * SERVER ERROR 105 + * Used in cases of an internal error that caused the bind() function to throw. + */ + SERVER_ERROR: 105, + /** + * DEPRECATED 1051 + * Returned back to the user if the resource requested is deprecated. + */ + DEPRECATED: 1051, + /** + * MAINTENANCE OR UNAVAILABLE 1053 + * Used if the resource requested is currently in maintenance, not finished, or temporarily disabled. + */ + MAINTENANCE_OR_UNAVAILABLE: 1053, + }, + messages: { + /** + * The credentials you supplied are invalid. + */ + UNAUTHORIZED: ['CREDENTIALS_INVALID', 'The credentials you supplied are invalid.'], + /** + * You do not have valid credentials to access this resource. + */ + PERMISSION_DENIED: ['PERMISSION_DENIED', 'You do not have valid credentials to access this resource.'], + /** + * The resource you requested cannot be located. + */ + NOT_FOUND: ['NOT_FOUND', 'The resource you requested cannot be located.'], + /** + * An internal error has occurred, Engineers have been notified. + */ + SERVER_ERROR: ['INTERNAL_ERROR', 'An internal error has occurred, Engineers have been notified.'], + /** + * The endpoint or resource you\'re trying to access has been deprecated. + */ + DEPRECATED: ['ENDPOINT_OR_RESOURCE_DEPRECATED', 'The endpoint or resource you\'re trying to access has been deprecated.'], + /** + * The endpoint or resource you\'re trying to access is either in maintenance or is not available. + */ + MAINTENANCE_OR_UNAVAILABLE: ['SERVICE_UNAVAILABLE', 'The endpoint or resource you\'re trying to access is either in maintenance or is not available.'], + }, + }; + } +}