HomeServerSharedVaultUsersController.ts 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import { Request, Response } from 'express'
  2. import { BaseHttpController, results } from 'inversify-express-utils'
  3. import { HttpStatusCode } from '@standardnotes/responses'
  4. import { ControllerContainerInterface, MapperInterface } from '@standardnotes/domain-core'
  5. import { SharedVaultUser } from '../../../Domain/SharedVault/User/SharedVaultUser'
  6. import { SharedVaultUserHttpRepresentation } from '../../../Mapping/Http/SharedVaultUserHttpRepresentation'
  7. import { GetSharedVaultUsers } from '../../../Domain/UseCase/SharedVaults/GetSharedVaultUsers/GetSharedVaultUsers'
  8. import { RemoveUserFromSharedVault } from '../../../Domain/UseCase/SharedVaults/RemoveUserFromSharedVault/RemoveUserFromSharedVault'
  9. export class HomeServerSharedVaultUsersController extends BaseHttpController {
  10. constructor(
  11. protected getSharedVaultUsersUseCase: GetSharedVaultUsers,
  12. protected removeUserFromSharedVaultUseCase: RemoveUserFromSharedVault,
  13. protected sharedVaultUserHttpMapper: MapperInterface<SharedVaultUser, SharedVaultUserHttpRepresentation>,
  14. private controllerContainer?: ControllerContainerInterface,
  15. ) {
  16. super()
  17. if (this.controllerContainer !== undefined) {
  18. this.controllerContainer.register('sync.shared-vault-users.get-users', this.getSharedVaultUsers.bind(this))
  19. this.controllerContainer.register(
  20. 'sync.shared-vault-users.remove-user',
  21. this.removeUserFromSharedVault.bind(this),
  22. )
  23. }
  24. }
  25. async getSharedVaultUsers(request: Request, response: Response): Promise<results.JsonResult> {
  26. const result = await this.getSharedVaultUsersUseCase.execute({
  27. originatorUuid: response.locals.user.uuid,
  28. sharedVaultUuid: request.params.sharedVaultUuid,
  29. })
  30. if (result.isFailed()) {
  31. return this.json(
  32. {
  33. error: {
  34. message: result.getError(),
  35. },
  36. },
  37. HttpStatusCode.BadRequest,
  38. )
  39. }
  40. return this.json({
  41. users: result.getValue().map((sharedVault) => this.sharedVaultUserHttpMapper.toProjection(sharedVault)),
  42. })
  43. }
  44. async removeUserFromSharedVault(request: Request, response: Response): Promise<results.JsonResult> {
  45. const result = await this.removeUserFromSharedVaultUseCase.execute({
  46. sharedVaultUuid: request.params.sharedVaultUuid,
  47. userUuid: request.params.userUuid,
  48. originatorUuid: response.locals.user.uuid,
  49. })
  50. if (result.isFailed()) {
  51. return this.json(
  52. {
  53. error: {
  54. message: result.getError(),
  55. },
  56. },
  57. HttpStatusCode.BadRequest,
  58. )
  59. }
  60. return this.json({
  61. success: true,
  62. })
  63. }
  64. }