diff --git a/backend/src/api/controllers/quote.ts b/backend/src/api/controllers/quote.ts index c098c325b..170abf510 100644 --- a/backend/src/api/controllers/quote.ts +++ b/backend/src/api/controllers/quote.ts @@ -35,6 +35,16 @@ export async function getQuotes( return new MonkeyResponse("Quote submissions retrieved", data); } +export async function isSubmissionEnabled( + req: MonkeyTypes.Request +): Promise { + const { submissionsEnabled } = req.ctx.configuration.quotes; + return new MonkeyResponse( + "Quote submission " + (submissionsEnabled ? "enabled" : "disabled"), + submissionsEnabled + ); +} + export async function addQuote( req: MonkeyTypes.Request ): Promise { diff --git a/backend/src/api/routes/quotes.ts b/backend/src/api/routes/quotes.ts index 9ad72098a..4fec59a1d 100644 --- a/backend/src/api/routes/quotes.ts +++ b/backend/src/api/routes/quotes.ts @@ -26,6 +26,15 @@ router.get( asyncHandler(QuoteController.getQuotes) ); +router.get( + "/isSubmissionEnabled", + authenticateRequest({ + isPublic: true, + }), + RateLimit.newQuotesIsSubmissionEnabled, + asyncHandler(QuoteController.isSubmissionEnabled) +); + router.post( "/", validateConfiguration({ diff --git a/backend/src/middlewares/rate-limit.ts b/backend/src/middlewares/rate-limit.ts index 9d593d07d..9b504a91b 100644 --- a/backend/src/middlewares/rate-limit.ts +++ b/backend/src/middlewares/rate-limit.ts @@ -136,6 +136,13 @@ export const newQuotesGet = rateLimit({ handler: customHandler, }); +export const newQuotesIsSubmissionEnabled = rateLimit({ + windowMs: 60 * 1000, + max: 60 * REQUEST_MULTIPLIER, + keyGenerator: getKeyWithUid, + handler: customHandler, +}); + export const newQuotesAdd = rateLimit({ windowMs: ONE_HOUR_MS, max: 60 * REQUEST_MULTIPLIER,