mirror of
https://github.com/donpat1to/Schichtenplaner.git
synced 2025-12-01 06:55:45 +01:00
Compare commits
1 Commits
0473a3b5bf
...
v1.1.1
| Author | SHA1 | Date | |
|---|---|---|---|
| a8dc11b024 |
@@ -41,6 +41,28 @@ const getClientIP = (req: Request): string => {
|
|||||||
return remoteAddress;
|
return remoteAddress;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Helper to check if an IP is a loopback address (IPv4 or IPv6)
|
||||||
|
const isLoopbackAddress = (ip: string): boolean => {
|
||||||
|
// IPv4 loopback: 127.0.0.0/8
|
||||||
|
if (ip.startsWith('127.') || ip === 'localhost') {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// IPv6 loopback: ::1
|
||||||
|
// Also handle IPv4-mapped IPv6 addresses like ::ffff:127.0.0.1
|
||||||
|
if (ip === '::1' || ip === '::ffff:127.0.0.1') {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle full IPv6 loopback notation
|
||||||
|
if (ip.toLowerCase().startsWith('0000:0000:0000:0000:0000:0000:0000:0001') ||
|
||||||
|
ip.toLowerCase() === '0:0:0:0:0:0:0:1') {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
// Helper to check if request should be limited
|
// Helper to check if request should be limited
|
||||||
const shouldSkipLimit = (req: Request): boolean => {
|
const shouldSkipLimit = (req: Request): boolean => {
|
||||||
const skipPaths = [
|
const skipPaths = [
|
||||||
@@ -54,9 +76,16 @@ const shouldSkipLimit = (req: Request): boolean => {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const clientIP = getClientIP(req);
|
||||||
|
|
||||||
|
// Skip for loopback addresses (local development)
|
||||||
|
if (isLoopbackAddress(clientIP)) {
|
||||||
|
console.log(`✅ Loopback address skipped: ${clientIP}`);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// Skip for whitelisted IPs from environment
|
// Skip for whitelisted IPs from environment
|
||||||
const whitelist = process.env.RATE_LIMIT_WHITELIST?.split(',') || [];
|
const whitelist = process.env.RATE_LIMIT_WHITELIST?.split(',') || [];
|
||||||
const clientIP = getClientIP(req);
|
|
||||||
if (whitelist.includes(clientIP)) {
|
if (whitelist.includes(clientIP)) {
|
||||||
console.log(`✅ IP whitelisted: ${clientIP}`);
|
console.log(`✅ IP whitelisted: ${clientIP}`);
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
Reference in New Issue
Block a user