slack.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /**
  2. * slack
  3. */
  4. module.exports = function(crowi) {
  5. 'use strict';
  6. var debug = require('debug')('crowi:util:slack'),
  7. Config = crowi.model('Config'),
  8. Botkit = require('botkit'),
  9. slack = {};
  10. slack.controller = undefined;
  11. slack.createBot = function() {
  12. var bot;
  13. var config = crowi.getConfig();
  14. if (!slack.controller) {
  15. slack.configureSlackApp();
  16. }
  17. if (!slack.controller) {
  18. return false;
  19. }
  20. if (Config.hasSlackToken(config)) {
  21. bot = slack.controller.spawn({token: config.notification['slack:token']});
  22. } else {
  23. bot = slack.controller.spawn();
  24. }
  25. return bot;
  26. };
  27. slack.configureSlackApp = function ()
  28. {
  29. var config = crowi.getConfig();
  30. if (Config.hasSlackConfig(config)) {
  31. slack.controller = Botkit.slackbot();
  32. slack.controller.configureSlackApp({
  33. clientId: config.notification['slack:clientId'],
  34. clientSecret: config.notification['slack:clientSecret'],
  35. redirectUri: slack.getSlackAuthCallbackUrl(),
  36. scopes: ['chat:write:bot']
  37. });
  38. return true;
  39. }
  40. return false;
  41. }
  42. // hmmm
  43. slack.getSlackAuthCallbackUrl = function()
  44. {
  45. var config = crowi.getConfig();
  46. // Web アクセスがきてないと app:url がセットされないので crowi.setupSlack 時にはできない
  47. // cli, bot 系作るときに問題なりそう
  48. return (config.crowi['app:url'] || '') + '/admin/notification/slackAuth';
  49. }
  50. slack.getAuthorizeURL = function () {
  51. if (!slack.controller) {
  52. slack.configureSlackApp();
  53. }
  54. if (!slack.controller) {
  55. return '';
  56. }
  57. return slack.controller.getAuthorizeURL();
  58. }
  59. return slack;
  60. };