fix bugs
This commit is contained in:
@@ -24,7 +24,7 @@ __all__ = [
|
|||||||
"rule",
|
"rule",
|
||||||
"run",
|
"run",
|
||||||
"storage",
|
"storage",
|
||||||
"list",
|
"lists",
|
||||||
"QuarantineMilter"]
|
"QuarantineMilter"]
|
||||||
|
|
||||||
__version__ = "2.1.0"
|
__version__ = "2.1.0"
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ import time
|
|||||||
from pyquarantine.action import Action
|
from pyquarantine.action import Action
|
||||||
from pyquarantine.config import get_milter_config, ActionConfig, StorageConfig, NotificationConfig, ListConfig
|
from pyquarantine.config import get_milter_config, ActionConfig, StorageConfig, NotificationConfig, ListConfig
|
||||||
from pyquarantine.storage import Quarantine
|
from pyquarantine.storage import Quarantine
|
||||||
from pyquarantine.list import DatabaseList
|
from pyquarantine.lists import DatabaseList
|
||||||
from pyquarantine import __version__ as version
|
from pyquarantine import __version__ as version
|
||||||
|
|
||||||
|
|
||||||
@@ -110,7 +110,7 @@ def print_table(columns, rows):
|
|||||||
print(row_format.format(*row))
|
print(row_format.format(*row))
|
||||||
|
|
||||||
|
|
||||||
def llist(cfg, args):
|
def show(cfg, args):
|
||||||
quarantines = _get_quarantines(cfg)
|
quarantines = _get_quarantines(cfg)
|
||||||
if args.batch:
|
if args.batch:
|
||||||
print("\n".join([q["name"] for q in quarantines]))
|
print("\n".join([q["name"] for q in quarantines]))
|
||||||
@@ -120,9 +120,9 @@ def llist(cfg, args):
|
|||||||
qcfg = q["options"]
|
qcfg = q["options"]
|
||||||
|
|
||||||
if "notify" in qcfg:
|
if "notify" in qcfg:
|
||||||
notification = cfg["notifications"][qcfg["notify"]]["name"]
|
notify_type = cfg["notifications"][qcfg["notify"]]["type"]
|
||||||
else:
|
else:
|
||||||
notification = "NONE"
|
notify_type = "NONE"
|
||||||
|
|
||||||
if "allowlist" in qcfg:
|
if "allowlist" in qcfg:
|
||||||
allowlist = qcfg["allowlist"]
|
allowlist = qcfg["allowlist"]
|
||||||
@@ -134,12 +134,12 @@ def llist(cfg, args):
|
|||||||
else:
|
else:
|
||||||
milter_action = "NONE"
|
milter_action = "NONE"
|
||||||
|
|
||||||
storage_name = cfg["storages"][qcfg["store"]]["name"]
|
storage_type = cfg["storages"][qcfg["store"]]["type"]
|
||||||
|
|
||||||
qlist.append({
|
qlist.append({
|
||||||
"name": q["name"],
|
"name": q["name"],
|
||||||
"storage": storage_name,
|
"storage": storage_type,
|
||||||
"notification": notification,
|
"notification": notify_type,
|
||||||
"lists": allowlist,
|
"lists": allowlist,
|
||||||
"action": milter_action})
|
"action": milter_action})
|
||||||
|
|
||||||
@@ -152,34 +152,6 @@ def llist(cfg, args):
|
|||||||
qlist
|
qlist
|
||||||
)
|
)
|
||||||
|
|
||||||
if "storages" in cfg:
|
|
||||||
storages = []
|
|
||||||
for name, options in cfg["storages"].items():
|
|
||||||
storages.append({
|
|
||||||
"name": name,
|
|
||||||
"type": options["type"]})
|
|
||||||
|
|
||||||
print("\n")
|
|
||||||
print_table(
|
|
||||||
[("Storage", "name"),
|
|
||||||
("Type", "type")],
|
|
||||||
storages
|
|
||||||
)
|
|
||||||
|
|
||||||
if "notifications" in cfg:
|
|
||||||
notifications = []
|
|
||||||
for name, options in cfg["notifications"].items():
|
|
||||||
notifications.append({
|
|
||||||
"name": name,
|
|
||||||
"type": options["type"]})
|
|
||||||
|
|
||||||
print("\n")
|
|
||||||
print_table(
|
|
||||||
[("Notification", "name"),
|
|
||||||
("Type", "type")],
|
|
||||||
notifications
|
|
||||||
)
|
|
||||||
|
|
||||||
if "lists" in cfg:
|
if "lists" in cfg:
|
||||||
lst_list = []
|
lst_list = []
|
||||||
for name, options in cfg["lists"].items():
|
for name, options in cfg["lists"].items():
|
||||||
@@ -244,10 +216,10 @@ def list_quarantine_emails(cfg, args):
|
|||||||
|
|
||||||
|
|
||||||
def list_list(cfg, args):
|
def list_list(cfg, args):
|
||||||
lists = _get_list(cfg, args.list, args.debug)
|
lst = _get_list(cfg, args.list, args.debug)
|
||||||
|
|
||||||
# find lists entries
|
# find lists entries
|
||||||
entries = lists.find(
|
entries = lst.find(
|
||||||
mailfrom=args.mailfrom,
|
mailfrom=args.mailfrom,
|
||||||
recipients=args.recipients,
|
recipients=args.recipients,
|
||||||
older_than=args.older_than)
|
older_than=args.older_than)
|
||||||
@@ -275,10 +247,10 @@ def list_list(cfg, args):
|
|||||||
|
|
||||||
def add_list_entry(cfg, args):
|
def add_list_entry(cfg, args):
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
lists = _get_list(cfg, args.list, args.debug)
|
lst = _get_list(cfg, args.list, args.debug)
|
||||||
|
|
||||||
# check existing entries
|
# check existing entries
|
||||||
entries = lists.check(args.mailfrom, args.recipient, logger)
|
entries = lst.check(args.mailfrom, args.recipient, logger)
|
||||||
if entries:
|
if entries:
|
||||||
# check if the exact entry exists already
|
# check if the exact entry exists already
|
||||||
for entry in entries.values():
|
for entry in entries.values():
|
||||||
@@ -309,13 +281,13 @@ def add_list_entry(cfg, args):
|
|||||||
"use --force to override.")
|
"use --force to override.")
|
||||||
|
|
||||||
# add entry to lists
|
# add entry to lists
|
||||||
lists.add(args.mailfrom, args.recipient, args.comment, args.permanent)
|
lst.add(args.mailfrom, args.recipient, args.comment, args.permanent)
|
||||||
print("list entry added successfully")
|
print("list entry added successfully")
|
||||||
|
|
||||||
|
|
||||||
def delete_list_entry(cfg, args):
|
def delete_list_entry(cfg, args):
|
||||||
lists = _get_list(cfg, args.list, args.debug)
|
lst = _get_list(cfg, args.list, args.debug)
|
||||||
lists.delete(args.lists_id)
|
lst.delete(args.list_id)
|
||||||
print("list entry deleted successfully")
|
print("list entry deleted successfully")
|
||||||
|
|
||||||
|
|
||||||
@@ -402,15 +374,15 @@ def main():
|
|||||||
subparsers.required = True
|
subparsers.required = True
|
||||||
|
|
||||||
# list command
|
# list command
|
||||||
list_parser = subparsers.add_parser(
|
show_parser = subparsers.add_parser(
|
||||||
"list",
|
"show",
|
||||||
help="List available quarantines.",
|
help="Show quarantines.",
|
||||||
formatter_class=formatter_class)
|
formatter_class=formatter_class)
|
||||||
list_parser.add_argument(
|
show_parser.add_argument(
|
||||||
"-b", "--batch",
|
"-b", "--batch",
|
||||||
help="Print results using only quarantine names, each on a new line.",
|
help="Print results using only quarantine names, each on a new line.",
|
||||||
action="store_true")
|
action="store_true")
|
||||||
list_parser.set_defaults(func=llist)
|
show_parser.set_defaults(func=show)
|
||||||
|
|
||||||
# quarantine command group
|
# quarantine command group
|
||||||
quar_parser = subparsers.add_parser(
|
quar_parser = subparsers.add_parser(
|
||||||
@@ -574,86 +546,86 @@ def main():
|
|||||||
help="Quarantine ID.")
|
help="Quarantine ID.")
|
||||||
quar_metadata_parser.set_defaults(func=metadata)
|
quar_metadata_parser.set_defaults(func=metadata)
|
||||||
|
|
||||||
# lists command group
|
# list command group
|
||||||
lists_parser = subparsers.add_parser(
|
list_parser = subparsers.add_parser(
|
||||||
"lists",
|
"list",
|
||||||
description="Manage lists.",
|
description="Manage lists.",
|
||||||
help="Manage lists.",
|
help="Manage lists.",
|
||||||
formatter_class=formatter_class)
|
formatter_class=formatter_class)
|
||||||
lists_parser.add_argument(
|
list_parser.add_argument(
|
||||||
"list",
|
"list",
|
||||||
metavar="LIST",
|
metavar="LIST",
|
||||||
help="List name.")
|
help="List name.")
|
||||||
lists_subparsers = lists_parser.add_subparsers(
|
list_subparsers = list_parser.add_subparsers(
|
||||||
dest="command",
|
dest="command",
|
||||||
title="Lists commands.")
|
title="Lists commands.")
|
||||||
lists_subparsers.required = True
|
list_subparsers.required = True
|
||||||
# lists list command
|
# lists list command
|
||||||
lists_list_parser = lists_subparsers.add_parser(
|
list_list_parser = list_subparsers.add_parser(
|
||||||
"list",
|
"list",
|
||||||
description="List list entries.",
|
description="List list entries.",
|
||||||
help="List list entries.",
|
help="List list entries.",
|
||||||
formatter_class=formatter_class)
|
formatter_class=formatter_class)
|
||||||
lists_list_parser.add_argument(
|
list_list_parser.add_argument(
|
||||||
"-f", "--from",
|
"-f", "--from",
|
||||||
dest="mailfrom",
|
dest="mailfrom",
|
||||||
help="Filter entries by from address.",
|
help="Filter entries by from address.",
|
||||||
default=None,
|
default=None,
|
||||||
nargs="+")
|
nargs="+")
|
||||||
lists_list_parser.add_argument(
|
list_list_parser.add_argument(
|
||||||
"-t", "--to",
|
"-t", "--to",
|
||||||
dest="recipients",
|
dest="recipients",
|
||||||
help="Filter entries by recipient address.",
|
help="Filter entries by recipient address.",
|
||||||
default=None,
|
default=None,
|
||||||
nargs="+")
|
nargs="+")
|
||||||
lists_list_parser.add_argument(
|
list_list_parser.add_argument(
|
||||||
"-o", "--older-than",
|
"-o", "--older-than",
|
||||||
dest="older_than",
|
dest="older_than",
|
||||||
help="Filter emails by last used date (days).",
|
help="Filter emails by last used date (days).",
|
||||||
default=None,
|
default=None,
|
||||||
type=float)
|
type=float)
|
||||||
lists_list_parser.set_defaults(func=list_list)
|
list_list_parser.set_defaults(func=list_list)
|
||||||
# lists add command
|
# lists add command
|
||||||
lists_add_parser = lists_subparsers.add_parser(
|
list_add_parser = list_subparsers.add_parser(
|
||||||
"add",
|
"add",
|
||||||
description="Add list entry.",
|
description="Add list entry.",
|
||||||
help="Add list entry.",
|
help="Add list entry.",
|
||||||
formatter_class=formatter_class)
|
formatter_class=formatter_class)
|
||||||
lists_add_parser.add_argument(
|
list_add_parser.add_argument(
|
||||||
"-f", "--from",
|
"-f", "--from",
|
||||||
dest="mailfrom",
|
dest="mailfrom",
|
||||||
help="From address.",
|
help="From address.",
|
||||||
required=True)
|
required=True)
|
||||||
lists_add_parser.add_argument(
|
list_add_parser.add_argument(
|
||||||
"-t", "--to",
|
"-t", "--to",
|
||||||
dest="recipient",
|
dest="recipient",
|
||||||
help="Recipient address.",
|
help="Recipient address.",
|
||||||
required=True)
|
required=True)
|
||||||
lists_add_parser.add_argument(
|
list_add_parser.add_argument(
|
||||||
"-c", "--comment",
|
"-c", "--comment",
|
||||||
help="Comment.",
|
help="Comment.",
|
||||||
default="added by CLI")
|
default="added by CLI")
|
||||||
lists_add_parser.add_argument(
|
list_add_parser.add_argument(
|
||||||
"-p", "--permanent",
|
"-p", "--permanent",
|
||||||
help="Add a permanent entry.",
|
help="Add a permanent entry.",
|
||||||
action="store_true")
|
action="store_true")
|
||||||
lists_add_parser.add_argument(
|
list_add_parser.add_argument(
|
||||||
"--force",
|
"--force",
|
||||||
help="Force adding an entry, "
|
help="Force adding an entry, "
|
||||||
"even if already covered by another entry.",
|
"even if already covered by another entry.",
|
||||||
action="store_true")
|
action="store_true")
|
||||||
lists_add_parser.set_defaults(func=add_list_entry)
|
list_add_parser.set_defaults(func=add_list_entry)
|
||||||
# lists delete command
|
# lists delete command
|
||||||
lists_delete_parser = lists_subparsers.add_parser(
|
list_delete_parser = list_subparsers.add_parser(
|
||||||
"delete",
|
"delete",
|
||||||
description="Delete list entry.",
|
description="Delete list entry.",
|
||||||
help="Delete list entry.",
|
help="Delete list entry.",
|
||||||
formatter_class=formatter_class)
|
formatter_class=formatter_class)
|
||||||
lists_delete_parser.add_argument(
|
list_delete_parser.add_argument(
|
||||||
"lists_id",
|
"list_id",
|
||||||
metavar="ID",
|
metavar="ID",
|
||||||
help="List ID.")
|
help="List ID.")
|
||||||
lists_delete_parser.set_defaults(func=delete_list_entry)
|
list_delete_parser.set_defaults(func=delete_list_entry)
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ import re
|
|||||||
|
|
||||||
from netaddr import IPAddress, IPNetwork, AddrFormatError
|
from netaddr import IPAddress, IPNetwork, AddrFormatError
|
||||||
from pyquarantine import CustomLogger
|
from pyquarantine import CustomLogger
|
||||||
from pyquarantine.list import DatabaseList
|
from pyquarantine.lists import DatabaseList
|
||||||
|
|
||||||
|
|
||||||
class Conditions:
|
class Conditions:
|
||||||
@@ -121,6 +121,17 @@ class Conditions:
|
|||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def update_msginfo_from_match(self, milter, match):
|
||||||
|
if self.metavar is None:
|
||||||
|
return
|
||||||
|
|
||||||
|
named_subgroups = match.groupdict(default=None)
|
||||||
|
for group, value in named_subgroups.items():
|
||||||
|
if value is None:
|
||||||
|
continue
|
||||||
|
name = f"{self.metavar}_{group}"
|
||||||
|
milter.msginfo["vars"][name] = value
|
||||||
|
|
||||||
def match(self, milter):
|
def match(self, milter):
|
||||||
logger = CustomLogger(
|
logger = CustomLogger(
|
||||||
self.logger, {"qid": milter.qid, "name": self.cfg["name"]})
|
self.logger, {"qid": milter.qid, "name": self.cfg["name"]})
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ from time import gmtime
|
|||||||
|
|
||||||
from pyquarantine import mailer
|
from pyquarantine import mailer
|
||||||
from pyquarantine.base import CustomLogger, MilterMessage
|
from pyquarantine.base import CustomLogger, MilterMessage
|
||||||
from pyquarantine.list import DatabaseList
|
from pyquarantine.lists import DatabaseList
|
||||||
from pyquarantine.notify import Notify
|
from pyquarantine.notify import Notify
|
||||||
|
|
||||||
|
|
||||||
@@ -371,6 +371,7 @@ class Store:
|
|||||||
|
|
||||||
def __init__(self, cfg, local_addrs, debug):
|
def __init__(self, cfg, local_addrs, debug):
|
||||||
self.cfg = cfg
|
self.cfg = cfg
|
||||||
|
self.name = cfg["name"]
|
||||||
self.logger = logging.getLogger(cfg["name"])
|
self.logger = logging.getLogger(cfg["name"])
|
||||||
del cfg["name"]
|
del cfg["name"]
|
||||||
self.logger.setLevel(cfg.get_loglevel(debug))
|
self.logger.setLevel(cfg.get_loglevel(debug))
|
||||||
@@ -392,7 +393,7 @@ class Store:
|
|||||||
|
|
||||||
def execute(self, milter):
|
def execute(self, milter):
|
||||||
logger = CustomLogger(
|
logger = CustomLogger(
|
||||||
self.logger, {"name": self.cfg["name"], "qid": milter.qid})
|
self.logger, {"name": self.name, "qid": milter.qid})
|
||||||
self._storage.execute(milter, logger)
|
self._storage.execute(milter, logger)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user