@lock-dev/geo-block
Version:
Geographic blocking module for lock.dev security framework
31 lines (30 loc) • 1.07 kB
JavaScript
/**
* Extract client IP address from request
* @param request HTTP request object
* @param ipHeaders Headers to check for IP address
* @param useRemoteAddress Whether to fall back to remote address
*/
export function extractIp(request, ipHeaders = [], useRemoteAddress = true) {
// Check headers first
if (request.headers) {
for (const header of ipHeaders) {
const value = request.headers[header.toLowerCase()];
if (value) {
// Handle potential comma-separated IPs (common in forwarded headers)
const parts = value.split(',');
return parts[0].trim();
}
}
}
// Fall back to remote address if allowed
if (useRemoteAddress) {
// Handle different request objects
if (request.connection && request.connection.remoteAddress) {
return request.connection.remoteAddress;
}
if (request.socket && request.socket.remoteAddress) {
return request.socket.remoteAddress;
}
}
return null;
}