Annotate

mod_flags/mod_flags.lua @ 6310:30adcea825c3

mod_conversejs: Fix hostname set as default username (thanks roughnecks) In login mode, it seems jid is used as default value in the login field but it was only needed in anonymous mode.
author Kim Alvefur <zash@zash.se>
date Wed, 18 Jun 2025 14:28:38 +0200
parent 6132:ffec70ddbffc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6132
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1 -- This module is only for 0.12, later versions have mod_flags bundled
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2 --% conflicts: mod_flags
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4 local flags_map;
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5 if prosody.process_type ~= "prosodyctl" then
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6 flags_map = module:open_store("account_flags", "map");
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7 end
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9 -- API
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11 function add_flag(username, flag, comment) -- luacheck: ignore 131/add_flag
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
12 local flag_data = {
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
13 when = os.time();
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
14 comment = comment;
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
15 };
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
16
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
17 local ok, err = flags_map:set(username, flag, flag_data);
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
18 if not ok then
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
19 return nil, err;
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
20 end
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
21
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
22 module:fire_event("user-flag-added/"..flag, {
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
23 user = username;
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
24 flag = flag;
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
25 data = flag_data;
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
26 });
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
27
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
28 return true;
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
29 end
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
30
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
31 function remove_flag(username, flag) -- luacheck: ignore 131/remove_flag
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
32 local ok, err = flags_map:set(username, flag, nil);
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
33 if not ok then
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
34 return nil, err;
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
35 end
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
36
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
37 module:fire_event("user-flag-removed/"..flag, {
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
38 user = username;
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
39 flag = flag;
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
40 });
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
41
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
42 return true;
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
43 end
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
44
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
45 function has_flag(username, flag) -- luacheck: ignore 131/has_flag
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
46 local ok, err = flags_map:get(username, flag);
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
47 if not ok and err then
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
48 error("Failed to check flags for user: "..err);
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
49 end
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
50 return not not ok;
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
51 end
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
52
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
53 function get_flag_info(username, flag) -- luacheck: ignore 131/get_flag_info
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
54 return flags_map:get(username, flag);
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
55 end
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
56
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
57
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
58 -- Migration from mod_firewall marks
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
59
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
60 local function migrate_marks(host)
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
61 local usermanager = require "core.usermanager";
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
62
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
63 local flag_storage = module:open_store("account_flags");
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
64 local mark_storage = module:open_store("firewall_marks");
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
65
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
66 local migration_comment = "Migrated from mod_firewall marks at "..os.date("%Y-%m-%d %R");
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
67
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
68 local migrated, empty, errors = 0, 0, 0;
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
69 for username in usermanager.users(host) do
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
70 local marks, err = mark_storage:get(username);
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
71 if marks then
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
72 local flags = {};
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
73 for mark_name, mark_timestamp in pairs(marks) do
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
74 flags[mark_name] = {
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
75 when = mark_timestamp;
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
76 comment = migration_comment;
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
77 };
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
78 end
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
79 local saved_ok, saved_err = flag_storage:set(username, flags);
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
80 if saved_ok then
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
81 prosody.log("error", "Failed to save flags for %s: %s", username, saved_err);
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
82 migrated = migrated + 1;
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
83 else
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
84 errors = errors + 1;
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
85 end
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
86 elseif err then
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
87 prosody.log("error", "Failed to load marks for %s: %s", username, err);
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
88 errors = errors + 1;
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
89 else
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
90 empty = empty + 1;
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
91 end
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
92 end
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
93
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
94 print(("Finished - %d migrated, %d users with no marks, %d errors"):format(migrated, empty, errors));
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
95 end
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
96
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
97 function module.command(arg)
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
98 local storagemanager = require "core.storagemanager";
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
99 local usermanager = require "core.usermanager";
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
100 local jid = require "util.jid";
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
101 local warn = require"util.prosodyctl".show_warning;
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
102
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
103 local command = arg[1];
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
104 if not command then
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
105 warn("Valid subcommands: migrate_marks");
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
106 return 0;
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
107 end
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
108 table.remove(arg, 1);
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
109
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
110 local node, host = jid.prepped_split(arg[1]);
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
111 if not host then
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
112 warn("Please specify a host or JID after the command");
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
113 return 1;
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
114 elseif not prosody.hosts[host] then
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
115 warn("Unknown host: "..host);
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
116 return 1;
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
117 end
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
118
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
119 table.remove(arg, 1);
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
120
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
121 module.host = host; -- luacheck: ignore 122
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
122 storagemanager.initialize_host(host);
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
123 usermanager.initialize_host(host);
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
124
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
125 flags_map = module:open_store("account_flags", "map");
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
126
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
127 if command == "migrate_marks" then
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
128 migrate_marks(host);
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
129 return 0;
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
130 elseif command == "find" then
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
131 local flag = assert(arg[1], "expected argument: flag");
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
132 local flags = module:open_store("account_flags", "map");
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
133 local users_with_flag = flags:get_all(flag);
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
134
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
135 local c = 0;
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
136 for user, flag_data in pairs(users_with_flag) do
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
137 print(user, os.date("%Y-%m-%d %R", flag_data.when), flag_data.comment or "");
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
138 c = c + 1;
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
139 end
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
140
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
141 print(("%d accounts listed"):format(c));
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
142 return 1;
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
143 elseif command == "add" then
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
144 local username = assert(node, "expected a user JID, got "..host);
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
145 local flag = assert(arg[1], "expected argument: flag");
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
146 local comment = arg[2];
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
147
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
148 local ok, err = add_flag(username, flag, comment);
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
149 if not ok then
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
150 print("Failed to add flag: "..err);
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
151 return 1;
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
152 end
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
153
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
154 print("Flag added");
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
155 return 1;
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
156 elseif command == "remove" then
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
157 local username = assert(node, "expected a user JID, got "..host);
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
158 local flag = assert(arg[1], "expected argument: flag");
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
159
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
160 local ok, err = remove_flag(username, flag);
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
161 if not ok then
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
162 print("Failed to remove flag: "..err);
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
163 return 1;
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
164 end
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
165
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
166 print("Flag removed");
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
167 return 1;
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
168 elseif command == "list" then
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
169 local username = assert(node, "expected a user JID, got "..host);
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
170
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
171 local c = 0;
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
172
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
173 local flags = module:open_store("account_flags");
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
174 local user_flags, err = flags:get(username);
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
175
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
176 if not user_flags and err then
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
177 print("Unable to list flags: "..err);
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
178 return 1;
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
179 end
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
180
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
181 if user_flags then
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
182 for flag_name, flag_data in pairs(user_flags) do
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
183 print(flag_name, os.date("%Y-%m-%d %R", flag_data.when), flag_data.comment or "");
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
184 c = c + 1;
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
185 end
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
186 end
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
187
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
188 print(("%d flags listed"):format(c));
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
189 return 0;
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
190 else
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
191 warn("Unknown command: %s", command);
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
192 return 1;
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
193 end
ffec70ddbffc mod_flags: trunk version backported to 0.12
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
194 end