Files
proxy_deployer/app/nginx_deploy_gui.py

165 lines
5.3 KiB
Python

import sys
import os
from PySide6.QtWidgets import (
QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,
QPushButton, QLineEdit, QTextEdit, QLabel, QFileDialog, QStatusBar
)
from PySide6.QtCore import Qt
from datetime import datetime
LOG_FILE = "logs/nginx_deploy_gui.log"
class Logger:
def __init__(self, log_widget):
self.log_widget = log_widget
self.log_file = open(LOG_FILE, "a")
def log(self, message):
timestamp = datetime.now().strftime("[%Y-%m-%d %H:%M:%S]")
full_message = f"{timestamp} {message}\n"
self.log_widget.append(full_message)
self.log_file.write(full_message)
self.log_file.flush()
def close(self):
self.log_file.close()
class DeploymentController:
def __init__(self, logger):
self.logger = logger
# These will be set by the UI
self.ssh_key = None
self.config_dir = None
def preflight_checks(self):
self.logger.log("Running pre-flight checks...")
# Stub: implement actual checks
self.logger.log("Pre-flight checks complete.")
def scan_domains(self):
self.logger.log("Scanning for domains in configs...")
# Stub: implement domain scan
self.logger.log("Domain scan complete.")
def transfer_files(self):
self.logger.log("Transferring files to remote server...")
# Stub: implement file transfer
self.logger.log("File transfer complete.")
def remote_ops(self):
self.logger.log("Performing remote file operations...")
# Stub: implement remote ops
self.logger.log("Remote operations complete.")
def run_certbot(self):
self.logger.log("Prompting user for Certbot run...")
# Stub: implement certbot prompt and run
self.logger.log("Certbot step complete.")
def cleanup(self):
self.logger.log("Performing cleanup...")
# Stub: implement cleanup
self.logger.log("Cleanup complete.")
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("NGINX Deployment Controller")
self.resize(700, 500)
self.central = QWidget()
self.setCentralWidget(self.central)
self.layout = QVBoxLayout(self.central)
# SSH Key Picker
self.ssh_key_line = QLineEdit()
self.ssh_key_browse = QPushButton("Browse")
self.ssh_key_browse.clicked.connect(self.browse_ssh_key)
ssh_key_layout = QHBoxLayout()
ssh_key_layout.addWidget(QLabel("SSH Key:"))
ssh_key_layout.addWidget(self.ssh_key_line)
ssh_key_layout.addWidget(self.ssh_key_browse)
self.layout.addLayout(ssh_key_layout)
# Config Directory Picker
self.config_dir_line = QLineEdit()
self.config_dir_browse = QPushButton("Browse")
self.config_dir_browse.clicked.connect(self.browse_config_dir)
config_dir_layout = QHBoxLayout()
config_dir_layout.addWidget(QLabel("Config Dir:"))
config_dir_layout.addWidget(self.config_dir_line)
config_dir_layout.addWidget(self.config_dir_browse)
self.layout.addLayout(config_dir_layout)
# Stage Buttons
self.buttons = {}
stages = [
("Pre-flight Checks", self.preflight_checks),
("Scan Domains", self.scan_domains),
("Transfer Files", self.transfer_files),
("Remote Ops", self.remote_ops),
("Run Certbot", self.run_certbot),
("Cleanup", self.cleanup),
]
btn_layout = QHBoxLayout()
for label, handler in stages:
btn = QPushButton(label)
btn.clicked.connect(handler)
btn_layout.addWidget(btn)
self.buttons[label] = btn
self.layout.addLayout(btn_layout)
# Log Output
self.log_widget = QTextEdit()
self.log_widget.setReadOnly(True)
self.layout.addWidget(self.log_widget)
# Status Bar
self.status = QStatusBar()
self.setStatusBar(self.status)
# Logger and Controller
self.logger = Logger(self.log_widget)
self.controller = DeploymentController(self.logger)
def browse_ssh_key(self):
file, _ = QFileDialog.getOpenFileName(self, "Select SSH Key", os.path.expanduser("~"))
if file:
self.ssh_key_line.setText(file)
self.controller.ssh_key = file
self.status.showMessage(f"SSH Key set: {file}", 3000)
def browse_config_dir(self):
dir = QFileDialog.getExistingDirectory(self, "Select Config Directory", os.path.expanduser("~"))
if dir:
self.config_dir_line.setText(dir)
self.controller.config_dir = dir
self.status.showMessage(f"Config directory set: {dir}", 3000)
def preflight_checks(self):
self.controller.preflight_checks()
def scan_domains(self):
self.controller.scan_domains()
def transfer_files(self):
self.controller.transfer_files()
def remote_ops(self):
self.controller.remote_ops()
def run_certbot(self):
self.controller.run_certbot()
def cleanup(self):
self.controller.cleanup()
def closeEvent(self, event):
self.logger.close()
super().closeEvent(event)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())