mirror of
https://github.com/immich-app/immich.git
synced 2025-05-24 01:12:58 -04:00
* fix: AssetInterceptor "can't set headers after they are sent" * chore: remove long comment --------- Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
28 lines
1.1 KiB
TypeScript
28 lines
1.1 KiB
TypeScript
import { CallHandler, ExecutionContext, Injectable, NestInterceptor } from '@nestjs/common';
|
|
import { Response } from 'express';
|
|
import { of } from 'rxjs';
|
|
import { AssetMediaResponseDto, AssetMediaStatus } from 'src/dtos/asset-media-response.dto';
|
|
import { ImmichHeader } from 'src/dtos/auth.dto';
|
|
import { AuthenticatedRequest } from 'src/middleware/auth.guard';
|
|
import { AssetMediaService } from 'src/services/asset-media.service';
|
|
import { fromMaybeArray } from 'src/utils/request';
|
|
|
|
@Injectable()
|
|
export class AssetUploadInterceptor implements NestInterceptor {
|
|
constructor(private service: AssetMediaService) {}
|
|
|
|
async intercept(context: ExecutionContext, next: CallHandler<any>) {
|
|
const req = context.switchToHttp().getRequest<AuthenticatedRequest>();
|
|
const res = context.switchToHttp().getResponse<Response<AssetMediaResponseDto>>();
|
|
|
|
const checksum = fromMaybeArray(req.headers[ImmichHeader.CHECKSUM]);
|
|
const response = await this.service.getUploadAssetIdByChecksum(req.user, checksum);
|
|
if (response) {
|
|
res.status(200);
|
|
return of({ status: AssetMediaStatus.DUPLICATE, id: response.id });
|
|
}
|
|
|
|
return next.handle();
|
|
}
|
|
}
|