slack-bot-setting.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. const loggerFactory = require('@alias/logger');
  2. const logger = loggerFactory('growi:routes:apiv3:notification-setting');
  3. const express = require('express');
  4. const { body } = require('express-validator');
  5. const ErrorV3 = require('../../models/vo/error-apiv3');
  6. const router = express.Router();
  7. /**
  8. * @swagger
  9. * tags:
  10. * name: SlackBotSetting
  11. */
  12. /**
  13. * @swagger
  14. *
  15. * components:
  16. * schemas:
  17. * CustomBot:
  18. * description: CustomBot
  19. * type: object
  20. * properties:
  21. * slackSigningSecret:
  22. * type: string
  23. * slackBotToken:
  24. * type: string
  25. * botType:
  26. * type: string
  27. */
  28. module.exports = (crowi) => {
  29. const accessTokenParser = require('../../middlewares/access-token-parser')(crowi);
  30. const loginRequiredStrictly = require('../../middlewares/login-required')(crowi);
  31. const adminRequired = require('../../middlewares/admin-required')(crowi);
  32. const csrf = require('../../middlewares/csrf')(crowi);
  33. const apiV3FormValidator = require('../../middlewares/apiv3-form-validator')(crowi);
  34. const validator = {
  35. CusotmBotSettings: [
  36. body('slackSigningSecret').exists({ checkFalsy: true }).isString(),
  37. body('slackBotToken').exists({ checkFalsy: true }).isString(),
  38. ],
  39. };
  40. async function updateSlackBotSettings(params) {
  41. const { configManager } = crowi;
  42. // update config without publishing S2sMessage
  43. return configManager.updateConfigsInTheSameNamespace('crowi', params, true);
  44. }
  45. /**
  46. * @swagger
  47. *
  48. * /slack-bot-setting/custom-bot-setting/:
  49. * get:
  50. * tags: [CustomBot]
  51. * operationId: getCustomBotSetting
  52. * summary: /slack-bot-setting/custom-bot-setting
  53. * description: Get singingSecret and slackBotToken
  54. * responses:
  55. * 200:
  56. * description: Succeeded to get SigningSecret and SlackBotToken.
  57. */
  58. router.get('/', accessTokenParser, loginRequiredStrictly, adminRequired, async(req, res) => {
  59. const slackBotSettingParams = {
  60. slackBotType: await crowi.configManager.getConfig('crowi', 'slackbot:type'),
  61. // TODO impl when creating official bot
  62. officialBotSettings: {
  63. // TODO impl this after GW-4939
  64. // AccessToken: "tempaccessdatahogehoge",
  65. },
  66. cusotmBotNonProxySettings: {
  67. // TODO impl this after GW-4939
  68. // AccessToken: "tempaccessdatahogehoge",
  69. slackSigningSecret: await crowi.configManager.getConfig('crowi', 'slackbot:signingSecret'),
  70. slackBotToken: await crowi.configManager.getConfig('crowi', 'slackbot:token'),
  71. },
  72. // TODO imple when creating with proxy
  73. cusotmBotWithProxySettings: {
  74. // TODO impl this after GW-4939
  75. // AccessToken: "tempaccessdatahogehoge",
  76. },
  77. };
  78. return res.apiv3({ slackBotSettingParams });
  79. });
  80. /**
  81. * @swagger
  82. *
  83. * /slack-bot-setting/custom-bot-setting/:
  84. * put:
  85. * tags: [CustomBot]
  86. * operationId: putCustomBotSetting
  87. * summary: /slack-bot-setting/custom-bot-setting
  88. * description: Put singingSecret and slackBotToken
  89. * requestBody:
  90. * required: true
  91. * content:
  92. * application/json:
  93. * schema:
  94. * $ref: '#/components/schemas/CustomBot'
  95. * responses:
  96. * 200:
  97. * description: Succeeded to put SigningSecret and SlackBotToken.
  98. */
  99. router.put('/custom-bot-setting',
  100. accessTokenParser, loginRequiredStrictly, adminRequired, csrf, validator.CusotmBotSettings, apiV3FormValidator, async(req, res) => {
  101. const { slackSigningSecret, slackBotToken, botType } = req.body;
  102. const requestParams = {
  103. 'slackbot:signingSecret': slackSigningSecret,
  104. 'slackbot:token': slackBotToken,
  105. 'slackbot:type': botType,
  106. };
  107. try {
  108. await updateSlackBotSettings(requestParams);
  109. const slackBotSettingParams = {
  110. slackSigningSecret: await crowi.configManager.getConfig('crowi', 'slackbot:signingSecret'),
  111. slackBotToken: await crowi.configManager.getConfig('crowi', 'slackbot:token'),
  112. slackBotType: await crowi.configManager.getConfig('crowi', 'slackbot:type'),
  113. };
  114. return res.apiv3({ slackBotSettingParams });
  115. }
  116. catch (error) {
  117. const msg = 'Error occured in updating Custom bot setting';
  118. logger.error('Error', error);
  119. return res.apiv3Err(new ErrorV3(msg, 'update-CustomBotSetting-failed'));
  120. }
  121. });
  122. return router;
  123. };