UNPKG

@lock-dev/geo-block

Version:

Geographic blocking module for lock.dev security framework

31 lines (30 loc) 1.07 kB
/** * 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; }