41 lines
1.1 KiB
TypeScript
41 lines
1.1 KiB
TypeScript
import {
|
|
Body,
|
|
Controller,
|
|
Headers,
|
|
Post,
|
|
RawBody,
|
|
} from '@nestjs/common';
|
|
import { ApiCreatedResponse, ApiTags } from '@nestjs/swagger';
|
|
import { GiteaWebhookHeaders, GiteaWebhookResult } from './gitea-webhook.types';
|
|
import { GiteaWebhookService } from './gitea-webhook.service';
|
|
|
|
@ApiTags('webhooks')
|
|
@Controller('webhooks/gitea')
|
|
export class GiteaWebhookController {
|
|
constructor(private readonly giteaWebhookService: GiteaWebhookService) {}
|
|
|
|
@Post()
|
|
@ApiCreatedResponse({ description: 'Receive a Gitea webhook event.' })
|
|
async receiveWebhook(
|
|
@Headers('x-gitea-event') event: string | undefined,
|
|
@Headers('x-gitea-delivery') delivery: string | undefined,
|
|
@Headers('x-gitea-signature') signature: string | undefined,
|
|
@Headers('x-hub-signature-256') hubSignature256: string | undefined,
|
|
@Body() payload: unknown,
|
|
@RawBody() rawBody?: Buffer,
|
|
): Promise<GiteaWebhookResult> {
|
|
const headers: GiteaWebhookHeaders = {
|
|
event,
|
|
delivery,
|
|
signature,
|
|
hubSignature256,
|
|
};
|
|
|
|
return this.giteaWebhookService.handleWebhook({
|
|
headers,
|
|
payload,
|
|
rawBody,
|
|
});
|
|
}
|
|
}
|