Software /
code /
prosody
Comparison
util/sslconfig.lua @ 6292:751618071e89
util.sslconfig: Add lib to deal with LuaSec SSL context configs
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Thu, 03 Jul 2014 15:27:49 +0200 |
child | 6671:2d5e2ed44c22 |
comparison
equal
deleted
inserted
replaced
6291:7a604381d6fc | 6292:751618071e89 |
---|---|
1 | |
2 local handlers = { }; | |
3 local finalisers = { }; | |
4 local id = function (v) return v end | |
5 | |
6 function handlers.options(a, k, b) | |
7 local o = a[k] or { }; | |
8 if type(b) ~= "table" then b = { b } end | |
9 for k,v in pairs(b) do | |
10 if v == true or v == false then | |
11 o[k] = v; | |
12 else | |
13 o[v] = true; | |
14 end | |
15 end | |
16 a[k] = o; | |
17 end | |
18 | |
19 handlers.verify = handlers.options; | |
20 handlers.verifyext = handlers.options; | |
21 | |
22 function finalisers.options(a) | |
23 local o = {}; | |
24 for opt, enable in pairs(a) do | |
25 if enable then | |
26 o[#o+1] = opt; | |
27 end | |
28 end | |
29 return o; | |
30 end | |
31 | |
32 finalisers.verify = finalisers.options; | |
33 finalisers.verifyext = finalisers.options; | |
34 | |
35 function finalisers.ciphers(a) | |
36 if type(a) == "table" then | |
37 return table.concat(a, ":"); | |
38 end | |
39 return a; | |
40 end | |
41 | |
42 local protocols = { "sslv2", "sslv3", "tlsv1", "tlsv1_1", "tlsv1_2" }; | |
43 for i = 1, #protocols do protocols[protocols[i] .. "+"] = i - 1; end | |
44 | |
45 local function protocol(a) | |
46 local min_protocol = protocols[a.protocol]; | |
47 if min_protocol then | |
48 a.protocol = "sslv23"; | |
49 for i = 1, min_protocol do | |
50 table.insert(a.options, "no_"..protocols[i]); | |
51 end | |
52 end | |
53 end | |
54 | |
55 local function apply(a, b) | |
56 if type(b) == "table" then | |
57 for k,v in pairs(b) do | |
58 (handlers[k] or rawset)(a, k, v); | |
59 end | |
60 end | |
61 end | |
62 | |
63 local function final(a) | |
64 local f = { }; | |
65 for k,v in pairs(a) do | |
66 f[k] = (finalisers[k] or id)(v); | |
67 end | |
68 protocol(f); | |
69 return f; | |
70 end | |
71 | |
72 local sslopts_mt = { | |
73 __index = { | |
74 apply = apply; | |
75 final = final; | |
76 }; | |
77 }; | |
78 | |
79 local function new() | |
80 return setmetatable({options={}}, sslopts_mt); | |
81 end | |
82 | |
83 return { | |
84 apply = apply; | |
85 final = final; | |
86 new = new; | |
87 }; |