mirror of
				https://github.com/KevinMidboe/cloudflare-ddns.git
				synced 2025-10-29 17:40:17 +00:00 
			
		
		
		
	Moved all source files to src/
This commit is contained in:
		
							
								
								
									
										70
									
								
								src/main.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								src/main.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,70 @@ | ||||
| import os | ||||
| import re | ||||
| import requests | ||||
| from bulk_dns_update import updateAllZones, setAPIKey, getDDNSAddresszoneId | ||||
| from notify import notify | ||||
| from dotenv import load_dotenv | ||||
| from logger import logger | ||||
|  | ||||
| load_dotenv() | ||||
|  | ||||
| DDNS_ZONE = os.getenv('DDNS_ZONE') | ||||
|  | ||||
|  | ||||
| def validIP(ipString): | ||||
|     ipRegex = '^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$' | ||||
|     return bool(re.search(ipRegex, str(ipString))) | ||||
|  | ||||
|  | ||||
| def publicAddress(): | ||||
|     logger.info('Getting public IP from ifconfg.me...') | ||||
|  | ||||
|     r = requests.get('https://ifconfig.me') | ||||
|     if r.status_code != 200: | ||||
|         return | ||||
|  | ||||
|     ip = r.text | ||||
|     if not validIP(ip): | ||||
|         return | ||||
|  | ||||
|     logger.info('Public IP: {}'.format(ip)) | ||||
|     return ip | ||||
|  | ||||
|  | ||||
| def cloudflareDDNS(): | ||||
|     logger.info('Checking IP recorded in Cloudflare...') | ||||
|     ddnsRecord = getDDNSAddresszoneId(DDNS_ZONE) | ||||
|     ip = ddnsRecord['content'] | ||||
|     logger.info('Found ddns recorded IP: {}'.format(ip)) | ||||
|  | ||||
|     if not validIP(ip): | ||||
|         return | ||||
|  | ||||
|     return ip | ||||
|  | ||||
|  | ||||
| def main(): | ||||
|     apiKey = os.getenv('API_KEY') | ||||
|     if apiKey is None: | ||||
|         raise Exception( | ||||
|             'In .env file or environment set Cloudflare variable: API_KEY') | ||||
|     if DDNS_ZONE is None: | ||||
|         raise Exception( | ||||
|             'In .env file or environment; set Cloudflare zone where addr. points to current IP.') | ||||
|  | ||||
|     setAPIKey(apiKey) | ||||
|  | ||||
|     currentIP = publicAddress() | ||||
|     recordedIP = cloudflareDDNS() | ||||
|  | ||||
|     if currentIP == recordedIP or None in [currentIP, recordedIP]: | ||||
|         logger.info('is same, exiting') | ||||
|         return | ||||
|  | ||||
|     logger.info('Public IP has changed, updating all A records.') | ||||
|     notify("IP changed to: {}. Updating all cloudflare zones!".format(currentIP)) | ||||
|     updateAllZones(recordedIP, currentIP) | ||||
|  | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|     main() | ||||
		Reference in New Issue
	
	Block a user