monkeytype/backend/middlewares/api-utils.ts

151 lines
3.8 KiB
TypeScript
Raw Normal View History

Api overhaul (#2555) by Bruception * Feat:Update response structure (#2427) * Fix:response and error structure * update:response message * update:response class * update * Update response message Co-authored-by: Mustafiz Kaifee Mumtaz <mustafiz.mumtaz@freecharge.com> * Add MonkeyToken foundation (#2487) by Bruception * Api changes (#2492) * API changes * Remove unused import * Add Ape client (#2513) * Add all endpoints (#2514) * Merged backend typescript into api overhaul (#2515) * Install typescript and add backend tsconfig Cannot yet build due to a number of compilation errors in JS code Signed-off-by: Brian Evans <ebrian101@gmail.com> * Fix typescript compilation errors Signed-off-by: Brian Evans <ebrian101@gmail.com> * Migrated backend to ES modules Switched to import export syntax Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add typescript declaration for anticheat Signed-off-by: Brian Evans <ebrian101@gmail.com> * Rename top level files to .ts Fix service account json file typing Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add dev build scripts for backend typescript Signed-off-by: Brian Evans <ebrian101@gmail.com> * Removed empty lines and switched to using db Cleaned up imports by removing needless empty lines and migrated to the new db.js instead of mongodb.js. Signed-off-by: Brian Evans <ebrian101@gmail.com> * Fixed backend commonjs syntax to ES module syntax Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add build to backend start script Signed-off-by: Brian Evans <ebrian101@gmail.com> * Migrate some endpoints to Ape * Strict equals * Remove artifact * ape -> Ape * Ape migration p2 (#2522) * Migrate leaderboard endpoints to ape * Fixed comment * Init backend types * Fail * Return * Migrate Quotes to Ape (#2528) * Migrate quotes to Ape * Fix backend response * Fix issue * Fix rate limit (#2533) * fix rate limit * Fix import * Fix issues * Ape migration p4 (#2547) * Migrate results endpoints to ape * Remove unused import * Remove unused import * Fix loaders * Make function async * Hide try saving results * Migrate some users endpoints to Ape (#2548) * Complete Ape Migration (#2553) * Complete ape migration * Fix preset * Return preset data * Add typings * Move captcha reset * Read from params * Fix result tags endpoint * Fix stuck loader * fixed lb memory not saving * fixed quote rating popup not showing up for new users Co-authored-by: Mustafiz Kaifee <49086821+Mustafiz04@users.noreply.github.com> Co-authored-by: Mustafiz Kaifee Mumtaz <mustafiz.mumtaz@freecharge.com> Co-authored-by: Brian Evans <53117772+mrbrianevans@users.noreply.github.com> Co-authored-by: Miodec <bartnikjack@gmail.com>
2022-02-23 03:55:48 +08:00
import _ from "lodash";
import joi from "joi";
2022-03-04 05:31:57 +08:00
import MonkeyError from "../utils/error";
Api overhaul (#2555) by Bruception * Feat:Update response structure (#2427) * Fix:response and error structure * update:response message * update:response class * update * Update response message Co-authored-by: Mustafiz Kaifee Mumtaz <mustafiz.mumtaz@freecharge.com> * Add MonkeyToken foundation (#2487) by Bruception * Api changes (#2492) * API changes * Remove unused import * Add Ape client (#2513) * Add all endpoints (#2514) * Merged backend typescript into api overhaul (#2515) * Install typescript and add backend tsconfig Cannot yet build due to a number of compilation errors in JS code Signed-off-by: Brian Evans <ebrian101@gmail.com> * Fix typescript compilation errors Signed-off-by: Brian Evans <ebrian101@gmail.com> * Migrated backend to ES modules Switched to import export syntax Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add typescript declaration for anticheat Signed-off-by: Brian Evans <ebrian101@gmail.com> * Rename top level files to .ts Fix service account json file typing Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add dev build scripts for backend typescript Signed-off-by: Brian Evans <ebrian101@gmail.com> * Removed empty lines and switched to using db Cleaned up imports by removing needless empty lines and migrated to the new db.js instead of mongodb.js. Signed-off-by: Brian Evans <ebrian101@gmail.com> * Fixed backend commonjs syntax to ES module syntax Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add build to backend start script Signed-off-by: Brian Evans <ebrian101@gmail.com> * Migrate some endpoints to Ape * Strict equals * Remove artifact * ape -> Ape * Ape migration p2 (#2522) * Migrate leaderboard endpoints to ape * Fixed comment * Init backend types * Fail * Return * Migrate Quotes to Ape (#2528) * Migrate quotes to Ape * Fix backend response * Fix issue * Fix rate limit (#2533) * fix rate limit * Fix import * Fix issues * Ape migration p4 (#2547) * Migrate results endpoints to ape * Remove unused import * Remove unused import * Fix loaders * Make function async * Hide try saving results * Migrate some users endpoints to Ape (#2548) * Complete Ape Migration (#2553) * Complete ape migration * Fix preset * Return preset data * Add typings * Move captcha reset * Read from params * Fix result tags endpoint * Fix stuck loader * fixed lb memory not saving * fixed quote rating popup not showing up for new users Co-authored-by: Mustafiz Kaifee <49086821+Mustafiz04@users.noreply.github.com> Co-authored-by: Mustafiz Kaifee Mumtaz <mustafiz.mumtaz@freecharge.com> Co-authored-by: Brian Evans <53117772+mrbrianevans@users.noreply.github.com> Co-authored-by: Miodec <bartnikjack@gmail.com>
2022-02-23 03:55:48 +08:00
import { Response, NextFunction, RequestHandler } from "express";
2022-03-04 05:31:57 +08:00
import { handleMonkeyResponse, MonkeyResponse } from "../utils/monkey-response";
import UsersDAO from "../dao/user";
Api overhaul (#2555) by Bruception * Feat:Update response structure (#2427) * Fix:response and error structure * update:response message * update:response class * update * Update response message Co-authored-by: Mustafiz Kaifee Mumtaz <mustafiz.mumtaz@freecharge.com> * Add MonkeyToken foundation (#2487) by Bruception * Api changes (#2492) * API changes * Remove unused import * Add Ape client (#2513) * Add all endpoints (#2514) * Merged backend typescript into api overhaul (#2515) * Install typescript and add backend tsconfig Cannot yet build due to a number of compilation errors in JS code Signed-off-by: Brian Evans <ebrian101@gmail.com> * Fix typescript compilation errors Signed-off-by: Brian Evans <ebrian101@gmail.com> * Migrated backend to ES modules Switched to import export syntax Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add typescript declaration for anticheat Signed-off-by: Brian Evans <ebrian101@gmail.com> * Rename top level files to .ts Fix service account json file typing Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add dev build scripts for backend typescript Signed-off-by: Brian Evans <ebrian101@gmail.com> * Removed empty lines and switched to using db Cleaned up imports by removing needless empty lines and migrated to the new db.js instead of mongodb.js. Signed-off-by: Brian Evans <ebrian101@gmail.com> * Fixed backend commonjs syntax to ES module syntax Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add build to backend start script Signed-off-by: Brian Evans <ebrian101@gmail.com> * Migrate some endpoints to Ape * Strict equals * Remove artifact * ape -> Ape * Ape migration p2 (#2522) * Migrate leaderboard endpoints to ape * Fixed comment * Init backend types * Fail * Return * Migrate Quotes to Ape (#2528) * Migrate quotes to Ape * Fix backend response * Fix issue * Fix rate limit (#2533) * fix rate limit * Fix import * Fix issues * Ape migration p4 (#2547) * Migrate results endpoints to ape * Remove unused import * Remove unused import * Fix loaders * Make function async * Hide try saving results * Migrate some users endpoints to Ape (#2548) * Complete Ape Migration (#2553) * Complete ape migration * Fix preset * Return preset data * Add typings * Move captcha reset * Read from params * Fix result tags endpoint * Fix stuck loader * fixed lb memory not saving * fixed quote rating popup not showing up for new users Co-authored-by: Mustafiz Kaifee <49086821+Mustafiz04@users.noreply.github.com> Co-authored-by: Mustafiz Kaifee Mumtaz <mustafiz.mumtaz@freecharge.com> Co-authored-by: Brian Evans <53117772+mrbrianevans@users.noreply.github.com> Co-authored-by: Miodec <bartnikjack@gmail.com>
2022-02-23 03:55:48 +08:00
interface ValidationOptions<T> {
criteria: (data: T) => boolean;
Api overhaul (#2555) by Bruception * Feat:Update response structure (#2427) * Fix:response and error structure * update:response message * update:response class * update * Update response message Co-authored-by: Mustafiz Kaifee Mumtaz <mustafiz.mumtaz@freecharge.com> * Add MonkeyToken foundation (#2487) by Bruception * Api changes (#2492) * API changes * Remove unused import * Add Ape client (#2513) * Add all endpoints (#2514) * Merged backend typescript into api overhaul (#2515) * Install typescript and add backend tsconfig Cannot yet build due to a number of compilation errors in JS code Signed-off-by: Brian Evans <ebrian101@gmail.com> * Fix typescript compilation errors Signed-off-by: Brian Evans <ebrian101@gmail.com> * Migrated backend to ES modules Switched to import export syntax Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add typescript declaration for anticheat Signed-off-by: Brian Evans <ebrian101@gmail.com> * Rename top level files to .ts Fix service account json file typing Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add dev build scripts for backend typescript Signed-off-by: Brian Evans <ebrian101@gmail.com> * Removed empty lines and switched to using db Cleaned up imports by removing needless empty lines and migrated to the new db.js instead of mongodb.js. Signed-off-by: Brian Evans <ebrian101@gmail.com> * Fixed backend commonjs syntax to ES module syntax Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add build to backend start script Signed-off-by: Brian Evans <ebrian101@gmail.com> * Migrate some endpoints to Ape * Strict equals * Remove artifact * ape -> Ape * Ape migration p2 (#2522) * Migrate leaderboard endpoints to ape * Fixed comment * Init backend types * Fail * Return * Migrate Quotes to Ape (#2528) * Migrate quotes to Ape * Fix backend response * Fix issue * Fix rate limit (#2533) * fix rate limit * Fix import * Fix issues * Ape migration p4 (#2547) * Migrate results endpoints to ape * Remove unused import * Remove unused import * Fix loaders * Make function async * Hide try saving results * Migrate some users endpoints to Ape (#2548) * Complete Ape Migration (#2553) * Complete ape migration * Fix preset * Return preset data * Add typings * Move captcha reset * Read from params * Fix result tags endpoint * Fix stuck loader * fixed lb memory not saving * fixed quote rating popup not showing up for new users Co-authored-by: Mustafiz Kaifee <49086821+Mustafiz04@users.noreply.github.com> Co-authored-by: Mustafiz Kaifee Mumtaz <mustafiz.mumtaz@freecharge.com> Co-authored-by: Brian Evans <53117772+mrbrianevans@users.noreply.github.com> Co-authored-by: Miodec <bartnikjack@gmail.com>
2022-02-23 03:55:48 +08:00
invalidMessage?: string;
}
/**
* This utility checks that the server's configuration matches
* the criteria.
*/
function validateConfiguration(
options: ValidationOptions<MonkeyTypes.Configuration>
Api overhaul (#2555) by Bruception * Feat:Update response structure (#2427) * Fix:response and error structure * update:response message * update:response class * update * Update response message Co-authored-by: Mustafiz Kaifee Mumtaz <mustafiz.mumtaz@freecharge.com> * Add MonkeyToken foundation (#2487) by Bruception * Api changes (#2492) * API changes * Remove unused import * Add Ape client (#2513) * Add all endpoints (#2514) * Merged backend typescript into api overhaul (#2515) * Install typescript and add backend tsconfig Cannot yet build due to a number of compilation errors in JS code Signed-off-by: Brian Evans <ebrian101@gmail.com> * Fix typescript compilation errors Signed-off-by: Brian Evans <ebrian101@gmail.com> * Migrated backend to ES modules Switched to import export syntax Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add typescript declaration for anticheat Signed-off-by: Brian Evans <ebrian101@gmail.com> * Rename top level files to .ts Fix service account json file typing Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add dev build scripts for backend typescript Signed-off-by: Brian Evans <ebrian101@gmail.com> * Removed empty lines and switched to using db Cleaned up imports by removing needless empty lines and migrated to the new db.js instead of mongodb.js. Signed-off-by: Brian Evans <ebrian101@gmail.com> * Fixed backend commonjs syntax to ES module syntax Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add build to backend start script Signed-off-by: Brian Evans <ebrian101@gmail.com> * Migrate some endpoints to Ape * Strict equals * Remove artifact * ape -> Ape * Ape migration p2 (#2522) * Migrate leaderboard endpoints to ape * Fixed comment * Init backend types * Fail * Return * Migrate Quotes to Ape (#2528) * Migrate quotes to Ape * Fix backend response * Fix issue * Fix rate limit (#2533) * fix rate limit * Fix import * Fix issues * Ape migration p4 (#2547) * Migrate results endpoints to ape * Remove unused import * Remove unused import * Fix loaders * Make function async * Hide try saving results * Migrate some users endpoints to Ape (#2548) * Complete Ape Migration (#2553) * Complete ape migration * Fix preset * Return preset data * Add typings * Move captcha reset * Read from params * Fix result tags endpoint * Fix stuck loader * fixed lb memory not saving * fixed quote rating popup not showing up for new users Co-authored-by: Mustafiz Kaifee <49086821+Mustafiz04@users.noreply.github.com> Co-authored-by: Mustafiz Kaifee Mumtaz <mustafiz.mumtaz@freecharge.com> Co-authored-by: Brian Evans <53117772+mrbrianevans@users.noreply.github.com> Co-authored-by: Miodec <bartnikjack@gmail.com>
2022-02-23 03:55:48 +08:00
): RequestHandler {
const {
criteria,
invalidMessage = "This service is currently unavailable.",
} = options;
Api overhaul (#2555) by Bruception * Feat:Update response structure (#2427) * Fix:response and error structure * update:response message * update:response class * update * Update response message Co-authored-by: Mustafiz Kaifee Mumtaz <mustafiz.mumtaz@freecharge.com> * Add MonkeyToken foundation (#2487) by Bruception * Api changes (#2492) * API changes * Remove unused import * Add Ape client (#2513) * Add all endpoints (#2514) * Merged backend typescript into api overhaul (#2515) * Install typescript and add backend tsconfig Cannot yet build due to a number of compilation errors in JS code Signed-off-by: Brian Evans <ebrian101@gmail.com> * Fix typescript compilation errors Signed-off-by: Brian Evans <ebrian101@gmail.com> * Migrated backend to ES modules Switched to import export syntax Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add typescript declaration for anticheat Signed-off-by: Brian Evans <ebrian101@gmail.com> * Rename top level files to .ts Fix service account json file typing Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add dev build scripts for backend typescript Signed-off-by: Brian Evans <ebrian101@gmail.com> * Removed empty lines and switched to using db Cleaned up imports by removing needless empty lines and migrated to the new db.js instead of mongodb.js. Signed-off-by: Brian Evans <ebrian101@gmail.com> * Fixed backend commonjs syntax to ES module syntax Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add build to backend start script Signed-off-by: Brian Evans <ebrian101@gmail.com> * Migrate some endpoints to Ape * Strict equals * Remove artifact * ape -> Ape * Ape migration p2 (#2522) * Migrate leaderboard endpoints to ape * Fixed comment * Init backend types * Fail * Return * Migrate Quotes to Ape (#2528) * Migrate quotes to Ape * Fix backend response * Fix issue * Fix rate limit (#2533) * fix rate limit * Fix import * Fix issues * Ape migration p4 (#2547) * Migrate results endpoints to ape * Remove unused import * Remove unused import * Fix loaders * Make function async * Hide try saving results * Migrate some users endpoints to Ape (#2548) * Complete Ape Migration (#2553) * Complete ape migration * Fix preset * Return preset data * Add typings * Move captcha reset * Read from params * Fix result tags endpoint * Fix stuck loader * fixed lb memory not saving * fixed quote rating popup not showing up for new users Co-authored-by: Mustafiz Kaifee <49086821+Mustafiz04@users.noreply.github.com> Co-authored-by: Mustafiz Kaifee Mumtaz <mustafiz.mumtaz@freecharge.com> Co-authored-by: Brian Evans <53117772+mrbrianevans@users.noreply.github.com> Co-authored-by: Miodec <bartnikjack@gmail.com>
2022-02-23 03:55:48 +08:00
return (req: MonkeyTypes.Request, _res: Response, next: NextFunction) => {
const configuration = req.ctx.configuration;
const validated = criteria(configuration);
if (!validated) {
throw new MonkeyError(503, invalidMessage);
}
next();
};
}
/**
* Check user permissions before handling request.
* Note that this middleware must be used after authentication in the middleware stack.
*/
function checkUserPermissions(
options: ValidationOptions<MonkeyTypes.User>
): RequestHandler {
const { criteria, invalidMessage = "You don't have permission to do this." } =
options;
return async (
req: MonkeyTypes.Request,
_res: Response,
next: NextFunction
) => {
try {
const { uid } = req.ctx.decodedToken;
const userData = (await UsersDAO.getUser(
uid
)) as unknown as MonkeyTypes.User;
const hasPermission = criteria(userData);
if (!hasPermission) {
throw new MonkeyError(403, invalidMessage);
}
} catch (error) {
next(error);
Api overhaul (#2555) by Bruception * Feat:Update response structure (#2427) * Fix:response and error structure * update:response message * update:response class * update * Update response message Co-authored-by: Mustafiz Kaifee Mumtaz <mustafiz.mumtaz@freecharge.com> * Add MonkeyToken foundation (#2487) by Bruception * Api changes (#2492) * API changes * Remove unused import * Add Ape client (#2513) * Add all endpoints (#2514) * Merged backend typescript into api overhaul (#2515) * Install typescript and add backend tsconfig Cannot yet build due to a number of compilation errors in JS code Signed-off-by: Brian Evans <ebrian101@gmail.com> * Fix typescript compilation errors Signed-off-by: Brian Evans <ebrian101@gmail.com> * Migrated backend to ES modules Switched to import export syntax Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add typescript declaration for anticheat Signed-off-by: Brian Evans <ebrian101@gmail.com> * Rename top level files to .ts Fix service account json file typing Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add dev build scripts for backend typescript Signed-off-by: Brian Evans <ebrian101@gmail.com> * Removed empty lines and switched to using db Cleaned up imports by removing needless empty lines and migrated to the new db.js instead of mongodb.js. Signed-off-by: Brian Evans <ebrian101@gmail.com> * Fixed backend commonjs syntax to ES module syntax Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add build to backend start script Signed-off-by: Brian Evans <ebrian101@gmail.com> * Migrate some endpoints to Ape * Strict equals * Remove artifact * ape -> Ape * Ape migration p2 (#2522) * Migrate leaderboard endpoints to ape * Fixed comment * Init backend types * Fail * Return * Migrate Quotes to Ape (#2528) * Migrate quotes to Ape * Fix backend response * Fix issue * Fix rate limit (#2533) * fix rate limit * Fix import * Fix issues * Ape migration p4 (#2547) * Migrate results endpoints to ape * Remove unused import * Remove unused import * Fix loaders * Make function async * Hide try saving results * Migrate some users endpoints to Ape (#2548) * Complete Ape Migration (#2553) * Complete ape migration * Fix preset * Return preset data * Add typings * Move captcha reset * Read from params * Fix result tags endpoint * Fix stuck loader * fixed lb memory not saving * fixed quote rating popup not showing up for new users Co-authored-by: Mustafiz Kaifee <49086821+Mustafiz04@users.noreply.github.com> Co-authored-by: Mustafiz Kaifee Mumtaz <mustafiz.mumtaz@freecharge.com> Co-authored-by: Brian Evans <53117772+mrbrianevans@users.noreply.github.com> Co-authored-by: Miodec <bartnikjack@gmail.com>
2022-02-23 03:55:48 +08:00
}
next();
};
}
type AsyncHandler = (
req: MonkeyTypes.Request,
res?: Response
Api overhaul (#2555) by Bruception * Feat:Update response structure (#2427) * Fix:response and error structure * update:response message * update:response class * update * Update response message Co-authored-by: Mustafiz Kaifee Mumtaz <mustafiz.mumtaz@freecharge.com> * Add MonkeyToken foundation (#2487) by Bruception * Api changes (#2492) * API changes * Remove unused import * Add Ape client (#2513) * Add all endpoints (#2514) * Merged backend typescript into api overhaul (#2515) * Install typescript and add backend tsconfig Cannot yet build due to a number of compilation errors in JS code Signed-off-by: Brian Evans <ebrian101@gmail.com> * Fix typescript compilation errors Signed-off-by: Brian Evans <ebrian101@gmail.com> * Migrated backend to ES modules Switched to import export syntax Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add typescript declaration for anticheat Signed-off-by: Brian Evans <ebrian101@gmail.com> * Rename top level files to .ts Fix service account json file typing Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add dev build scripts for backend typescript Signed-off-by: Brian Evans <ebrian101@gmail.com> * Removed empty lines and switched to using db Cleaned up imports by removing needless empty lines and migrated to the new db.js instead of mongodb.js. Signed-off-by: Brian Evans <ebrian101@gmail.com> * Fixed backend commonjs syntax to ES module syntax Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add build to backend start script Signed-off-by: Brian Evans <ebrian101@gmail.com> * Migrate some endpoints to Ape * Strict equals * Remove artifact * ape -> Ape * Ape migration p2 (#2522) * Migrate leaderboard endpoints to ape * Fixed comment * Init backend types * Fail * Return * Migrate Quotes to Ape (#2528) * Migrate quotes to Ape * Fix backend response * Fix issue * Fix rate limit (#2533) * fix rate limit * Fix import * Fix issues * Ape migration p4 (#2547) * Migrate results endpoints to ape * Remove unused import * Remove unused import * Fix loaders * Make function async * Hide try saving results * Migrate some users endpoints to Ape (#2548) * Complete Ape Migration (#2553) * Complete ape migration * Fix preset * Return preset data * Add typings * Move captcha reset * Read from params * Fix result tags endpoint * Fix stuck loader * fixed lb memory not saving * fixed quote rating popup not showing up for new users Co-authored-by: Mustafiz Kaifee <49086821+Mustafiz04@users.noreply.github.com> Co-authored-by: Mustafiz Kaifee Mumtaz <mustafiz.mumtaz@freecharge.com> Co-authored-by: Brian Evans <53117772+mrbrianevans@users.noreply.github.com> Co-authored-by: Miodec <bartnikjack@gmail.com>
2022-02-23 03:55:48 +08:00
) => Promise<MonkeyResponse>;
/**
* This utility serves as an alternative to wrapping express handlers with try/catch statements.
* Any routes that use an async handler function should wrap the handler with this function.
* Without this, any errors thrown will not be caught by the error handling middleware, and
* the app will hang!
*/
function asyncHandler(handler: AsyncHandler): RequestHandler {
return async (
req: MonkeyTypes.Request,
res: Response,
next: NextFunction
) => {
try {
const handlerData = await handler(req, res);
return handleMonkeyResponse(handlerData, res);
} catch (error) {
next(error);
}
};
}
interface ValidationSchema {
body?: object;
query?: object;
params?: object;
Api overhaul (#2555) by Bruception * Feat:Update response structure (#2427) * Fix:response and error structure * update:response message * update:response class * update * Update response message Co-authored-by: Mustafiz Kaifee Mumtaz <mustafiz.mumtaz@freecharge.com> * Add MonkeyToken foundation (#2487) by Bruception * Api changes (#2492) * API changes * Remove unused import * Add Ape client (#2513) * Add all endpoints (#2514) * Merged backend typescript into api overhaul (#2515) * Install typescript and add backend tsconfig Cannot yet build due to a number of compilation errors in JS code Signed-off-by: Brian Evans <ebrian101@gmail.com> * Fix typescript compilation errors Signed-off-by: Brian Evans <ebrian101@gmail.com> * Migrated backend to ES modules Switched to import export syntax Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add typescript declaration for anticheat Signed-off-by: Brian Evans <ebrian101@gmail.com> * Rename top level files to .ts Fix service account json file typing Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add dev build scripts for backend typescript Signed-off-by: Brian Evans <ebrian101@gmail.com> * Removed empty lines and switched to using db Cleaned up imports by removing needless empty lines and migrated to the new db.js instead of mongodb.js. Signed-off-by: Brian Evans <ebrian101@gmail.com> * Fixed backend commonjs syntax to ES module syntax Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add build to backend start script Signed-off-by: Brian Evans <ebrian101@gmail.com> * Migrate some endpoints to Ape * Strict equals * Remove artifact * ape -> Ape * Ape migration p2 (#2522) * Migrate leaderboard endpoints to ape * Fixed comment * Init backend types * Fail * Return * Migrate Quotes to Ape (#2528) * Migrate quotes to Ape * Fix backend response * Fix issue * Fix rate limit (#2533) * fix rate limit * Fix import * Fix issues * Ape migration p4 (#2547) * Migrate results endpoints to ape * Remove unused import * Remove unused import * Fix loaders * Make function async * Hide try saving results * Migrate some users endpoints to Ape (#2548) * Complete Ape Migration (#2553) * Complete ape migration * Fix preset * Return preset data * Add typings * Move captcha reset * Read from params * Fix result tags endpoint * Fix stuck loader * fixed lb memory not saving * fixed quote rating popup not showing up for new users Co-authored-by: Mustafiz Kaifee <49086821+Mustafiz04@users.noreply.github.com> Co-authored-by: Mustafiz Kaifee Mumtaz <mustafiz.mumtaz@freecharge.com> Co-authored-by: Brian Evans <53117772+mrbrianevans@users.noreply.github.com> Co-authored-by: Miodec <bartnikjack@gmail.com>
2022-02-23 03:55:48 +08:00
validationErrorMessage?: string;
}
function validateRequest(validationSchema: ValidationSchema): RequestHandler {
/**
* In dev environments, as an alternative to token authentication,
* you can pass the authentication middleware by having a user id in the body.
* Inject the user id into the schema so that validation will not fail.
*/
if (process.env.MODE === "dev") {
validationSchema.body = {
uid: joi.any(),
...(validationSchema.body ?? {}),
};
}
const { validationErrorMessage } = validationSchema;
const normalizedValidationSchema: ValidationSchema = _.omit(
validationSchema,
"validationErrorMessage"
);
return (req: MonkeyTypes.Request, _res: Response, next: NextFunction) => {
_.each(
normalizedValidationSchema,
(schema: object, key: keyof ValidationSchema) => {
Api overhaul (#2555) by Bruception * Feat:Update response structure (#2427) * Fix:response and error structure * update:response message * update:response class * update * Update response message Co-authored-by: Mustafiz Kaifee Mumtaz <mustafiz.mumtaz@freecharge.com> * Add MonkeyToken foundation (#2487) by Bruception * Api changes (#2492) * API changes * Remove unused import * Add Ape client (#2513) * Add all endpoints (#2514) * Merged backend typescript into api overhaul (#2515) * Install typescript and add backend tsconfig Cannot yet build due to a number of compilation errors in JS code Signed-off-by: Brian Evans <ebrian101@gmail.com> * Fix typescript compilation errors Signed-off-by: Brian Evans <ebrian101@gmail.com> * Migrated backend to ES modules Switched to import export syntax Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add typescript declaration for anticheat Signed-off-by: Brian Evans <ebrian101@gmail.com> * Rename top level files to .ts Fix service account json file typing Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add dev build scripts for backend typescript Signed-off-by: Brian Evans <ebrian101@gmail.com> * Removed empty lines and switched to using db Cleaned up imports by removing needless empty lines and migrated to the new db.js instead of mongodb.js. Signed-off-by: Brian Evans <ebrian101@gmail.com> * Fixed backend commonjs syntax to ES module syntax Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add build to backend start script Signed-off-by: Brian Evans <ebrian101@gmail.com> * Migrate some endpoints to Ape * Strict equals * Remove artifact * ape -> Ape * Ape migration p2 (#2522) * Migrate leaderboard endpoints to ape * Fixed comment * Init backend types * Fail * Return * Migrate Quotes to Ape (#2528) * Migrate quotes to Ape * Fix backend response * Fix issue * Fix rate limit (#2533) * fix rate limit * Fix import * Fix issues * Ape migration p4 (#2547) * Migrate results endpoints to ape * Remove unused import * Remove unused import * Fix loaders * Make function async * Hide try saving results * Migrate some users endpoints to Ape (#2548) * Complete Ape Migration (#2553) * Complete ape migration * Fix preset * Return preset data * Add typings * Move captcha reset * Read from params * Fix result tags endpoint * Fix stuck loader * fixed lb memory not saving * fixed quote rating popup not showing up for new users Co-authored-by: Mustafiz Kaifee <49086821+Mustafiz04@users.noreply.github.com> Co-authored-by: Mustafiz Kaifee Mumtaz <mustafiz.mumtaz@freecharge.com> Co-authored-by: Brian Evans <53117772+mrbrianevans@users.noreply.github.com> Co-authored-by: Miodec <bartnikjack@gmail.com>
2022-02-23 03:55:48 +08:00
const joiSchema = joi.object().keys(schema);
const { error } = joiSchema.validate(req[key] ?? {});
if (error) {
const errorMessage = error.details[0].message;
throw new MonkeyError(
422,
Api overhaul (#2555) by Bruception * Feat:Update response structure (#2427) * Fix:response and error structure * update:response message * update:response class * update * Update response message Co-authored-by: Mustafiz Kaifee Mumtaz <mustafiz.mumtaz@freecharge.com> * Add MonkeyToken foundation (#2487) by Bruception * Api changes (#2492) * API changes * Remove unused import * Add Ape client (#2513) * Add all endpoints (#2514) * Merged backend typescript into api overhaul (#2515) * Install typescript and add backend tsconfig Cannot yet build due to a number of compilation errors in JS code Signed-off-by: Brian Evans <ebrian101@gmail.com> * Fix typescript compilation errors Signed-off-by: Brian Evans <ebrian101@gmail.com> * Migrated backend to ES modules Switched to import export syntax Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add typescript declaration for anticheat Signed-off-by: Brian Evans <ebrian101@gmail.com> * Rename top level files to .ts Fix service account json file typing Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add dev build scripts for backend typescript Signed-off-by: Brian Evans <ebrian101@gmail.com> * Removed empty lines and switched to using db Cleaned up imports by removing needless empty lines and migrated to the new db.js instead of mongodb.js. Signed-off-by: Brian Evans <ebrian101@gmail.com> * Fixed backend commonjs syntax to ES module syntax Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add build to backend start script Signed-off-by: Brian Evans <ebrian101@gmail.com> * Migrate some endpoints to Ape * Strict equals * Remove artifact * ape -> Ape * Ape migration p2 (#2522) * Migrate leaderboard endpoints to ape * Fixed comment * Init backend types * Fail * Return * Migrate Quotes to Ape (#2528) * Migrate quotes to Ape * Fix backend response * Fix issue * Fix rate limit (#2533) * fix rate limit * Fix import * Fix issues * Ape migration p4 (#2547) * Migrate results endpoints to ape * Remove unused import * Remove unused import * Fix loaders * Make function async * Hide try saving results * Migrate some users endpoints to Ape (#2548) * Complete Ape Migration (#2553) * Complete ape migration * Fix preset * Return preset data * Add typings * Move captcha reset * Read from params * Fix result tags endpoint * Fix stuck loader * fixed lb memory not saving * fixed quote rating popup not showing up for new users Co-authored-by: Mustafiz Kaifee <49086821+Mustafiz04@users.noreply.github.com> Co-authored-by: Mustafiz Kaifee Mumtaz <mustafiz.mumtaz@freecharge.com> Co-authored-by: Brian Evans <53117772+mrbrianevans@users.noreply.github.com> Co-authored-by: Miodec <bartnikjack@gmail.com>
2022-02-23 03:55:48 +08:00
validationErrorMessage ??
`${errorMessage} (${error.details[0]?.context?.value})`
Api overhaul (#2555) by Bruception * Feat:Update response structure (#2427) * Fix:response and error structure * update:response message * update:response class * update * Update response message Co-authored-by: Mustafiz Kaifee Mumtaz <mustafiz.mumtaz@freecharge.com> * Add MonkeyToken foundation (#2487) by Bruception * Api changes (#2492) * API changes * Remove unused import * Add Ape client (#2513) * Add all endpoints (#2514) * Merged backend typescript into api overhaul (#2515) * Install typescript and add backend tsconfig Cannot yet build due to a number of compilation errors in JS code Signed-off-by: Brian Evans <ebrian101@gmail.com> * Fix typescript compilation errors Signed-off-by: Brian Evans <ebrian101@gmail.com> * Migrated backend to ES modules Switched to import export syntax Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add typescript declaration for anticheat Signed-off-by: Brian Evans <ebrian101@gmail.com> * Rename top level files to .ts Fix service account json file typing Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add dev build scripts for backend typescript Signed-off-by: Brian Evans <ebrian101@gmail.com> * Removed empty lines and switched to using db Cleaned up imports by removing needless empty lines and migrated to the new db.js instead of mongodb.js. Signed-off-by: Brian Evans <ebrian101@gmail.com> * Fixed backend commonjs syntax to ES module syntax Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add build to backend start script Signed-off-by: Brian Evans <ebrian101@gmail.com> * Migrate some endpoints to Ape * Strict equals * Remove artifact * ape -> Ape * Ape migration p2 (#2522) * Migrate leaderboard endpoints to ape * Fixed comment * Init backend types * Fail * Return * Migrate Quotes to Ape (#2528) * Migrate quotes to Ape * Fix backend response * Fix issue * Fix rate limit (#2533) * fix rate limit * Fix import * Fix issues * Ape migration p4 (#2547) * Migrate results endpoints to ape * Remove unused import * Remove unused import * Fix loaders * Make function async * Hide try saving results * Migrate some users endpoints to Ape (#2548) * Complete Ape Migration (#2553) * Complete ape migration * Fix preset * Return preset data * Add typings * Move captcha reset * Read from params * Fix result tags endpoint * Fix stuck loader * fixed lb memory not saving * fixed quote rating popup not showing up for new users Co-authored-by: Mustafiz Kaifee <49086821+Mustafiz04@users.noreply.github.com> Co-authored-by: Mustafiz Kaifee Mumtaz <mustafiz.mumtaz@freecharge.com> Co-authored-by: Brian Evans <53117772+mrbrianevans@users.noreply.github.com> Co-authored-by: Miodec <bartnikjack@gmail.com>
2022-02-23 03:55:48 +08:00
);
}
}
);
next();
};
}
export {
validateConfiguration,
checkUserPermissions,
asyncHandler,
validateRequest,
};