plugins/mod_turn_external.lua
author Matthew Wild <mwild1@gmail.com>
Sun, 17 Mar 2024 10:10:24 +0000
changeset 13464 a688947fab1e
parent 13217 50324f66ca2a
permissions -rw-r--r--
mod_bosh: Set base_type on session This fixes a traceback with mod_saslauth. Ideally we move this to util.session at some point, though.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12981
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12441
diff changeset
     1
local set = require "prosody.util.set";
12286
fe5a87b5972f mod_turn_external: Simplify configuration
Kim Alvefur <zash@zash.se>
parents: 11603
diff changeset
     2
11603
ed405b6357a8 mod_turn_external: Simple module to offer TURN(+STUN) via mod_external_services
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     3
local secret = module:get_option_string("turn_external_secret");
ed405b6357a8 mod_turn_external: Simple module to offer TURN(+STUN) via mod_external_services
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     4
local host = module:get_option_string("turn_external_host", module.host);
ed405b6357a8 mod_turn_external: Simple module to offer TURN(+STUN) via mod_external_services
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     5
local user = module:get_option_string("turn_external_user");
13217
50324f66ca2a plugins: Use integer config API with interval specification where sensible
Kim Alvefur <zash@zash.se>
parents: 13213
diff changeset
     6
local port = module:get_option_integer("turn_external_port", 3478, 1, 65535);
13213
c8d949cf6b09 plugins: Switch to :get_option_period() for time range options
Kim Alvefur <zash@zash.se>
parents: 12981
diff changeset
     7
local ttl = module:get_option_period("turn_external_ttl", "1 day");
12286
fe5a87b5972f mod_turn_external: Simplify configuration
Kim Alvefur <zash@zash.se>
parents: 11603
diff changeset
     8
local tcp = module:get_option_boolean("turn_external_tcp", false);
13217
50324f66ca2a plugins: Use integer config API with interval specification where sensible
Kim Alvefur <zash@zash.se>
parents: 13213
diff changeset
     9
local tls_port = module:get_option_integer("turn_external_tls_port", nil, 1, 65535);
11603
ed405b6357a8 mod_turn_external: Simple module to offer TURN(+STUN) via mod_external_services
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    10
12441
9f5d0b77e3df mod_turn_external: Update status and friendlier handling of missing secret option (fixes #1727)
Matthew Wild <mwild1@gmail.com>
parents: 12294
diff changeset
    11
if not secret then
9f5d0b77e3df mod_turn_external: Update status and friendlier handling of missing secret option (fixes #1727)
Matthew Wild <mwild1@gmail.com>
parents: 12294
diff changeset
    12
	module:log_status("error", "Failed to initialize: the 'turn_external_secret' option is not set in your configuration");
9f5d0b77e3df mod_turn_external: Update status and friendlier handling of missing secret option (fixes #1727)
Matthew Wild <mwild1@gmail.com>
parents: 12294
diff changeset
    13
	return;
9f5d0b77e3df mod_turn_external: Update status and friendlier handling of missing secret option (fixes #1727)
Matthew Wild <mwild1@gmail.com>
parents: 12294
diff changeset
    14
end
11603
ed405b6357a8 mod_turn_external: Simple module to offer TURN(+STUN) via mod_external_services
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    15
12286
fe5a87b5972f mod_turn_external: Simplify configuration
Kim Alvefur <zash@zash.se>
parents: 11603
diff changeset
    16
local services = set.new({ "stun-udp"; "turn-udp" });
fe5a87b5972f mod_turn_external: Simplify configuration
Kim Alvefur <zash@zash.se>
parents: 11603
diff changeset
    17
if tcp then
fe5a87b5972f mod_turn_external: Simplify configuration
Kim Alvefur <zash@zash.se>
parents: 11603
diff changeset
    18
	services:add("stun-tcp");
fe5a87b5972f mod_turn_external: Simplify configuration
Kim Alvefur <zash@zash.se>
parents: 11603
diff changeset
    19
	services:add("turn-tcp");
fe5a87b5972f mod_turn_external: Simplify configuration
Kim Alvefur <zash@zash.se>
parents: 11603
diff changeset
    20
end
12287
b5686debb497 mod_turn_external: Add option to enable TURN over TLS
Kim Alvefur <zash@zash.se>
parents: 12286
diff changeset
    21
if tls_port then
b5686debb497 mod_turn_external: Add option to enable TURN over TLS
Kim Alvefur <zash@zash.se>
parents: 12286
diff changeset
    22
	services:add("turns-tcp");
b5686debb497 mod_turn_external: Add option to enable TURN over TLS
Kim Alvefur <zash@zash.se>
parents: 12286
diff changeset
    23
end
12286
fe5a87b5972f mod_turn_external: Simplify configuration
Kim Alvefur <zash@zash.se>
parents: 11603
diff changeset
    24
11603
ed405b6357a8 mod_turn_external: Simple module to offer TURN(+STUN) via mod_external_services
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    25
module:depends "external_services";
ed405b6357a8 mod_turn_external: Simple module to offer TURN(+STUN) via mod_external_services
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    26
12287
b5686debb497 mod_turn_external: Add option to enable TURN over TLS
Kim Alvefur <zash@zash.se>
parents: 12286
diff changeset
    27
for _, type in ipairs({ "stun"; "turn"; "turns" }) do
11603
ed405b6357a8 mod_turn_external: Simple module to offer TURN(+STUN) via mod_external_services
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    28
	for _, transport in ipairs({"udp"; "tcp"}) do
ed405b6357a8 mod_turn_external: Simple module to offer TURN(+STUN) via mod_external_services
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    29
		if services:contains(type .. "-" .. transport) then
ed405b6357a8 mod_turn_external: Simple module to offer TURN(+STUN) via mod_external_services
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    30
			module:add_item("external_service", {
ed405b6357a8 mod_turn_external: Simple module to offer TURN(+STUN) via mod_external_services
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    31
				type = type;
ed405b6357a8 mod_turn_external: Simple module to offer TURN(+STUN) via mod_external_services
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    32
				transport = transport;
ed405b6357a8 mod_turn_external: Simple module to offer TURN(+STUN) via mod_external_services
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    33
				host = host;
12287
b5686debb497 mod_turn_external: Add option to enable TURN over TLS
Kim Alvefur <zash@zash.se>
parents: 12286
diff changeset
    34
				port = type == "turns" and tls_port or port;
11603
ed405b6357a8 mod_turn_external: Simple module to offer TURN(+STUN) via mod_external_services
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    35
ed405b6357a8 mod_turn_external: Simple module to offer TURN(+STUN) via mod_external_services
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    36
				username = type == "turn" and user or nil;
ed405b6357a8 mod_turn_external: Simple module to offer TURN(+STUN) via mod_external_services
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    37
				secret = type == "turn" and secret or nil;
ed405b6357a8 mod_turn_external: Simple module to offer TURN(+STUN) via mod_external_services
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    38
				ttl = type == "turn" and ttl or nil;
ed405b6357a8 mod_turn_external: Simple module to offer TURN(+STUN) via mod_external_services
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    39
			})
ed405b6357a8 mod_turn_external: Simple module to offer TURN(+STUN) via mod_external_services
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    40
		end
ed405b6357a8 mod_turn_external: Simple module to offer TURN(+STUN) via mod_external_services
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    41
	end
ed405b6357a8 mod_turn_external: Simple module to offer TURN(+STUN) via mod_external_services
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    42
end