Merge branch 'tycrek:dev/0.15.0' into dev/0.15.0

pull/245/head
X 7 months ago committed by GitHub
commit 66c81503e8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -2,7 +2,6 @@ import { UserConfiguration, UserConfigTypeChecker } from 'ass';
import fs from 'fs-extra';
import { path } from '@tycrek/joint';
import { log } from './log';
const FILEPATH = path.join('.ass-data/userconfig.json');
@ -113,9 +112,9 @@ export class UserConfig {
// * optional rate limit config
if (config.rateLimit != null) {
if (!Checkers.rateLimit.endpoint(config.rateLimit.login)) throw new Error('Invalid rate limit configuration');
if (!Checkers.rateLimit.endpoint(config.rateLimit.upload)) throw new Error('Invalid rate limit configuration');
if (!Checkers.rateLimit.endpoint(config.rateLimit.api)) throw new Error('Invalid rate limit configuration');
if (!Checkers.rateLimit.endpoint(config.rateLimit.login)) throw new Error('Invalid Login rate limit configuration');
if (!Checkers.rateLimit.endpoint(config.rateLimit.upload)) throw new Error('Invalid Upload rate limit configuration');
if (!Checkers.rateLimit.endpoint(config.rateLimit.api)) throw new Error('Invalid API rate limit configuration');
}
// All is fine, carry on!

@ -5,7 +5,7 @@ import { rateLimit } from 'express-rate-limit';
/**
* map that contains rate limiter middleware for each group
*/
let rateLimiterGroups = new Map<string, (req: Request, res: Response, next: NextFunction) => void>();
const rateLimiterGroups = new Map<string, (req: Request, res: Response, next: NextFunction) => void>();
/**
* creates middleware for rate limiting
@ -21,11 +21,11 @@ export const rateLimiterMiddleware = (group: string, config: EndpointRateLimitCo
return rateLimiterGroups.get(group)!;
} else {
rateLimiterGroups.set(group, rateLimit({
limit: config.requests,
windowMs: config.duration * 1000,
limit: config.requests,
windowMs: config.duration * 1000,
skipFailedRequests: true,
legacyHeaders: false,
standardHeaders: "draft-7",
legacyHeaders: false,
standardHeaders: 'draft-7',
keyGenerator: (req, res) => {
return req.ip || 'disconnected';
},

@ -39,7 +39,7 @@ router.post('/setup', BodyParserJson(), async (req, res) => {
});
// User login
router.post('/login', rateLimiterMiddleware("login", UserConfig.config.rateLimit?.login), BodyParserJson(), (req, res) => {
router.post('/login', rateLimiterMiddleware('login', UserConfig.config.rateLimit?.login), BodyParserJson(), (req, res) => {
const { username, password } = req.body;
data.getAll('users')
@ -69,7 +69,7 @@ router.post('/login', rateLimiterMiddleware("login", UserConfig.config.rateLimit
});
// todo: authenticate API endpoints
router.post('/user', rateLimiterMiddleware("api", UserConfig.config.rateLimit?.api), BodyParserJson(), async (req, res) => {
router.post('/user', rateLimiterMiddleware('api', UserConfig.config.rateLimit?.api), BodyParserJson(), async (req, res) => {
if (!UserConfig.ready)
return res.status(409).json({ success: false, message: 'User config not ready' });

2
common/types.d.ts vendored

@ -59,7 +59,7 @@ declare module 'ass' {
database: string;
}
}
/**
* rate limiter configuration
* @since 0.15.0

@ -55,7 +55,7 @@ document.addEventListener('DOMContentLoaded', () => {
ratelimitApiTime: document.querySelector('#ratelimit-api-time') as SlInput,
ratelimitUploadRequests: document.querySelector('#ratelimit-upload-requests') as SlInput,
ratelimitUploadTime: document.querySelector('#ratelimit-upload-time') as SlInput,
submitButton: document.querySelector('#submit') as SlButton,
};
@ -101,7 +101,7 @@ document.addEventListener('DOMContentLoaded', () => {
// append rate limit config, if specified
if ((
Elements.ratelimitLoginRequests.value
Elements.ratelimitLoginRequests.value
|| Elements.ratelimitLoginTime.value
|| Elements.ratelimitUploadRequests.value
|| Elements.ratelimitUploadTime.value
@ -110,11 +110,11 @@ document.addEventListener('DOMContentLoaded', () => {
) {
if (!config.rateLimit) config.rateLimit = {};
if (
genericRateLimit(config.rateLimit, 'login', Elements.submitButton, Elements.ratelimitLoginRequests, Elements.ratelimitLoginTime)
if (
genericRateLimit(config.rateLimit, 'login', Elements.submitButton, Elements.ratelimitLoginRequests, Elements.ratelimitLoginTime)
|| genericRateLimit(config.rateLimit, 'api', Elements.submitButton, Elements.ratelimitApiRequests, Elements.ratelimitApiTime)
|| genericRateLimit(config.rateLimit, 'upload', Elements.submitButton, Elements.ratelimitUploadRequests, Elements.ratelimitUploadTime)
) {
) {
return;
}
}

4
package-lock.json generated

@ -11,10 +11,10 @@
"dependencies": {
"@aws-sdk/client-s3": "^3.421.0",
"@shoelace-style/shoelace": "^2.9.0",
"@tinycreek/postcss-font-magician": "^4.1.0",
"@tinycreek/postcss-font-magician": "^4.2.0",
"@tsconfig/node20": "^20.1.2",
"@tycrek/discord-hookr": "^0.1.0",
"@tycrek/express-postcss": "^0.4.0",
"@tycrek/express-postcss": "^0.4.1",
"@tycrek/joint": "^1.0.0-1",
"@tycrek/log": "^0.7.5",
"@tycrek/papito": "^0.3.4",

@ -31,10 +31,10 @@
"dependencies": {
"@aws-sdk/client-s3": "^3.421.0",
"@shoelace-style/shoelace": "^2.9.0",
"@tinycreek/postcss-font-magician": "^4.1.0",
"@tinycreek/postcss-font-magician": "^4.2.0",
"@tsconfig/node20": "^20.1.2",
"@tycrek/discord-hookr": "^0.1.0",
"@tycrek/express-postcss": "^0.4.0",
"@tycrek/express-postcss": "^0.4.1",
"@tycrek/joint": "^1.0.0-1",
"@tycrek/log": "^0.7.5",
"@tycrek/papito": "^0.3.4",

Loading…
Cancel
Save