mod_vcard_command/mod_vcard_command.lua
author Matthew Wild <mwild1@gmail.com>
Sat, 24 Sep 2022 09:26:26 +0100
changeset 5063 5f1120c284c5
parent 3030 b2c9b832612b
permissions -rw-r--r--
mod_cloud_notify_extensions: Add note about dependency Noting here because people might not click through to see it on the mod_cloud_notify_encrypted page.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3029
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
     1
-----------------------------------------------------------
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
     2
-- mod_vcard_command: Manage vcards through prosodyctl
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
     3
-- version 0.02
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
     4
-----------------------------------------------------------
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
     5
-- Copyright (C) 2013 Stefan `Sec` Zehl
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
     6
--
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
     7
-- This project is MIT/X11 licensed. Please see the
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
     8
-- COPYING file in the source package for more information.
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
     9
-----------------------------------------------------------
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    10
3030
b2c9b832612b mod_vcard_command: Tweak to not rely on legacy module() behavior
Kim Alvefur <zash@zash.se>
parents: 3029
diff changeset
    11
function module.load()
3029
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    12
        module:log("error", "Do not load this module in Prosody");
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    13
        module.host = "*";
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    14
        return;
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    15
end
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    16
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    17
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    18
-- Workaround for lack of util.startup...
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    19
_G.bare_sessions = _G.bare_sessions or {};
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    20
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    21
local storagemanager = require "core.storagemanager";
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    22
local datamanager = require "util.datamanager";
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    23
local xml = require "util.xml";
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    24
local jid = require "util.jid";
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    25
local warn = prosodyctl.show_warning;
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    26
local st = require "util.stanza"
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    27
-- local vcards = module:open_store("vcard");
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    28
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    29
-- Print anything - including nested tables
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    30
function table_print (tt, indent, done)
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    31
  done = done or {}
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    32
  indent = indent or 0
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    33
  if type(tt) == "table" then
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    34
    for key, value in pairs (tt) do
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    35
      io.write(string.rep (" ", indent)) -- indent it
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    36
      if type (value) == "table" and not done [value] then
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    37
        done [value] = true
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    38
        io.write(string.format("[%s] => table\n", tostring (key)));
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    39
        io.write(string.rep (" ", indent+4)) -- indent it
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    40
        io.write("(\n");
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    41
        table_print (value, indent + 7, done)
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    42
        io.write(string.rep (" ", indent+4)) -- indent it
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    43
        io.write(")\n");
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    44
      else
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    45
        io.write(string.format("[%s] => %s\n",
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    46
            tostring (key), tostring(value)))
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    47
      end
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    48
    end
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    49
  else
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    50
    io.write(tt .. "\n")
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    51
  end
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    52
end
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    53
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    54
-- Make a *one-way* subscription. User will see when contact is online,
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    55
-- contact will not see when user is online.
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    56
function vcard_get(user_jid)
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    57
        local user_username, user_host = jid.split(user_jid);
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    58
        if not hosts[user_host] then
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    59
                warn("The host '%s' is not configured for this server.", user_host);
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    60
                return;
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    61
        end
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    62
        storagemanager.initialize_host(user_host);
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    63
	local vCard;
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    64
	vCard = st.deserialize(datamanager.load(user_username, user_host, "vcard"));
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    65
	if vCard then
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    66
		print(vCard);
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    67
	else
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    68
		warn("The user '%s' has no vCard configured.",user_jid);
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    69
	end
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    70
end
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    71
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    72
function vcard_set(user_jid, file)
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    73
        local user_username, user_host = jid.split(user_jid);
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    74
        if not hosts[user_host] then
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    75
                warn("The host '%s' is not configured for this server.", user_host);
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    76
                return;
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    77
        end
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    78
        storagemanager.initialize_host(user_host);
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    79
	local f = io.input(file);
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    80
	local xmldata=io.read("*all");
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    81
	io.close(f);
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    82
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    83
	local vCard=st.preserialize(xml.parse(xmldata));
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    84
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    85
	if vCard then
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    86
		datamanager.store(user_username, user_host, "vcard", vCard);
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    87
	else
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    88
		warn("Could not parse the file.");
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    89
	end
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    90
end
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    91
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    92
function vcard_delete(user_jid)
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    93
        local user_username, user_host = jid.split(user_jid);
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    94
        if not hosts[user_host] then
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    95
                warn("The host '%s' is not configured for this server.", user_host);
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    96
                return;
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    97
        end
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    98
        storagemanager.initialize_host(user_host);
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
    99
	datamanager.store(user_username, user_host, "vcard", nil);
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
   100
end
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
   101
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
   102
function module.command(arg)
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
   103
        local command = arg[1];
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
   104
        if not command then
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
   105
                warn("Valid subcommands: get | set | delete ");
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
   106
                return 0;
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
   107
        end
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
   108
        table.remove(arg, 1);
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
   109
        if command == "get" then
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
   110
                vcard_get(arg[1]);
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
   111
                return 0;
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
   112
        elseif command == "set" then
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
   113
                vcard_set(arg[1], arg[2]);
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
   114
                return 0;
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
   115
        elseif command == "delete" then
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
   116
                vcard_delete(arg[1]);
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
   117
                return 0;
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
   118
        else
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
   119
                warn("Unknown command: %s", command);
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
   120
                return 1;
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
   121
        end
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
   122
        return 0;
5b8983e100da mod_vcard_command: a simplistic way to get and set vcard data for registered users
Stefan `Sec` Zehl <sec@42.org>
parents:
diff changeset
   123
end