Update SVSTaskGate.ps1
This commit is contained in:
821
SVSTaskGate.ps1
821
SVSTaskGate.ps1
@@ -1,11 +1,15 @@
|
||||
### To Modify of January 5 2025
|
||||
|
||||
### To Modify as of January 27 2025
|
||||
|
||||
### let's start thinking about the write-log -TaskCategory "On-boarding" or "Off-boarding"
|
||||
### need RGB color codes form john
|
||||
### need RGB color codes form john, once we picked the RGBA colors
|
||||
### add the .net silent install tweaks to toolkit
|
||||
### for the reg tweak need to do/undo function maybe it should have it own check box list
|
||||
### new tab for client apps?
|
||||
### added offboard check boxes for dattormm, dattodeb, rocketcyber, cyberQP, SVSHelpdesk and Splashtop
|
||||
### for the offboarding button, we need to fix the uninstall-svsmsp module
|
||||
### need to fix path in the uninstall-DattoEDR -
|
||||
####### ❌ [Error] [GeneralTask] Uninstallation command 'C:\Program Files\Infocyte\Agent\agent.exe' not found. (Event ID: 3000) - bad path
|
||||
|
||||
|
||||
|
||||
#region Write-Log
|
||||
# ---------------------------------------------------------------------------
|
||||
@@ -175,8 +179,8 @@ function Install-SVSMSP {
|
||||
"Install-RocketCyber",
|
||||
"Install-Splashtop",
|
||||
"Install-ThreatLocker",
|
||||
"Install-SVSHelpdesk",
|
||||
"Install-SVSWatchtower"
|
||||
"Install-SVSHelpdesk"
|
||||
|
||||
),
|
||||
|
||||
# Log file path
|
||||
@@ -367,7 +371,7 @@ function Get-N8nWebhookData {
|
||||
|
||||
# Define the HTML Content with an Off-Boarding Tab
|
||||
function GetHtmlContent {
|
||||
@"
|
||||
@"
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
@@ -376,120 +380,199 @@ function GetHtmlContent {
|
||||
<title>SVS TaskGate</title>
|
||||
<link rel="icon" href="https://git.svstools.com/syelle/Logo/raw/branch/main/SVS_Favicon.ico" type="image/x-icon">
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background-color: #1e1e1e;
|
||||
color: #ffffff;
|
||||
}
|
||||
.logo-container {
|
||||
text-align: left;
|
||||
padding: 20px;
|
||||
background-color: #1e1e1e; /* Matches the background color */
|
||||
}
|
||||
.logo-container img {
|
||||
max-width: 300px; /* Adjust size as needed */
|
||||
height: auto;
|
||||
}
|
||||
:root {
|
||||
/* Cool Palette */
|
||||
--background-color: rgba(18, 18, 18, 1);
|
||||
--border-color: rgba(255, 127, 0, 0.25);
|
||||
|
||||
/* Neutral Colors */
|
||||
--white-color: rgba(255, 255, 255);
|
||||
--gray-color: rgba(102, 102, 102);
|
||||
--dark-gray-color: rgba(51, 51, 51);
|
||||
--light-gray-color: rgba(187, 187, 187);
|
||||
|
||||
/* Sidebar Button Colors */
|
||||
--btn-sidebar-light-gray: rgba(68, 68, 68); /* Sidebar button background */
|
||||
--btn-sidebar-blue: rgba(30, 144, 255, 1);
|
||||
--btn-hover: rgba(0, 86, 179, 1); /* Hover state (dark blue) for buttons */
|
||||
--btn-hover-scale: 1.05; /* Scale effect for button hover */
|
||||
|
||||
/* Button Colors */
|
||||
--btn-success: rgba(40, 167, 69); /* Green button background */
|
||||
--btn-success-disabled: rgba(108, 117, 125); /* Disabled success button color */
|
||||
--btn-danger: rgba(220, 53, 69); /* Red button background */
|
||||
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background-color: var(--background-color);
|
||||
color: var(--white-color);
|
||||
height: 100%; /* Ensure the body fills the viewport */
|
||||
overflow: hidden; /* Prevent scrollbars */
|
||||
}
|
||||
|
||||
.logo-container {
|
||||
text-align: left;
|
||||
padding: 20px;
|
||||
background-color: var(--background-color); /* Matches the background color */
|
||||
}
|
||||
|
||||
.logo-container img {
|
||||
max-width: 300px; /* Adjust size as needed */
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.subtitle {
|
||||
font-size: 1.2rem;
|
||||
color: var(--gray-color);
|
||||
margin-top: 0.5em;
|
||||
}
|
||||
|
||||
.container {
|
||||
display: flex;
|
||||
height: 100vh; /* Ensure the container is limited to the viewport height */
|
||||
overflow: hidden; /* Prevent the container from exceeding the viewport height */
|
||||
}
|
||||
|
||||
.sidebar {
|
||||
width: 200px;
|
||||
height: 100%; /* Ensure it doesn't exceed the container height */
|
||||
background-color: var(--background-color);
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.sidebar button {
|
||||
display: block;
|
||||
width: 100%;
|
||||
margin-bottom: 10px;
|
||||
padding: 10px;
|
||||
color: var(--white-color);
|
||||
background-color: var(--btn-sidebar-light-gray);
|
||||
border: none;
|
||||
border-radius: 5px;
|
||||
cursor: pointer;
|
||||
text-align: left;
|
||||
transition: background-color 0.3s ease, transform 0.2s ease;
|
||||
}
|
||||
|
||||
.sidebar button.active {
|
||||
background-color: var(--btn-sidebar-blue);
|
||||
}
|
||||
|
||||
.sidebar button:hover {
|
||||
background-color: var(--btn-hover);
|
||||
transform: scale(var(--btn-hover-scale));
|
||||
}
|
||||
|
||||
.content {
|
||||
flex: 1; /* Allow the content to fill available space */
|
||||
padding: 20px;
|
||||
overflow-y: auto; /* Add scrolling only within the content if necessary */
|
||||
max-height: calc(100vh - 50px); /* Adjust the height dynamically to fit within the viewport */
|
||||
}
|
||||
|
||||
.tab-content {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.tab-content.active {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.checkbox-group label {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
line-height: 1.5;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.password-input,
|
||||
.dropdown {
|
||||
width: 30%;
|
||||
padding: 10px;
|
||||
margin-bottom: 20px;
|
||||
border-radius: 5px;
|
||||
border: 1px solid var(--border-color);
|
||||
background-color: var(--background-color);
|
||||
color: var(--white-color);
|
||||
}
|
||||
|
||||
#n8nPasswordContainer {
|
||||
display: none;
|
||||
margin-top: 20px; /* Adjust the value to set the desired spacing */
|
||||
}
|
||||
|
||||
|
||||
.button-group {
|
||||
margin-top: 20px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.button-group button {
|
||||
padding: 10px 20px;
|
||||
margin-left: 10px;
|
||||
border: none;
|
||||
border-radius: 5px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.install-button {
|
||||
background-color: var(--btn-success);
|
||||
color: var(--white-color);
|
||||
}
|
||||
|
||||
.install-button:disabled {
|
||||
background-color: var(--btn-success-disabled);
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.exit-button {
|
||||
background-color: var(--btn-danger);
|
||||
color: var(--white-color);
|
||||
}
|
||||
|
||||
.columns-container {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
gap: 20px;
|
||||
align-items: flex-start;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.column {
|
||||
width: 48%;
|
||||
border: 2px solid var(--border-color);
|
||||
border-radius: 8px;
|
||||
padding: 10px;
|
||||
background-color: var(--background-color);
|
||||
box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.3);
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.log {
|
||||
width: 80%;
|
||||
margin-top: 20px;
|
||||
padding: 10px;
|
||||
background-color: var(--dark-gray-color);
|
||||
color: var(--light-gray-color);
|
||||
border-radius: 5px;
|
||||
max-height: 500px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.container {
|
||||
display: flex;
|
||||
height: 100vh;
|
||||
flex-direction: column;
|
||||
}
|
||||
.sidebar {
|
||||
width: 200px;
|
||||
background-color: #1e1e1e;
|
||||
padding: 10px;
|
||||
}
|
||||
.sidebar button {
|
||||
display: block;
|
||||
width: 100%;
|
||||
margin-bottom: 10px;
|
||||
padding: 10px;
|
||||
color: white;
|
||||
background-color: #444;
|
||||
border: none;
|
||||
border-radius: 5px;
|
||||
cursor: pointer;
|
||||
text-align: left;
|
||||
transition: background-color 0.3s ease, transform 0.2s ease;
|
||||
}
|
||||
.sidebar button.active {
|
||||
background-color: #007bff;
|
||||
}
|
||||
.sidebar button:hover {
|
||||
background-color: #0056b3;
|
||||
transform: scale(1.05);
|
||||
}
|
||||
.content {
|
||||
flex: 1;
|
||||
padding: 20px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.tab-content {
|
||||
display: none;
|
||||
}
|
||||
.tab-content.active {
|
||||
display: block;
|
||||
}
|
||||
.checkbox-group label {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
line-height: 1.5;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.password-input,
|
||||
.dropdown {
|
||||
width: 30%;
|
||||
padding: 10px;
|
||||
margin-bottom: 20px;
|
||||
border-radius: 5px;
|
||||
border: 1px solid #555;
|
||||
background-color: #2e2e2e;
|
||||
color: white;
|
||||
}
|
||||
.button-group {
|
||||
margin-top: 20px;
|
||||
text-align: right;
|
||||
}
|
||||
.button-group button {
|
||||
padding: 10px 20px;
|
||||
margin-left: 10px;
|
||||
border: none;
|
||||
border-radius: 5px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.install-button {
|
||||
background-color: #28a745;
|
||||
color: white;
|
||||
}
|
||||
.install-button:disabled {
|
||||
background-color: #6c757d;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
.exit-button {
|
||||
background-color: #dc3545;
|
||||
color: white;
|
||||
}
|
||||
.log {
|
||||
width: 80%;
|
||||
margin-top: 20px;
|
||||
padding: 10px;
|
||||
background-color: #333;
|
||||
color: #bbb;
|
||||
border-radius: 5px;
|
||||
max-height: 500px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
@media (max-width: 768px) {
|
||||
.container {
|
||||
flex-direction: column;
|
||||
}
|
||||
.sidebar {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
@@ -506,68 +589,82 @@ function GetHtmlContent {
|
||||
<!-- On-Boarding Tab -->
|
||||
<div id="onboardTab" class="tab-content active">
|
||||
<h2>On-Boarding</h2>
|
||||
<h3 class="subtitle">This new way of deploying our stack will make it easier to be sure everything is deployed successfully</h3>
|
||||
<div class="checkbox-group">
|
||||
<label>
|
||||
<input type="checkbox" id="selectAllOnboardCheckbox" onclick="toggleOnboardCheckboxes(this)">
|
||||
Select All
|
||||
</label>
|
||||
<label>
|
||||
<input type="checkbox" name="setSVSPowerplan" id="SetSVSPowerplanCheckbox">
|
||||
Set SVS Powerplan
|
||||
</label>
|
||||
<label>
|
||||
<input type="checkbox" name="installSVSMSPModule" id="installSVSMSPModuleCheckbox">
|
||||
Install SVSMSP Module
|
||||
</label>
|
||||
<label>
|
||||
<input type="checkbox" name="installCyberQP" id="installCyberQPCheckbox">
|
||||
Install CyberQP
|
||||
</label>
|
||||
<label>
|
||||
<input type="checkbox" name="installSplashtop" id="installSplashtopCheckbox">
|
||||
Install Splashtop
|
||||
</label>
|
||||
<label>
|
||||
<input type="checkbox" name="installSVSHelpDesk" id="installSVSHelpDeskCheckbox">
|
||||
Install SVSHelpDesk
|
||||
</label>
|
||||
<label>
|
||||
<input type="checkbox" name="installSVSWatchtower" id="installSVSWatchtowerCheckbox">
|
||||
Install SVSWatchtower
|
||||
</label>
|
||||
<label>
|
||||
<input type="checkbox" name="installThreatLocker" id="installThreatLockerCheckbox">
|
||||
Install ThreatLocker
|
||||
</label>
|
||||
<label>
|
||||
<input type="checkbox" name="installRocketCyber" id="installRocketCyberCheckbox">
|
||||
Install RocketCyber
|
||||
</label>
|
||||
<label>
|
||||
<input type="checkbox" name="installDattoRMM" id="installDattoRMMCheckbox"
|
||||
onclick="toggleDattoRMMOptions()">
|
||||
Install DattoRMM
|
||||
</label>
|
||||
<div id="dattoRMMOptionsContainer" style="display:none; padding-left: 20px;">
|
||||
<h3 class="subtitle">This new deployment method ensures everything is successfully deployed with greater ease!</h3>
|
||||
|
||||
<div class="columns-container">
|
||||
<!-- Left column -->
|
||||
<div class="checkbox-group column" id="leftColumn">
|
||||
<label>
|
||||
<input type="checkbox" name="dattoRMMOption" value="inputVar">
|
||||
Copy Site Variables
|
||||
<input type="checkbox" id="selectAllLeftCheckbox" onclick="toggleLeftColumnCheckboxes(this)">
|
||||
Select All
|
||||
</label>
|
||||
<label>
|
||||
<input type="checkbox" name="dattoRMMOption" value="rmm">
|
||||
Install DRMM Agent
|
||||
<input type="checkbox" class="left-checkbox" name="setSVSPowerplan" id="SetSVSPowerplanCheckbox">
|
||||
Set SVS Powerplan
|
||||
</label>
|
||||
<label>
|
||||
<input type="checkbox" name="dattoRMMOption" value="exe">
|
||||
Download.exe
|
||||
<input type="checkbox" class="left-checkbox" name="installSVSMSPModule" id="installSVSMSPModuleCheckbox">
|
||||
Install SVSMSP Module
|
||||
</label>
|
||||
<br><br>
|
||||
<label>
|
||||
<input type="checkbox" class="left-checkbox" name="installCyberQP" id="installCyberQPCheckbox">
|
||||
Install CyberQP
|
||||
</label>
|
||||
<label>
|
||||
<input type="checkbox" class="left-checkbox" name="installSplashtop" id="installSplashtopCheckbox">
|
||||
Install Splashtop
|
||||
</label>
|
||||
<label>
|
||||
<input type="checkbox" class="left-checkbox" name="installSVSHelpDesk" id="installSVSHelpDeskCheckbox">
|
||||
Install SVSHelpDesk
|
||||
</label>
|
||||
<label>
|
||||
<input type="checkbox" class="left-checkbox" name="installThreatLocker" id="installThreatLockerCheckbox">
|
||||
Install ThreatLocker
|
||||
</label>
|
||||
<label>
|
||||
<input type="checkbox" class="left-checkbox" name="installRocketCyber" id="installRocketCyberCheckbox">
|
||||
Install RocketCyber
|
||||
</label>
|
||||
<label>
|
||||
<input type="checkbox" class="left-checkbox" name="installDattoRMM" id="installDattoRMMCheckbox"
|
||||
onclick="toggleDattoRMMOptions()">
|
||||
Install DattoRMM
|
||||
</label>
|
||||
<div id="dattoRMMOptionsContainer" style="display:none; padding-left: 20px;">
|
||||
<label>
|
||||
<input type="checkbox" class="left-checkbox" name="dattoRMMOption" value="inputVar">
|
||||
Copy Site Variables
|
||||
</label>
|
||||
<label>
|
||||
<input type="checkbox" class="left-checkbox" name="dattoRMMOption" value="rmm">
|
||||
Install DRMM Agent
|
||||
</label>
|
||||
<label>
|
||||
<input type="checkbox" class="left-checkbox" name="dattoRMMOption" value="exe">
|
||||
Download.exe
|
||||
</label>
|
||||
<br><br>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Right column -->
|
||||
<div class="checkbox-group column" id="rightColumn" >
|
||||
<label>
|
||||
<input type="checkbox" class="right-checkbox" name="EnableBitLocker" id="EnableBitLockerCheckbox">
|
||||
Enable Bitlocker
|
||||
</label>
|
||||
<label>
|
||||
<input type="checkbox" class="right-checkbox" name="setedgedefaultsearch" id="setedgedefaultsearchCheckbox">
|
||||
Set Edge Default Search Engine
|
||||
</label>
|
||||
<!-- Add more checkboxes here -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="n8nPasswordContainer" style="display: none;">
|
||||
<label for="n8nPassword">Enter n8n Password:</label><br>
|
||||
<input type="password" id="n8nPassword" class="password-input" placeholder="Enter N8N Password">
|
||||
<label for="n8nPassword">Enter Password:</label><br>
|
||||
<input type="password" id="n8nPassword" class="password-input" placeholder="Enter Password">
|
||||
</div>
|
||||
<br>
|
||||
<div id="DattoRMMContainer" style="display: none;">
|
||||
@@ -600,6 +697,38 @@ function GetHtmlContent {
|
||||
<label>
|
||||
<input type="checkbox" name="uninstallThreatLocker" id="uninstallThreatLockerCheckbox">
|
||||
Uninstall ThreatLocker
|
||||
</label>
|
||||
<label>
|
||||
<input type="checkbox" name="uninstallCyberQP" id="uninstallCyberQPCheckbox">
|
||||
Uninstall CyberQP
|
||||
</label>
|
||||
<label>
|
||||
<input type="checkbox" name="uninstallDattoEDR" id="uninstallDattoEDRCheckbox">
|
||||
Uninstall DattoEDR
|
||||
</label>
|
||||
<label>
|
||||
<input type="checkbox" name="uninstallDattoRMM" id="uninstallDattoRMMCheckbox">
|
||||
Uninstall DattoRMM
|
||||
</label>
|
||||
<label>
|
||||
<input type="checkbox" name="uninstallDattoDEB" id="uninstallDattoDEBCheckbox">
|
||||
Uninstall DattoDEB
|
||||
</label>
|
||||
<label>
|
||||
<input type="checkbox" name="uninstallRocketCyber" id="uninstallRocketCyberCheckbox">
|
||||
Uninstall RocketCyber
|
||||
</label>
|
||||
<label>
|
||||
<input type="checkbox" name="uninstallSplashtop" id="uninstallSplashtopCheckbox">
|
||||
Uninstall splashtop
|
||||
</label>
|
||||
<label>
|
||||
<input type="checkbox" name="uninstallSVSHelpdesk" id="uninstallSVSHelpdeskCheckbox">
|
||||
Uninstall SVSHelpdesk
|
||||
</label>
|
||||
<label>
|
||||
<input type="checkbox" name="uninstallSVSWatchtower" id="uninstallSVSWatchtowerCheckbox">
|
||||
Uninstall SVSWatchtower
|
||||
</label>
|
||||
<div class="button-group">
|
||||
<button class="install-button" onclick="triggerOffboard()">Offboard</button>
|
||||
@@ -653,15 +782,7 @@ function GetHtmlContent {
|
||||
const optionsContainer = document.getElementById('dattoRMMOptionsContainer');
|
||||
const n8nPasswordContainer = document.getElementById('n8nPasswordContainer');
|
||||
const dattoRMMContainer = document.getElementById('DattoRMMContainer');
|
||||
|
||||
|
||||
|
||||
checkboxes.forEach(checkbox => {
|
||||
if (checkbox !== selectedCheckbox) {
|
||||
checkbox.checked = selectedCheckbox.checked;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
if (dattoRMMCheckbox.checked) {
|
||||
optionsContainer.style.display = 'block';
|
||||
n8nPasswordContainer.style.display = 'block';
|
||||
@@ -673,6 +794,31 @@ function GetHtmlContent {
|
||||
}
|
||||
}
|
||||
|
||||
function toggleLeftColumnCheckboxes(selectAllCheckbox) {
|
||||
const leftCheckboxes = document.querySelectorAll('#leftColumn input[type="checkbox"]:not(#selectAllLeftCheckbox)');
|
||||
const dattoRMMCheckbox = document.getElementById('installDattoRMMCheckbox');
|
||||
const optionsContainer = document.getElementById('dattoRMMOptionsContainer');
|
||||
const n8nPasswordContainer = document.getElementById('n8nPasswordContainer');
|
||||
const dattoRMMContainer = document.getElementById('DattoRMMContainer');
|
||||
|
||||
// Toggle all checkboxes
|
||||
leftCheckboxes.forEach(checkbox => {
|
||||
checkbox.checked = selectAllCheckbox.checked;
|
||||
});
|
||||
|
||||
// Check if "Install DattoRMM" is selected
|
||||
if (dattoRMMCheckbox.checked) {
|
||||
optionsContainer.style.display = 'block';
|
||||
n8nPasswordContainer.style.display = 'block';
|
||||
dattoRMMContainer.style.display = 'block';
|
||||
} else {
|
||||
optionsContainer.style.display = 'none';
|
||||
n8nPasswordContainer.style.display = 'none';
|
||||
dattoRMMContainer.style.display = 'none';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function updateSelectAllonboard() {
|
||||
const selectAllCheckbox = document.getElementById('selectAllOnboardCheckbox');
|
||||
const checkboxes = document
|
||||
@@ -683,43 +829,69 @@ function GetHtmlContent {
|
||||
selectAllCheckbox.checked = Array.from(checkboxes).every(checkbox => checkbox.checked);
|
||||
}
|
||||
|
||||
function gatherSelectedTasks() {
|
||||
const selectedLeftTasks = Array.from(document.querySelectorAll('.left-checkbox:checked')).map(checkbox => checkbox.name);
|
||||
const selectedRightTasks = Array.from(document.querySelectorAll('.right-checkbox:checked')).map(checkbox => checkbox.name);
|
||||
return [...selectedLeftTasks, ...selectedRightTasks];
|
||||
}
|
||||
|
||||
|
||||
// Attach the updateSelectAllonboard function to all individual checkboxes
|
||||
document.querySelectorAll('#onboardTab input[type="checkbox"]:not(#selectAllOnboardCheckbox)').forEach(checkbox => {
|
||||
checkbox.addEventListener('change', updateSelectAllonboard);
|
||||
});
|
||||
|
||||
function toggleOffboardCheckboxes(selectAllCheckbox) {
|
||||
// Get all checkboxes inside the offboardTab container
|
||||
const checkboxes = document
|
||||
.getElementById('offboardTab')
|
||||
.querySelectorAll('input[type="checkbox"]:not(#selectAllOffboardCheckbox)');
|
||||
|
||||
// Set the checked state of all checkboxes to match the "Select All" checkbox
|
||||
const checkboxes = document.querySelectorAll('#offboardTab input[type="checkbox"]:not(#selectAllOffboardCheckbox)');
|
||||
checkboxes.forEach(checkbox => {
|
||||
checkbox.checked = selectAllCheckbox.checked;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function updateSelectAllOffboard() {
|
||||
const selectAllCheckbox = document.getElementById('selectAllOffboardCheckbox');
|
||||
const checkboxes = document
|
||||
.getElementById('offboardTab')
|
||||
.querySelectorAll('input[type="checkbox"]:not(#selectAllOffboardCheckbox)');
|
||||
|
||||
// If any checkbox is unchecked, uncheck "Select All"
|
||||
const checkboxes = document.querySelectorAll('#offboardTab input[type="checkbox"]:not(#selectAllOffboardCheckbox)');
|
||||
selectAllCheckbox.checked = Array.from(checkboxes).every(checkbox => checkbox.checked);
|
||||
}
|
||||
|
||||
// Attach the updateSelectAllOffboard function to all individual checkboxes
|
||||
document.querySelectorAll('#offboardTab input[type="checkbox"]:not(#selectAllOffboardCheckbox)').forEach(checkbox => {
|
||||
checkbox.addEventListener('change', updateSelectAllOffboard);
|
||||
});
|
||||
|
||||
|
||||
function triggerOffboard() {
|
||||
appendLog("testeteteteteteet")
|
||||
const checkboxes = document.querySelectorAll('#offboardTab input[type="checkbox"]:not(#selectAllOffboardCheckbox)');
|
||||
const selectedTasks = Array.from(checkboxes)
|
||||
.filter(checkbox => checkbox.checked)
|
||||
.map(checkbox => checkbox.name);
|
||||
|
||||
if (selectedTasks.length === 0) {
|
||||
appendLog("Please select at least one offboarding task.", "red");
|
||||
return;
|
||||
}
|
||||
|
||||
appendLog("Starting offboarding tasks...", "yellow");
|
||||
|
||||
fetch('/offboard', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ SelectedTasks: selectedTasks })
|
||||
})
|
||||
.then(response => {
|
||||
if (!response.ok) {
|
||||
throw new Error('Failed to execute offboarding tasks.');
|
||||
}
|
||||
return response.text();
|
||||
})
|
||||
.then(message => {
|
||||
appendLog(message, "green");
|
||||
})
|
||||
.catch(error => {
|
||||
appendLog("Error: " + error.message, "red");
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function toggleTweaksCheckboxes(selectAllCheckbox) {
|
||||
// Get all checkboxes inside the tweaksTab container
|
||||
const checkboxes = document
|
||||
@@ -838,7 +1010,6 @@ function GetHtmlContent {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function triggerInstall() {
|
||||
const dropdown = document.getElementById('dattoRmmDropdown');
|
||||
const UID = dropdown && dropdown.options[dropdown.selectedIndex]
|
||||
@@ -851,15 +1022,14 @@ function GetHtmlContent {
|
||||
(async () => {
|
||||
// Priority 1: Install SVSMSP Module
|
||||
if (document.querySelector('input[name="installSVSMSPModule"]').checked) {
|
||||
appendLog("Installing SVSMSP Module (Priority 1)...", "cyan");
|
||||
try {
|
||||
await fetch('/installSVSMSPModule', { method: 'GET' });
|
||||
appendLog("SVSMSP Module installation completed.", "green");
|
||||
} catch (error) {
|
||||
appendLog("Error installing SVSMS", "red");
|
||||
}
|
||||
}
|
||||
|
||||
appendLog("Installing SVSMSP Module (Priority 1)...", "cyan");
|
||||
try {
|
||||
await fetch('/installSVSMSPModule', { method: 'GET' });
|
||||
appendLog("SVSMSP Module installation completed.", "green");
|
||||
} catch (error) {
|
||||
appendLog("Error installing SVSMSP Module: " + error.message, "red");
|
||||
}
|
||||
}
|
||||
|
||||
// Priority 2: Install DattoRMM
|
||||
if (document.querySelector('input[name="installDattoRMM"]').checked) {
|
||||
@@ -881,85 +1051,99 @@ function GetHtmlContent {
|
||||
});
|
||||
appendLog("DattoRMM installation completed.", "green");
|
||||
} catch (error) {
|
||||
appendLog("Error installing DattoRMM: ${error.message}", "red");
|
||||
appendLog("Error installing DattoRMM: " + error.message, "red");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Priority 3: Other tasks
|
||||
if (document.querySelector('input[name="setSVSPowerplan"]').checked) {
|
||||
appendLog("Setting SVS Powerplan (Priority 3)...", "cyan");
|
||||
try {
|
||||
await fetch('/SetSVSPowerplan', { method: 'GET' });
|
||||
appendLog("SVS Powerplan set successfully.", "green");
|
||||
} catch (error) {
|
||||
appendLog("Error setting SVS Powerplan: ${error.message}", "red");
|
||||
}
|
||||
}
|
||||
appendLog("Setting SVS Powerplan (Priority 3)...", "cyan");
|
||||
try {
|
||||
await fetch('/SetSVSPowerplan', { method: 'GET' });
|
||||
appendLog("SVS Powerplan set successfully.", "green");
|
||||
} catch (error) {
|
||||
appendLog("Error setting SVS Powerplan: " + error.message, "red");
|
||||
}
|
||||
}
|
||||
|
||||
if (document.querySelector('input[name="installCyberQP"]').checked) {
|
||||
appendLog("Installing CyberQP (Priority 3)...", "cyan");
|
||||
try {
|
||||
await fetch('/installCyberQP', { method: 'GET' });
|
||||
appendLog("CyberQP installation completed.", "green");
|
||||
} catch (error) {
|
||||
appendLog("Error installing CyberQP: ${error.message}", "red");
|
||||
}
|
||||
}
|
||||
if (document.querySelector('input[name="installCyberQP"]').checked) {
|
||||
appendLog("Installing CyberQP (Priority 3)...", "cyan");
|
||||
try {
|
||||
await fetch('/installCyberQP', { method: 'GET' });
|
||||
appendLog("CyberQP installation completed.", "green");
|
||||
} catch (error) {
|
||||
appendLog("Error installing CyberQP: " + error.message, "red");
|
||||
}
|
||||
}
|
||||
|
||||
if (document.querySelector('input[name="installSplashtop"]').checked) {
|
||||
appendLog("Installing Splashtop (Priority 3)...", "cyan");
|
||||
try {
|
||||
await fetch('/installSplashtop', { method: 'GET' });
|
||||
appendLog("Splashtop installation completed.", "green");
|
||||
} catch (error) {
|
||||
appendLog("Error installing Splashtop: ${error.message}", "red");
|
||||
}
|
||||
}
|
||||
if (document.querySelector('input[name="installSplashtop"]').checked) {
|
||||
appendLog("Installing Splashtop (Priority 3)...", "cyan");
|
||||
try {
|
||||
await fetch('/installSplashtop', { method: 'GET' });
|
||||
appendLog("Splashtop installation completed.", "green");
|
||||
} catch (error) {
|
||||
appendLog("Error installing Splashtop: " + error.message, "red");
|
||||
}
|
||||
}
|
||||
|
||||
if (document.querySelector('input[name="installSVSHelpDesk"]').checked) {
|
||||
appendLog("Installing SVS HelpDesk (Priority 3)...", "cyan");
|
||||
try {
|
||||
await fetch('/installSVSHelpDesk', { method: 'GET' });
|
||||
appendLog("SVS HelpDesk installation completed.", "green");
|
||||
} catch (error) {
|
||||
appendLog("Error installing SVS HelpDesk: ${error.message}", "red");
|
||||
}
|
||||
}
|
||||
if (document.querySelector('input[name="installSVSHelpDesk"]').checked) {
|
||||
appendLog("Installing SVS HelpDesk (Priority 3)...", "cyan");
|
||||
try {
|
||||
await fetch('/installSVSHelpDesk', { method: 'GET' });
|
||||
appendLog("SVS HelpDesk installation completed.", "green");
|
||||
} catch (error) {
|
||||
appendLog("Error installing SVS HelpDesk: " + error.message, "red");
|
||||
}
|
||||
}
|
||||
|
||||
if (document.querySelector('input[name="installSVSWatchtower"]').checked) {
|
||||
appendLog("Installing SVS Watchtower (Priority 3)...", "cyan");
|
||||
try {
|
||||
await fetch('/installSVSWatchtower', { method: 'GET' });
|
||||
appendLog("SVS Watchtower installation completed.", "green");
|
||||
} catch (error) {
|
||||
appendLog("Error installing SVS Watchtower: ${error.message}", "red");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (document.querySelector('input[name="installThreatLocker"]').checked) {
|
||||
appendLog("Installing ThreatLocker (Priority 3)...", "cyan");
|
||||
try {
|
||||
await fetch('/installThreatLocker', { method: 'GET' });
|
||||
appendLog("ThreatLocker installation completed.", "green");
|
||||
} catch (error) {
|
||||
appendLog("Error installing ThreatLocker: ${error.message}", "red");
|
||||
}
|
||||
}
|
||||
if (document.querySelector('input[name="installThreatLocker"]').checked) {
|
||||
appendLog("Installing ThreatLocker (Priority 3)...", "cyan");
|
||||
try {
|
||||
await fetch('/installThreatLocker', { method: 'GET' });
|
||||
appendLog("ThreatLocker installation completed.", "green");
|
||||
} catch (error) {
|
||||
appendLog("Error installing ThreatLocker: " + error.message, "red");
|
||||
}
|
||||
}
|
||||
|
||||
if (document.querySelector('input[name="installRocketCyber"]').checked) {
|
||||
appendLog("Installing RocketCyber (Priority 3)...", "cyan");
|
||||
try {
|
||||
await fetch('/installRocketCyber', { method: 'GET' });
|
||||
appendLog("RocketCyber installation completed.", "green");
|
||||
} catch (error) {
|
||||
appendLog("Error installing RocketCyber: ${error.message}", "red");
|
||||
}
|
||||
}
|
||||
if (document.querySelector('input[name="installRocketCyber"]').checked) {
|
||||
appendLog("Installing RocketCyber (Priority 3)...", "cyan");
|
||||
try {
|
||||
await fetch('/installRocketCyber', { method: 'GET' });
|
||||
appendLog("RocketCyber installation completed.", "green");
|
||||
} catch (error) {
|
||||
appendLog("Error installing RocketCyber: " + error.message, "red");
|
||||
}
|
||||
}
|
||||
|
||||
// NEW: Set Edge Default Search Engine
|
||||
if (document.querySelector('input[name="setedgedefaultsearch"]').checked) {
|
||||
appendLog("Setting Edge Default Search Engine (Priority 3)...", "cyan");
|
||||
try {
|
||||
await fetch('/setedgedefaultsearch', { method: 'GET' });
|
||||
appendLog("Edge Default Search Engine set successfully.", "green");
|
||||
} catch (error) {
|
||||
appendLog("Error setting Edge Default Search Engine: " + error.message, "red");
|
||||
}
|
||||
}
|
||||
|
||||
if (document.querySelector('input[name="EnableBitLocker"]').checked) {
|
||||
appendLog("Enabling BitLocker (Priority 3)...", "cyan");
|
||||
try {
|
||||
await fetch('/EnableBitLocker', { method: 'GET' });
|
||||
appendLog("BitLocker enabled successfully.", "green");
|
||||
} catch (error) {
|
||||
appendLog("Error enabling BitLocker: " + error.message, "red");
|
||||
}
|
||||
}
|
||||
|
||||
})();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
function endSession() {
|
||||
@@ -1231,7 +1415,7 @@ try {
|
||||
$responseString = "Method not allowed. Use GET."
|
||||
$response.StatusCode = 405
|
||||
}
|
||||
$buffer = [System.Text.Encoding]::UTF8.GetBytes($responseString)
|
||||
$buffer = [System.Text.Encoding]::UTF8.GetBytes($responseString)
|
||||
$response.ContentType = "text/plain"
|
||||
$response.ContentLength64 = $buffer.Length
|
||||
$response.OutputStream.Write($buffer, 0, $buffer.Length)
|
||||
@@ -1282,7 +1466,6 @@ try {
|
||||
|
||||
"/setedgedefaultsearch"{
|
||||
if ($request.HttpMethod -eq "GET") {
|
||||
write-host "it attempted it!"
|
||||
try {
|
||||
set-EdgeDefaultSearchProvider
|
||||
$responseString = "setedgedefaultsearch triggered successfully."
|
||||
@@ -1324,15 +1507,19 @@ try {
|
||||
$response.OutputStream.Close()
|
||||
}
|
||||
|
||||
"/installSVSWatchtower" {
|
||||
|
||||
|
||||
"/EdgeDefaultSearchEngine" {
|
||||
if ($request.HttpMethod -eq "GET") {
|
||||
Install-SVSWatchtower
|
||||
try {
|
||||
Install-SVSWatchtower
|
||||
$responseString = "Install SVSWatchtower triggered successfully."
|
||||
Write-LogHybrid -Message "Setting Edge Default Search Engine started." -Level "Info"
|
||||
Set-EdgeDefaultSearchEngine
|
||||
Write-LogHybrid -Message "Edge Default Search Engine set successfully." -Level "Success"
|
||||
$responseString = " Set Edge Default Search Engine triggered successfully."
|
||||
$response.StatusCode = 200
|
||||
} catch {
|
||||
$responseString = "Error triggering Install SVSWatchtower: $_"
|
||||
Write-LogHybrid -Message "Error setting Edge Default Search Engine: $($_.Exception.Message)" -Level "Error"
|
||||
$responseString = "Error attempting to Set Edge Default Search Engine: $_"
|
||||
$response.StatusCode = 500
|
||||
}
|
||||
} else {
|
||||
@@ -1346,6 +1533,92 @@ try {
|
||||
$response.OutputStream.Close()
|
||||
}
|
||||
|
||||
"/EnableBitLocker" {
|
||||
if ($request.HttpMethod -eq "GET") {
|
||||
try {
|
||||
Set-SVSBitLocker -Mode Enable -DriveLetter C -SaveToRegistry $true
|
||||
$responseString = " BitLocker enabled on C successfully."
|
||||
$response.StatusCode = 200
|
||||
} catch {
|
||||
$responseString = "Error Attempting to set BitLocker: $_"
|
||||
$response.StatusCode = 500
|
||||
}
|
||||
} else {
|
||||
$responseString = "Method not allowed. Use GET."
|
||||
$response.StatusCode = 405
|
||||
}
|
||||
$buffer = [System.Text.Encoding]::UTF8.GetBytes($responseString)
|
||||
$response.ContentType = "text/plain"
|
||||
$response.ContentLength64 = $buffer.Length
|
||||
$response.OutputStream.Write($buffer, 0, $buffer.Length)
|
||||
$response.OutputStream.Close()
|
||||
}
|
||||
|
||||
|
||||
"/offboard" {
|
||||
if ($request.HttpMethod -eq "POST") {
|
||||
try {
|
||||
# Read the Request Body
|
||||
$bodyStream = New-Object IO.StreamReader $request.InputStream
|
||||
$body = $bodyStream.ReadToEnd()
|
||||
$requestData = ConvertFrom-Json $body
|
||||
|
||||
$selectedTasks = $requestData.SelectedTasks
|
||||
|
||||
Write-LogHybrid -Message "Offboarding request received with tasks: $($selectedTasks -join ', ')" -Level "Info"
|
||||
|
||||
|
||||
if (-not $selectedTasks -or $selectedTasks.Count -eq 0) {
|
||||
$response.StatusCode = 400
|
||||
$responseString = "Error: No offboarding tasks selected."
|
||||
$buffer = [System.Text.Encoding]::UTF8.GetBytes($responseString)
|
||||
$response.OutputStream.Write($buffer, 0, $buffer.Length)
|
||||
$response.OutputStream.Close()
|
||||
return
|
||||
}
|
||||
|
||||
# Process each selected task
|
||||
foreach ($task in $selectedTasks) {
|
||||
switch ($task) {
|
||||
"uninstallSVSMSPModule" { Write-LogHybrid -Message "Uninstalling SVSMSP Module..." -Level "Info"; } #Uninstall-SVSMSP }
|
||||
"uninstallThreatLocker" { Write-LogHybrid -Message "Uninstalling Threatlocker" -Level "Info"; Uninstall-ThreatLocker }
|
||||
"uninstallCyberQP" { Write-LogHybrid -Message "Uninstalling CyberQP" -Level "Info";Uninstall-CyberQP }
|
||||
"uninstallDattoEDR" { Uninstall-DattoEDR }
|
||||
"uninstallDattoRMM" { Uninstall-DattoRMM }
|
||||
"uninstallRocketCyber" { Uninstall-RocketCyber }
|
||||
"uninstallSplashtop" { Uninstall-Splashtop }
|
||||
"uninstallSVSHelpdesk" { Uninstall-SVSHelpdesk }
|
||||
"uninstallSVSWatchtower" { Uninstall-SVSWatchtower }
|
||||
default {
|
||||
Write-LogHybrid -Message "Unknown task: $task" -Level "Warning"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Return Success Response
|
||||
$responseString = "Offboarding tasks executed successfully."
|
||||
$response.StatusCode = 200
|
||||
} catch {
|
||||
$responseString = "Error processing offboarding tasks: $($_.Exception.Message)"
|
||||
$response.StatusCode = 500
|
||||
}
|
||||
|
||||
# Send the Response
|
||||
$buffer = [System.Text.Encoding]::UTF8.GetBytes($responseString)
|
||||
$response.ContentType = "text/plain"
|
||||
$response.ContentLength64 = $buffer.Length
|
||||
$response.OutputStream.Write($buffer, 0, $buffer.Length)
|
||||
$response.OutputStream.Close()
|
||||
} else {
|
||||
$responseString = "Method not allowed. Use POST."
|
||||
$response.StatusCode = 405
|
||||
$buffer = [System.Text.Encoding]::UTF8.GetBytes($responseString)
|
||||
$response.OutputStream.Write($buffer, 0, $buffer.Length)
|
||||
$response.OutputStream.Close()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
"/runTweaks" {
|
||||
if ($request.HttpMethod -eq "POST") {
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user