forked from sklise/hubot-web
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.coffee
76 lines (61 loc) · 2.36 KB
/
index.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
Robot = require('hubot').Robot
Adapter = require('hubot').Adapter
TextMessage = require('hubot').TextMessage
request = require('request')
string = require("string")
# sendmessageURL domain.com/your/path/ + user.channel
sendMessageUrl = process.env.HUBOT_REST_SEND_URL
class WebAdapter extends Adapter
createUser: (username, room) ->
user = @robot.brain.userForName username
unless user?
id = new Date().getTime().toString()
user = @robot.brain.userForId id
user.name = username
user.room = room
user
send: (user, strings...) ->
if strings.length > 0
data = JSON.stringify({
message: strings.shift(),
from: "#{@robot.name}"
})
# The resulting url will be sendMessageUrl + user.room, so sendMessageUrl must include the slash in the end
url = "#{sendMessageUrl}#{user.room}"
options = {
url: url,
method: 'POST',
body: data,
json: true
}
request options, (err, res, body) ->
if err
console.log "There was an error sending the request to: #{url}"
@send user, strings...
reply: (user, strings...) ->
@send user, strings.map((str) -> "#{user.user.name}: #{str}")...
run: ->
self = @
options = {}
@robot.router.post '/receive/:room', (req, res) ->
user = self.createUser(req.body.from, req.params.room)
if req.body.options
user.options = JSON.parse(req.body.options)
else
user.options = {}
console.log "[#{req.params.room}] #{user.name} => #{req.body.message}"
res.setHeader 'content-type', 'application/json'
res.setHeader 'Access-Control-Allow-Origin', '*'
res.setHeader 'Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'
self.receive new TextMessage(user, req.body.message)
res.end JSON.stringify({status: 'received'})
# For preflight requests (CORS)
@robot.router.options '/receive/:room', (req, res) ->
res.setHeader 'content-type', 'application/json'
res.setHeader 'Access-Control-Allow-Origin', '*'
res.setHeader 'Access-Control-Request-Method', 'POST, OPTIONS'
res.setHeader 'Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'
res.end JSON.stringify({status: 'received'})
self.emit "connected"
exports.use = (robot) ->
new WebAdapter robot