verifycname / app.py
raannakasturi's picture
Refactor verify_cnames function to include wildcard option
8895821
import gradio as gr
from dns import resolver
from generateCNAMES import generate_cnames
def verify_cnames(i_domains, wildcard):
cname_rec = []
cname_value_expected = []
cname_value_found = []
cname_status = []
cf_domain = "silerudaagartha.eu.org"
# Generate CNAMEs based on input domains and cloudflare domain
cname_recs, cname_values = generate_cnames(i_domains, cf_domain, wildcard)
for rec, value in zip(cname_recs, cname_values):
cname_record = None
status = "Not Verified" # Default status
try:
# Try resolving the CNAME record
cname_answers = resolver.resolve(rec, 'CNAME')
for answer in cname_answers:
cname_record = answer.to_text().rstrip(".") # Remove trailing dot
# Check if the CNAME record matches the expected value
if cname_record in value:
status = "Verified"
break # Stop checking other answers once we find a valid one
except Exception as e:
# If there's an error, print it and leave status as "Not Verified"
print(f"An error occurred while resolving {rec}: {e}")
# Append results to lists
cname_rec.append(rec)
cname_value_expected.append(value)
cname_value_found.append(cname_record or "None")
cname_status.append(status)
# Prepare table data for printing or returning
table_data = []
for record, expvalue, foundval, stat in zip(cname_rec, cname_value_expected, cname_value_found, cname_status):
table_data.append([record, expvalue, foundval, stat])
print(table_data) # For debugging purposes
return table_data
def app():
with gr.Blocks(title="Verify CNAMES for Project Gatekeeper") as webui:
with gr.Row():
check_domains = gr.Textbox(label="Enter CNAME", placeholder="thenayankasturi.eu.org, dash.thenayankasturi.eu.org, www.thenayankasturi.eu.org", type="text", interactive=True)
wildcard = gr.Checkbox(label="Wildcard", value=False)
btn2 = gr.Button(value="Check CNAME Propagation")
with gr.Row():
data = gr.Dataframe(label="CNAME Records", headers=["CNAME", "Expected CNAME Value", "Found CNAME Value", "CNAME Status"], row_count=(1), col_count=(4))
btn2.click(verify_cnames, inputs=[check_domains, wildcard], outputs=data)
try:
webui.queue(default_concurrency_limit=25).launch()
except Exception as e:
print(f"Error: {e}")
if __name__ == "__main__":
app()