WebSocketsController.ts 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import { Request, Response } from 'express'
  2. import { inject } from 'inversify'
  3. import { BaseHttpController, controller, httpDelete, httpPost } from 'inversify-express-utils'
  4. import { Logger } from 'winston'
  5. import { TYPES } from '../../Bootstrap/Types'
  6. import { ServiceProxyInterface } from '../../Service/Http/ServiceProxyInterface'
  7. import { EndpointResolverInterface } from '../../Service/Resolver/EndpointResolverInterface'
  8. @controller('/v1/sockets')
  9. export class WebSocketsController extends BaseHttpController {
  10. constructor(
  11. @inject(TYPES.ServiceProxy) private httpService: ServiceProxyInterface,
  12. @inject(TYPES.EndpointResolver) private endpointResolver: EndpointResolverInterface,
  13. @inject(TYPES.Logger) private logger: Logger,
  14. ) {
  15. super()
  16. }
  17. @httpPost('/tokens', TYPES.AuthMiddleware)
  18. async createWebSocketConnectionToken(request: Request, response: Response): Promise<void> {
  19. await this.httpService.callWebSocketServer(
  20. request,
  21. response,
  22. this.endpointResolver.resolveEndpointOrMethodIdentifier('POST', 'sockets/tokens'),
  23. request.body,
  24. )
  25. }
  26. @httpPost('/connections', TYPES.WebSocketAuthMiddleware)
  27. async createWebSocketConnection(request: Request, response: Response): Promise<void> {
  28. if (!request.headers.connectionid) {
  29. this.logger.error('Could not create a websocket connection. Missing connection id header.')
  30. response.status(400).send('Missing connection id in the request')
  31. return
  32. }
  33. await this.httpService.callWebSocketServer(
  34. request,
  35. response,
  36. this.endpointResolver.resolveEndpointOrMethodIdentifier(
  37. 'POST',
  38. 'sockets/connections/:connectionId',
  39. request.headers.connectionid as string,
  40. ),
  41. request.body,
  42. )
  43. }
  44. @httpDelete('/connections')
  45. async deleteWebSocketConnection(request: Request, response: Response): Promise<void> {
  46. if (!request.headers.connectionid) {
  47. this.logger.error('Could not delete a websocket connection. Missing connection id header.')
  48. response.status(400).send('Missing connection id in the request')
  49. return
  50. }
  51. await this.httpService.callWebSocketServer(
  52. request,
  53. response,
  54. this.endpointResolver.resolveEndpointOrMethodIdentifier(
  55. 'DELETE',
  56. 'sockets/connections/:connectionId',
  57. request.headers.connectionid as string,
  58. ),
  59. request.body,
  60. )
  61. }
  62. }