Mercurial > prosody-modules
view mod_migrate_lastlog2/mod_migrate_lastlog2.lua @ 6237:9d88c3d9eea5
mod_http_oauth2: Enforce the registered grant types
Thus a client can limit itself to certain grant types.
Not sure if this prevents any attacks, but what was the point of
including this in the registration if it was not going to be enforced?
This became easier to do with client_id being available earlier.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Mon, 02 Jun 2025 20:55:20 +0200 |
| parents | a4d7fefa4a8b |
| children |
line wrap: on
line source
-- This module is based on the shell command code from mod_account_activity local autoremove = module:get_option_boolean("migrate_lastlog2_auto_remove", true); local function do_migration() local store = module:open_store("account_activity", "keyval+"); local lastlog2 = module:open_store("lastlog2", "keyval+"); local n_updated, n_errors, n_skipped = 0, 0, 0; local async = require "prosody.util.async"; local p = require "prosody.util.promise".new(function (resolve) local async_runner = async.runner(function () local n = 0; for username in lastlog2:items() do local was_error = nil; n = n + 1; if n % 100 == 0 then module:log("debug", "Processed %d...", n); async.sleep(0); end local lastlog2_data = lastlog2:get(username); if lastlog2_data then local current_data, err = store:get(username); if not current_data then if not err then current_data = {}; else n_errors = n_errors + 1; end end if current_data then local imported_timestamp = current_data.timestamp; local latest; for k, v in pairs(lastlog2_data) do if k ~= "registered" and (not latest or v.timestamp > latest) then latest = v.timestamp; end end if latest and (not imported_timestamp or imported_timestamp < latest) then local ok, err = store:set_key(username, "timestamp", latest); if ok then n_updated = n_updated + 1; else module:log("error", "Failed to import %q: %s", username, err); was_error = true; n_errors = n_errors + 1; end else n_skipped = n_skipped + 1; end end if autoremove and not was_error then lastlog2:set(username, nil); end end end return resolve(("%d accounts imported, %d errors, %d skipped"):format(n_updated, n_errors, n_skipped)); end); async_runner:run(true); end); return p; end function module.ready() do_migration(); end
