cityssm/express-abuse-points

View on GitHub
trackingValues.js

Summary

Maintainability
A
25 mins
Test Coverage
A
100%
import { isIPv6 } from 'is-ip';
const IPV4_WITH_PORT_REGEX = /^(?:[12]?\d{1,2}\.){3}[12]?\d{1,2}(?::\d{1,5})?$/;
export const isIP4AddressWithPort = (ipAddress) => {
    return IPV4_WITH_PORT_REGEX.test(ipAddress);
};
export const getIP = (request) => {
    return request.ip ?? '';
};
export const getXForwardedFor = (request) => {
    const ipAddresses = request.headers?.['x-forwarded-for'] ?? '';
    const ipAddressesSplit = typeof ipAddresses === 'string' ? ipAddresses.split(/[ ,[\]]/) : ipAddresses;
    for (const ipPiece of ipAddressesSplit) {
        if (isIP4AddressWithPort(ipPiece)) {
            return ipPiece.split(':')[0];
        }
        else if (isIPv6(ipPiece)) {
            return ipPiece;
        }
    }
    return ipAddresses.toString();
};