diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2020-07-28 16:34:20 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2020-07-28 16:34:20 +0100 |
commit | 22373482c860885c390490f9aeb62bab974ae876 (patch) | |
tree | 56c3b9f7b40abcd422ae0e09ebdcc376436c9925 /rules/bitcoin.lua | |
parent | 9cb811037b7ea48ac7f19b9ff77115f37c52973d (diff) | |
download | rspamd-22373482c860885c390490f9aeb62bab974ae876.tar.gz rspamd-22373482c860885c390490f9aeb62bab974ae876.zip |
[Project] Convert bitcoin rules to the new regexp conditions feature
Diffstat (limited to 'rules/bitcoin.lua')
-rw-r--r-- | rules/bitcoin.lua | 39 |
1 files changed, 35 insertions, 4 deletions
diff --git a/rules/bitcoin.lua b/rules/bitcoin.lua index defba0f98..904ca660b 100644 --- a/rules/bitcoin.lua +++ b/rules/bitcoin.lua @@ -18,6 +18,9 @@ limitations under the License. local fun = require "fun" local bit = require "bit" +local lua_util = require "lua_util" +local N = "bitcoin" + local off = 0 local base58_dec = fun.tomap(fun.map( function(c) @@ -209,11 +212,38 @@ local function is_segwit_bech32_address(word) end end +local normal_wallet_re = [[/\b[13LM][1-9A-Za-z]{25,34}\b/L{sa_body}]] +local btc_bleach_re = [[/\b(?:bc1|[13]|(?:[^:]+:))[qpzry9x8gf2tvdw0s3jn54khce6mua7l]{14,}\b/L{sa_body}]] -rspamd_config:register_symbol{ - name = 'BITCOIN_ADDR', +config.regexp['BITCOIN_ADDR'] = { description = 'Message has a valid bitcoin wallet address', - callback = function(task) + re = string.format('(%s) || (%s)', normal_wallet_re, btc_bleach_re), + re_conditions = { + [normal_wallet_re] = function(task, txt, s, e) + if e - s <= 2 then + return false + end + + local word = lua_util.str_trim(txt:sub(s, e)) + local valid = is_traditional_btc_address(word) + + if valid then + -- To save option + task:insert_result('BITCOIN_ADDR', 1.0, word) + lua_util.debugm(N, task, 'found valid tradtional bitcoin addr in the word: %s', + word) + return true + else + lua_util.debugm(N, task, 'found invalid bitcoin addr in the word: %s', + word) + + return false + end + end, + [btc_bleach_re] = function(task, txt, s, e) + end, + }, + callbackk = function(task) local rspamd_re = require "rspamd_regexp" local btc_wallet_re = rspamd_re.create_cached('^[13LM][1-9A-Za-z]{25,34}$') @@ -257,5 +287,6 @@ rspamd_config:register_symbol{ end end, score = 0.0, - group = 'scams' + one_shot = true, + group = 'scams', }
\ No newline at end of file |