44 lines
1011 B
TypeScript
44 lines
1011 B
TypeScript
import {
|
|
Controller,
|
|
Get,
|
|
Headers,
|
|
Param,
|
|
Req,
|
|
Res,
|
|
} from '@nestjs/common';
|
|
import type { Request, Response } from 'express';
|
|
import { TrackingService } from './tracking.service';
|
|
|
|
/**
|
|
* ریدایرکت عمومی بدون احراز هویت.
|
|
* مسیر نهایی: GET /api/t/:token
|
|
*/
|
|
@Controller('t')
|
|
export class PublicTrackingController {
|
|
constructor(private readonly tracking: TrackingService) {}
|
|
|
|
@Get(':token')
|
|
async redirect(
|
|
@Param('token') token: string,
|
|
@Headers('user-agent') userAgent: string | undefined,
|
|
@Headers('referer') referer: string | undefined,
|
|
@Req() req: Request,
|
|
@Res() res: Response,
|
|
) {
|
|
const ip =
|
|
(typeof req.headers['x-forwarded-for'] === 'string'
|
|
? req.headers['x-forwarded-for'].split(',')[0]?.trim()
|
|
: undefined) ||
|
|
req.ip ||
|
|
undefined;
|
|
|
|
const target = await this.tracking.handleClick(token, {
|
|
userAgent,
|
|
referer,
|
|
ip,
|
|
});
|
|
|
|
return res.redirect(302, target);
|
|
}
|
|
}
|