Software /
code /
prosody-modules
Comparison
mod_firewall/definitions.lib.lua @ 4512:b88f05c878ac
mod_firewall: Add basic LIST backend for receiving items from PubSub
Relies on mod_pubsub_subscription
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 14 Mar 2021 23:31:32 +0100 |
parent | 4127:e9e10ec1b91c |
child | 5232:0f943619e01a |
comparison
equal
deleted
inserted
replaced
4511:97fac0ba0469 | 4512:b88f05c878ac |
---|---|
186 end; | 186 end; |
187 contains = function (self, item) | 187 contains = function (self, item) |
188 return self.items and self.items[item] == true; | 188 return self.items and self.items[item] == true; |
189 end; | 189 end; |
190 }; | 190 }; |
191 | |
192 -- %LIST: pubsub:pubsub.example.com/node | |
193 -- TODO or the actual URI scheme? Bit overkill maybe? | |
194 -- TODO Publish items back to the service? | |
195 -- Step 1: Receiving pubsub events and storing them in the list | |
196 -- We'll start by using only the item id. | |
197 -- TODO Invent some custom schema for this? Needed for just a set of strings? | |
198 pubsubitemid = { | |
199 init = function(self, pubsub_spec, opts) | |
200 local service_addr, node = pubsub_spec:match("^([^/]*)/(.*)"); | |
201 module:depends("pubsub_subscription"); | |
202 module:add_item("pubsub-subscription", { | |
203 service = service_addr; | |
204 node = node; | |
205 on_subscribed = function () | |
206 self.items = {}; | |
207 end; | |
208 on_item = function (event) | |
209 self:add(event.item.attr.id); | |
210 end; | |
211 on_retract = function (event) | |
212 self:remove(event.item.attr.id); | |
213 end; | |
214 on_purge = function () | |
215 self.items = {}; | |
216 end; | |
217 on_unsubscribed = function () | |
218 self.items = nil; | |
219 end; | |
220 on_delete= function () | |
221 self.items = nil; | |
222 end; | |
223 }); | |
224 -- TODO Initial fetch? Or should mod_pubsub_subscription do this? | |
225 end; | |
226 add = function (self, item) | |
227 if self.items then | |
228 self.items[item] = true; | |
229 end | |
230 end; | |
231 remove = function (self, item) | |
232 if self.items then | |
233 self.items[item] = nil; | |
234 end | |
235 end; | |
236 contains = function (self, item) | |
237 return self.items and self.items[item] == true; | |
238 end; | |
239 }; | |
191 }; | 240 }; |
192 list_backends.https = list_backends.http; | 241 list_backends.https = list_backends.http; |
193 | 242 |
194 local normalize_functions = { | 243 local normalize_functions = { |
195 upper = string.upper, lower = string.lower; | 244 upper = string.upper, lower = string.lower; |