]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Minor] Add authentication results parser function
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 8 Jan 2022 14:34:58 +0000 (14:34 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 8 Jan 2022 14:34:58 +0000 (14:34 +0000)
lualib/lua_auth_results.lua

index f7a319f483ab0cef2f2c071359e57f408c3dc7cd..7b41e6ff52561bf135af51c80de9f6539aa2d7c4 100644 (file)
@@ -275,4 +275,28 @@ end
 
 exports.gen_auth_results = gen_auth_results
 
+local aar_elt_grammar
+-- This function parses an ar element to a table of kv pairs that represents different
+-- elements
+local function parse_ar_element(elt)
+
+  if not aar_elt_grammar then
+    -- Generate grammar
+    local lpeg = require "lpeg"
+    local P = lpeg.P
+    local S = lpeg.S
+    local V = lpeg.V
+    local C = lpeg.C
+    local space = S(" ")^0
+    local doublequoted = space * P'"' * ((1 - S'"\r\n\f\\') + (P'\\' * 1))^0 * '"' * space
+    local comment = space * P{ "(" * ((1 - S"()") + V(1))^0 * ")" } * space
+    local name = C((1 - S('=(" '))^1) * space
+    local pair = lpeg.Cg(name * "=" * space * name) * space
+    aar_elt_grammar = lpeg.Cf(lpeg.Ct("") * (pair + comment + doublequoted)^1, rawset)
+  end
+
+  return aar_elt_grammar:match(elt)
+end
+exports.parse_ar_element = parse_ar_element
+
 return exports