F4: expose secure remote company signature endpoints
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
import {
|
||||
Body,
|
||||
Controller,
|
||||
Get,
|
||||
Param,
|
||||
ParseUUIDPipe,
|
||||
Post,
|
||||
Req,
|
||||
UploadedFile,
|
||||
UseInterceptors,
|
||||
} from '@nestjs/common';
|
||||
import { FileInterceptor } from '@nestjs/platform-express';
|
||||
import { CurrentAuth } from '../auth/decorators/current-auth.decorator';
|
||||
import { Public } from '../auth/decorators/public.decorator';
|
||||
import { SkipCsrf } from '../auth/decorators/skip-csrf.decorator';
|
||||
import { RequirePermissions } from '../authorization/decorators/require-permissions.decorator';
|
||||
import type { AuthPrincipal, RequestWithContext } from '../common/http/request-context';
|
||||
import { CompanySignatureInviteService } from './company-signature-invite.service';
|
||||
import {
|
||||
CreateCompanySignatureInviteDto,
|
||||
PublicCompanyRefusalDto,
|
||||
PublicCompanySignatureDto,
|
||||
} from './dto/company-signature-invite.dto';
|
||||
import {
|
||||
MAX_INSPECTION_SIGNATURE_BYTES,
|
||||
type UploadedInspectionSignatureFile,
|
||||
} from './inspection-signature-file';
|
||||
|
||||
@Controller('inspection-acts/:actId/company-signature-invitations')
|
||||
export class CompanySignatureInviteController {
|
||||
constructor(private readonly invites: CompanySignatureInviteService) {}
|
||||
|
||||
@Post()
|
||||
@RequirePermissions('inspection_closure.sign')
|
||||
create(
|
||||
@Param('actId', new ParseUUIDPipe({ version: '4' })) actId: string,
|
||||
@Body() dto: CreateCompanySignatureInviteDto,
|
||||
@CurrentAuth() principal: AuthPrincipal,
|
||||
@Req() request: RequestWithContext,
|
||||
) {
|
||||
return this.invites.create(actId, dto, principal, request);
|
||||
}
|
||||
}
|
||||
|
||||
@Public()
|
||||
@SkipCsrf()
|
||||
@Controller('public/company-signatures')
|
||||
export class PublicCompanySignatureController {
|
||||
constructor(private readonly invites: CompanySignatureInviteService) {}
|
||||
|
||||
@Get(':token')
|
||||
view(@Param('token') token: string) {
|
||||
return this.invites.view(token);
|
||||
}
|
||||
|
||||
@Post(':token/sign')
|
||||
@UseInterceptors(FileInterceptor('file', {
|
||||
limits: { fileSize: MAX_INSPECTION_SIGNATURE_BYTES, files: 1 },
|
||||
}))
|
||||
sign(
|
||||
@Param('token') token: string,
|
||||
@Body() dto: PublicCompanySignatureDto,
|
||||
@UploadedFile() file: UploadedInspectionSignatureFile | undefined,
|
||||
@Req() request: RequestWithContext,
|
||||
) {
|
||||
return this.invites.sign(token, dto, file, request);
|
||||
}
|
||||
|
||||
@Post(':token/refuse')
|
||||
refuse(
|
||||
@Param('token') token: string,
|
||||
@Body() dto: PublicCompanyRefusalDto,
|
||||
@Req() request: RequestWithContext,
|
||||
) {
|
||||
return this.invites.refuse(token, dto, request);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user