@eddaic/nestjs-decorators
Version:
Additional decorators intended for use with NestJS framework.
34 lines (33 loc) • 1.45 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.GetIp = void 0;
exports.getIpFromRequest = getIpFromRequest;
const common_1 = require("@nestjs/common");
const class_validator_1 = require("class-validator");
function getIpFromRequest(request) {
if (request !== undefined && request !== null && (0, class_validator_1.isObject)(request)) {
if ('headers' in request &&
request.headers !== undefined &&
request.headers !== null &&
(0, class_validator_1.isObject)(request.headers) &&
'x-forwarded-for' in request.headers &&
(0, class_validator_1.isString)(request.headers['x-forwarded-for']) &&
!(0, class_validator_1.isEmpty)(request.headers['x-forwarded-for'])) {
// Sanitize forwarded for IPs that can contain proxy IPs as well as client,
// * in form `49.43.35.84, 34.110.181.101`.
return request.headers['x-forwarded-for'].split(',')[0].trim();
}
else if ('ip' in request &&
(0, class_validator_1.isString)(request.ip) &&
!(0, class_validator_1.isEmpty)(request.ip)) {
return request.ip.trim();
}
else {
return undefined;
}
}
else {
return undefined;
}
}
exports.GetIp = (0, common_1.createParamDecorator)((_data, context) => getIpFromRequest(context.switchToHttp().getRequest()));