From 5cf0617403f0ded1a120bf09a1730d49452fddf1 Mon Sep 17 00:00:00 2001 From: Mo Date: Mon, 22 May 2023 07:29:12 -0500 Subject: [PATCH] wip: e2e tests --- packages/api-gateway/bin/server.ts | 1 + .../Bootstrap/ServerContainerConfigLoader.ts | 4 ++-- .../src/Controller/ContactsController.ts | 6 +++--- .../Repository/TypeORMContactRepository.ts | 2 +- .../GroupUser/Service/GroupUserService.ts | 4 ++++ .../Service/GroupUserServiceInterface.ts | 2 ++ .../src/Domain/Item/SaveRule/OwnershipFilter.ts | 17 ++++++++++++----- 7 files changed, 25 insertions(+), 11 deletions(-) diff --git a/packages/api-gateway/bin/server.ts b/packages/api-gateway/bin/server.ts index 35b28f172..9cf2906ec 100644 --- a/packages/api-gateway/bin/server.ts +++ b/packages/api-gateway/bin/server.ts @@ -11,6 +11,7 @@ import '../src/Controller/v1/ActionsController' import '../src/Controller/v1/InvoicesController' import '../src/Controller/v1/RevisionsController' import '../src/Controller/v1/ItemsController' +import '../src/Controller/v1/ContactsController' import '../src/Controller/v1/LinksController' import '../src/Controller/v1/GroupsController' import '../src/Controller/v1/PaymentsController' diff --git a/packages/syncing-server/src/Bootstrap/ServerContainerConfigLoader.ts b/packages/syncing-server/src/Bootstrap/ServerContainerConfigLoader.ts index 8aa972d54..f42716c19 100644 --- a/packages/syncing-server/src/Bootstrap/ServerContainerConfigLoader.ts +++ b/packages/syncing-server/src/Bootstrap/ServerContainerConfigLoader.ts @@ -115,7 +115,7 @@ export class ServerContainerConfigLoader extends CommonContainerConfigLoader { return new SyncItems( context.container.get(TYPES.ItemService), context.container.get(TYPES.GroupService), - context.container.get(TYPES.GroupUserService), + context.container.get(TYPES.GroupInviteService), context.container.get(TYPES.ContactService), ) }) @@ -223,7 +223,7 @@ export class ServerContainerConfigLoader extends CommonContainerConfigLoader { context.container.get(TYPES.ItemProjector), context.container.get(TYPES.ItemConflictProjector), context.container.get(TYPES.SavedItemProjector), - context.container.get(TYPES.GroupUserProjector), + context.container.get(TYPES.GroupInviteProjector), context.container.get(TYPES.ContactProjector), context.container.get(TYPES.GroupProjector), ) diff --git a/packages/syncing-server/src/Controller/ContactsController.ts b/packages/syncing-server/src/Controller/ContactsController.ts index 151a0c5ba..4586680a6 100644 --- a/packages/syncing-server/src/Controller/ContactsController.ts +++ b/packages/syncing-server/src/Controller/ContactsController.ts @@ -7,7 +7,7 @@ import { ProjectorInterface } from '../Projection/ProjectorInterface' import { Contact } from '../Domain/Contact/Model/Contact' import { ContactProjection } from '../Projection/ContactProjection' -@controller('/contacts') +@controller('/contacts', TYPES.AuthMiddleware) export class ContactsController extends BaseHttpController { constructor( @inject(TYPES.ContactService) private contactService: ContactServiceInterface, @@ -16,7 +16,7 @@ export class ContactsController extends BaseHttpController { super() } - @httpPost('/', TYPES.AuthMiddleware) + @httpPost('/') public async createContact( request: Request, response: Response, @@ -36,7 +36,7 @@ export class ContactsController extends BaseHttpController { }) } - @httpDelete('/:contactUuid', TYPES.AuthMiddleware) + @httpDelete('/:contactUuid') public async deleteContact( request: Request, response: Response, diff --git a/packages/syncing-server/src/Domain/Contact/Repository/TypeORMContactRepository.ts b/packages/syncing-server/src/Domain/Contact/Repository/TypeORMContactRepository.ts index 37e3dc37e..d869957af 100644 --- a/packages/syncing-server/src/Domain/Contact/Repository/TypeORMContactRepository.ts +++ b/packages/syncing-server/src/Domain/Contact/Repository/TypeORMContactRepository.ts @@ -42,7 +42,7 @@ export class TypeORMContactRepository implements ContactsRepositoryInterface { } if (query.lastSyncTime) { - queryBuilder.andWhere('group_user.updated_at_timestamp > :lastSyncTime', { + queryBuilder.andWhere('contact.updated_at_timestamp > :lastSyncTime', { lastSyncTime: query.lastSyncTime, }) } diff --git a/packages/syncing-server/src/Domain/GroupUser/Service/GroupUserService.ts b/packages/syncing-server/src/Domain/GroupUser/Service/GroupUserService.ts index 56c8eeadf..b327a0e02 100644 --- a/packages/syncing-server/src/Domain/GroupUser/Service/GroupUserService.ts +++ b/packages/syncing-server/src/Domain/GroupUser/Service/GroupUserService.ts @@ -42,6 +42,10 @@ export class GroupUserService implements GroupUserServiceInterface { return this.groupUserRepository.findAllForUser(dto) } + getUserForGroup(dto: { userUuid: string; groupUuid: string }): Promise { + return this.groupUserRepository.findByUserUuidAndGroupUuid(dto.userUuid, dto.groupUuid) + } + async getGroupUsersForGroup(dto: { groupUuid: string originatorUuid: string diff --git a/packages/syncing-server/src/Domain/GroupUser/Service/GroupUserServiceInterface.ts b/packages/syncing-server/src/Domain/GroupUser/Service/GroupUserServiceInterface.ts index 21f6f6d7c..cb2213b0a 100644 --- a/packages/syncing-server/src/Domain/GroupUser/Service/GroupUserServiceInterface.ts +++ b/packages/syncing-server/src/Domain/GroupUser/Service/GroupUserServiceInterface.ts @@ -11,6 +11,8 @@ export interface GroupUserServiceInterface { getAllGroupUsersForUser(dto: GetGroupUsersDTO): Promise + getUserForGroup(dto: { userUuid: string; groupUuid: string }): Promise + getGroupUsersForGroup(dto: { groupUuid: string originatorUuid: string diff --git a/packages/syncing-server/src/Domain/Item/SaveRule/OwnershipFilter.ts b/packages/syncing-server/src/Domain/Item/SaveRule/OwnershipFilter.ts index 54d099080..2d213d6db 100644 --- a/packages/syncing-server/src/Domain/Item/SaveRule/OwnershipFilter.ts +++ b/packages/syncing-server/src/Domain/Item/SaveRule/OwnershipFilter.ts @@ -6,6 +6,7 @@ import { GroupUserServiceInterface } from '../../GroupUser/Service/GroupUserServ import { ItemHash } from '../ItemHash' import { GroupUserPermission } from '../../GroupUser/Model/GroupUserPermission' import { GroupServiceInterface } from '../../Group/Service/GroupServiceInterface' +import { ContentType } from '@standardnotes/common' export class OwnershipFilter implements ItemSaveRuleInterface { constructor(private groupService: GroupServiceInterface, private groupUserService: GroupUserServiceInterface) {} @@ -52,6 +53,11 @@ export class OwnershipFilter implements ItemSaveRuleInterface { } private async groupItemIsBeingSavedWithValidItemsKey(itemHash: ItemHash): Promise { + const isItemNotEncryptedByItemsKey = itemHash.content_type === ContentType.SharedItemsKey + if (isItemNotEncryptedByItemsKey) { + return true + } + const group = await this.groupService.getGroup({ groupUuid: itemHash.group_uuid as string }) if (!group) { @@ -65,12 +71,13 @@ export class OwnershipFilter implements ItemSaveRuleInterface { userUuid: string, itemHash: ItemHash, ): Promise { - const groupUsers = await this.groupUserService.getAllGroupUsersForUser({ userUuid }) + const groupUser = await this.groupUserService.getUserForGroup({ + userUuid, + groupUuid: itemHash.group_uuid as string, + }) - for (const groupUser of groupUsers) { - if (itemHash.group_uuid === groupUser.groupUuid) { - return groupUser.permissions - } + if (groupUser) { + return groupUser.permissions } return undefined