mirror of
https://github.com/Hyperspeed1313/porkbun-dynamic-dns-python.git
synced 2026-01-31 04:41:21 +00:00
Only delete the existing entry if it has the wrong content.
Add quiet option so it doesn't fill up the logs running as a cronjob. Removed a couple of unnecessary semicolons.
This commit is contained in:
parent
22338834b5
commit
a477a75e76
3 changed files with 23 additions and 10 deletions
|
|
@ -1,36 +1,43 @@
|
|||
import json
|
||||
import requests
|
||||
import re
|
||||
import sys
|
||||
|
||||
def printIfAllowed(content): #print the status of a json query if it is not a success or if quiet mode is not enabled
|
||||
if ("error" in content.lower()) or canPrint:
|
||||
print(content)
|
||||
|
||||
def getRecords(domain): #grab all the records so we know which ones to delete to make room for our record. Also checks to make sure we've got the right domain
|
||||
allRecords=json.loads(requests.post(apiConfig["endpoint"] + '/dns/retrieve/' + domain, data = json.dumps(apiConfig)).text)
|
||||
if allRecords["status"]=="ERROR":
|
||||
print('Error getting domain. Check to make sure you specified the correct domain, and that API access has been switched on for this domain.');
|
||||
sys.exit();
|
||||
# No reason to feed into printIfAllowed, it will always print
|
||||
print('Error getting domain. Check to make sure you specified the correct domain, and that API access has been switched on for this domain.')
|
||||
sys.exit()
|
||||
return(allRecords)
|
||||
|
||||
def getMyIP():
|
||||
ping = json.loads(requests.post(apiConfig["endpoint"] + '/ping/', data = json.dumps(apiConfig)).text)
|
||||
return(ping["yourIp"])
|
||||
|
||||
def deleteRecord():
|
||||
def replaceInvalidRecords():
|
||||
for i in getRecords(rootDomain)["records"]:
|
||||
if i["name"]==fqdn and (i["type"] == 'A' or i["type"] == 'ALIAS' or i["type"] == 'CNAME'):
|
||||
print("Deleting existing " + i["type"] + " Record")
|
||||
deleteRecord = json.loads(requests.post(apiConfig["endpoint"] + '/dns/delete/' + rootDomain + '/' + i["id"], data = json.dumps(apiConfig)).text)
|
||||
if myIP != i["content"]:
|
||||
printIfAllowed("Deleting existing " + i["type"] + " Record")
|
||||
printIfAllowed( "DELETE: " + (json.loads(requests.post(apiConfig["endpoint"] + '/dns/delete/' + rootDomain + '/' + i["id"], data = json.dumps(apiConfig)).text)["status"]) )
|
||||
printIfAllowed( "CREATE: " + (createRecord()["status"]) )
|
||||
|
||||
def createRecord():
|
||||
createObj=apiConfig.copy()
|
||||
createObj.update({'name': subDomain, 'type': 'A', 'content': myIP, 'ttl': 300})
|
||||
endpoint = apiConfig["endpoint"] + '/dns/create/' + rootDomain
|
||||
print("Creating record: " + fqdn + " with answer of " + myIP)
|
||||
printIfAllowed("Creating record: " + fqdn + " with answer of " + myIP)
|
||||
create = json.loads(requests.post(apiConfig["endpoint"] + '/dns/create/'+ rootDomain, data = json.dumps(createObj)).text)
|
||||
return(create)
|
||||
|
||||
if len(sys.argv)>2: #at least the config and root domain is specified
|
||||
apiConfig = json.load(open(sys.argv[1])) #load the config file into a variable
|
||||
rootDomain=sys.argv[2].lower()
|
||||
canPrint=not apiConfig["quiet"].lower=="true"
|
||||
|
||||
if len(sys.argv)>3 and sys.argv[3]!='-i': #check if a subdomain was specified as the third argument
|
||||
subDomain=sys.argv[3].lower()
|
||||
|
|
@ -46,8 +53,8 @@ if len(sys.argv)>2: #at least the config and root domain is specified
|
|||
else:
|
||||
myIP=getMyIP() #otherwise use the detected exterior IP address
|
||||
|
||||
deleteRecord()
|
||||
print(createRecord()["status"])
|
||||
replaceInvalidRecords()
|
||||
|
||||
else:
|
||||
# No reason to feed into printIfAllowed, it will always print
|
||||
print("Porkbun Dynamic DNS client, Python Edition\n\nError: not enough arguments. Examples:\npython porkbun-ddns.py /path/to/config.json example.com\npython porkbun-ddns.py /path/to/config.json example.com www\npython porkbun-ddns.py /path/to/config.json example.com '*'\npython porkbun-ddns.py /path/to/config.json example.com -i 10.0.0.1\n")
|
||||
Loading…
Add table
Add a link
Reference in a new issue