Compare commits

...
5 Commits
Author SHA1 Message Date
pavak 49e7cd13b6 formatting and cleanup 2022-06-01 18:07:05 +05:30
pavak bb80e40ce9 Completed 2022-06-01 01:56:44 +05:30
pavak 254615eda6 added DNS export files to gitignore 2022-05-31 23:06:03 +05:30
pavak 48cfb3ee87 getAllDNS, deleteARecord and some main file logics 2022-05-28 02:06:26 +05:30
pavak 790a38a970 verify access and list zones 2022-05-27 01:47:43 +05:30
3 changed files with 110 additions and 3 deletions

No files matched your search

+3 -1
View File
@@ -168,4 +168,6 @@ cython_debug/
# Project setup # Project setup
config.json config.json
response-example*
dns-export*
+56
View File
@@ -0,0 +1,56 @@
import requests
def getHeaders(credentials):
headers = {'Authorization': f'Bearer {credentials["api_key"]}', 'X-Auth-Email': f'{credentials["email"]}',
'Content-Type': 'application/json'}
return headers
def errorChecker(r):
if r.status_code == 200:
return False
elif r.status_code == 429:
print(f'\n\n\n{"="*80}It looks like you have reached your rate limit to access CloudFlare APIs\nPlease try after 5 minutes.{"="*80}')
else:
print(f'Error {r.status_code}.\nDetails:\n{r.json()}')
assert False
def verifyCredentials(credentials):
headers = getHeaders(credentials)
r = requests.get('https://api.cloudflare.com/client/v4/user/tokens/verify', headers=headers)
errorChecker(r)
return r
def listAllZones(credentials):
zones = requests.get(
'https://api.cloudflare.com/client/v4/zones',
headers= getHeaders(credentials)
)
errorChecker(zones)
return zones
def getAllDNS(credentials, id):
dns_records = requests.get(
f'https://api.cloudflare.com/client/v4/zones/{id}/dns_records',
headers=getHeaders(credentials)
)
errorChecker(dns_records)
return dns_records
def exportBindDNS(credentials, id):
export_response = requests.get(
f'https://api.cloudflare.com/client/v4/zones/{id}/dns_records/export',
headers=getHeaders(credentials)
)
errorChecker(export_response)
return export_response
def deleteARecord(credentials, zone_id, dns_id):
delete_response = requests.delete(
f'https://api.cloudflare.com/client/v4/zones/{zone_id}/dns_records/{dns_id}',
headers=getHeaders(credentials)
)
errorChecker(delete_response)
return delete_response
+51 -2
View File
@@ -1,7 +1,10 @@
import json import json
import uuid
import datetime
from fileinput import filename
from sys import argv from sys import argv
from pathlib import Path from pathlib import Path
import requests from apicalls import *
# Get API key and Email address # Get API key and Email address
@@ -24,4 +27,50 @@ if len(argv) > 1 and 'loadconfig' in argv:
else: else:
credentials = getCredentials() credentials = getCredentials()
# print(credentials)
zones = listAllZones(credentials).json()["result"]
print('Here are the domains in your account')
zone_index = 0
zone_list = {}
for zone in zones:
print(f'{zone_index + 1}: {zone["name"]}')
zone_list[zone['name']] = {'id': zone['id'], 'name': zone['name'], 'owner': zone['owner']['email'], 'account_of': zone['account']['name']}
domainToDelete = input('Please enter the domain name to delete the DNS records from:\n')
if domainToDelete in zone_list:
zone_id = zone_list[domainToDelete]['id']
zone_owner = zone_list[domainToDelete]['owner']
confirmation = input(f'Are you sure to delete all the DNS records from the domain {domainToDelete}, owned by {zone_owner}?\nEnter YES to continue: ')
if confirmation == 'YES':
# Get Bind DNS
bind_DNS = exportBindDNS(credentials, zone_id).text
# Write to a file
file_name = f'dns-export-{str(uuid.uuid4())[0:8]}-{domainToDelete}-{datetime.datetime.now().strftime("%d-%b-%Y-%H-%M-%S")}.txt'
print(f'Backing up DNS records to {file_name}')
bind_export_file = open(file_name, 'w')
bind_export_file.write(bind_DNS)
bind_export_file.close()
print('Successfully backed up DNS records in BIND format.')
# get DNS Records
dns_records = getAllDNS(credentials, zone_id).json()["result"]
# Delete DNS Records
print('Starting Deletion of DNS records')
for record in dns_records:
dns_id = record['id']
dns_type = record['type']
dns_name = record['name']
dns_content = record['content']
print(f'Deleting:\n{dns_type}\t{dns_name}\t{dns_content}...')
delete_response = deleteARecord(credentials, zone_id, dns_id)
if delete_response.json()['result']['id'] == dns_id:
print(f'Successfully Deleted {dns_id}')
else:
print('Something is wrong, abroading...')
assert False
else:
print('Aborted, bye...')
else:
print('We don\'t have access to the domain name you have entered. Please make sure the API key you have provided has access to the domain name you have entereed.')