feat: Implement the core InterNetX DDNS updater application with API, services, middleware, Docker support, and a detailed README.

This commit is contained in:
2026-01-26 19:53:31 +01:00
parent bba71a7272
commit 11d2c1fce2
19 changed files with 1739 additions and 2 deletions

View File

@@ -0,0 +1,50 @@
const rateLimit = require('express-rate-limit');
const config = require('../config/config');
const { logger } = require('../utils/logger');
/**
* Rate limiter for update endpoint
*/
const updateLimiter = rateLimit({
windowMs: config.rateLimit.windowMs,
max: config.rateLimit.maxRequests,
message: {
error: 'Too many requests',
message: 'Rate limit exceeded. Please try again later.',
},
standardHeaders: true, // Return rate limit info in `RateLimit-*` headers
legacyHeaders: false, // Disable `X-RateLimit-*` headers
// Custom handler for rate limit exceeded
handler: (req, res) => {
logger.warn('Rate limit exceeded', {
ip: req.ip,
path: req.path,
limit: config.rateLimit.maxRequests,
window: `${config.rateLimit.windowMs / 1000}s`,
});
res.status(429).json({
error: 'Too many requests',
message: 'You have exceeded the rate limit. Please try again later.',
retryAfter: Math.ceil(config.rateLimit.windowMs / 1000),
});
},
// Skip rate limiting for successful requests (optional)
skip: (req) => {
// Could skip based on certain conditions, e.g., whitelisted IPs
return false;
},
// Key generator - rate limit per IP
keyGenerator: (req) => {
return req.ip;
},
});
module.exports = {
updateLimiter,
};