Software /
code /
prosody
Annotate
util/filters.lua @ 5915:e6fed1d80116
Back out 1b0ac7950129, as SSLv3 appears to still be in moderate use on the network. Also, although obsolete, SSLv3 isn't documented to have any weaknesses that TLS 1.0 (the most common version used today) doesn't also have. Get your act together clients!
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Tue, 12 Nov 2013 02:13:01 +0000 |
parent | 5849:8f451d370dd4 |
child | 5850:e8c743f4213f |
child | 6366:8dee696c33cc |
rev | line source |
---|---|
3133
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 -- Prosody IM |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 -- Copyright (C) 2008-2010 Matthew Wild |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 -- Copyright (C) 2008-2010 Waqas Hussain |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 -- |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 -- This project is MIT/X11 licensed. Please see the |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 -- COPYING file in the source package for more information. |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 -- |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 local t_insert, t_remove = table.insert, table.remove; |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 module "filters" |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
12 |
3625
f8d61da5bcc1
util.filters: Support for 'filter hooks' that get called when a session is initialized for filters
Matthew Wild <mwild1@gmail.com>
parents:
3331
diff
changeset
|
13 local new_filter_hooks = {}; |
f8d61da5bcc1
util.filters: Support for 'filter hooks' that get called when a session is initialized for filters
Matthew Wild <mwild1@gmail.com>
parents:
3331
diff
changeset
|
14 |
3134
9a29ad6a9b97
util.filters: Expose the initialization function
Matthew Wild <mwild1@gmail.com>
parents:
3133
diff
changeset
|
15 function initialize(session) |
3142
3cf02e5e632b
util.filters: Ensure initialize() never initializes an object twice - and return the filter function to the caller
Matthew Wild <mwild1@gmail.com>
parents:
3140
diff
changeset
|
16 if not session.filters then |
3cf02e5e632b
util.filters: Ensure initialize() never initializes an object twice - and return the filter function to the caller
Matthew Wild <mwild1@gmail.com>
parents:
3140
diff
changeset
|
17 local filters = {}; |
3cf02e5e632b
util.filters: Ensure initialize() never initializes an object twice - and return the filter function to the caller
Matthew Wild <mwild1@gmail.com>
parents:
3140
diff
changeset
|
18 session.filters = filters; |
3cf02e5e632b
util.filters: Ensure initialize() never initializes an object twice - and return the filter function to the caller
Matthew Wild <mwild1@gmail.com>
parents:
3140
diff
changeset
|
19 |
3cf02e5e632b
util.filters: Ensure initialize() never initializes an object twice - and return the filter function to the caller
Matthew Wild <mwild1@gmail.com>
parents:
3140
diff
changeset
|
20 function session.filter(type, data) |
3cf02e5e632b
util.filters: Ensure initialize() never initializes an object twice - and return the filter function to the caller
Matthew Wild <mwild1@gmail.com>
parents:
3140
diff
changeset
|
21 local filter_list = filters[type]; |
3cf02e5e632b
util.filters: Ensure initialize() never initializes an object twice - and return the filter function to the caller
Matthew Wild <mwild1@gmail.com>
parents:
3140
diff
changeset
|
22 if filter_list then |
3cf02e5e632b
util.filters: Ensure initialize() never initializes an object twice - and return the filter function to the caller
Matthew Wild <mwild1@gmail.com>
parents:
3140
diff
changeset
|
23 for i = 1, #filter_list do |
3625
f8d61da5bcc1
util.filters: Support for 'filter hooks' that get called when a session is initialized for filters
Matthew Wild <mwild1@gmail.com>
parents:
3331
diff
changeset
|
24 data = filter_list[i](data, session); |
3142
3cf02e5e632b
util.filters: Ensure initialize() never initializes an object twice - and return the filter function to the caller
Matthew Wild <mwild1@gmail.com>
parents:
3140
diff
changeset
|
25 if data == nil then break; end |
3cf02e5e632b
util.filters: Ensure initialize() never initializes an object twice - and return the filter function to the caller
Matthew Wild <mwild1@gmail.com>
parents:
3140
diff
changeset
|
26 end |
3139
7b4f180d7c6f
util.filters: Don't traceback with no filters of a type added
Matthew Wild <mwild1@gmail.com>
parents:
3135
diff
changeset
|
27 end |
3142
3cf02e5e632b
util.filters: Ensure initialize() never initializes an object twice - and return the filter function to the caller
Matthew Wild <mwild1@gmail.com>
parents:
3140
diff
changeset
|
28 return data; |
3133
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 end |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
30 end |
3625
f8d61da5bcc1
util.filters: Support for 'filter hooks' that get called when a session is initialized for filters
Matthew Wild <mwild1@gmail.com>
parents:
3331
diff
changeset
|
31 |
f8d61da5bcc1
util.filters: Support for 'filter hooks' that get called when a session is initialized for filters
Matthew Wild <mwild1@gmail.com>
parents:
3331
diff
changeset
|
32 for i=1,#new_filter_hooks do |
f8d61da5bcc1
util.filters: Support for 'filter hooks' that get called when a session is initialized for filters
Matthew Wild <mwild1@gmail.com>
parents:
3331
diff
changeset
|
33 new_filter_hooks[i](session); |
f8d61da5bcc1
util.filters: Support for 'filter hooks' that get called when a session is initialized for filters
Matthew Wild <mwild1@gmail.com>
parents:
3331
diff
changeset
|
34 end |
f8d61da5bcc1
util.filters: Support for 'filter hooks' that get called when a session is initialized for filters
Matthew Wild <mwild1@gmail.com>
parents:
3331
diff
changeset
|
35 |
3142
3cf02e5e632b
util.filters: Ensure initialize() never initializes an object twice - and return the filter function to the caller
Matthew Wild <mwild1@gmail.com>
parents:
3140
diff
changeset
|
36 return session.filter; |
3133
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 end |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
39 function add_filter(session, type, callback, priority) |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
40 if not session.filters then |
3134
9a29ad6a9b97
util.filters: Expose the initialization function
Matthew Wild <mwild1@gmail.com>
parents:
3133
diff
changeset
|
41 initialize(session); |
3133
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
42 end |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
43 |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
44 local filter_list = session.filters[type]; |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
45 if not filter_list then |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
46 filter_list = {}; |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
47 session.filters[type] = filter_list; |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
48 end |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
49 |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
50 priority = priority or 0; |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
51 |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
52 local i = 0; |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
53 repeat |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
54 i = i + 1; |
5849
8f451d370dd4
util.filters: Fix inserting items so that higher priority filters run first
Kim Alvefur <zash@zash.se>
parents:
3943
diff
changeset
|
55 until not filter_list[i] or filter_list[filter_list[i]] < priority; |
3133
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
56 |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
57 t_insert(filter_list, i, callback); |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
58 filter_list[callback] = priority; |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
59 end |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
60 |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
61 function remove_filter(session, type, callback) |
3135
f29a297471e3
util.filters: Don't traceback when trying to remove a filter from an uninitialized object
Matthew Wild <mwild1@gmail.com>
parents:
3134
diff
changeset
|
62 if not session.filters then return; end |
3133
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
63 local filter_list = session.filters[type]; |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
64 if filter_list and filter_list[callback] then |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
65 for i=1, #filter_list do |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
66 if filter_list[i] == callback then |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
67 t_remove(filter_list, i); |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
68 filter_list[callback] = nil; |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
69 return true; |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
70 end |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
71 end |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
72 end |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
73 end |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
74 |
3625
f8d61da5bcc1
util.filters: Support for 'filter hooks' that get called when a session is initialized for filters
Matthew Wild <mwild1@gmail.com>
parents:
3331
diff
changeset
|
75 function add_filter_hook(callback) |
f8d61da5bcc1
util.filters: Support for 'filter hooks' that get called when a session is initialized for filters
Matthew Wild <mwild1@gmail.com>
parents:
3331
diff
changeset
|
76 t_insert(new_filter_hooks, callback); |
f8d61da5bcc1
util.filters: Support for 'filter hooks' that get called when a session is initialized for filters
Matthew Wild <mwild1@gmail.com>
parents:
3331
diff
changeset
|
77 end |
f8d61da5bcc1
util.filters: Support for 'filter hooks' that get called when a session is initialized for filters
Matthew Wild <mwild1@gmail.com>
parents:
3331
diff
changeset
|
78 |
3943
ad5924c31953
util.filters: Add remove_filter_hook()
Matthew Wild <mwild1@gmail.com>
parents:
3625
diff
changeset
|
79 function remove_filter_hook(callback) |
ad5924c31953
util.filters: Add remove_filter_hook()
Matthew Wild <mwild1@gmail.com>
parents:
3625
diff
changeset
|
80 for i=1,#new_filter_hooks do |
ad5924c31953
util.filters: Add remove_filter_hook()
Matthew Wild <mwild1@gmail.com>
parents:
3625
diff
changeset
|
81 if new_filter_hooks[i] == callback then |
ad5924c31953
util.filters: Add remove_filter_hook()
Matthew Wild <mwild1@gmail.com>
parents:
3625
diff
changeset
|
82 t_remove(new_filter_hooks, i); |
ad5924c31953
util.filters: Add remove_filter_hook()
Matthew Wild <mwild1@gmail.com>
parents:
3625
diff
changeset
|
83 end |
ad5924c31953
util.filters: Add remove_filter_hook()
Matthew Wild <mwild1@gmail.com>
parents:
3625
diff
changeset
|
84 end |
ad5924c31953
util.filters: Add remove_filter_hook()
Matthew Wild <mwild1@gmail.com>
parents:
3625
diff
changeset
|
85 end |
ad5924c31953
util.filters: Add remove_filter_hook()
Matthew Wild <mwild1@gmail.com>
parents:
3625
diff
changeset
|
86 |
3331
57a9cf5f4259
util.filters: Add newline at end of file
Matthew Wild <mwild1@gmail.com>
parents:
3142
diff
changeset
|
87 return _M; |