diff --git a/cloudflare_script.py b/cloudflare_script.py deleted file mode 100644 index f192e49..0000000 --- a/cloudflare_script.py +++ /dev/null @@ -1,100 +0,0 @@ -import sys -import ipaddress -from configparser import ConfigParser -import json -import copy -import CloudFlare - - -class DNSUpdater: - def __init__(self, args): - # Parse config - config = ConfigParser() - config.read('config.ini') - - self.HOSTNAME = config['server']['HOSTNAME'] - __TOKEN = config['cloudflare']['TOKEN'] - - # Parse args - try: - ipversion = args[1].lstrip('-') - ipaddress_new = args[2] - except IndexError: - ipaddress_new = '' - ipversion = 'skip' - - match ipversion: - case '4': self.IPVER = 'ipv4' - case '6': self.IPVER = 'ipv6' - case 'skip': self.IPVER = ipversion - case other: raise ValueError(f"Wrong IP Address version given: {ipversion}") - - self.IPNEW = ipaddress_new - - # Cloudflare class - self._cloudflare = CloudFlare.CloudFlare(token=__TOKEN) - - with open('cloudflare.json', 'r') as file: - self.dns_replacements = json.load(file) - - def get_zones(self): - # Cloudflare get zones from API token - zones = self._cloudflare.zones.get() - for zone in zones: - self.zone_id = zone['id'] - self.zone_name = zone['name'] - print(f"Zone ID: {zone['id']} | Zone Name: {zone['name']}") - - def get_dns_records(self, log=False): - dns_records_all = self._cloudflare.zones.dns_records.get(self.zone_id) - - dns_records_to_update = {'A' : [], 'AAAA' : []} - for dnsrecord in dns_records_all: - if dnsrecord['type'] in ['A', 'AAAA']: - if log: - print(f"DNS Name: {dnsrecord['name']} | Type : {dnsrecord['type']} | IP: {dnsrecord['content']}") - dns_records_to_update[dnsrecord['type']].append(dnsrecord) - else: - if log: - print(f"| Unknow DNS | Type: {dnsrecord['type']} | Zone: {dnsrecord['name']}") - - self.DNSRECORDS = copy.deepcopy(dns_records_to_update) - - def update_records(self): - if self.IPVER == 'skip': - self.get_dns_records(log=True) - return - - self.get_dns_records() - - ipinformation = { - 'ipv4': [ipaddress.IPv4Address, 'A'], - 'ipv6': [ipaddress.IPv6Address, 'AAAA'] - } - - print(f"Updating IP of version {self.IPVER}") - assert isinstance(ipaddress.ip_address(self.IPNEW), ipinformation[self.IPVER][0]), f'IP {self.IPNEW} is not a valid IPv6 address' - dnstype = ipinformation[self.IPVER][1] - - names_replace = self.dns_replacements[dnstype] - print(names_replace) - for name in names_replace: - if (name == "@"): - fullname = self.HOSTNAME - else: - fullname = f"{name}.{self.HOSTNAME}" - - for record in self.DNSRECORDS[dnstype]: - if record['name'] == fullname: - new_dnsrecord = {"name": fullname, "type": dnstype, "content": self.IPNEW} - print(f"Sending request {new_dnsrecord}") - res = self._cloudflare.zones.dns_records.patch(self.zone_id, record['id'], data=new_dnsrecord) - if res['content'] != new_dnsrecord['content']: - print(res) - - - -if __name__ == '__main__': - dnsupdate = DNSUpdater(sys.argv) - dnsupdate.get_zones() - dnsupdate.update_records() \ No newline at end of file diff --git a/config.ini b/config.ini deleted file mode 100644 index 550c233..0000000 --- a/config.ini +++ /dev/null @@ -1,5 +0,0 @@ -[cloudflare] -TOKEN=w5qP_P47q_G8i55e3OvwuDiuyZXPFU5aXcrO3hnN - -[server] -HOSTNAME=neshura-server.net \ No newline at end of file diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index a5c93d4..0000000 --- a/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -cloudflare >= 2.0.0 \ No newline at end of file diff --git a/set_ip.sh b/set_ip.sh deleted file mode 100644 index ea6625d..0000000 --- a/set_ip.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash -if [ "$1" = "docker" ]; then - cd "/usr/bin/app" || exit - while : - do - clear - ipv4=$(curl -k -s https://am.i.mullvad.net/ip) - ipv6=$(curl -k -s https://ipv6.am.i.mullvad.net/) - python3 ./cloudflare_script.py 4 "$ipv4" - python3 ./cloudflare_script.py 6 "$ipv6" - sleep 120 - done -else - if [ ! -e cloudflare.json ] || [ ! -e config.ini ]; then - echo "Cloudflare config not found, is the script run in the correct directory?" - else - ipv4=$(curl -k -s https://am.i.mullvad.net/ip -4) - ipv6=$(curl -k -s https://ipv6.am.i.mullvad.net/) - source venv/bin/activate - python3 ./cloudflare_script.py 4 "$ipv4" - python3 ./cloudflare_script.py 6 "$ipv6" - fi -fi \ No newline at end of file