UNPKG

3.38 kBtext/coffeescriptView Raw
1# Description:
2# enable http listener for Phabricator feed_http
3#
4# Configuration:
5# PHABRICATOR_URL
6# PHABRICATOR_API_KEY
7#
8# Urls:
9# /hubot/phabs/feeds
10#
11# Commands:
12# hubot phab <user> set alerts - private messages sent to user on task subscribed or owned
13# hubot phab me set alerts - private messages sent to user on task subscribed or owned
14# hubot phab <user> unset alerts - remove an alert flag for a user
15# hubot phab me unset alerts - remove an alert flag for the caller
16#
17# Author:
18# mose
19#
20# Notes:
21# It's advised to protect this endpoint using
22# hubot-restrict-ip https://github.com/Gandi/hubot-restrict-ip
23# or a nginx/apache proxy
24#
25# Examples:
26# curl -XPOST -H "Content-Type: application/json" -d @test/samples/payload2 \
27# http://localhost:8080/Hubot/phabs/feeds
28
29Phabricator = require '../lib/phabricator'
30module.exports = (robot) ->
31
32 robot.phab ?= new Phabricator robot, process.env
33 phab = robot.phab
34
35 # hubot phab <user> set alerts - private messages sent to user on task subscribed or owned
36 # hubot phab me set alerts - private messages sent to user on task subscribed or owned
37 robot.respond /ph(?:ab)? ([^ ]*) set alerts *$/, (msg) ->
38 assigned = msg.match[1]
39 if assigned is 'me'
40 perm = 'phuser'
41 assigned = msg.envelope.user.name
42 else
43 perm = 'phadmin'
44 phab.getPermission(msg.envelope.user, perm)
45 .then ->
46 phab.getUser(msg.envelope.user, { name: assigned })
47 .then (userPhid) ->
48 phab.setAlerts(assigned, userPhid)
49 .then ->
50 if assigned is msg.envelope.user.name
51 msg.send 'Ok, you will now receive private messages when your owned' +
52 ' or subscribed items are modified.'
53 else
54 msg.send "Ok, #{assigned} will now receive private messages when their owned" +
55 ' or subscribed items are modified.'
56 .catch (e) ->
57 msg.send e
58 msg.finish()
59
60 # hubot phab <user> unset alerts - remove an alert flag for user
61 # hubot phab me unset alerts - remove an alert flag for the caller
62 robot.respond /ph(?:ab)? ([^ ]*) unset alerts *$/, (msg) ->
63 assigned = msg.match[1]
64 if assigned is 'me'
65 perm = 'phuser'
66 assigned = msg.envelope.user.name
67 else
68 perm = 'phadmin'
69 phab.getPermission(msg.envelope.user, perm)
70 .then ->
71 phab.unsetAlerts(assigned)
72 .then ->
73 if assigned is msg.envelope.user.name
74 msg.send 'Ok, you will stop receiving private messages when your owned' +
75 ' or subscribed items are modified.'
76 else
77 msg.send "Ok, #{assigned} will stop receiving private messages when their owned" +
78 ' or subscribed items are modified.'
79 .catch (e) ->
80 msg.send e
81 msg.finish()
82
83 robot.router.post "/#{robot.name}/phabs/feeds", (req, res) ->
84 if req.body.storyID?
85 phab.getFeed(req.body)
86 .then (announce) ->
87 for room in announce.rooms
88 robot.messageRoom room, announce.message
89 for user in announce.users
90 robot.messageRoom user, announce.message
91 robot.logger.debug "#{req.ip} - ok - #{res.statusCode}"
92 .catch (e) ->
93 robot.logger.debug "#{req.ip} - no - #{res.statusCode} - #{e}"
94 res.status(200).end()
95 else
96 robot.logger.debug "#{req.ip} - no - #{res.statusCode} - no story"
97 res.status(422).end()