mod_private_adhoc/mod_private_adhoc.lua
author Kim Alvefur <zash@zash.se>
Sun, 03 Mar 2024 11:23:40 +0100
changeset 5857 97c9b76867ca
parent 1461 deb79c2357bb
permissions -rwxr-xr-x
mod_log_ringbuffer: Detach event handlers on logging reload (thanks Menel) Otherwise the global event handlers accumulate, one added each time logging is reoladed, and each invocation of the signal or event triggers one dump of each created ringbuffer.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1461
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
     1
-- Prosody IM
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
     2
-- Copyright (C) 2008-2010 Matthew Wild
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
     3
-- Copyright (C) 2008-2010 Waqas Hussain
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
     4
--
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
     5
-- This project is MIT/X11 licensed. Please see the
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
     6
-- COPYING file in the source package for more information.
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
     7
--
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
     8
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
     9
-- Module by Thomas Raschbacher 2014
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
    10
-- lordvan@lordvan.com
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
    11
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
    12
module:depends"adhoc";
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
    13
local dataforms_new = require "util.dataforms".new;
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
    14
local st = require "util.stanza";
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
    15
local jid_split = require "util.jid".split;
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
    16
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
    17
local private_storage = module:open_store("private");
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
    18
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
    19
local private_adhoc_result_layout = dataforms_new{
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
    20
   { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" };
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
    21
   { name = "privatexmldata", type = "text-multi", label = "Private XML data" };
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
    22
};
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
    23
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
    24
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
    25
function private_adhoc_command_handler (self, data, state)
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
    26
   local username, hostname = jid_split(data.from);
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
    27
   local data, err = private_storage:get(username);
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
    28
   local dataString = "";
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
    29
   if not data then
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
    30
      dataString = "No data found.";
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
    31
      if err then dataString = dataString..err end;
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
    32
   else
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
    33
      for key,value in pairs(data) do
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
    34
	 dataString = dataString..tostring(st.deserialize(value)):gsub("><",">\n<")
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
    35
	 dataString = dataString.."\n\n";
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
    36
      end
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
    37
   end
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
    38
   return { status = "completed", result= { layout = private_adhoc_result_layout, values = {privatexmldata=dataString.."\n"}} };
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
    39
end
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
    40
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
    41
local adhoc_new = module:require "adhoc".new;
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
    42
local descriptor = adhoc_new("Query private data", "private_adhoc", private_adhoc_command_handler, "local_user");
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
    43
module:add_item ("adhoc", descriptor);
deb79c2357bb mod_private_adhoc: initial commit of new module
Thomas Raschbacher <lordvan@lordvan.com>
parents:
diff changeset
    44