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;