diff options
author | Jonas Wielicki <jonas@wielicki.name> | 2018-08-05 11:44:49 +0200 |
---|---|---|
committer | Jonas Wielicki <jonas@wielicki.name> | 2018-08-05 11:44:49 +0200 |
commit | 206ca2fd0d5e76f492b715fb801707bd7ed09282 (patch) | |
tree | 786a7eab965d6e51391be30376a047c19beddfb8 /plugins/mod_pubsub/pubsub.lib.lua | |
parent | 9487ed1cca061b54343b5307c48feebfb7a47fa1 (diff) | |
download | prosody-206ca2fd0d5e76f492b715fb801707bd7ed09282.tar.gz prosody-206ca2fd0d5e76f492b715fb801707bd7ed09282.zip |
pubsub.lib: auto-create node with publish-options if autocreation is enabled
Diffstat (limited to 'plugins/mod_pubsub/pubsub.lib.lua')
-rw-r--r-- | plugins/mod_pubsub/pubsub.lib.lua | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/plugins/mod_pubsub/pubsub.lib.lua b/plugins/mod_pubsub/pubsub.lib.lua index 3fcf5255..1fd5a39e 100644 --- a/plugins/mod_pubsub/pubsub.lib.lua +++ b/plugins/mod_pubsub/pubsub.lib.lua @@ -552,8 +552,18 @@ function handlers.set_publish(origin, stanza, publish, service) -- Ensure that the node configuration matches the values in publish-options local publish_options_form = publish_options:get_child("x", "jabber:x:data"); local required_config = config_from_xep0060(node_config_form:data(publish_options_form), true); - local node_config = service:get_node_config(node, stanza.attr.from); - if not check_preconditions(node_config, required_config) then + local node_accessible, node_config = service:get_node_config(node, stanza.attr.from); + if node_accessible == false and service.config.autocreate_on_publish then + module:log("debug", "creating node %s with publish-options", node) + -- we need to create the node here so that it is configured + -- correctly + local created, err = service:create(node, stanza.attr.from, required_config) + if not created then + local reply = pubsub_error_reply(stanza, err); + origin.send(reply); + return true; + end + elseif not check_preconditions(node_config, required_config) then local reply = pubsub_error_reply(stanza, "precondition-not-met"); origin.send(reply); return true; |