diff --git a/api/axios.js b/api/axios.js index a4bc30c..9e9d2b1 100644 --- a/api/axios.js +++ b/api/axios.js @@ -1,9 +1,10 @@ const axios = require("axios"); +const rateLimit = require("axios-rate-limit"); const { baseAPIURL, accountsAPIURL } = require("../constants"); const logger = require("../utils/logger")(module); -const authInstance = axios.default.create({ +const authInstance = axios.create({ baseURL: accountsAPIURL, timeout: 20000, headers: { @@ -12,7 +13,7 @@ const authInstance = axios.default.create({ }, }); -const axiosInstance = axios.default.create({ +const uncappedAxiosInstance = axios.create({ baseURL: baseAPIURL, timeout: 20000, headers: { @@ -20,6 +21,11 @@ const axiosInstance = axios.default.create({ }, }); +const axiosInstance = rateLimit(uncappedAxiosInstance, { + maxRequests: 10, + perMilliseconds: 5000, +}); + axiosInstance.interceptors.request.use(config => { logger.http("API call", { url: config.url, diff --git a/controllers/auth.js b/controllers/auth.js index 8a25ff4..97d1b18 100644 --- a/controllers/auth.js +++ b/controllers/auth.js @@ -148,7 +148,8 @@ const logout = async (req, res) => { return; } else { res.clearCookie(sessionName); - res.sendStatus(200); + // res.sendStatus(200); + res.redirect(process.env.APP_URI + "?logout=success"); logger.debug("Logged out.", { sessionID: delSession.id }); return; } diff --git a/package-lock.json b/package-lock.json index b540aaf..64daae2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "license": "MIT", "dependencies": { "axios": "^1.7.9", + "axios-rate-limit": "^1.4.0", "connect-sqlite3": "^0.9.15", "cookie-parser": "^1.4.7", "cors": "^2.8.5", @@ -413,6 +414,17 @@ "proxy-from-env": "^1.1.0" } }, + "node_modules/axios-rate-limit": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/axios-rate-limit/-/axios-rate-limit-1.4.0.tgz", + "integrity": "sha512-uM5PbmSUdSle1I+59Av/wpLuNRobfatIR+FyylSoHcVHT20ohjflNnLMEHZQr7N2QVG/Wlt8jekIPhWwoKtpXQ==", + "dependencies": { + "axios": ">=0.18.0" + }, + "peerDependencies": { + "axios": "*" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", diff --git a/package.json b/package.json index afc06d8..85b97cb 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "homepage": "https://github.com/20kaushik02/spotify-manager#readme", "dependencies": { "axios": "^1.7.9", + "axios-rate-limit": "^1.4.0", "connect-sqlite3": "^0.9.15", "cookie-parser": "^1.4.7", "cors": "^2.8.5", @@ -29,8 +30,8 @@ "express-session": "^1.18.1", "express-validator": "^7.2.0", "helmet": "^8.0.0", - "sequelize": "^6.37.5", "pg": "^8.13.1", + "sequelize": "^6.37.5", "serializr": "^3.0.3", "winston": "^3.17.0" },