diff --git a/update-fwds.py b/update-fwds.py new file mode 100644 index 0000000..88a7ccf --- /dev/null +++ b/update-fwds.py @@ -0,0 +1,36 @@ +#!/usr/bin/python3 +# Put this script into a Crontab on your Mailcow instance. +# I use an interval of 5 minutes. +import requests +import socket +# Your Mailcow API key +API_KEY='' +# The forwarding host you would like to whitelist +DYN_FWDHOST='dsl-dynamic-host.example.org' +# The public-facing hostname of your Mailcow instance +MAILCOW_HOSTNAME='mx.example.org' + +s = requests.Session() +s.headers.update({'X-API-Key': API_KEY}) +r = s.get('https://{}/api/v1/get/fwdhost/all'.format(MAILCOW_HOSTNAME)) +r.raise_for_status() +current_fwdhosts = r.json() +print('got current hosts: {}'.format(r.text)) +home_ip = socket.gethostbyname(DYN_FWDHOST) +current_ips = [x['host'] for x in current_fwdhosts] +if home_ip in current_ips: + exit('Home IP already registered, exiting.') +fwdhosts_to_delete = [] +if current_fwdhosts: + for host in current_fwdhosts: + if host['source'] == DYN_FWDHOST: + fwdhosts_to_delete.append(host['host']) # ['host'] => IP +d = s.post('https://{}/api/v1/delete/fwdhost'.format(MAILCOW_HOSTNAME), json=fwdhosts_to_delete) +print('Deleted hosts {} with response {}:'.format(str(fwdhosts_to_delete), d.status_code)) +print(d.text) +a = s.post('https://{}/api/v1/add/fwdhost'.format(MAILCOW_HOSTNAME), json={ + 'filter_spam':'0', + 'hostname': DYN_FWDHOST + }) +print('Added host {} with response {}'.format(DYN_FWDHOST, a.status_code)) +exit(0)