mirror of
				https://github.com/KevinMidboe/cloudflare-ddns.git
				synced 2025-10-29 17:40:17 +00:00 
			
		
		
		
	Send SMS to notify when IP cycles
This commit is contained in:
		| @@ -8,3 +8,5 @@ metadata: | |||||||
| data: | data: | ||||||
|   DDNS_ZONE: ${DDNS_ZONE} |   DDNS_ZONE: ${DDNS_ZONE} | ||||||
|   API_KEY: ${API_KEY} |   API_KEY: ${API_KEY} | ||||||
|  |   SMS_API_KEY: ${SMS_API_KEY} | ||||||
|  |   SMS_RECIPIENT: ${SMS_RECIPIENT} | ||||||
|   | |||||||
							
								
								
									
										12
									
								
								main.py
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								main.py
									
									
									
									
									
								
							| @@ -1,12 +1,14 @@ | |||||||
| import os | import os | ||||||
| import requests | import requests | ||||||
| from bulk_dns_update import updateAllZones, setAPIKey, getDDNSAddresszoneId | from bulk_dns_update import updateAllZones, setAPIKey, getDDNSAddresszoneId | ||||||
|  | from notify import notify | ||||||
| from dotenv import load_dotenv | from dotenv import load_dotenv | ||||||
| from logger import logger | from logger import logger | ||||||
|  |  | ||||||
| load_dotenv() | load_dotenv() | ||||||
|  |  | ||||||
| currentIP = None | currentIP = None | ||||||
|  | recordedIP = None | ||||||
| DDNS_ZONE = os.getenv('DDNS_ZONE') | DDNS_ZONE = os.getenv('DDNS_ZONE') | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -20,6 +22,7 @@ def publicAddress(): | |||||||
|  |  | ||||||
|  |  | ||||||
| def cloudflareDDNS(): | def cloudflareDDNS(): | ||||||
|  |     global recordedIP | ||||||
|     logger.info('Checking IP recorded in Cloudflare...') |     logger.info('Checking IP recorded in Cloudflare...') | ||||||
|     ddnsRecord = getDDNSAddresszoneId(DDNS_ZONE) |     ddnsRecord = getDDNSAddresszoneId(DDNS_ZONE) | ||||||
|     recordedIP = ddnsRecord['content'] |     recordedIP = ddnsRecord['content'] | ||||||
| @@ -27,9 +30,10 @@ def cloudflareDDNS(): | |||||||
|  |  | ||||||
|     if currentIP != recordedIP: |     if currentIP != recordedIP: | ||||||
|         logger.info('Public IP has changed, updating all A records.') |         logger.info('Public IP has changed, updating all A records.') | ||||||
|         updateAllZones(recordedIP, currentIP) |         return True | ||||||
|     else: |     else: | ||||||
|         logger.info('is same, exiting') |         logger.info('is same, exiting') | ||||||
|  |         return False | ||||||
|  |  | ||||||
|  |  | ||||||
| def main(): | def main(): | ||||||
| @@ -42,7 +46,11 @@ def main(): | |||||||
|     setAPIKey(apiKey) |     setAPIKey(apiKey) | ||||||
|  |  | ||||||
|     publicAddress() |     publicAddress() | ||||||
|     cloudflareDDNS() |     changed = cloudflareDDNS() | ||||||
|  |  | ||||||
|  |     if changed: | ||||||
|  |         notify("IP changed to: {}. Updating all cloudflare zones!".format(currentIP)) | ||||||
|  |         updateAllZones(recordedIP, currentIP) | ||||||
|  |  | ||||||
|  |  | ||||||
| if __name__ == '__main__': | if __name__ == '__main__': | ||||||
|   | |||||||
							
								
								
									
										42
									
								
								notify.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								notify.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,42 @@ | |||||||
|  | import base64 | ||||||
|  | import requests | ||||||
|  | from os import getenv | ||||||
|  | from json import dumps | ||||||
|  | from logger import logger | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def notify(message): | ||||||
|  |     SMS_API_KEY = getenv('SMS_API_KEY') | ||||||
|  |     SMS_RECIPIENT = getenv('SMS_RECIPIENT') | ||||||
|  |  | ||||||
|  |     if not SMS_API_KEY: | ||||||
|  |         logger.info("No SMS API key found, not notifying") | ||||||
|  |         return | ||||||
|  |  | ||||||
|  |     if not SMS_RECIPIENT: | ||||||
|  |         logger.info("No SMS recipient found, not notifying") | ||||||
|  |         return | ||||||
|  |  | ||||||
|  |     recipient = "47{}".format(SMS_RECIPIENT) | ||||||
|  |     apiKey = base64.b64encode(SMS_API_KEY.encode("utf-8")).decode("utf-8") | ||||||
|  |  | ||||||
|  |     logger.info("Notifying of IP change over SMS") | ||||||
|  |     url = "https://gatewayapi.com/rest/mtsms" | ||||||
|  |     payload = { | ||||||
|  |         "sender": "Dynamic DNS", | ||||||
|  |         "message": message, | ||||||
|  |         "recipients": [{"msisdn": recipient}] | ||||||
|  |     } | ||||||
|  |     headers = { | ||||||
|  |         "Host": "gatewayapi.com", | ||||||
|  |         "Authorization": "Basic " + apiKey, | ||||||
|  |         "Accept": "application/json", | ||||||
|  |         "Content-Type": "application/json" | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     r = requests.post(url, data=dumps(payload), headers=headers) | ||||||
|  |     response = r.json() | ||||||
|  |  | ||||||
|  |     logger.info("Response from SMS api") | ||||||
|  |     logger.info("Status: {} {}".format(str(r.status_code), str(r.reason))) | ||||||
|  |     logger.info(response) | ||||||
		Reference in New Issue
	
	Block a user