aboutsummaryrefslogtreecommitdiffstats
path: root/rules/bitcoin.lua
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2020-07-28 16:34:20 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2020-07-28 16:34:20 +0100
commit22373482c860885c390490f9aeb62bab974ae876 (patch)
tree56c3b9f7b40abcd422ae0e09ebdcc376436c9925 /rules/bitcoin.lua
parent9cb811037b7ea48ac7f19b9ff77115f37c52973d (diff)
downloadrspamd-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.lua39
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