Mercurial > prosody-modules
annotate mod_migrate_lastlog2/mod_migrate_lastlog2.lua @ 6274:63ef69b2f046
mod_http_oauth2: Assume Prosody 13.0+ roles are available
Per the README, 0.12 is not supported, so we should not need to worry
about this. Plus it is assumed to be present elsewhere and that would
throw errors.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Wed, 02 Jul 2025 16:15:32 +0200 |
| 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 |
