mirror of
https://github.com/brendan-ch/project-inter-server.git
synced 2026-04-19 08:50:29 +00:00
Add environment variables to control settings
This commit is contained in:
@@ -8,6 +8,13 @@ APNS_BUNDLE_ID=
|
|||||||
# base64-encoded APNs private key
|
# base64-encoded APNs private key
|
||||||
APNS_PRIVATE_KEY=
|
APNS_PRIVATE_KEY=
|
||||||
|
|
||||||
|
# control parking data logging
|
||||||
PARKING_LOGGING_INTERVAL_MS=
|
PARKING_LOGGING_INTERVAL_MS=
|
||||||
PARKING_HISTORICAL_AVERAGE_MINIMUM_INTERVAL=
|
PARKING_HISTORICAL_AVERAGE_MINIMUM_INTERVAL=
|
||||||
PARKING_HISTORICAL_AVERAGE_MAXIMUM_TIMESPAN=
|
PARKING_HISTORICAL_AVERAGE_MAXIMUM_TIMESPAN=
|
||||||
|
|
||||||
|
# control rate limiting features
|
||||||
|
RATE_LIMITS_DISABLED=
|
||||||
|
RATE_LIMIT_WINDOW_MS=
|
||||||
|
RATE_LIMIT_DELAY_AFTER_REQUESTS=
|
||||||
|
RATE_LIMIT_DELAY_MULTIPLIER_MS=
|
||||||
|
|||||||
@@ -13,6 +13,9 @@ x-common-environment: &common-server-environment
|
|||||||
PARKING_LOGGING_INTERVAL_MS: ${PARKING_LOGGING_INTERVAL_MS}
|
PARKING_LOGGING_INTERVAL_MS: ${PARKING_LOGGING_INTERVAL_MS}
|
||||||
REDIS_URL: redis://redis:6379
|
REDIS_URL: redis://redis:6379
|
||||||
RATE_LIMITS_DISABLED: ${RATE_LIMITS_DISABLED}
|
RATE_LIMITS_DISABLED: ${RATE_LIMITS_DISABLED}
|
||||||
|
RATE_LIMIT_WINDOW_MS: ${RATE_LIMIT_WINDOW_MS}
|
||||||
|
RATE_LIMIT_DELAY_AFTER_REQUESTS: ${RATE_LIMIT_DELAY_AFTER_REQUESTS}
|
||||||
|
RATE_LIMIT_DELAY_MULTIPLIER_MS: ${RATE_LIMIT_DELAY_MULTIPLIER_MS}
|
||||||
|
|
||||||
services:
|
services:
|
||||||
dev:
|
dev:
|
||||||
|
|||||||
@@ -10,4 +10,14 @@ export const PARKING_HISTORICAL_AVERAGE_MAXIMUM_TIMESPAN = process.env.PARKING_H
|
|||||||
? parseInt(process.env.PARKING_HISTORICAL_AVERAGE_MAXIMUM_TIMESPAN)
|
? parseInt(process.env.PARKING_HISTORICAL_AVERAGE_MAXIMUM_TIMESPAN)
|
||||||
: 60000 * 60 * 24;
|
: 60000 * 60 * 24;
|
||||||
|
|
||||||
export const RATE_LIMITS_DISABLED = process.env.RATE_LIMITS_DISABLED !== undefined;
|
export const RATE_LIMITS_DISABLED = process.env.RATE_LIMITS_DISABLED === "1";
|
||||||
|
export const RATE_LIMIT_WINDOW_MS = process.env.RATE_LIMIT_WINDOW_MS
|
||||||
|
? parseInt(process.env.RATE_LIMIT_WINDOW_MS)
|
||||||
|
: 10000;
|
||||||
|
export const RATE_LIMIT_DELAY_AFTER_REQUESTS = process.env.RATE_LIMIT_DELAY_AFTER_REQUESTS
|
||||||
|
? parseInt(process.env.RATE_LIMIT_DELAY_AFTER_REQUESTS)
|
||||||
|
: 10000;
|
||||||
|
export const RATE_LIMIT_DELAY_MULTIPLIER_MS = process.env.RATE_LIMIT_DELAY_MULTIPLIER_MS
|
||||||
|
? parseInt(process.env.RATE_LIMIT_DELAY_MULTIPLIER_MS)
|
||||||
|
: 1000;
|
||||||
|
|
||||||
|
|||||||
22
src/index.ts
22
src/index.ts
@@ -6,8 +6,13 @@ import { InterchangeSystem, InterchangeSystemBuilderArguments } from "./entities
|
|||||||
import { ChapmanApiBasedParkingRepositoryLoader } from "./loaders/parking/ChapmanApiBasedParkingRepositoryLoader";
|
import { ChapmanApiBasedParkingRepositoryLoader } from "./loaders/parking/ChapmanApiBasedParkingRepositoryLoader";
|
||||||
import express from "express";
|
import express from "express";
|
||||||
import { expressMiddleware } from "@as-integrations/express5";
|
import { expressMiddleware } from "@as-integrations/express5";
|
||||||
import { RATE_LIMITS_DISABLED } from "./environment";
|
import {
|
||||||
import rateLimit from "express-rate-limit";
|
RATE_LIMIT_DELAY_AFTER_REQUESTS,
|
||||||
|
RATE_LIMIT_DELAY_MULTIPLIER_MS,
|
||||||
|
RATE_LIMIT_WINDOW_MS,
|
||||||
|
RATE_LIMITS_DISABLED
|
||||||
|
} from "./environment";
|
||||||
|
import slowDown from "express-slow-down";
|
||||||
|
|
||||||
const typeDefs = readFileSync("./schema.graphqls", "utf8");
|
const typeDefs = readFileSync("./schema.graphqls", "utf8");
|
||||||
|
|
||||||
@@ -60,12 +65,12 @@ async function main() {
|
|||||||
expressMiddleware(server, options)
|
expressMiddleware(server, options)
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
const limiter = rateLimit({
|
const limiter = slowDown({
|
||||||
windowMs: 60 * 1000, // Every minute
|
windowMs: RATE_LIMIT_WINDOW_MS,
|
||||||
limit: 20000,
|
delayAfter: RATE_LIMIT_DELAY_AFTER_REQUESTS,
|
||||||
standardHeaders: 'draft-8', // draft-6: `RateLimit-*` headers; draft-7 & draft-8: combined `RateLimit` header
|
delayMs: (hits) => {
|
||||||
legacyHeaders: false, // Disable the `X-RateLimit-*` headers.
|
return hits * RATE_LIMIT_DELAY_MULTIPLIER_MS;
|
||||||
ipv6Subnet: 60, // Set to 60 or 64 to be less aggressive, or 52 or 48 to be more aggressive
|
}
|
||||||
});
|
});
|
||||||
app.use(
|
app.use(
|
||||||
"/",
|
"/",
|
||||||
@@ -75,7 +80,6 @@ async function main() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const port = process.env.PORT ? parseInt(process.env.PORT) : 4000;
|
const port = process.env.PORT ? parseInt(process.env.PORT) : 4000;
|
||||||
app.listen(port, () => {
|
app.listen(port, () => {
|
||||||
console.log(`Server ready at port ${port}`);
|
console.log(`Server ready at port ${port}`);
|
||||||
|
|||||||
Reference in New Issue
Block a user