forked from Chatbot/v3-api
first commit v3 initialiazed a temporary repository for darmanet client
This commit is contained in:
59
src/widget/widget.controller.ts
Normal file
59
src/widget/widget.controller.ts
Normal file
@@ -0,0 +1,59 @@
|
||||
import { Controller, Get, Query, Header, BadRequestException, Req, Res } from '@nestjs/common';
|
||||
import { Public } from 'src/auth/auth.decorator';
|
||||
import { WidgetService } from './widget.service';
|
||||
|
||||
@Controller('widget')
|
||||
@Public()
|
||||
export class WidgetController {
|
||||
constructor(private readonly widgetService: WidgetService) { }
|
||||
|
||||
@Get('script')
|
||||
@Header('Content-Type', 'application/javascript')
|
||||
@Header('Access-Control-Allow-Origin', 'https://staging.hdmplus.ir/, https://si24.ir')
|
||||
@Header('X-Frame-Options', 'ALLOW-FROM https://staging.hdmplus.ir/ https://si24.ir')
|
||||
@Header(
|
||||
'Content-Security-Policy',
|
||||
"frame-ancestors 'self' https://staging.hdmplus.ir/ https://si24.ir",
|
||||
)
|
||||
@Header('X-Content-Type-Options', 'nosniff')
|
||||
getWidgetScript(
|
||||
@Query('apiKey') apiKey: string,
|
||||
@Req() req: Request,
|
||||
): string {
|
||||
if (!apiKey) {
|
||||
throw new BadRequestException('API key is required');
|
||||
}
|
||||
|
||||
const isValidApiKey =
|
||||
Buffer.from(apiKey).length === Buffer.from('si24samanwebsite').length &&
|
||||
Buffer.from(apiKey).compare(Buffer.from('si24samanwebsite')) === 0;
|
||||
|
||||
if (!isValidApiKey) {
|
||||
throw new BadRequestException('Invalid API key');
|
||||
}
|
||||
|
||||
return this.widgetService.generateWidgetScript();
|
||||
}
|
||||
|
||||
@Get('iframe')
|
||||
async getIframeScript(
|
||||
@Query('apiKey') apiKey: string,
|
||||
@Req() req: Request,
|
||||
@Res() res,
|
||||
) {
|
||||
if (!apiKey || apiKey !== 'si24samanwebsite') {
|
||||
throw new BadRequestException('API key is invalid or missing');
|
||||
}
|
||||
|
||||
res.set({
|
||||
'Content-Type': 'application/javascript',
|
||||
'Access-Control-Allow-Origin': 'https://staging.hdmplus.ir/, https://si24.ir',
|
||||
'X-Frame-Options': 'ALLOW-FROM https://staging.hdmplus.ir/ https://si24.ir',
|
||||
'Content-Security-Policy': "frame-ancestors 'self' https://staging.hdmplus.ir/ https://si24.ir",
|
||||
'X-Content-Type-Options': 'nosniff',
|
||||
});
|
||||
|
||||
const script = this.widgetService.generateWidgetScriptWithoutStyle();
|
||||
return res.send(script);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user