raannakasturi commited on
Commit
07861d1
·
verified ·
1 Parent(s): 571dfbe

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +180 -177
main.py CHANGED
@@ -1,177 +1,180 @@
1
- import re
2
- import time
3
- from genPVTCSR import gen_pvt_csr
4
- from tools import get_domains, get_ca_server, get_kid_hmac, extract_subdomains
5
- from acme_tools import pg_client, new_account
6
- from getTokenCert import get_tokens, verify_tokens
7
- from gen_records import txt_recs
8
- from dns_cf import add_txt, del_txt
9
- from verify_txt import verify_txt
10
- from send_mail import send_email
11
-
12
- def cf_non_wildcard(verification_tokens, email, exchange):
13
- tokens = verification_tokens
14
- for key, value in tokens.items():
15
- txt_rec = txt_recs(key, exchange)
16
- txt_value = value[0].strip()
17
- try:
18
- del_txt(txt_rec)
19
- except Exception as e:
20
- print(f"Error deleting TXT records or no TXT records exists: {e}")
21
- add_txt(txt_rec, txt_value, ssl_email=email)
22
-
23
- def cf_wildcard(verification_tokens, email, exchange):
24
- tokens = verification_tokens
25
- for key, value in tokens.items():
26
- txt_rec = txt_recs(key, exchange)
27
- print("\nTXT record:", txt_rec, "\n")
28
- try:
29
- del_txt(txt_rec)
30
- except Exception as e:
31
- print(f"Error deleting TXT records or no TXT records exists: {e}")
32
- for txt_value in value:
33
- add_txt(txt_rec, txt_value, ssl_email=email)
34
-
35
- def verify_email(email):
36
- pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
37
- return re.match(pattern, email)
38
-
39
- def validate_domains(i_domains):
40
- domains = []
41
- try:
42
- domains = get_domains(i_domains)
43
- except:
44
- domains = i_domains
45
- pattern = r'^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:\.[a-zA-Z]{2,})+$'
46
- for domain in domains:
47
- if re.match(pattern, domain):
48
- continue
49
- else:
50
- return False
51
- return True
52
-
53
- def verify_txt_records(verification_tokens, exchange):
54
- tokens = verification_tokens
55
- for key, value in tokens.items():
56
- txt_rec = key
57
- txt_value = value[0].strip()
58
- if not verify_txt(txt_rec, txt_value):
59
- return False
60
- else:
61
- continue
62
- return True
63
-
64
- def handle_error(message):
65
- err = f"Error: {message}"
66
- return err, err, err
67
-
68
- def main(i_domains, wildcard, email, ca_server, key_type, key_size=None, key_curve=None, kid=None, hmac=None):
69
- if i_domains == "":
70
- print("domain", i_domains)
71
- return handle_error("No domain provided")
72
- elif not validate_domains(i_domains):
73
- print("domain", i_domains)
74
- return handle_error("Invalid domains provided")
75
- else:
76
- print("domain", i_domains)
77
- if email == "":
78
- print("email", email)
79
- return handle_error("No email provided")
80
- elif not verify_email(email):
81
- print("email", email)
82
- return handle_error("Invalid email provided")
83
- else:
84
- print("email", email)
85
- if ca_server == "":
86
- print("ca", ca_server)
87
- return handle_error("No CA server provided")
88
- else:
89
- print("ca", ca_server)
90
- if key_type == "":
91
- print("key type", key_type)
92
- return handle_error("No key type provided")
93
- else:
94
- print("key type", key_type)
95
- if key_curve == "":
96
- print("size", key_size)
97
- print("curve", key_curve)
98
- return handle_error("No key size or curve provided")
99
- else:
100
- print("size", key_size)
101
- print("curve", key_curve)
102
- print("All data filled")
103
-
104
- domains = get_domains(i_domains)
105
- exchange = extract_subdomains(domains=domains)
106
- if wildcard:
107
- domains = [exchange, f'*.{exchange}']
108
- ca_server_url = get_ca_server(ca_server, key_type)
109
- pgk_client = pg_client(ca_server_url, key_type=key_type, key_size=key_size, key_curve=key_curve)
110
- if pgk_client is None:
111
- return handle_error("Cannot create client access")
112
- nkid, nhmac = get_kid_hmac(ca_server)
113
- if nkid == 'Error' or nhmac == 'Error':
114
- return handle_error("Try with another provider or contact us")
115
- kid = nkid
116
- hmac = nhmac
117
- account = new_account(pgk_client, email, kid=kid, hmac=hmac)
118
- if not account:
119
- return handle_error("Cannot generate your SSL. Too many requests for this domain.")
120
- private_key, csr = gen_pvt_csr(domains=domains, email=email, key_type=key_type, key_curve=key_curve, key_size=key_size)
121
- verification_tokens, challs, order = get_tokens(pgk_client, csr, ca_server_url)
122
- try:
123
- if wildcard:
124
- cf_wildcard(verification_tokens, email, exchange)
125
- else:
126
- cf_non_wildcard(verification_tokens, email, exchange)
127
- except Exception as e:
128
- print(f"Error adding TXT records: {e}")
129
- for i in range(30):
130
- print(f"Waiting for {30-i} seconds", end="\r")
131
- time.sleep(1)
132
- while not verify_txt_records(verification_tokens, exchange):
133
- print("TXT records not verified yet")
134
- time.sleep(5)
135
- cert = verify_tokens(pgk_client, challs, order)
136
- for key in verification_tokens:
137
- txt_rec = txt_recs(key, exchange)
138
- try:
139
- del_txt(txt_rec)
140
- print("TXT records deleted successfully")
141
- except Exception as e:
142
- print(f"Error deleting TXT records or no TXT records exist: {e}")
143
- private_key = private_key.decode("utf-8")
144
- csr = csr.decode("utf-8")
145
- cert = cert.decode("utf-8")
146
- generation_details = f"""
147
- SSL Certificate for {i_domains} were generated successfully, using Project Gatekeeper, a free SSL Certificate creator tool.
148
- SSL Provider = {ca_server}
149
- Key Type = {key_type}
150
- Key Curve = {key_curve}
151
- Key Size = {key_size}
152
- For more details, visit: https://projectgatekeeper.vercel.app/tool/decode.html
153
- """
154
- if send_email(email, private_key, csr, cert, generation_details):
155
- email_status = f"Email Sent to {email}"
156
- else:
157
- email_status = f"Can't sent email to {email}"
158
- return private_key, csr, cert, email_status
159
-
160
- if __name__ == "__main__":
161
- DOMAINS = 'raannakasturi.eu.org'
162
- ca_server = "Google" #Let's Encrypt (Testing), Let's Encrypt, Google (Testing), Google, Buypass (Testing), Buypass, ZeroSSL, SSL.com
163
- EMAIL = "[email protected]"
164
- key_type = "ecc"
165
- key_curve = "ec384"
166
- key_size = None
167
- KID = None
168
- HMAC = None
169
- private_key, csr, cert = main(i_domains=DOMAINS, wildcard=True, email=EMAIL, ca_server=ca_server, key_type=key_type, key_size=key_size,key_curve=key_curve, kid=KID, hmac=HMAC)
170
- print("Private Key:")
171
- print(private_key)
172
- print()
173
- print("CSR:")
174
- print(csr)
175
- print()
176
- print("Certificate:")
177
- print(cert)
 
 
 
 
1
+ import re
2
+ import time
3
+ from genPVTCSR import gen_pvt_csr
4
+ from tools import get_domains, get_ca_server, get_kid_hmac, extract_subdomains
5
+ from acme_tools import pg_client, new_account
6
+ from getTokenCert import get_tokens, verify_tokens
7
+ from gen_records import txt_recs
8
+ from dns_cf import add_txt, del_txt
9
+ from verify_txt import verify_txt
10
+ from send_mail import send_email
11
+
12
+ def cf_non_wildcard(verification_tokens, email, exchange):
13
+ tokens = verification_tokens
14
+ for key, value in tokens.items():
15
+ txt_rec = txt_recs(key, exchange)
16
+ txt_value = value[0].strip()
17
+ try:
18
+ del_txt(txt_rec)
19
+ except Exception as e:
20
+ print(f"Error deleting TXT records or no TXT records exists: {e}")
21
+ add_txt(txt_rec, txt_value, ssl_email=email)
22
+
23
+ def cf_wildcard(verification_tokens, email, exchange):
24
+ tokens = verification_tokens
25
+ for key, value in tokens.items():
26
+ txt_rec = txt_recs(key, exchange)
27
+ print("\nTXT record:", txt_rec, "\n")
28
+ try:
29
+ del_txt(txt_rec)
30
+ except Exception as e:
31
+ print(f"Error deleting TXT records or no TXT records exists: {e}")
32
+ for txt_value in value:
33
+ add_txt(txt_rec, txt_value, ssl_email=email)
34
+
35
+ def verify_email(email):
36
+ pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
37
+ return re.match(pattern, email)
38
+
39
+ def validate_domains(i_domains):
40
+ domains = []
41
+ try:
42
+ domains = get_domains(i_domains)
43
+ except:
44
+ domains = i_domains
45
+ pattern = r'^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:\.[a-zA-Z]{2,})+$'
46
+ for domain in domains:
47
+ if re.match(pattern, domain):
48
+ continue
49
+ else:
50
+ return False
51
+ return True
52
+
53
+ def verify_txt_records(verification_tokens, exchange):
54
+ tokens = verification_tokens
55
+ for key, value in tokens.items():
56
+ txt_rec = key
57
+ txt_value = value[0].strip()
58
+ if not verify_txt(txt_rec, txt_value):
59
+ return False
60
+ else:
61
+ continue
62
+ return True
63
+
64
+ def handle_error(message):
65
+ err = f"Error: {message}"
66
+ return err, err, err
67
+
68
+ def main(i_domains, wildcard, email, ca_server, key_type, key_size=None, key_curve=None, kid=None, hmac=None):
69
+ if i_domains == "":
70
+ print("domain", i_domains)
71
+ return handle_error("No domain provided")
72
+ elif not validate_domains(i_domains):
73
+ print("domain", i_domains)
74
+ return handle_error("Invalid domains provided")
75
+ else:
76
+ print("domain", i_domains)
77
+ if email == "":
78
+ print("email", email)
79
+ return handle_error("No email provided")
80
+ elif not verify_email(email):
81
+ print("email", email)
82
+ return handle_error("Invalid email provided")
83
+ else:
84
+ print("email", email)
85
+ if ca_server == "":
86
+ print("ca", ca_server)
87
+ return handle_error("No CA server provided")
88
+ else:
89
+ print("ca", ca_server)
90
+ if key_type == "":
91
+ print("key type", key_type)
92
+ return handle_error("No key type provided")
93
+ else:
94
+ print("key type", key_type)
95
+ if key_curve == "":
96
+ print("size", key_size)
97
+ print("curve", key_curve)
98
+ return handle_error("No key size or curve provided")
99
+ else:
100
+ print("size", key_size)
101
+ print("curve", key_curve)
102
+ print("All data filled")
103
+
104
+ domains = get_domains(i_domains)
105
+ exchange = extract_subdomains(domains=domains)
106
+ if wildcard:
107
+ domains = [exchange, f'*.{exchange}']
108
+ ca_server_url = get_ca_server(ca_server, key_type)
109
+ pgk_client = pg_client(ca_server_url, key_type=key_type, key_size=key_size, key_curve=key_curve)
110
+ if pgk_client is None:
111
+ return handle_error("Cannot create client access")
112
+ nkid, nhmac = get_kid_hmac(ca_server)
113
+ if nkid == 'Error' or nhmac == 'Error':
114
+ return handle_error("Try with another provider or contact us")
115
+ kid = nkid
116
+ hmac = nhmac
117
+ account = new_account(pgk_client, email, kid=kid, hmac=hmac)
118
+ if not account:
119
+ return handle_error("Cannot generate your SSL. Too many requests for this domain.")
120
+ private_key, csr = gen_pvt_csr(domains=domains, email=email, key_type=key_type, key_curve=key_curve, key_size=key_size)
121
+ verification_tokens, challs, order = get_tokens(pgk_client, csr, ca_server_url)
122
+ try:
123
+ if wildcard:
124
+ cf_wildcard(verification_tokens, email, exchange)
125
+ else:
126
+ cf_non_wildcard(verification_tokens, email, exchange)
127
+ except Exception as e:
128
+ print(f"Error adding TXT records: {e}")
129
+ for i in range(30):
130
+ print(f"Waiting for {30-i} seconds", end="\r")
131
+ time.sleep(1)
132
+ retries = 0
133
+ while not verify_txt_records(verification_tokens, exchange):
134
+ print("TXT records not verified yet")
135
+ if retries >=50:
136
+ break
137
+ time.sleep(5)
138
+ cert = verify_tokens(pgk_client, challs, order)
139
+ for key in verification_tokens:
140
+ txt_rec = txt_recs(key, exchange)
141
+ try:
142
+ del_txt(txt_rec)
143
+ print("TXT records deleted successfully")
144
+ except Exception as e:
145
+ print(f"Error deleting TXT records or no TXT records exist: {e}")
146
+ private_key = private_key.decode("utf-8")
147
+ csr = csr.decode("utf-8")
148
+ cert = cert.decode("utf-8")
149
+ generation_details = f"""
150
+ SSL Certificate for {i_domains} were generated successfully, using Project Gatekeeper, a free SSL Certificate creator tool.
151
+ SSL Provider = {ca_server}
152
+ Key Type = {key_type}
153
+ Key Curve = {key_curve}
154
+ Key Size = {key_size}
155
+ For more details, visit: https://projectgatekeeper.vercel.app/tool/decode.html
156
+ """
157
+ if send_email(email, private_key, csr, cert, generation_details):
158
+ email_status = f"Email Sent to {email}"
159
+ else:
160
+ email_status = f"Can't sent email to {email}"
161
+ return private_key, csr, cert, email_status
162
+
163
+ if __name__ == "__main__":
164
+ DOMAINS = 'raannakasturi.eu.org'
165
+ ca_server = "Google" #Let's Encrypt (Testing), Let's Encrypt, Google (Testing), Google, Buypass (Testing), Buypass, ZeroSSL, SSL.com
166
+ EMAIL = "[email protected]"
167
+ key_type = "ecc"
168
+ key_curve = "ec384"
169
+ key_size = None
170
+ KID = None
171
+ HMAC = None
172
+ private_key, csr, cert = main(i_domains=DOMAINS, wildcard=True, email=EMAIL, ca_server=ca_server, key_type=key_type, key_size=key_size,key_curve=key_curve, kid=KID, hmac=HMAC)
173
+ print("Private Key:")
174
+ print(private_key)
175
+ print()
176
+ print("CSR:")
177
+ print(csr)
178
+ print()
179
+ print("Certificate:")
180
+ print(cert)