Files
swiss-datashare/backend/src/share/guard/shareTokenSecurity.guard.ts

39 lines
958 B
TypeScript
Raw Normal View History

2022-10-13 23:23:33 +02:00
import {
CanActivate,
ExecutionContext,
Injectable,
NotFoundException,
} from "@nestjs/common";
import { Request } from "express";
import * as moment from "moment";
import { PrismaService } from "src/prisma/prisma.service";
@Injectable()
export class ShareTokenSecurity implements CanActivate {
constructor(private prisma: PrismaService) {}
2022-10-13 23:23:33 +02:00
async canActivate(context: ExecutionContext) {
const request: Request = context.switchToHttp().getRequest();
const shareId = Object.prototype.hasOwnProperty.call(
request.params,
"shareId",
2022-10-13 23:23:33 +02:00
)
? request.params.shareId
: request.params.id;
const share = await this.prisma.share.findUnique({
where: { id: shareId },
include: { security: true },
});
2023-01-31 15:22:08 +01:00
if (
!share ||
(moment().isAfter(share.expiration) &&
!moment(share.expiration).isSame(0))
)
throw new NotFoundException("Share not found");
2022-10-13 23:23:33 +02:00
return true;
}
}