UsersController.ts 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. import { Request, Response } from 'express'
  2. import { inject } from 'inversify'
  3. import {
  4. all,
  5. BaseHttpController,
  6. controller,
  7. httpDelete,
  8. httpGet,
  9. httpPatch,
  10. httpPost,
  11. httpPut,
  12. results,
  13. } from 'inversify-express-utils'
  14. import { Logger } from 'winston'
  15. import TYPES from '../../Bootstrap/Types'
  16. import { HttpServiceInterface } from '../../Service/Http/HttpServiceInterface'
  17. import { TokenAuthenticationMethod } from '../TokenAuthenticationMethod'
  18. @controller('/v1/users', TYPES.StatisticsMiddleware)
  19. export class UsersController extends BaseHttpController {
  20. constructor(
  21. @inject(TYPES.HTTPService) private httpService: HttpServiceInterface,
  22. @inject(TYPES.Logger) private logger: Logger,
  23. ) {
  24. super()
  25. }
  26. @httpPost('/claim-account')
  27. async claimAccount(request: Request, response: Response): Promise<void> {
  28. await this.httpService.callPaymentsServer(request, response, 'api/pro_users/claim-account', request.body)
  29. }
  30. @httpPost('/send-activation-code', TYPES.SubscriptionTokenAuthMiddleware)
  31. async sendActivationCode(request: Request, response: Response): Promise<void> {
  32. await this.httpService.callPaymentsServer(request, response, 'api/pro_users/send-activation-code', request.body)
  33. }
  34. @httpPatch('/:userId', TYPES.AuthMiddleware)
  35. async updateUser(request: Request, response: Response): Promise<void> {
  36. await this.httpService.callAuthServer(request, response, `users/${request.params.userId}`, request.body)
  37. }
  38. @httpPut('/:userUuid/password', TYPES.AuthMiddleware)
  39. async changePassword(request: Request, response: Response): Promise<void> {
  40. this.logger.debug(
  41. '[DEPRECATED] use endpoint /v1/users/:userUuid/attributes/credentials instead of /v1/users/:userUuid/password',
  42. )
  43. await this.httpService.callAuthServer(
  44. request,
  45. response,
  46. `users/${request.params.userUuid}/attributes/credentials`,
  47. request.body,
  48. )
  49. }
  50. @httpPut('/:userUuid/attributes/credentials', TYPES.AuthMiddleware)
  51. async changeCredentials(request: Request, response: Response): Promise<void> {
  52. await this.httpService.callAuthServer(
  53. request,
  54. response,
  55. `users/${request.params.userUuid}/attributes/credentials`,
  56. request.body,
  57. )
  58. }
  59. @httpGet('/:userId/params', TYPES.AuthMiddleware)
  60. async getKeyParams(request: Request, response: Response): Promise<void> {
  61. await this.httpService.callAuthServer(request, response, 'auth/params')
  62. }
  63. @all('/:userId/mfa', TYPES.AuthMiddleware)
  64. async blockMFA(): Promise<results.StatusCodeResult> {
  65. return this.statusCode(401)
  66. }
  67. @httpPost('/:userUuid/integrations/listed', TYPES.AuthMiddleware)
  68. async createListedAccount(request: Request, response: Response): Promise<void> {
  69. await this.httpService.callAuthServer(request, response, 'listed', request.body)
  70. }
  71. @httpPost('/')
  72. async register(request: Request, response: Response): Promise<void> {
  73. await this.httpService.callAuthServer(request, response, 'auth', request.body)
  74. }
  75. @httpGet('/:userUuid/settings', TYPES.AuthMiddleware)
  76. async listSettings(request: Request, response: Response): Promise<void> {
  77. await this.httpService.callAuthServer(request, response, `users/${request.params.userUuid}/settings`)
  78. }
  79. @httpPut('/:userUuid/settings', TYPES.AuthMiddleware)
  80. async putSetting(request: Request, response: Response): Promise<void> {
  81. await this.httpService.callAuthServer(request, response, `users/${request.params.userUuid}/settings`, request.body)
  82. }
  83. @httpGet('/:userUuid/settings/:settingName', TYPES.AuthMiddleware)
  84. async getSetting(request: Request, response: Response): Promise<void> {
  85. await this.httpService.callAuthServer(
  86. request,
  87. response,
  88. `users/${request.params.userUuid}/settings/${request.params.settingName}`,
  89. )
  90. }
  91. @httpDelete('/:userUuid/settings/:settingName', TYPES.AuthMiddleware)
  92. async deleteSetting(request: Request, response: Response): Promise<void> {
  93. await this.httpService.callAuthServer(
  94. request,
  95. response,
  96. `users/${request.params.userUuid}/settings/${request.params.settingName}`,
  97. request.body,
  98. )
  99. }
  100. @httpGet('/:userUuid/subscription-settings/:subscriptionSettingName', TYPES.AuthMiddleware)
  101. async getSubscriptionSetting(request: Request, response: Response): Promise<void> {
  102. await this.httpService.callAuthServer(
  103. request,
  104. response,
  105. `users/${request.params.userUuid}/subscription-settings/${request.params.subscriptionSettingName}`,
  106. )
  107. }
  108. @httpGet('/:userUuid/features', TYPES.AuthMiddleware)
  109. async getFeatures(request: Request, response: Response): Promise<void> {
  110. await this.httpService.callAuthServer(request, response, `users/${request.params.userUuid}/features`)
  111. }
  112. @httpGet('/:userUuid/subscription', TYPES.AuthMiddleware)
  113. async getSubscription(request: Request, response: Response): Promise<void> {
  114. await this.httpService.callAuthServer(request, response, `users/${request.params.userUuid}/subscription`)
  115. }
  116. @httpGet('/subscription', TYPES.SubscriptionTokenAuthMiddleware)
  117. async getSubscriptionBySubscriptionToken(request: Request, response: Response): Promise<void> {
  118. if (response.locals.tokenAuthenticationMethod === TokenAuthenticationMethod.OfflineSubscriptionToken) {
  119. await this.httpService.callAuthServer(request, response, 'offline/users/subscription')
  120. return
  121. }
  122. await this.httpService.callAuthServer(request, response, `users/${response.locals.userUuid}/subscription`)
  123. }
  124. @httpDelete('/:userUuid', TYPES.AuthMiddleware)
  125. async deleteUser(request: Request, response: Response): Promise<void> {
  126. await this.httpService.callPaymentsServer(request, response, 'api/account', request.body)
  127. }
  128. }