Send SMS to notify when IP cycles

This commit is contained in:
2024-02-11 12:37:37 +01:00
parent fde88fd655
commit cdfb4aef5f
3 changed files with 54 additions and 2 deletions

View File

@@ -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
View File

@@ -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
View 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)