from app.workers.base_worker import BaseWorker from app.job_registry import routing_key from app.workers.utils import resolve_txt class TLSRPTWorker(BaseWorker): async def process(self, payload: dict, **meta) -> dict: domain = payload.get('domain') if not domain: raise ValueError('payload.domain is required') name = f"_smtp._tls.{domain}" txts = await resolve_txt(name) record = None rua = [] for t in txts: tl = t.lower() if tl.startswith('v=tlsrptv1'): record = t # parse rua=mailto:... , mailto:... parts = [p.strip() for p in t.split(';')] for p in parts: if p.strip().lower().startswith('rua='): v = p.split('=',1)[1] rua = [x.strip() for x in v.split(',') if x.strip()] break return { 'txt_record': record, 'rua': rua, 'enabled': record is not None, } async def main(): worker = TLSRPTWorker(routing_key("MailCheck", "TLSRPTCheck"), worker_id="tlsrpt-worker-1") await worker.run() if __name__ == '__main__': import asyncio as _a _a.run(main())