37 lines
No EOL
1.2 KiB
Python
37 lines
No EOL
1.2 KiB
Python
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()) |