Mercurial > prosody-modules
comparison mod_turncredentials/mod_turncredentials.lua @ 3642:2bbf655431be
mod_turncredentials: Add parallel implementation of XEP-0215 v0.7
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Fri, 09 Aug 2019 18:59:35 +0200 |
| parents | deb5ece56c49 |
| children | 915c7bd5f754 |
comparison
equal
deleted
inserted
replaced
| 3641:58b49d883f0c | 3642:2bbf655431be |
|---|---|
| 4 | 4 |
| 5 local st = require "util.stanza"; | 5 local st = require "util.stanza"; |
| 6 local hmac_sha1 = require "util.hashes".hmac_sha1; | 6 local hmac_sha1 = require "util.hashes".hmac_sha1; |
| 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 datetime = require "util.datetime".datetime; | |
| 9 local secret = module:get_option_string("turncredentials_secret"); | 10 local secret = module:get_option_string("turncredentials_secret"); |
| 10 local host = module:get_option_string("turncredentials_host"); -- use ip addresses here to avoid further dns lookup latency | 11 local host = module:get_option_string("turncredentials_host"); -- use ip addresses here to avoid further dns lookup latency |
| 11 local port = module:get_option_number("turncredentials_port", 3478); | 12 local port = module:get_option_number("turncredentials_port", 3478); |
| 12 local ttl = module:get_option_number("turncredentials_ttl", 86400); | 13 local ttl = module:get_option_number("turncredentials_ttl", 86400); |
| 13 if not (secret and host) then | 14 if not (secret and host) then |
| 29 :tag("service", { type = "stun", host = host, port = ("%d"):format(port) }):up() | 30 :tag("service", { type = "stun", host = host, port = ("%d"):format(port) }):up() |
| 30 :tag("service", { type = "turn", host = host, port = ("%d"):format(port), username = userpart, password = nonce, ttl = ("%d"):format(ttl) }):up() | 31 :tag("service", { type = "turn", host = host, port = ("%d"):format(port), username = userpart, password = nonce, ttl = ("%d"):format(ttl) }):up() |
| 31 ); | 32 ); |
| 32 return true; | 33 return true; |
| 33 end); | 34 end); |
| 35 | |
| 36 module:add_feature("urn:xmpp:extdisco:2"); | |
| 37 | |
| 38 module:hook("iq-get/host/urn:xmpp:extdisco:2:services", function(event) | |
| 39 local origin, stanza = event.origin, event.stanza; | |
| 40 if origin.type ~= "c2s" then | |
| 41 return; | |
| 42 end | |
| 43 local now = os_time() + ttl; | |
| 44 local userpart = tostring(now); | |
| 45 local nonce = base64.encode(hmac_sha1(secret, tostring(userpart), false)); | |
| 46 origin.send(st.reply(stanza):tag("services", {xmlns = "urn:xmpp:extdisco:2"}) | |
| 47 :tag("service", { type = "stun", host = host, port = ("%d"):format(port) }):up() | |
| 48 :tag("service", { type = "turn", host = host, port = ("%d"):format(port), username = userpart, password = nonce, expires = datetime(ttl), restricted = "1" }):up() | |
| 49 ); | |
| 50 return true; | |
| 51 end); |
