File size: 2,628 Bytes
98c182e
 
 
 
8895821
98c182e
 
 
 
 
335ca34
 
8895821
98c182e
 
 
335ca34
98c182e
 
335ca34
98c182e
 
335ca34
 
 
 
 
 
 
98c182e
335ca34
98c182e
 
335ca34
98c182e
 
335ca34
98c182e
 
335ca34
98c182e
 
 
 
335ca34
98c182e
 
 
 
 
 
8895821
98c182e
 
 
8895821
98c182e
ee63773
98c182e
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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()