|
@@ -0,0 +1,38 @@
|
|
|
+<?php
|
|
|
+// File size is limited by Nginx site to 10M
|
|
|
+// To speed things up, we do not include prerequisites
|
|
|
+header('Content-Type: text/plain');
|
|
|
+require_once "vars.inc.php";
|
|
|
+// Do not show errors, we log to using error_log
|
|
|
+ini_set('error_reporting', 0);
|
|
|
+// Init Redis
|
|
|
+$redis = new Redis();
|
|
|
+$redis->connect('redis-mailcow', 6379);
|
|
|
+
|
|
|
+$raw_data_content = file_get_contents('php://input');
|
|
|
+$raw_data_decoded = json_decode($raw_data_content, true);
|
|
|
+
|
|
|
+$data['time'] = time();
|
|
|
+$data['rcpt'] = implode(', ', $raw_data_decoded['rcpt']);
|
|
|
+$data['from'] = $raw_data_decoded['from'];
|
|
|
+$data['user'] = $raw_data_decoded['user'];
|
|
|
+$symbol_rl_key = array_search('RATELIMITED', array_column($raw_data_decoded['symbols'], 'name'));
|
|
|
+$data['rl_info'] = implode($raw_data_decoded['symbols'][$symbol_rl_key]['options']);
|
|
|
+preg_match('/(.+)\((.+)\)/i', $data['rl_info'], $rl_matches);
|
|
|
+if (!empty($rl_matches[1]) && !empty($rl_matches[2])) {
|
|
|
+ $data['rl_name'] = $rl_matches[1];
|
|
|
+ $data['rl_hash'] = $rl_matches[2];
|
|
|
+}
|
|
|
+else {
|
|
|
+ $data['rl_name'] = 'err';
|
|
|
+ $data['rl_hash'] = 'err';
|
|
|
+}
|
|
|
+$data['qid'] = $raw_data_decoded['qid'];
|
|
|
+$data['ip'] = $raw_data_decoded['ip'];
|
|
|
+$data['message_id'] = $raw_data_decoded['message_id'];
|
|
|
+$data['header_subject'] = implode(' ', $raw_data_decoded['header_subject']);
|
|
|
+$data['header_from'] = implode(', ', $raw_data_decoded['header_from']);
|
|
|
+
|
|
|
+$redis->lpush('RL_LOG', json_encode($data));
|
|
|
+exit;
|
|
|
+
|