diff --git a/package-lock.json b/package-lock.json index 5f2b1c4917..0251984a35 100644 --- a/package-lock.json +++ b/package-lock.json @@ -40,7 +40,7 @@ "mongodb": "4.10.0", "mustache": "4.2.0", "parse": "4.0.1", - "path-to-regexp": "0.1.7", + "path-to-regexp": "6.2.1", "pg-monitor": "2.0.0", "pg-promise": "11.3.0", "pluralize": "8.0.0", @@ -7314,6 +7314,11 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/express/node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, "node_modules/ext": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", @@ -16206,9 +16211,9 @@ "dev": true }, "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", + "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==" }, "node_modules/path-type": { "version": "4.0.0", @@ -26129,6 +26134,11 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" } } }, @@ -32836,9 +32846,9 @@ "dev": true }, "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", + "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==" }, "path-type": { "version": "4.0.0", diff --git a/package.json b/package.json index 0d42ed88dd..127abee3eb 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "mongodb": "4.10.0", "mustache": "4.2.0", "parse": "4.0.1", - "path-to-regexp": "0.1.7", + "path-to-regexp": "6.2.1", "pg-monitor": "2.0.0", "pg-promise": "11.3.0", "pluralize": "8.0.0", diff --git a/src/cloud-code/Parse.Cloud.js b/src/cloud-code/Parse.Cloud.js index 5540e8d719..01bf65f42c 100644 --- a/src/cloud-code/Parse.Cloud.js +++ b/src/cloud-code/Parse.Cloud.js @@ -82,9 +82,9 @@ const getRoute = parseClass => { '@File': 'files', }[parseClass] || 'classes'; if (parseClass === '@File') { - return `/${route}/:id?*`; + return `/${route}/:id?(.*)`; } - return `/${route}/${parseClass}/:id?*`; + return `/${route}/${parseClass}/:id?(.*)`; }; /** @namespace * @name Parse diff --git a/src/middlewares.js b/src/middlewares.js index 2e450f3e03..faaafe542f 100644 --- a/src/middlewares.js +++ b/src/middlewares.js @@ -9,7 +9,7 @@ import MongoStorageAdapter from './Adapters/Storage/Mongo/MongoStorageAdapter'; import PostgresStorageAdapter from './Adapters/Storage/Postgres/PostgresStorageAdapter'; import rateLimit from 'express-rate-limit'; import { RateLimitOptions } from './Options/Definitions'; -import pathToRegexp from 'path-to-regexp'; +import { pathToRegexp } from 'path-to-regexp'; import ipRangeCheck from 'ip-range-check'; import RedisStore from 'rate-limit-redis'; import { createClient } from 'redis'; @@ -512,8 +512,12 @@ export const addRateLimit = (route, config, cloud) => { }, }); } + let transformPath = route.requestPath.replaceAll('/*', '/(.*)'); + if (transformPath === '*') { + transformPath = '(.*)'; + } config.rateLimits.push({ - path: pathToRegexp(route.requestPath), + path: pathToRegexp(transformPath), handler: rateLimit({ windowMs: route.requestTimeWindow, max: route.requestCount,