Introduce rough feature skeleton

This commit is contained in:
Jan Philipp Timme 2019-12-18 15:12:33 +01:00
parent 3868e61f0b
commit b554efad83
1 changed files with 36 additions and 1 deletions

37
main.py
View File

@ -5,6 +5,8 @@ import logging
import Milter import Milter
from Milter.utils import parse_addr from Milter.utils import parse_addr
import re
# Basic logger that also logs to stdout # Basic logger that also logs to stdout
# TODO: Improve this a lot. # TODO: Improve this a lot.
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -17,13 +19,46 @@ handler.setFormatter(formatter)
logger.addHandler(handler) logger.addHandler(handler)
split_from_regex = re.compile('(?P<from_label>("(.*)")|(.*))(.*)<(?P<from_address>.*)>')
def splitFromHeader(value):
match = split_from_regex.match(value)
result = {
'label': match.group('from_label').strip(),
'address': match.group('from_address').strip()
}
return result
class SuspiciousFrom(Milter.Base): class SuspiciousFrom(Milter.Base):
def __init__(self): def __init__(self):
self.id = Milter.uniqueID() self.id = Milter.uniqueID()
logger.info(f"{self.id} got fired up.") logger.info(f"{self.id} got fired up.")
self.milter_final_result = Milter.ACCEPT
self.new_headers = []
def header(self, field, value): def header(self, field, value):
logger.info(f"{self.id} Got header: {field} --> {value}") if field.lower() == 'from':
logger.info(f"Got \"From:\" header with raw value: '{value}'")
split = splitFromHeader(value)
logger.info(f"Label: {split['label']}, address: {split['address']}")
if '@' in split['label']:
self.milter_final_result = Milter.REJECT
else:
self.new_headers.append({'name': 'X-From-Checked', 'value': 'Yes, no address in label.'})
# Supposedly no additional address in the label, accept it for now
# TODO: Also decode utf-8 weirdness and check in there
self.milter_final_result = Milter.ACCEPT
return Milter.CONTINUE
else:
return Milter.CONTINUE
def eom(self):
# Finish up message according to results collected on the way.
for new_header in self.new_headers:
self.addheader(new_header['name'], new_header['value'])
return self.milter_final_result
def main(): def main():
milter_socket = "inet:7777@127.0.0.1" milter_socket = "inet:7777@127.0.0.1"