mod_muc_http_defaults/mod_muc_http_defaults.lua
author Matthew Wild <mwild1@gmail.com>
Sat, 24 Sep 2022 09:25:46 +0100
changeset 5062 39c2824c2880
parent 4459 89e54247ade6
child 5343 6d99ddd99694
permissions -rw-r--r--
mod_cloud_notify: README overhaul
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4451
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     1
-- Copyright (C) 2021 Kim Alvefur
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     2
--
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     3
-- This file is MIT licensed. Please see the
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     4
-- COPYING file in the source package for more information.
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     5
--
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     6
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     7
local http = require "net.http";
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     8
local async = require "util.async";
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     9
local uh = require "util.http";
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    10
local jid = require "util.jid";
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    11
local json = require "util.json";
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    12
local st = require "util.stanza";
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    13
4459
89e54247ade6 mod_muc_http_defaults: Add template filters to let you extract room JID parts
Kim Alvefur <zash@zash.se>
parents: 4454
diff changeset
    14
local funcs = {jid_bare = jid.bare; jid_host = jid.host; jid_node = jid.node};
89e54247ade6 mod_muc_http_defaults: Add template filters to let you extract room JID parts
Kim Alvefur <zash@zash.se>
parents: 4454
diff changeset
    15
local render = require"util.interpolation".new("%b{}", uh.urlencode, funcs);
4451
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    16
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    17
module:depends"muc";
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    18
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    19
local url_template = assert(module:get_option_string("muc_create_api_url", nil), "'muc_create_api_url' is a required option");
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    20
local apiauth = module:get_option_string("muc_create_api_auth", nil);
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    21
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    22
local ex = {
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    23
	headers = {
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    24
		accept = "application/json";
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    25
		authorization = apiauth;
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    26
	}
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    27
};
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    28
4452
5879ca1f7853 mod_muc_http_defaults: Remove fancy to be 0.11-compatible
Kim Alvefur <zash@zash.se>
parents: 4451
diff changeset
    29
local problems = {
5879ca1f7853 mod_muc_http_defaults: Remove fancy to be 0.11-compatible
Kim Alvefur <zash@zash.se>
parents: 4451
diff changeset
    30
		format = "API server returned invalid data, see logs",
5879ca1f7853 mod_muc_http_defaults: Remove fancy to be 0.11-compatible
Kim Alvefur <zash@zash.se>
parents: 4451
diff changeset
    31
		config = "A problem occured while creating the room, see logs",
5879ca1f7853 mod_muc_http_defaults: Remove fancy to be 0.11-compatible
Kim Alvefur <zash@zash.se>
parents: 4451
diff changeset
    32
};
4451
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    33
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    34
local function apply_config(room, settings)
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    35
	local affiliations = settings.affiliations;
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    36
	if type(affiliations) == "table" then
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    37
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    38
		-- COMPAT the room creator is unconditionally made 'owner'
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    39
		-- clear existing affiliation
4454
5f27bda5de80 mod_muc_http_defaults: Fix resetting affiliations (it's plural)
Kim Alvefur <zash@zash.se>
parents: 4453
diff changeset
    40
		for existing_affiliation in pairs(room._affiliations) do
4451
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    41
			room:set_affiliation(true, existing_affiliation, "none");
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    42
		end
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    43
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    44
		if affiliations[1] ~= nil then -- array of ( jid, affiliation, nick )
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    45
			for _, aff in ipairs(affiliations) do
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    46
				if type(aff) == "table" and type(aff.jid) == "string" and (aff.nick == nil or type(aff.nick) == "string") then
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    47
					local prepped_jid = jid.prep(aff.jid);
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    48
					if prepped_jid then
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    49
						local ok, err = room:set_affiliation(true, prepped_jid, aff.affiliation, aff.nick and { nick = aff.nick });
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    50
						if not ok then
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    51
							module:log("error", "Could not set affiliation in %s: %s", room.jid, err);
4452
5879ca1f7853 mod_muc_http_defaults: Remove fancy to be 0.11-compatible
Kim Alvefur <zash@zash.se>
parents: 4451
diff changeset
    52
							return nil, "config";
4451
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    53
						end
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    54
					else
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    55
						module:log("error", "Invalid JID returned from API for %s: %q", room.jid, aff.jid);
4452
5879ca1f7853 mod_muc_http_defaults: Remove fancy to be 0.11-compatible
Kim Alvefur <zash@zash.se>
parents: 4451
diff changeset
    56
						return nil, "format";
4451
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    57
					end
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    58
				else
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    59
					module:log("error", "Invalid affiliation item returned from API for %s: %q", room.jid, aff);
4452
5879ca1f7853 mod_muc_http_defaults: Remove fancy to be 0.11-compatible
Kim Alvefur <zash@zash.se>
parents: 4451
diff changeset
    60
					return nil, "format";
4451
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    61
				end
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    62
			end
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    63
		else -- map of jid : affiliation
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    64
			for user_jid, aff in pairs(affiliations) do
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    65
				if type(user_jid) == "string" and type(aff) == "string" then
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    66
					local prepped_jid = jid.prep(user_jid);
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    67
					if prepped_jid then
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    68
						local ok, err = room:set_affiliation(true, prepped_jid, aff);
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    69
						if not ok then
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    70
							module:log("error", "Could not set affiliation in %s: %s", room.jid, err);
4452
5879ca1f7853 mod_muc_http_defaults: Remove fancy to be 0.11-compatible
Kim Alvefur <zash@zash.se>
parents: 4451
diff changeset
    71
							return nil, "config";
4451
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    72
						end
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    73
					else
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    74
						module:log("error", "Invalid JID returned from API: %q", aff.jid);
4452
5879ca1f7853 mod_muc_http_defaults: Remove fancy to be 0.11-compatible
Kim Alvefur <zash@zash.se>
parents: 4451
diff changeset
    75
						return nil, "format";
4451
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    76
					end
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    77
				end
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    78
			end
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    79
		end
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    80
	elseif affiliations ~= nil then
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    81
		module:log("error", "Invalid affiliations returned from API for %s: %q", room.jid, affiliations);
4452
5879ca1f7853 mod_muc_http_defaults: Remove fancy to be 0.11-compatible
Kim Alvefur <zash@zash.se>
parents: 4451
diff changeset
    82
		return nil, "format", { field = "affiliations" };
4451
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    83
	end
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    84
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    85
	local config = settings.config;
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    86
	if type(config) == "table" then
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    87
		-- TODO reject invalid fields instead of ignoring them
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    88
		if type(config.name) == "string" then room:set_name(config.name); end
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    89
		if type(config.description) == "string" then room:set_description(config.description); end
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    90
		if type(config.language) == "string" then room:set_language(config.language); end
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    91
		if type(config.password) == "string" then room:set_password(config.password); end
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    92
		if type(config.subject) == "string" then room:set_subject(config.subject); end
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    93
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    94
		if type(config.public) == "boolean" then room:set_public(config.public); end
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    95
		if type(config.members_only) == "boolean" then room:set_members_only(config.members_only); end
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    96
		if type(config.allow_member_invites) == "boolean" then room:set_allow_member_invites(config.allow_member_invites); end
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    97
		if type(config.moderated) == "boolean" then room:set_moderated(config.moderated); end
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    98
		if type(config.persistent) == "boolean" then room:set_persistent(config.persistent); end
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    99
		if type(config.changesubject) == "boolean" then room:set_changesubject(config.changesubject); end
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   100
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   101
		if type(config.historylength) == "number" then room:set_historylength(config.historylength); end
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   102
		if type(config.public_jids) == "boolean" then room:set_whois(config.public_jids and "anyone" or "moderators"); end
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   103
		-- Leaving out presence_broadcast for now
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   104
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   105
		-- mod_muc_mam
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   106
		if type(config.archiving) == "boolean" then room._config.archiving = config.archiving; end
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   107
	elseif config ~= nil then
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   108
		module:log("error", "Invalid config returned from API for %s: %q", room.jid, config);
4452
5879ca1f7853 mod_muc_http_defaults: Remove fancy to be 0.11-compatible
Kim Alvefur <zash@zash.se>
parents: 4451
diff changeset
   109
		return nil, "format", { field = "config" };
4451
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   110
	end
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   111
	return true;
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   112
end
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   113
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   114
module:hook("muc-room-pre-create", function(event)
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   115
	local url = render(url_template, event);
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   116
	module:log("debug", "Calling API at %q for room %s", url, event.room.jid);
4452
5879ca1f7853 mod_muc_http_defaults: Remove fancy to be 0.11-compatible
Kim Alvefur <zash@zash.se>
parents: 4451
diff changeset
   117
	local wait, done = async.waiter();
5879ca1f7853 mod_muc_http_defaults: Remove fancy to be 0.11-compatible
Kim Alvefur <zash@zash.se>
parents: 4451
diff changeset
   118
5879ca1f7853 mod_muc_http_defaults: Remove fancy to be 0.11-compatible
Kim Alvefur <zash@zash.se>
parents: 4451
diff changeset
   119
	local ret, err;
4453
c25eef56e9c9 mod_muc_http_defaults: Fix order of http callback arguments
Kim Alvefur <zash@zash.se>
parents: 4452
diff changeset
   120
	http.request(url, ex, function (body, code)
4452
5879ca1f7853 mod_muc_http_defaults: Remove fancy to be 0.11-compatible
Kim Alvefur <zash@zash.se>
parents: 4451
diff changeset
   121
		if math.floor(code / 100) == 2 then
5879ca1f7853 mod_muc_http_defaults: Remove fancy to be 0.11-compatible
Kim Alvefur <zash@zash.se>
parents: 4451
diff changeset
   122
			local parsed, parse_err = json.decode(body);
5879ca1f7853 mod_muc_http_defaults: Remove fancy to be 0.11-compatible
Kim Alvefur <zash@zash.se>
parents: 4451
diff changeset
   123
			if not parsed then
5879ca1f7853 mod_muc_http_defaults: Remove fancy to be 0.11-compatible
Kim Alvefur <zash@zash.se>
parents: 4451
diff changeset
   124
				module:log("debug", "Got invalid JSON from %s: %s", url, parse_err);
5879ca1f7853 mod_muc_http_defaults: Remove fancy to be 0.11-compatible
Kim Alvefur <zash@zash.se>
parents: 4451
diff changeset
   125
				err = problems.format;
5879ca1f7853 mod_muc_http_defaults: Remove fancy to be 0.11-compatible
Kim Alvefur <zash@zash.se>
parents: 4451
diff changeset
   126
			else
5879ca1f7853 mod_muc_http_defaults: Remove fancy to be 0.11-compatible
Kim Alvefur <zash@zash.se>
parents: 4451
diff changeset
   127
				ret = parsed;
5879ca1f7853 mod_muc_http_defaults: Remove fancy to be 0.11-compatible
Kim Alvefur <zash@zash.se>
parents: 4451
diff changeset
   128
			end
5879ca1f7853 mod_muc_http_defaults: Remove fancy to be 0.11-compatible
Kim Alvefur <zash@zash.se>
parents: 4451
diff changeset
   129
		else
5879ca1f7853 mod_muc_http_defaults: Remove fancy to be 0.11-compatible
Kim Alvefur <zash@zash.se>
parents: 4451
diff changeset
   130
			module:log("debug", "Rejected by API: ", body);
5879ca1f7853 mod_muc_http_defaults: Remove fancy to be 0.11-compatible
Kim Alvefur <zash@zash.se>
parents: 4451
diff changeset
   131
			err = "Rejected by API";
5879ca1f7853 mod_muc_http_defaults: Remove fancy to be 0.11-compatible
Kim Alvefur <zash@zash.se>
parents: 4451
diff changeset
   132
		end
5879ca1f7853 mod_muc_http_defaults: Remove fancy to be 0.11-compatible
Kim Alvefur <zash@zash.se>
parents: 4451
diff changeset
   133
5879ca1f7853 mod_muc_http_defaults: Remove fancy to be 0.11-compatible
Kim Alvefur <zash@zash.se>
parents: 4451
diff changeset
   134
		done()
5879ca1f7853 mod_muc_http_defaults: Remove fancy to be 0.11-compatible
Kim Alvefur <zash@zash.se>
parents: 4451
diff changeset
   135
	end);
5879ca1f7853 mod_muc_http_defaults: Remove fancy to be 0.11-compatible
Kim Alvefur <zash@zash.se>
parents: 4451
diff changeset
   136
5879ca1f7853 mod_muc_http_defaults: Remove fancy to be 0.11-compatible
Kim Alvefur <zash@zash.se>
parents: 4451
diff changeset
   137
	wait();
4451
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   138
	if not ret then
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   139
		event.room:destroy();
4452
5879ca1f7853 mod_muc_http_defaults: Remove fancy to be 0.11-compatible
Kim Alvefur <zash@zash.se>
parents: 4451
diff changeset
   140
		event.origin.send(st.error_reply(event.stanza, "cancel", "internal-server-error", err, module.host));
4451
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   141
		return true;
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   142
	end
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   143
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   144
	local configured, err = apply_config(event.room, ret);
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   145
	if not configured then
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   146
		event.room:destroy();
4452
5879ca1f7853 mod_muc_http_defaults: Remove fancy to be 0.11-compatible
Kim Alvefur <zash@zash.se>
parents: 4451
diff changeset
   147
		event.origin.send(st.error_reply(event.stanza, "cancel", "internal-server-error", err, event.room.jid or module.host));
4451
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   148
		return true;
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   149
	end
07aa101a1ae7 mod_muc_http_defaults: Get MUC room config from an API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   150
end, -2);