Update StackMonkey.ps1
This commit is contained in:
287
StackMonkey.ps1
287
StackMonkey.ps1
@@ -1145,150 +1145,7 @@ $script
|
|||||||
|
|
||||||
#endregion UIHtml
|
#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
|
#region Install-DattoRMM
|
||||||
|
|
||||||
@@ -1688,8 +1545,152 @@ function Install-DattoRMM {
|
|||||||
#endregion
|
#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 '.') {
|
if ($MyInvocation.InvocationName -eq '.') {
|
||||||
# dot-sourced, don't invoke
|
# dot-sourced, don't invoke
|
||||||
} elseif ($PSCommandPath) {
|
} elseif ($PSCommandPath) {
|
||||||
|
|||||||
Reference in New Issue
Block a user