Skip to content

Commit 00e1d89

Browse files
committed
Fix emailThread not loading and rest batch api forbidden
1 parent 8588612 commit 00e1d89

File tree

6 files changed

+37
-16
lines changed

6 files changed

+37
-16
lines changed

packages/twenty-server/src/engine/api/rest/core/controllers/rest-api-core-batch.controller.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@ import { Request, Response } from 'express';
44

55
import { RestApiCoreService } from 'src/engine/api/rest/core/rest-api-core.service';
66
import { cleanGraphQLResponse } from 'src/engine/api/rest/utils/clean-graphql-response.utils';
7+
import { JwtAuthGuard } from 'src/engine/guards/jwt-auth.guard';
78
import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard';
89

910
@Controller('rest/batch/*')
10-
@UseGuards(WorkspaceAuthGuard)
11+
@UseGuards(JwtAuthGuard, WorkspaceAuthGuard)
1112
export class RestApiCoreBatchController {
1213
constructor(private readonly restApiCoreService: RestApiCoreService) {}
1314

packages/twenty-server/src/engine/core-modules/auth/auth.resolver.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -115,8 +115,12 @@ export class AuthResolver {
115115
@UseGuards(WorkspaceAuthGuard, UserAuthGuard)
116116
async generateTransientToken(
117117
@AuthUser() user: User,
118+
@AuthWorkspace() workspace: Workspace,
118119
): Promise<TransientToken | void> {
119-
const workspaceMember = await this.userService.loadWorkspaceMember(user);
120+
const workspaceMember = await this.userService.loadWorkspaceMember(
121+
user,
122+
workspace,
123+
);
120124

121125
if (!workspaceMember) {
122126
return;

packages/twenty-server/src/engine/core-modules/auth/services/auth.service.ts

+6-3
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,12 @@ import { UserExists } from 'src/engine/core-modules/auth/dto/user-exists.entity'
3232
import { Verify } from 'src/engine/core-modules/auth/dto/verify.entity';
3333
import { WorkspaceInviteHashValid } from 'src/engine/core-modules/auth/dto/workspace-invite-hash-valid.entity';
3434
import { SignInUpService } from 'src/engine/core-modules/auth/services/sign-in-up.service';
35+
import { EmailService } from 'src/engine/core-modules/email/email.service';
36+
import { EnvironmentService } from 'src/engine/core-modules/environment/environment.service';
3537
import { WorkspaceMember } from 'src/engine/core-modules/user/dtos/workspace-member.dto';
3638
import { UserService } from 'src/engine/core-modules/user/services/user.service';
3739
import { User } from 'src/engine/core-modules/user/user.entity';
3840
import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity';
39-
import { EmailService } from 'src/engine/core-modules/email/email.service';
40-
import { EnvironmentService } from 'src/engine/core-modules/environment/environment.service';
4141

4242
import { TokenService } from './token.service';
4343

@@ -150,7 +150,10 @@ export class AuthService {
150150

151151
// passwordHash is hidden for security reasons
152152
user.passwordHash = '';
153-
const workspaceMember = await this.userService.loadWorkspaceMember(user);
153+
const workspaceMember = await this.userService.loadWorkspaceMember(
154+
user,
155+
user.defaultWorkspace,
156+
);
154157

155158
if (workspaceMember) {
156159
user.workspaceMember = workspaceMember as WorkspaceMember;

packages/twenty-server/src/engine/core-modules/messaging/timeline-messaging.resolver.ts

+12-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ import { TimelineThreadsWithTotal } from 'src/engine/core-modules/messaging/dtos
99
import { GetMessagesService } from 'src/engine/core-modules/messaging/services/get-messages.service';
1010
import { UserService } from 'src/engine/core-modules/user/services/user.service';
1111
import { User } from 'src/engine/core-modules/user/user.entity';
12+
import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity';
1213
import { AuthUser } from 'src/engine/decorators/auth/auth-user.decorator';
14+
import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator';
1315
import { UserAuthGuard } from 'src/engine/guards/user-auth.guard';
1416
import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard';
1517

@@ -50,9 +52,13 @@ export class TimelineMessagingResolver {
5052
@Query(() => TimelineThreadsWithTotal)
5153
async getTimelineThreadsFromPersonId(
5254
@AuthUser() user: User,
55+
@AuthWorkspace() workspace: Workspace,
5356
@Args() { personId, page, pageSize }: GetTimelineThreadsFromPersonIdArgs,
5457
) {
55-
const workspaceMember = await this.userService.loadWorkspaceMember(user);
58+
const workspaceMember = await this.userService.loadWorkspaceMember(
59+
user,
60+
workspace,
61+
);
5662

5763
if (!workspaceMember) {
5864
return;
@@ -72,9 +78,13 @@ export class TimelineMessagingResolver {
7278
@Query(() => TimelineThreadsWithTotal)
7379
async getTimelineThreadsFromCompanyId(
7480
@AuthUser() user: User,
81+
@AuthWorkspace() workspace: Workspace,
7582
@Args() { companyId, page, pageSize }: GetTimelineThreadsFromCompanyIdArgs,
7683
) {
77-
const workspaceMember = await this.userService.loadWorkspaceMember(user);
84+
const workspaceMember = await this.userService.loadWorkspaceMember(
85+
user,
86+
workspace,
87+
);
7888

7989
if (!workspaceMember) {
8090
return;

packages/twenty-server/src/engine/core-modules/user/services/user.service.ts

+4-7
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ import { TypeOrmQueryService } from '@ptc-org/nestjs-query-typeorm';
66
import { Repository } from 'typeorm';
77

88
import { TypeORMService } from 'src/database/typeorm/typeorm.service';
9+
import { ObjectRecordDeleteEvent } from 'src/engine/core-modules/event-emitter/types/object-record-delete.event';
910
import { User } from 'src/engine/core-modules/user/user.entity';
1011
import { WorkspaceService } from 'src/engine/core-modules/workspace/services/workspace.service';
1112
import {
1213
Workspace,
1314
WorkspaceActivationStatus,
1415
} from 'src/engine/core-modules/workspace/workspace.entity';
15-
import { ObjectRecordDeleteEvent } from 'src/engine/core-modules/event-emitter/types/object-record-delete.event';
1616
import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service';
1717
import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager';
1818
import { WorkspaceEventEmitter } from 'src/engine/workspace-event-emitter/workspace-event-emitter';
@@ -32,17 +32,14 @@ export class UserService extends TypeOrmQueryService<User> {
3232
super(userRepository);
3333
}
3434

35-
async loadWorkspaceMember(user: User) {
36-
if (
37-
user.defaultWorkspace.activationStatus !==
38-
WorkspaceActivationStatus.ACTIVE
39-
) {
35+
async loadWorkspaceMember(user: User, workspace: Workspace) {
36+
if (workspace.activationStatus !== WorkspaceActivationStatus.ACTIVE) {
4037
return null;
4138
}
4239

4340
const workspaceMemberRepository =
4441
await this.twentyORMGlobalManager.getRepositoryForWorkspace<WorkspaceMemberWorkspaceEntity>(
45-
user.defaultWorkspaceId,
42+
workspace.id,
4643
'workspaceMember',
4744
);
4845

packages/twenty-server/src/engine/core-modules/user/user.resolver.ts

+8-2
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,14 @@ export class UserResolver {
9797
@ResolveField(() => WorkspaceMember, {
9898
nullable: true,
9999
})
100-
async workspaceMember(@Parent() user: User): Promise<WorkspaceMember | null> {
101-
const workspaceMember = await this.userService.loadWorkspaceMember(user);
100+
async workspaceMember(
101+
@Parent() user: User,
102+
@AuthWorkspace() workspace: Workspace,
103+
): Promise<WorkspaceMember | null> {
104+
const workspaceMember = await this.userService.loadWorkspaceMember(
105+
user,
106+
workspace,
107+
);
102108

103109
if (workspaceMember && workspaceMember.avatarUrl) {
104110
const avatarUrlToken = await this.fileService.encodeFileToken({

0 commit comments

Comments
 (0)