|
@@ -2,6 +2,7 @@ import gi
|
|
|
gi.require_version('Gtk', '3.0')
|
|
gi.require_version('Gtk', '3.0')
|
|
|
from gi.repository import GLib, Gtk, GObject
|
|
from gi.repository import GLib, Gtk, GObject
|
|
|
import json
|
|
import json
|
|
|
|
|
+from nginxparser import loads
|
|
|
import re
|
|
import re
|
|
|
import spur
|
|
import spur
|
|
|
import threading
|
|
import threading
|
|
@@ -15,6 +16,7 @@ def ssh_command(command, sudo=False):
|
|
|
shell = spur.SshShell(
|
|
shell = spur.SshShell(
|
|
|
hostname=creds['host'],
|
|
hostname=creds['host'],
|
|
|
username=creds['user'],
|
|
username=creds['user'],
|
|
|
|
|
+ password=creds['passphrase'],
|
|
|
private_key_file=creds['ssh_key_path'])
|
|
private_key_file=creds['ssh_key_path'])
|
|
|
with shell:
|
|
with shell:
|
|
|
command_bits = command.split(" ")
|
|
command_bits = command.split(" ")
|
|
@@ -72,36 +74,79 @@ class EntryWindow(Gtk.Window):
|
|
|
self.progressbar.set_text('Done: ' + domain)
|
|
self.progressbar.set_text('Done: ' + domain)
|
|
|
return False
|
|
return False
|
|
|
|
|
|
|
|
- def example_target(self):
|
|
|
|
|
|
|
+ def get_https_domains(self):
|
|
|
for d in self.domains:
|
|
for d in self.domains:
|
|
|
GLib.idle_add(self.get_https_subdomains_for_domain, d)
|
|
GLib.idle_add(self.get_https_subdomains_for_domain, d)
|
|
|
- time.sleep(0.3)
|
|
|
|
|
|
|
+ time.sleep(0.4)
|
|
|
|
|
|
|
|
|
|
+ def get_nginx_vhosts(self):
|
|
|
|
|
+ for v in self.vhosts:
|
|
|
|
|
+ GLib.idle_add(self.get_nginx_vhost, v)
|
|
|
|
|
+ time.sleep(0.4)
|
|
|
|
|
+
|
|
|
|
|
+ def start_thread(self, func):
|
|
|
|
|
+ thread = threading.Thread(target=func)
|
|
|
|
|
+ thread.daemon = True
|
|
|
|
|
+ thread.start()
|
|
|
|
|
|
|
|
def on_button_clicked(self, widget):
|
|
def on_button_clicked(self, widget):
|
|
|
|
|
+ decoded = ssh_command("ls /etc/nginx/sites-enabled")
|
|
|
|
|
+ vhosts = decoded.split("\n")
|
|
|
|
|
+ vhosts.pop()
|
|
|
|
|
+
|
|
|
|
|
+ self.vhosts = vhosts
|
|
|
|
|
+ self.num_vhosts = len(vhosts)
|
|
|
|
|
+ self.vhosts_done = 0
|
|
|
|
|
+
|
|
|
decoded = ssh_command("ls /etc/letsencrypt/live", True)
|
|
decoded = ssh_command("ls /etc/letsencrypt/live", True)
|
|
|
domains = decoded.split("\n")
|
|
domains = decoded.split("\n")
|
|
|
domains.pop()
|
|
domains.pop()
|
|
|
|
|
|
|
|
self.domains = domains
|
|
self.domains = domains
|
|
|
self.num_domains = len(domains)
|
|
self.num_domains = len(domains)
|
|
|
- self.num_done = 0
|
|
|
|
|
|
|
+ self.domains_done = 0
|
|
|
|
|
|
|
|
- thread = threading.Thread(target=self.example_target)
|
|
|
|
|
- thread.daemon = True
|
|
|
|
|
- thread.start()
|
|
|
|
|
|
|
+ self.start_thread(self.get_nginx_vhosts)
|
|
|
|
|
+ # self.start_thread(self.get_https_domains)
|
|
|
|
|
|
|
|
# subdomains = [self.get_https_subdomains_for_domain(d) for d in domains]
|
|
# subdomains = [self.get_https_subdomains_for_domain(d) for d in domains]
|
|
|
# subdomains_dict = dict(zip(domains, subdomains))
|
|
# subdomains_dict = dict(zip(domains, subdomains))
|
|
|
# print(subdomains_dict)
|
|
# print(subdomains_dict)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+ def get_nginx_vhost(self, vhost):
|
|
|
|
|
+ print(vhost)
|
|
|
|
|
+ vhost_file = ssh_command("cat /etc/nginx/sites-enabled/" + vhost)
|
|
|
|
|
+ parsed = loads(vhost_file)
|
|
|
|
|
+ port_subdmomains = {}
|
|
|
|
|
+ for server in parsed:
|
|
|
|
|
+ server_inner = server[1]
|
|
|
|
|
+ port = 0
|
|
|
|
|
+ subdomains = []
|
|
|
|
|
+ for directive in server_inner:
|
|
|
|
|
+ if not port and "listen" in directive:
|
|
|
|
|
+ p = re.compile('(\d+)')
|
|
|
|
|
+ print('listen')
|
|
|
|
|
+ ports = p.findall(directive[1])
|
|
|
|
|
+ port = int(ports[0])
|
|
|
|
|
+ if "server_name" in directive:
|
|
|
|
|
+ print('server_name')
|
|
|
|
|
+ print(directive)
|
|
|
|
|
+ subd_trimmed = directive[1].strip()
|
|
|
|
|
+ subdomains = subd_trimmed.split(' ')
|
|
|
|
|
+ port_subdmomains[port] = subdomains
|
|
|
|
|
+ print(port_subdmomains)
|
|
|
|
|
+ self.vhosts_done += 1
|
|
|
|
|
+ percent_done = self.vhosts_done * 1.0 / self.num_vhosts
|
|
|
|
|
+ self.progressbar.set_fraction(percent_done)
|
|
|
|
|
+ return False
|
|
|
|
|
+
|
|
|
def get_https_subdomains_for_domain(self, domain):
|
|
def get_https_subdomains_for_domain(self, domain):
|
|
|
print(domain)
|
|
print(domain)
|
|
|
p = re.compile('DNS:([0-9a-z-.]+)')
|
|
p = re.compile('DNS:([0-9a-z-.]+)')
|
|
|
cert_data = ssh_command("sudo openssl x509 -text -in /etc/letsencrypt/live/" + domain + "/fullchain.pem", True)
|
|
cert_data = ssh_command("sudo openssl x509 -text -in /etc/letsencrypt/live/" + domain + "/fullchain.pem", True)
|
|
|
- self.num_done += 1
|
|
|
|
|
- percent_done = self.num_done * 1.0 / self.num_domains
|
|
|
|
|
|
|
+ self.domains_done += 1
|
|
|
|
|
+ percent_done = self.domains_done * 1.0 / self.num_domains
|
|
|
# print(percent_done)
|
|
# print(percent_done)
|
|
|
self.progressbar.set_fraction(percent_done)
|
|
self.progressbar.set_fraction(percent_done)
|
|
|
# self.progressbar.set_text('Done: ' + domain)
|
|
# self.progressbar.set_text('Done: ' + domain)
|