|
@@ -0,0 +1,73 @@
|
|
|
+import { Request, Response } from 'express'
|
|
|
+import { BaseHttpController, results } from 'inversify-express-utils'
|
|
|
+import { HttpStatusCode } from '@standardnotes/responses'
|
|
|
+import { ControllerContainerInterface, MapperInterface } from '@standardnotes/domain-core'
|
|
|
+
|
|
|
+import { SharedVaultUser } from '../../../Domain/SharedVault/User/SharedVaultUser'
|
|
|
+import { SharedVaultUserHttpRepresentation } from '../../../Mapping/Http/SharedVaultUserHttpRepresentation'
|
|
|
+import { GetSharedVaultUsers } from '../../../Domain/UseCase/GetSharedVaultUsers/GetSharedVaultUsers'
|
|
|
+import { RemoveUserFromSharedVault } from '../../../Domain/UseCase/RemoveUserFromSharedVault/RemoveUserFromSharedVault'
|
|
|
+
|
|
|
+export class HomeServerSharedVaultUsersController extends BaseHttpController {
|
|
|
+ constructor(
|
|
|
+ protected getSharedVaultUsersUseCase: GetSharedVaultUsers,
|
|
|
+ protected removeUserFromSharedVaultUseCase: RemoveUserFromSharedVault,
|
|
|
+ protected sharedVaultUserHttpMapper: MapperInterface<SharedVaultUser, SharedVaultUserHttpRepresentation>,
|
|
|
+ private controllerContainer?: ControllerContainerInterface,
|
|
|
+ ) {
|
|
|
+ super()
|
|
|
+
|
|
|
+ if (this.controllerContainer !== undefined) {
|
|
|
+ this.controllerContainer.register('sync.shared-vault-users.get-users', this.getSharedVaultUsers.bind(this))
|
|
|
+ this.controllerContainer.register(
|
|
|
+ 'sync.shared-vault-users.remove-user',
|
|
|
+ this.removeUserFromSharedVault.bind(this),
|
|
|
+ )
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ async getSharedVaultUsers(request: Request, response: Response): Promise<results.JsonResult> {
|
|
|
+ const result = await this.getSharedVaultUsersUseCase.execute({
|
|
|
+ originatorUuid: response.locals.user.uuid,
|
|
|
+ sharedVaultUuid: request.params.sharedVaultUuid,
|
|
|
+ })
|
|
|
+
|
|
|
+ if (result.isFailed()) {
|
|
|
+ return this.json(
|
|
|
+ {
|
|
|
+ error: {
|
|
|
+ message: result.getError(),
|
|
|
+ },
|
|
|
+ },
|
|
|
+ HttpStatusCode.BadRequest,
|
|
|
+ )
|
|
|
+ }
|
|
|
+
|
|
|
+ return this.json({
|
|
|
+ users: result.getValue().map((sharedVault) => this.sharedVaultUserHttpMapper.toProjection(sharedVault)),
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ async removeUserFromSharedVault(request: Request, response: Response): Promise<results.JsonResult> {
|
|
|
+ const result = await this.removeUserFromSharedVaultUseCase.execute({
|
|
|
+ sharedVaultUuid: request.params.sharedVaultUuid,
|
|
|
+ userUuid: request.params.userUuid,
|
|
|
+ originatorUuid: response.locals.user.uuid,
|
|
|
+ })
|
|
|
+
|
|
|
+ if (result.isFailed()) {
|
|
|
+ return this.json(
|
|
|
+ {
|
|
|
+ error: {
|
|
|
+ message: result.getError(),
|
|
|
+ },
|
|
|
+ },
|
|
|
+ HttpStatusCode.BadRequest,
|
|
|
+ )
|
|
|
+ }
|
|
|
+
|
|
|
+ return this.json({
|
|
|
+ success: true,
|
|
|
+ })
|
|
|
+ }
|
|
|
+}
|