Mercurial > prosody-hg
annotate util/id.lua @ 14066:b085d32af140 13.0
prosody, prosodyctl: Load loader directly from source directory
This should ensure that loader.lua is loaded from the source directory
and does the right thing when installed with `make install`
There are currently three ways Prosody can be run:
- Directly from the source directory, like `./prosody`
- Installed with `make install`
- Installed into Lua paths with e.g. dh-lua or luarocks
In the first two cases, Lua search paths need to include the source
directory and ensure that `require "prosody.util.json"` ends up loading
`util/json.lua` relative to the installation (CFG_SOURCEDIR) or the
source checkout.
Finally, in the last case where Prosody resources are installed under the
'prosody.*' namespace in regular Lua search paths, then loader.lua should
activate the compatibility mode that makes sure that both
`require"util.json"` and `require"prosody.util.json"` both resolve to
`(one path from of package.path)/prosody/util/json.lua`
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Mon, 09 Feb 2026 16:59:42 +0100 |
| parents | d10957394a3c |
| children |
| rev | line source |
|---|---|
|
8016
9546c629289b
util.id: New util for producing random identifiers of varying sizes
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
1 -- Prosody IM |
|
9546c629289b
util.id: New util for producing random identifiers of varying sizes
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
2 -- Copyright (C) 2008-2017 Matthew Wild |
|
9546c629289b
util.id: New util for producing random identifiers of varying sizes
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
3 -- Copyright (C) 2008-2017 Waqas Hussain |
|
9546c629289b
util.id: New util for producing random identifiers of varying sizes
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
4 -- Copyright (C) 2008-2017 Kim Alvefur |
|
9546c629289b
util.id: New util for producing random identifiers of varying sizes
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
5 -- |
|
9546c629289b
util.id: New util for producing random identifiers of varying sizes
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
6 -- This project is MIT/X11 licensed. Please see the |
|
9546c629289b
util.id: New util for producing random identifiers of varying sizes
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
7 -- COPYING file in the source package for more information. |
|
9546c629289b
util.id: New util for producing random identifiers of varying sizes
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
8 -- |
|
9546c629289b
util.id: New util for producing random identifiers of varying sizes
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
9 |
|
9546c629289b
util.id: New util for producing random identifiers of varying sizes
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
10 local s_gsub = string.gsub; |
|
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12111
diff
changeset
|
11 local random_bytes = require "prosody.util.random".bytes; |
|
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12111
diff
changeset
|
12 local base64_encode = require "prosody.util.encodings".base64.encode; |
|
8016
9546c629289b
util.id: New util for producing random identifiers of varying sizes
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
13 |
|
9546c629289b
util.id: New util for producing random identifiers of varying sizes
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
14 local b64url = { ["+"] = "-", ["/"] = "_", ["="] = "" }; |
|
9546c629289b
util.id: New util for producing random identifiers of varying sizes
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
15 local function b64url_random(len) |
|
9546c629289b
util.id: New util for producing random identifiers of varying sizes
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
16 return (s_gsub(base64_encode(random_bytes(len)), "[+/=]", b64url)); |
|
9546c629289b
util.id: New util for producing random identifiers of varying sizes
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
17 end |
|
9546c629289b
util.id: New util for producing random identifiers of varying sizes
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
18 |
|
9546c629289b
util.id: New util for producing random identifiers of varying sizes
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
19 return { |
|
12110
b5b799a2a10c
util.id: Adjust entropy levels, with rationales
Kim Alvefur <zash@zash.se>
parents:
8016
diff
changeset
|
20 -- sizes divisible by 3 fit nicely into base64 without padding== |
|
b5b799a2a10c
util.id: Adjust entropy levels, with rationales
Kim Alvefur <zash@zash.se>
parents:
8016
diff
changeset
|
21 |
| 12111 | 22 -- for short lived things with low risk of collisions |
| 23 tiny = function() return b64url_random(3); end; | |
| 24 | |
|
12110
b5b799a2a10c
util.id: Adjust entropy levels, with rationales
Kim Alvefur <zash@zash.se>
parents:
8016
diff
changeset
|
25 -- close to 8 bytes, should be good enough for relatively short lived or uses |
|
b5b799a2a10c
util.id: Adjust entropy levels, with rationales
Kim Alvefur <zash@zash.se>
parents:
8016
diff
changeset
|
26 -- scoped by host or users, half the size of an uuid |
|
b5b799a2a10c
util.id: Adjust entropy levels, with rationales
Kim Alvefur <zash@zash.se>
parents:
8016
diff
changeset
|
27 short = function() return b64url_random(9); end; |
|
b5b799a2a10c
util.id: Adjust entropy levels, with rationales
Kim Alvefur <zash@zash.se>
parents:
8016
diff
changeset
|
28 |
|
b5b799a2a10c
util.id: Adjust entropy levels, with rationales
Kim Alvefur <zash@zash.se>
parents:
8016
diff
changeset
|
29 -- more entropy than uuid at 2/3 the size |
|
b5b799a2a10c
util.id: Adjust entropy levels, with rationales
Kim Alvefur <zash@zash.se>
parents:
8016
diff
changeset
|
30 -- should be okay for globally scoped ids or security token |
|
b5b799a2a10c
util.id: Adjust entropy levels, with rationales
Kim Alvefur <zash@zash.se>
parents:
8016
diff
changeset
|
31 medium = function() return b64url_random(18); end; |
|
b5b799a2a10c
util.id: Adjust entropy levels, with rationales
Kim Alvefur <zash@zash.se>
parents:
8016
diff
changeset
|
32 |
|
b5b799a2a10c
util.id: Adjust entropy levels, with rationales
Kim Alvefur <zash@zash.se>
parents:
8016
diff
changeset
|
33 -- as long as an uuid but MOAR entropy |
|
b5b799a2a10c
util.id: Adjust entropy levels, with rationales
Kim Alvefur <zash@zash.se>
parents:
8016
diff
changeset
|
34 long = function() return b64url_random(27); end; |
|
b5b799a2a10c
util.id: Adjust entropy levels, with rationales
Kim Alvefur <zash@zash.se>
parents:
8016
diff
changeset
|
35 |
|
b5b799a2a10c
util.id: Adjust entropy levels, with rationales
Kim Alvefur <zash@zash.se>
parents:
8016
diff
changeset
|
36 -- pick your own adventure |
|
8016
9546c629289b
util.id: New util for producing random identifiers of varying sizes
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
37 custom = function (size) |
|
9546c629289b
util.id: New util for producing random identifiers of varying sizes
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
38 return function () return b64url_random(size); end; |
|
9546c629289b
util.id: New util for producing random identifiers of varying sizes
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
39 end; |
|
9546c629289b
util.id: New util for producing random identifiers of varying sizes
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
40 } |
