Update StackMonkey.ps1
This commit is contained in:
289
StackMonkey.ps1
289
StackMonkey.ps1
@@ -1145,150 +1145,7 @@ $script
|
||||
|
||||
#endregion UIHtml
|
||||
|
||||
#region Handler Stubs
|
||||
|
||||
function Respond-Text {
|
||||
param($Context, $Text)
|
||||
$bytes = [Text.Encoding]::UTF8.GetBytes($Text)
|
||||
$Context.Response.ContentType = 'text/plain'
|
||||
$Context.Response.ContentLength64 = $bytes.Length
|
||||
$Context.Response.OutputStream.Write($bytes,0,$bytes.Length)
|
||||
$Context.Response.OutputStream.Close()
|
||||
}
|
||||
|
||||
function Respond-HTML {
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[Parameter(Mandatory = $true)][object] $Context,
|
||||
[Parameter(Mandatory = $true)][string] $Html
|
||||
)
|
||||
$bytes = [Text.Encoding]::UTF8.GetBytes($Html)
|
||||
$Context.Response.ContentType = 'text/html'
|
||||
$Context.Response.ContentLength64 = $bytes.Length
|
||||
$Context.Response.OutputStream.Write($bytes, 0, $bytes.Length)
|
||||
$Context.Response.OutputStream.Close()
|
||||
}
|
||||
|
||||
function Respond-JSON {
|
||||
param($Context, $Object)
|
||||
$json = $Object | ConvertTo-Json -Depth 5
|
||||
$bytes = [Text.Encoding]::UTF8.GetBytes($json)
|
||||
$Context.Response.ContentType = 'application/json'
|
||||
$Context.Response.ContentLength64 = $bytes.Length
|
||||
$Context.Response.OutputStream.Write($bytes,0,$bytes.Length)
|
||||
$Context.Response.OutputStream.Close()
|
||||
}
|
||||
|
||||
function Handle-FetchSites {
|
||||
param($Context)
|
||||
|
||||
try {
|
||||
# 1) Read the incoming JSON payload (contains only the webhook password)
|
||||
$raw = (New-Object IO.StreamReader $Context.Request.InputStream).ReadToEnd()
|
||||
$pw = (ConvertFrom-Json $raw).password
|
||||
|
||||
# ★ Store it globally for the next call ★
|
||||
$Global:WebhookPassword = $pw
|
||||
|
||||
# 2) Delegate to your unified function
|
||||
$sites = Install-DattoRMM `
|
||||
-UseWebhook `
|
||||
-WebhookPassword $pw `
|
||||
-FetchSites `
|
||||
-SaveSitesList:$SaveSitesList `
|
||||
-OutputFile $OutputFile
|
||||
|
||||
# 3) Return JSON array of sites
|
||||
Respond-JSON $Context $sites
|
||||
}
|
||||
catch {
|
||||
# Log the exception and return HTTP 500
|
||||
Write-LogHybrid "Handle-FetchSites error: $($_.Exception.Message)" Error DattoRMM -LogToEvent
|
||||
$Context.Response.StatusCode = 500
|
||||
Respond-Text $Context "Internal server error fetching sites."
|
||||
}
|
||||
}
|
||||
|
||||
function Handle-InstallDattoRMM {
|
||||
param($Context)
|
||||
|
||||
try {
|
||||
if ($Context.Request.HttpMethod -ne 'POST') {
|
||||
$Context.Response.StatusCode = 405
|
||||
Respond-Text $Context 'Use POST'
|
||||
return
|
||||
}
|
||||
|
||||
# 1) Read and parse the JSON body
|
||||
$body = (New-Object IO.StreamReader $Context.Request.InputStream).ReadToEnd()
|
||||
$data = ConvertFrom-Json $body
|
||||
|
||||
# 2) Delegate to your unified function for the install
|
||||
Install-DattoRMM `
|
||||
-UseWebhook `
|
||||
-WebhookPassword $Global:WebhookPassword `
|
||||
-SiteUID $data.UID `
|
||||
-SiteName $data.Name `
|
||||
-PushSiteVars:($data.checkedValues -contains 'inputVar') `
|
||||
-InstallRMM: ($data.checkedValues -contains 'rmm') `
|
||||
-SaveCopy: ($data.checkedValues -contains 'exe')
|
||||
|
||||
# 3) Acknowledge to the client
|
||||
Respond-Text $Context "Triggered DattoRMM for $($data.Name)"
|
||||
}
|
||||
catch {
|
||||
# Log the exception and return HTTP 500
|
||||
Write-LogHybrid "Handle-InstallDattoRMM error: $($_.Exception.Message)" Error DattoRMM -LogToEvent
|
||||
$Context.Response.StatusCode = 500
|
||||
Respond-Text $Context "Internal server error during DattoRMM install."
|
||||
}
|
||||
}
|
||||
|
||||
function Handle-InstallCyberQP {
|
||||
param($Context)
|
||||
|
||||
# 1) call into your module
|
||||
Install-CyberQP
|
||||
|
||||
# 2) log & write back a simple text response
|
||||
Write-LogHybrid "CyberQP installed" "Success" "OnBoard"
|
||||
Respond-Text $Context "CyberQP installed"
|
||||
}
|
||||
|
||||
function Handle-InstallThreatLocker {
|
||||
param($Context)
|
||||
|
||||
# 1) call into your module
|
||||
Install-ThreatLocker
|
||||
|
||||
# 2) log & write back a simple text response
|
||||
Write-LogHybrid "ThreatLocker installed" "Success" "OnBoard"
|
||||
Respond-Text $Context "ThreatLocker installed"
|
||||
}
|
||||
|
||||
function Handle-InstallRocketCyber {
|
||||
param($Context)
|
||||
|
||||
# 1) call into your module
|
||||
Install-RocketCyber
|
||||
|
||||
# 2) log & write back a simple text response
|
||||
Write-LogHybrid "RocketCyber installed" "Success" "OnBoard"
|
||||
Respond-Text $Context "RocketCyber installed"
|
||||
}
|
||||
|
||||
function Handle-InstallSVSHelpDesk {
|
||||
param($Context)
|
||||
|
||||
# 1) call into your module
|
||||
Install-SVSHelpDesk
|
||||
|
||||
# 2) log & write back a simple text response
|
||||
Write-LogHybrid "SVS HelpDesk installed" "Success" "OnBoard"
|
||||
Respond-Text $Context "SVS HelpDesk installed"
|
||||
}
|
||||
|
||||
#endregion Handler Stubs
|
||||
|
||||
#region Install-DattoRMM
|
||||
|
||||
@@ -1688,7 +1545,151 @@ function Install-DattoRMM {
|
||||
#endregion
|
||||
|
||||
|
||||
}
|
||||
} # End function Invoke-ScriptMonkey
|
||||
|
||||
#region Handler Stubs
|
||||
|
||||
function Respond-Text {
|
||||
param($Context, $Text)
|
||||
$bytes = [Text.Encoding]::UTF8.GetBytes($Text)
|
||||
$Context.Response.ContentType = 'text/plain'
|
||||
$Context.Response.ContentLength64 = $bytes.Length
|
||||
$Context.Response.OutputStream.Write($bytes,0,$bytes.Length)
|
||||
$Context.Response.OutputStream.Close()
|
||||
}
|
||||
|
||||
function Respond-HTML {
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[Parameter(Mandatory = $true)][object] $Context,
|
||||
[Parameter(Mandatory = $true)][string] $Html
|
||||
)
|
||||
$bytes = [Text.Encoding]::UTF8.GetBytes($Html)
|
||||
$Context.Response.ContentType = 'text/html'
|
||||
$Context.Response.ContentLength64 = $bytes.Length
|
||||
$Context.Response.OutputStream.Write($bytes, 0, $bytes.Length)
|
||||
$Context.Response.OutputStream.Close()
|
||||
}
|
||||
|
||||
function Respond-JSON {
|
||||
param($Context, $Object)
|
||||
$json = $Object | ConvertTo-Json -Depth 5
|
||||
$bytes = [Text.Encoding]::UTF8.GetBytes($json)
|
||||
$Context.Response.ContentType = 'application/json'
|
||||
$Context.Response.ContentLength64 = $bytes.Length
|
||||
$Context.Response.OutputStream.Write($bytes,0,$bytes.Length)
|
||||
$Context.Response.OutputStream.Close()
|
||||
}
|
||||
|
||||
function Handle-FetchSites {
|
||||
param($Context)
|
||||
|
||||
try {
|
||||
# 1) Read the incoming JSON payload (contains only the webhook password)
|
||||
$raw = (New-Object IO.StreamReader $Context.Request.InputStream).ReadToEnd()
|
||||
$pw = (ConvertFrom-Json $raw).password
|
||||
|
||||
# ★ Store it globally for the next call ★
|
||||
$Global:WebhookPassword = $pw
|
||||
|
||||
# 2) Delegate to your unified function
|
||||
$sites = Install-DattoRMM `
|
||||
-UseWebhook `
|
||||
-WebhookPassword $pw `
|
||||
-FetchSites `
|
||||
-SaveSitesList:$SaveSitesList `
|
||||
-OutputFile $OutputFile
|
||||
|
||||
# 3) Return JSON array of sites
|
||||
Respond-JSON $Context $sites
|
||||
}
|
||||
catch {
|
||||
# Log the exception and return HTTP 500
|
||||
Write-LogHybrid "Handle-FetchSites error: $($_.Exception.Message)" Error DattoRMM -LogToEvent
|
||||
$Context.Response.StatusCode = 500
|
||||
Respond-Text $Context "Internal server error fetching sites."
|
||||
}
|
||||
}
|
||||
|
||||
function Handle-InstallDattoRMM {
|
||||
param($Context)
|
||||
|
||||
try {
|
||||
if ($Context.Request.HttpMethod -ne 'POST') {
|
||||
$Context.Response.StatusCode = 405
|
||||
Respond-Text $Context 'Use POST'
|
||||
return
|
||||
}
|
||||
|
||||
# 1) Read and parse the JSON body
|
||||
$body = (New-Object IO.StreamReader $Context.Request.InputStream).ReadToEnd()
|
||||
$data = ConvertFrom-Json $body
|
||||
|
||||
# 2) Delegate to your unified function for the install
|
||||
Install-DattoRMM `
|
||||
-UseWebhook `
|
||||
-WebhookPassword $Global:WebhookPassword `
|
||||
-SiteUID $data.UID `
|
||||
-SiteName $data.Name `
|
||||
-PushSiteVars:($data.checkedValues -contains 'inputVar') `
|
||||
-InstallRMM: ($data.checkedValues -contains 'rmm') `
|
||||
-SaveCopy: ($data.checkedValues -contains 'exe')
|
||||
|
||||
# 3) Acknowledge to the client
|
||||
Respond-Text $Context "Triggered DattoRMM for $($data.Name)"
|
||||
}
|
||||
catch {
|
||||
# Log the exception and return HTTP 500
|
||||
Write-LogHybrid "Handle-InstallDattoRMM error: $($_.Exception.Message)" Error DattoRMM -LogToEvent
|
||||
$Context.Response.StatusCode = 500
|
||||
Respond-Text $Context "Internal server error during DattoRMM install."
|
||||
}
|
||||
}
|
||||
|
||||
function Handle-InstallCyberQP {
|
||||
param($Context)
|
||||
|
||||
# 1) call into your module
|
||||
Install-CyberQP
|
||||
|
||||
# 2) log & write back a simple text response
|
||||
Write-LogHybrid "CyberQP installed" "Success" "OnBoard"
|
||||
Respond-Text $Context "CyberQP installed"
|
||||
}
|
||||
|
||||
function Handle-InstallThreatLocker {
|
||||
param($Context)
|
||||
|
||||
# 1) call into your module
|
||||
Install-ThreatLocker
|
||||
|
||||
# 2) log & write back a simple text response
|
||||
Write-LogHybrid "ThreatLocker installed" "Success" "OnBoard"
|
||||
Respond-Text $Context "ThreatLocker installed"
|
||||
}
|
||||
|
||||
function Handle-InstallRocketCyber {
|
||||
param($Context)
|
||||
|
||||
# 1) call into your module
|
||||
Install-RocketCyber
|
||||
|
||||
# 2) log & write back a simple text response
|
||||
Write-LogHybrid "RocketCyber installed" "Success" "OnBoard"
|
||||
Respond-Text $Context "RocketCyber installed"
|
||||
}
|
||||
|
||||
function Handle-InstallSVSHelpDesk {
|
||||
param($Context)
|
||||
|
||||
# 1) call into your module
|
||||
Install-SVSHelpDesk
|
||||
|
||||
# 2) log & write back a simple text response
|
||||
Write-LogHybrid "SVS HelpDesk installed" "Success" "OnBoard"
|
||||
Respond-Text $Context "SVS HelpDesk installed"
|
||||
}
|
||||
|
||||
|
||||
if ($MyInvocation.InvocationName -eq '.') {
|
||||
# dot-sourced, don't invoke
|
||||
|
||||
Reference in New Issue
Block a user