Signed file follow up (#12347)

This commit is contained in:
martmull
2025-05-28 13:02:27 +02:00
committed by GitHub
parent d4fac6793a
commit 69831b17ff
11 changed files with 58 additions and 119 deletions
@@ -1,11 +1,8 @@
import { Injectable } from '@nestjs/common';
import { buildSignedPath } from 'twenty-shared/utils';
import { FileService } from 'src/engine/core-modules/file/services/file.service';
import { DeletedWorkspaceMember } from 'src/engine/core-modules/user/dtos/deleted-workspace-member.dto';
import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity';
import { extractFilenameFromPath } from 'src/engine/core-modules/file/utils/extract-file-id-from-path.utils';
@Injectable()
export class DeletedWorkspaceMemberTranspiler {
@@ -18,15 +15,10 @@ export class DeletedWorkspaceMemberTranspiler {
workspaceMember: Pick<WorkspaceMemberWorkspaceEntity, 'avatarUrl' | 'id'>;
workspaceId: string;
}): string {
const signedPayload = this.fileService.encodeFileToken({
filename: extractFilenameFromPath(workspaceMember.avatarUrl),
return this.fileService.signFileUrl({
url: workspaceMember.avatarUrl,
workspaceId,
});
return buildSignedPath({
path: workspaceMember.avatarUrl,
token: signedPayload,
});
}
toDeletedWorkspaceMemberDto(
@@ -40,15 +32,16 @@ export class DeletedWorkspaceMemberTranspiler {
userEmail,
} = workspaceMember;
const avatarUrl = userWorkspaceId
? this.generateSignedAvatarUrl({
workspaceId: userWorkspaceId,
workspaceMember: {
avatarUrl: avatarUrlFromEntity,
id,
},
})
: null;
const avatarUrl =
userWorkspaceId && avatarUrlFromEntity
? this.generateSignedAvatarUrl({
workspaceId: userWorkspaceId,
workspaceMember: {
avatarUrl: avatarUrlFromEntity,
id,
},
})
: null;
return {
id,
@@ -14,7 +14,6 @@ import crypto from 'crypto';
import { GraphQLJSONObject } from 'graphql-type-json';
import { FileUpload, GraphQLUpload } from 'graphql-upload';
import { PermissionsOnAllObjectRecords } from 'twenty-shared/constants';
import { buildSignedPath } from 'twenty-shared/utils';
import { WorkspaceActivationStatus } from 'twenty-shared/workspace';
import { In, Repository } from 'typeorm';
@@ -31,7 +30,6 @@ import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/service
import { SignedFileDTO } from 'src/engine/core-modules/file/file-upload/dtos/signed-file.dto';
import { FileUploadService } from 'src/engine/core-modules/file/file-upload/services/file-upload.service';
import { FileService } from 'src/engine/core-modules/file/services/file.service';
import { extractFilenameFromPath } from 'src/engine/core-modules/file/utils/extract-file-id-from-path.utils';
import { OnboardingStatus } from 'src/engine/core-modules/onboarding/enums/onboarding-status.enum';
import {
OnboardingService,
@@ -220,15 +218,10 @@ export class UserResolver {
);
if (workspaceMember && workspaceMember.avatarUrl) {
const avatarUrlToken = this.fileService.encodeFileToken({
filename: extractFilenameFromPath(workspaceMember.avatarUrl),
workspaceMember.avatarUrl = this.fileService.signFileUrl({
url: workspaceMember.avatarUrl,
workspaceId: workspace.id,
});
workspaceMember.avatarUrl = buildSignedPath({
path: workspaceMember.avatarUrl,
token: avatarUrlToken,
});
}
// TODO Refactor to be transpiled to WorkspaceMember instead
@@ -272,15 +265,10 @@ export class UserResolver {
for (const workspaceMemberEntity of workspaceMemberEntities) {
if (workspaceMemberEntity.avatarUrl) {
const avatarUrlToken = this.fileService.encodeFileToken({
filename: extractFilenameFromPath(workspaceMemberEntity.avatarUrl),
workspaceMemberEntity.avatarUrl = this.fileService.signFileUrl({
url: workspaceMemberEntity.avatarUrl,
workspaceId: workspace.id,
});
workspaceMemberEntity.avatarUrl = buildSignedPath({
path: workspaceMemberEntity.avatarUrl,
token: avatarUrlToken,
});
}
// TODO Refactor to be transpiled to WorkspaceMember instead