Mercurial > prosody-modules
annotate mod_muc_dicebot/mod_muc_dicebot.lua @ 5616:59d5fc50f602
mod_http_oauth2: Implement refresh token rotation
Makes refresh tokens one-time-use, handing out a new refresh token with
each access token. Thus if a refresh token is stolen and used by an
attacker, the next time the legitimate client tries to use the previous
refresh token, it will not work and the attack will be noticed. If the
attacker does not use the refresh token, it becomes invalid after the
legitimate client uses it.
This behavior is recommended by draft-ietf-oauth-security-topics
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 23 Jul 2023 02:56:08 +0200 |
parents | 785389a2d2b3 |
children |
rev | line source |
---|---|
4579
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
1 local muc = module:depends("muc"); |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
2 local rand = require"util.random"; |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
3 |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
4 local s_match = string.match; |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
5 local s_gmatch = string.gmatch; |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
6 local t_insert = table.insert; |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
7 local t_concat = table.concat; |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
8 |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
9 local rooms = module:get_option_set("muc_dicebot_rooms", nil); |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
10 local xmlns_nick = "http://jabber.org/protocol/nick"; |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
11 |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
12 local function is_room_affected(roomjid) |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
13 return not rooms or rooms:contains(roomjid) |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
14 end |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
15 |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
16 local function roll(sides) |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
17 if sides > 256 then |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
18 return nil, "too many sides" |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
19 end |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
20 local factor = math.floor(256 / sides); |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
21 local cutoff = sides * factor; |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
22 module:log("error", "%d -> %d %d %d", sides, max, factor, cutoff); |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
23 for i=1,10 do |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
24 local randomness = string.byte(rand.bytes(1), 1); |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
25 module:log("error", "%d", randomness); |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
26 if randomness < cutoff then |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
27 return (randomness % sides) + 1 |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
28 end |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
29 end |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
30 return nil, "failed to find valid number" |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
31 end |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
32 |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
33 local function muc_broadcast_message(event) |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
34 if not is_room_affected(event.room.jid) then |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
35 return |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
36 end |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
37 |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
38 local stanza = event.stanza; |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
39 local body = stanza:get_child("body"); |
4580
785389a2d2b3
mod_muc_dicebot: ignore messages without body
Jonas Schäfer <jonas@wielicki.name>
parents:
4579
diff
changeset
|
40 if not body then |
785389a2d2b3
mod_muc_dicebot: ignore messages without body
Jonas Schäfer <jonas@wielicki.name>
parents:
4579
diff
changeset
|
41 return |
785389a2d2b3
mod_muc_dicebot: ignore messages without body
Jonas Schäfer <jonas@wielicki.name>
parents:
4579
diff
changeset
|
42 end |
785389a2d2b3
mod_muc_dicebot: ignore messages without body
Jonas Schäfer <jonas@wielicki.name>
parents:
4579
diff
changeset
|
43 |
4579
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
44 local text = body:get_text(); |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
45 module:log("error", "%q %q %q", stanza, body, text); |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
46 local dice = s_match(text, "^[%.!]r%s(.+)$"); |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
47 if not dice or dice == "" then |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
48 return |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
49 end |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
50 |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
51 local results = {}; |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
52 local count = 0; |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
53 local sum = 0; |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
54 for ndice, sep, sides in s_gmatch(dice, "(%d*)([wd]?)(%d+)") do |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
55 if not sep or sep == "" then |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
56 sides = ndice .. sides |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
57 ndice = "1" |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
58 end |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
59 local ndice = tonumber(ndice); |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
60 count = count + ndice; |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
61 if count > 100 then |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
62 return true |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
63 end |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
64 local sides = tonumber(sides); |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
65 for i=1,ndice do |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
66 local value = roll(sides); |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
67 t_insert(results, tostring(value)); |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
68 sum = sum + value; |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
69 end |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
70 end |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
71 body:text("\n⇒ "..t_concat(results, " ").." (sum: "..sum..")"); |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
72 end |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
73 |
b305814bd930
mod_muc_dicebot: A thing to roll dice
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
74 module:hook("muc-broadcast-message", muc_broadcast_message); |