Mercurial > prosody-modules
annotate mod_migrate_lastlog2/mod_migrate_lastlog2.lua @ 6398:9c9889ad4302
mod_unsubscriber: Add MUC support
This catches XEP-0045 Join stanzas and replies with an error telling the
prospective participant that the supposed MUC is gone. The user or their
client can then take action to remove any bookmark or at least disable
autojoin.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sat, 07 Feb 2026 12:25:52 +0100 |
| parents | a4d7fefa4a8b |
| children |
| rev | line source |
|---|---|
|
6231
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 -- This module is based on the shell command code from mod_account_activity |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 local autoremove = module:get_option_boolean("migrate_lastlog2_auto_remove", true); |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 local function do_migration() |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 local store = module:open_store("account_activity", "keyval+"); |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 local lastlog2 = module:open_store("lastlog2", "keyval+"); |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 local n_updated, n_errors, n_skipped = 0, 0, 0; |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 local async = require "prosody.util.async"; |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
12 local p = require "prosody.util.promise".new(function (resolve) |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
13 local async_runner = async.runner(function () |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 local n = 0; |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 for username in lastlog2:items() do |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 local was_error = nil; |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 n = n + 1; |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 if n % 100 == 0 then |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 module:log("debug", "Processed %d...", n); |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 async.sleep(0); |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 end |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 local lastlog2_data = lastlog2:get(username); |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 if lastlog2_data then |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 local current_data, err = store:get(username); |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 if not current_data then |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 if not err then |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 current_data = {}; |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 else |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 n_errors = n_errors + 1; |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
30 end |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
31 end |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 if current_data then |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 local imported_timestamp = current_data.timestamp; |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 local latest; |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 for k, v in pairs(lastlog2_data) do |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 if k ~= "registered" and (not latest or v.timestamp > latest) then |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 latest = v.timestamp; |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 end |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
39 end |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
40 if latest and (not imported_timestamp or imported_timestamp < latest) then |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
41 local ok, err = store:set_key(username, "timestamp", latest); |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
42 if ok then |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
43 n_updated = n_updated + 1; |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
44 else |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
45 module:log("error", "Failed to import %q: %s", username, err); |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
46 was_error = true; |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
47 n_errors = n_errors + 1; |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
48 end |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
49 else |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
50 n_skipped = n_skipped + 1; |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
51 end |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
52 end |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
53 if autoremove and not was_error then |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
54 lastlog2:set(username, nil); |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
55 end |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
56 end |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
57 end |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
58 return resolve(("%d accounts imported, %d errors, %d skipped"):format(n_updated, n_errors, n_skipped)); |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
59 end); |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
60 async_runner:run(true); |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
61 end); |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
62 return p; |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
63 end |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
64 |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
65 function module.ready() |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
66 do_migration(); |
|
a4d7fefa4a8b
mod_migrate_lastlog2: New module to automatically migrate data to mod_account_activity
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
67 end |
