/
echo_hookmanagement.lua
55 lines (47 loc) · 1.94 KB
/
echo_hookmanagement.lua
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
-- fct to split a string by a delimeter
local function split(s, delimiter)
local result = {}
for match in (s..delimiter):gmatch("(.-)"..delimiter) do
table.insert(result, match)
end
return result
end
local hex_to_char = function(x)
return string.char(tonumber(x, 16))
end
local unescape = function(url)
return url:gsub("%%(%x%x)", hex_to_char)
end
return function(request, next_middleware)
local response = next_middleware()
local hookURL = "SLACK_INCOMING_HOOK_URL"
if(request.uri == '/hook') then
local params = split(request.body,'&')
local decoded_params = {}
-- turn urlencoded string into an object
for i=1,#params do
local p = split(params[i],'=')
decoded_params[p[1]] = p[2]
end
local query = decoded_params['text']
query = unescape(query) -- decode special chars
query = string.gsub(query,"+"," ") -- turn + into spaces
if(string.match(query,"^uber price start=[a-zA-Z0-9_, ]* end=[a-zA-Z0-9_, ]*")) then
console.log("MATCH")
local start_point = string.sub(query,string.find(query, "start=")+6,string.find(query, "end=")-2)
local end_point = string.sub(query,string.find(query, "end=")+4)
start_point = string.gsub(start_point," ","%%20")
end_point = string.gsub(end_point," ","%%20")
local url = "APITOOLS_UBER_SERVICE_URL/estimates/price?start_point="..start_point.."&end_point="..end_point.."&channel="..decoded_params.channel_name
console.log(url)
local r = http.get(url)
console.log(r)
else
console.log("DONT MATCH")
msg = 'Malformated request. Format is: `uber price start=START_ADDRESS end=END_ADDRESS`'
local r = http.json.post(hookURL,'{"text": "'..msg..'","channel":"#'.. decoded_params.channel_name..'"}')
console.log(r)
end
end
return response
end