Comparison

mod_turncredentials/mod_turncredentials.lua @ 1168:0b6b33688b75

mod_turncredentials: use smarter timestamp expiry from draft-uberti-behave-turn-rest-00
author Philipp Hancke <fippo@goodadvice.pages.de>
date Wed, 28 Aug 2013 10:31:15 +0100
parent 1108:2da546139cb5
child 1169:0ae2c250f274
comparison
equal deleted inserted replaced
1167:8ceab2331216 1168:0b6b33688b75
7 local base64 = require "util.encodings".base64; 7 local base64 = require "util.encodings".base64;
8 local os_time = os.time; 8 local os_time = os.time;
9 local secret = module:get_option("turncredentials_secret") or false; 9 local secret = module:get_option("turncredentials_secret") or false;
10 local host = module:get_option("turncredentials_host") or false -- use ip addresses here to avoid further dns lookup latency 10 local host = module:get_option("turncredentials_host") or false -- use ip addresses here to avoid further dns lookup latency
11 local port = module:get_option("turncredentials_port") or 3478 11 local port = module:get_option("turncredentials_port") or 3478
12 local ttl = module:get_option("turncredentials_ttl") or 86400
12 if not (secret and host) then 13 if not (secret and host) then
13 module:log("error", "turncredentials not configured"); 14 module:log("error", "turncredentials not configured");
14 return; 15 return;
15 end 16 end
16 17
17 module:hook("iq/host/urn:xmpp:extdisco:1:services", function(event) 18 module:hook("iq/host/urn:xmpp:extdisco:1:services", function(event)
18 local origin, stanza = event.origin, event.stanza; 19 local origin, stanza = event.origin, event.stanza;
19 if stanza.attr.type ~= "get" or stanza.tags[1].name ~= "services" or origin.type ~= "c2s" then 20 if stanza.attr.type ~= "get" or stanza.tags[1].name ~= "services" or origin.type ~= "c2s" then
20 return; 21 return;
21 end 22 end
22 local now = os_time(); 23 local now = os_time() + ttl;
23 local userpart = tostring(now); 24 local userpart = tostring(now);
24 local nonce = base64.encode(hmac_sha1(secret, tostring(userpart), false)); 25 local nonce = base64.encode(hmac_sha1(secret, tostring(userpart), false));
25 origin.send(st.reply(stanza):tag("services", {xmlns = "urn:xmpp:extdisco:1"}) 26 origin.send(st.reply(stanza):tag("services", {xmlns = "urn:xmpp:extdisco:1"})
26 :tag("service", { type = "stun", host = host, port = port }):up() 27 :tag("service", { type = "stun", host = host, port = port }):up()
27 :tag("service", { type = "turn", host = host, port = port, username = userpart, password = nonce }):up() 28 :tag("service", { type = "turn", host = host, port = port, username = userpart, password = nonce, ttl = ttl}):up()
28 ); 29 );
29 return true; 30 return true;
30 end); 31 end);