Software /
code /
prosody
File
util/uuid.lua @ 13665:30a91d819913 13.0
mod_account_activity: Record an account's last activity timestamp
This is similar to mod_lastlog/mod_lastlog2.
Some functionality was dropped, compared to mod_lastlog2. These features
(recording the IP address, or tracking the timestamp of multiple events) are
handled better by the mod_audit family of modules. For example, those
correctly handle multiple logins, IP address truncation, and data retention
policies.
The "registered" timestamp from mod_lastlog2 was also dropped, as this has
been stored in account_details by Prosody itself since at least 0.12 already.
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Wed, 12 Feb 2025 12:33:45 +0000 |
parent | 13317:e6a5f196fc1f |
line wrap: on
line source
-- Prosody IM -- Copyright (C) 2008-2010 Matthew Wild -- Copyright (C) 2008-2010 Waqas Hussain -- -- This project is MIT/X11 licensed. Please see the -- COPYING file in the source package for more information. -- local random = require "prosody.util.random"; local random_bytes = random.bytes; local time = require "prosody.util.time"; local hex = require "prosody.util.hex".encode; local m_ceil = math.ceil; local m_floor = math.floor; local function get_nibbles(n) return hex(random_bytes(m_ceil(n/2))):sub(1, n); end local function get_twobits() return ("%x"):format(random_bytes(1):byte() % 4 + 8); end local function generate() -- generate RFC 4122 complaint UUIDs (version 4 - random) return get_nibbles(8).."-"..get_nibbles(4).."-4"..get_nibbles(3).."-"..(get_twobits())..get_nibbles(3).."-"..get_nibbles(12); end local function generate_v7() -- Sortable based on time and random -- https://datatracker.ietf.org/doc/html/draft-peabody-dispatch-new-uuid-format-01#section-4.4 local t = time.now(); local unixts = m_floor(t); local unixts_a = m_floor(unixts / 16); local unixts_b = m_floor(unixts % 16); local subsec = t % 1; local subsec_a = m_floor(subsec * 0x1000); local subsec_b = m_floor(subsec * 0x1000000) % 0x1000; return ("%08x-%x%03x-7%03x-%4s-%12s"):format(unixts_a, unixts_b, subsec_a, subsec_b, get_twobits() .. get_nibbles(3), get_nibbles(12)); end return { v4 = generate; v7 = generate_v7; get_nibbles=get_nibbles; generate = generate ; -- COMPAT seed = random.seed; };