added reset button
This commit is contained in:
parent
c4171f34c0
commit
8b946945db
|
|
@ -490,6 +490,80 @@ EOF;
|
|||
return executeCommand("apt-get update && apt-get install -y $package");
|
||||
}
|
||||
|
||||
/**
|
||||
* Clean up router configuration for re-enrollment
|
||||
*/
|
||||
public function cleanupRouter() {
|
||||
try {
|
||||
$this->reportProgress('CLEANUP', 'Starting router cleanup process...', 0);
|
||||
|
||||
// Check if running as root
|
||||
if (!isRunningAsRoot()) {
|
||||
throw new Exception('This operation must be run with root privileges (use sudo)');
|
||||
}
|
||||
|
||||
// Step 1: Stop and disable the ziti-router service
|
||||
$this->reportProgress('CLEANUP', 'Stopping ziti-router service...', 20);
|
||||
if (!executeCommand('systemctl disable --now ziti-router.service 2>/dev/null')) {
|
||||
logMessage('WARNING', 'Failed to disable ziti-router service (may not exist)');
|
||||
}
|
||||
|
||||
// Step 2: Reset failed state
|
||||
$this->reportProgress('CLEANUP', 'Resetting service failed state...', 40);
|
||||
if (!executeCommand('systemctl reset-failed ziti-router.service 2>/dev/null')) {
|
||||
logMessage('WARNING', 'Failed to reset service failed state (may not be needed)');
|
||||
}
|
||||
|
||||
// Step 3: Clean service state
|
||||
$this->reportProgress('CLEANUP', 'Cleaning service state...', 60);
|
||||
if (!executeCommand('systemctl clean --what=state ziti-router.service 2>/dev/null')) {
|
||||
logMessage('WARNING', 'Failed to clean service state (may not be supported)');
|
||||
}
|
||||
|
||||
// Step 4: Remove configuration directory
|
||||
$this->reportProgress('CLEANUP', 'Removing router configuration directory...', 80);
|
||||
if (is_dir(CONFIG_DIR)) {
|
||||
if (!executeCommand('rm -rf ' . CONFIG_DIR)) {
|
||||
throw new Exception('Failed to remove router configuration directory: ' . CONFIG_DIR);
|
||||
}
|
||||
logMessage('INFO', 'Removed router configuration directory: ' . CONFIG_DIR);
|
||||
} else {
|
||||
logMessage('INFO', 'Router configuration directory does not exist: ' . CONFIG_DIR);
|
||||
}
|
||||
|
||||
// Step 5: Remove systemd service file if it exists
|
||||
$this->reportProgress('CLEANUP', 'Removing systemd service file...', 90);
|
||||
if (file_exists(SYSTEMD_SERVICE_FILE)) {
|
||||
if (!executeCommand('rm -f ' . SYSTEMD_SERVICE_FILE)) {
|
||||
logMessage('WARNING', 'Failed to remove systemd service file: ' . SYSTEMD_SERVICE_FILE);
|
||||
} else {
|
||||
logMessage('INFO', 'Removed systemd service file: ' . SYSTEMD_SERVICE_FILE);
|
||||
// Reload systemd after removing service file
|
||||
executeCommand('systemctl daemon-reload');
|
||||
}
|
||||
} else {
|
||||
logMessage('INFO', 'Systemd service file does not exist: ' . SYSTEMD_SERVICE_FILE);
|
||||
}
|
||||
|
||||
$this->reportProgress('CLEANUP', 'Router cleanup completed successfully!', 100);
|
||||
|
||||
return [
|
||||
'success' => true,
|
||||
'message' => 'Router configuration cleaned up successfully. You can now enroll a new router.'
|
||||
];
|
||||
|
||||
} catch (Exception $e) {
|
||||
$errorMsg = $e->getMessage();
|
||||
logMessage('ERROR', 'Cleanup failed: ' . $errorMsg);
|
||||
$this->reportProgress('CLEANUP_ERROR', $errorMsg, null);
|
||||
|
||||
return [
|
||||
'success' => false,
|
||||
'error' => $errorMsg
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get system status information
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -137,6 +137,10 @@ body {
|
|||
color: white;
|
||||
}
|
||||
|
||||
.btn-danger:hover {
|
||||
background-color: #dc2626;
|
||||
}
|
||||
|
||||
.btn-full {
|
||||
width: 100%;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -66,6 +66,14 @@ class EnrollmentUI {
|
|||
this.clearLogs();
|
||||
});
|
||||
}
|
||||
|
||||
// Cleanup button
|
||||
const cleanupBtn = document.getElementById('cleanupBtn');
|
||||
if (cleanupBtn) {
|
||||
cleanupBtn.addEventListener('click', () => {
|
||||
this.showCleanupConfirmation();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
validateHashKey(input) {
|
||||
|
|
@ -371,6 +379,92 @@ class EnrollmentUI {
|
|||
}
|
||||
}
|
||||
|
||||
showCleanupConfirmation() {
|
||||
const confirmed = confirm(
|
||||
'⚠️ WARNING: Router Cleanup\n\n' +
|
||||
'This action will:\n' +
|
||||
'• Stop and disable the ziti-router service\n' +
|
||||
'• Remove all router configuration files\n' +
|
||||
'• Delete all certificates\n' +
|
||||
'• Remove the systemd service file\n\n' +
|
||||
'This action cannot be undone!\n\n' +
|
||||
'Are you sure you want to proceed?'
|
||||
);
|
||||
|
||||
if (confirmed) {
|
||||
this.startCleanup();
|
||||
}
|
||||
}
|
||||
|
||||
async startCleanup() {
|
||||
if (this.enrollmentInProgress) {
|
||||
this.showAlert('Cannot perform cleanup while enrollment is in progress', 'error');
|
||||
return;
|
||||
}
|
||||
|
||||
const cleanupBtn = document.getElementById('cleanupBtn');
|
||||
|
||||
// Update UI
|
||||
cleanupBtn.disabled = true;
|
||||
cleanupBtn.innerHTML = '<span class="spinner"></span>Cleaning Up...';
|
||||
|
||||
this.showProgressContainer();
|
||||
this.clearLogs();
|
||||
this.updateProgress(0, 'Starting cleanup...');
|
||||
|
||||
try {
|
||||
const formData = new FormData();
|
||||
formData.append('action', 'cleanup');
|
||||
formData.append('csrf_token', document.querySelector('input[name="csrf_token"]').value);
|
||||
|
||||
const response = await fetch('dashboard.php', {
|
||||
method: 'POST',
|
||||
body: formData,
|
||||
headers: {
|
||||
'X-Requested-With': 'XMLHttpRequest'
|
||||
}
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP ${response.status}`);
|
||||
}
|
||||
|
||||
const result = await response.json();
|
||||
|
||||
if (result.success) {
|
||||
this.updateProgress(100, 'Cleanup completed successfully!');
|
||||
this.addLogEntry('success', result.message);
|
||||
this.showAlert('Router cleanup completed successfully! The page will reload in 3 seconds.', 'success');
|
||||
|
||||
// Clear the hash key input field
|
||||
const hashKeyInput = document.getElementById('hashKey');
|
||||
if (hashKeyInput) {
|
||||
hashKeyInput.value = '';
|
||||
this.setInputState(hashKeyInput, 'neutral');
|
||||
}
|
||||
|
||||
// Refresh system status immediately
|
||||
this.loadSystemStatus();
|
||||
|
||||
// Auto-reload page after 3 seconds
|
||||
setTimeout(() => {
|
||||
window.location.reload();
|
||||
}, 3000);
|
||||
} else {
|
||||
throw new Error(result.error || 'Cleanup failed');
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
console.error('Cleanup failed:', error);
|
||||
this.updateProgress(null, 'Cleanup failed');
|
||||
this.addLogEntry('error', `Cleanup failed: ${error.message}`);
|
||||
this.showAlert(`Cleanup failed: ${error.message}`, 'error');
|
||||
} finally {
|
||||
cleanupBtn.disabled = false;
|
||||
cleanupBtn.innerHTML = '🗑️ Clean Up Router';
|
||||
}
|
||||
}
|
||||
|
||||
// Utility method to format file sizes
|
||||
formatFileSize(bytes) {
|
||||
if (bytes === 0) return '0 Bytes';
|
||||
|
|
|
|||
|
|
@ -49,6 +49,16 @@ if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQU
|
|||
echo json_encode($result);
|
||||
exit;
|
||||
}
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'cleanup') {
|
||||
// Handle cleanup request
|
||||
AuthManager::requireCSRF();
|
||||
|
||||
// Start cleanup
|
||||
$result = $enrollmentManager->cleanupRouter();
|
||||
echo json_encode($result);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
// Get system status for initial page load
|
||||
|
|
@ -218,6 +228,9 @@ $systemStatus = $enrollmentManager->getSystemStatus();
|
|||
<button type="submit" id="enrollBtn" class="btn btn-primary">
|
||||
Start Enrollment
|
||||
</button>
|
||||
<button type="button" id="cleanupBtn" class="btn btn-danger" style="margin-left: 1rem;">
|
||||
🗑️ Clean Up Router
|
||||
</button>
|
||||
<button type="button" id="clearLogs" class="btn btn-secondary" style="margin-left: 1rem;">
|
||||
Clear Logs
|
||||
</button>
|
||||
|
|
@ -266,6 +279,7 @@ $systemStatus = $enrollmentManager->getSystemStatus();
|
|||
<li>Paste the 32-character hash key</li>
|
||||
<li>Click "Start Enrollment" to begin the process</li>
|
||||
<li>Monitor the progress and logs for status updates</li>
|
||||
<li><strong>To re-enroll:</strong> Click "Clean Up Router" to reset configuration, then enter a new hash key</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue