Software / code / prosody-modules
Annotate
mod_flags/mod_flags.lua @ 6325:6ea80b73d8f2
mod_http_oauth2: Only require redirect URIs when using grant types that need it
In the Device flow, no redirect URI is used because the client instead
receives responses by polling. It is therefore unnecessary to enforce a
requirement that these include redirect URI(s).
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Thu, 03 Jul 2025 15:42:42 +0200 |
| parent | 6132:ffec70ddbffc |
| 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 |