core/modules/monkeyhtml/private/Objects/Get-HTMLFindingCardInfo.ps1
# Monkey365 - the PowerShell Cloud Security Tool for Azure and Microsoft 365 (copyright 2022) by Juan Garrido # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. Function Get-HTMLFindingCardInfo{ <# .SYNOPSIS .DESCRIPTION .INPUTS .OUTPUTS .EXAMPLE .NOTES Author : Juan Garrido Twitter : @tr1ana File Name : Get-HTMLFindingCardInfo Version : 1.0 .LINK https://github.com/silverhack/monkey365 #> [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseShouldProcessForStateChangingFunctions", "", Scope="Function")] [CmdletBinding()] Param ( [parameter(Mandatory= $True, ValueFromPipeline = $True, HelpMessage= "Finding Object")] [Object]$FindingObject, [parameter(Mandatory= $false, HelpMessage= "Template")] [System.Xml.XmlDocument]$Template ) Begin{ If($PSBoundParameters.ContainsKey('Template') -and $PSBoundParameters['Template']){ $TemplateObject = $PSBoundParameters['Template'] } ElseIf($null -ne (Get-Variable -Name Template -Scope Script -ErrorAction Ignore)){ $TemplateObject = $script:Template } Else{ [xml]$TemplateObject = "<html></html>" } #Set array $allCols = [System.Collections.Generic.List[System.Xml.XmlElement]]::new() #Div properties $divProperties = @{ Name = 'div'; ClassName = 'card-content'; Template = $TemplateObject; } #Create element $cardContent = New-HtmlTag @divProperties #Div properties $divProperties = @{ Name = 'div'; ClassName = 'row'; Template = $TemplateObject; } #Create main row $mainRow = New-HtmlTag @divProperties #Create list-group element $ulProperties = @{ Name = 'ul'; ClassName = 'list-group'; Template = $TemplateObject; } #Create element $listGroup = New-HtmlTag @ulProperties #Create list-group-item element $liProperties = @{ Name = 'li'; ClassName = 'list-group-item monkey-finding-info border-0'; Template = $TemplateObject; } #Create element $listGroupItem = New-HtmlTag @liProperties #Create span element $spanProperties = @{ Name = 'span'; ClassName = 'text-justify font-weight-bold'; Template = $TemplateObject; } #Create element $spanLabel = New-HtmlTag @spanProperties } Process{ #Get listgroup $_listGroup = $listGroup.Clone() #Get listgroupitem $groupItem = $listGroupItem.Clone() #Get Rule Id $ruleIdSpan = $spanLabel.Clone() #Add text [void]$ruleIdSpan.AppendChild($TemplateObject.CreateTextNode("Rule Id")) #Add to list group item [void]$groupItem.AppendChild($ruleIdSpan); #Add to list group [void]$_listGroup.AppendChild($groupItem); #Create input group for input text $divProperties = @{ Name = 'div'; ClassName = 'input-group mt-2'; Template = $TemplateObject; } #Create element $inputGroup = New-HtmlTag @divProperties #Create guid $ruleGuid = ("{0}-{1}" -f $FindingObject.idSuffix, [System.Guid]::NewGuid().Guid.Replace('-','')) $inputProperties = @{ Name = 'input'; ClassName = 'form-control border-end-0'; Id = $ruleGuid; Attributes = @{ type = "text"; disabled = ""; value = $FindingObject.idSuffix; } Template = $TemplateObject; } #Create element $inputTag = New-HtmlTag @inputProperties #Add to input group [void]$inputGroup.AppendChild($inputTag); #Set empty i tag $iProperties = @{ Name = 'i'; ClassName = 'bi bi-copy'; Empty = $True; Template = $TemplateObject; } #Create element $iTag = New-HtmlTag @iProperties #Create button and append I tag $buttonProperties = @{ Name = 'button'; ClassName = 'btn monkey-clipboard'; Id = ("{0}" -f $ruleGuid); Attributes = @{ type = "button"; "data-bs-target" = ("{0}" -f $ruleGuid); }; AppendObject = $iTag; Template = $TemplateObject; } #Create element $buttonTag = New-HtmlTag @buttonProperties #Create span object and append button $spanProperties = @{ Name = 'span'; ClassName = 'input-group-append border-start-0 rounded-end'; AppendObject = $buttonTag; Template = $TemplateObject; } #Create element $spanButton = New-HtmlTag @spanProperties #Add to input group [void]$inputGroup.AppendChild($spanButton); #Add to list group item $groupItem = $listGroupItem.Clone() [void]$groupItem.AppendChild($inputGroup); #Add to list group [void]$_listGroup.AppendChild($groupItem); #Create div and append list group $divProperties = @{ Name = 'div'; ClassName = 'col-md-4 id-suffix'; AppendObject = $_listGroup; Template = $TemplateObject; } #Create element $divIdSuffix = New-HtmlTag @divProperties #Add to column array [void]$allCols.Add($divIdSuffix); #Add Severity #Get listgroup $_listGroup = $listGroup.Clone() #Get listgroupitem $groupItem = $listGroupItem.Clone() #Get Severity span tag $severitySpan = $spanLabel.Clone() #Add text [void]$severitySpan.AppendChild($TemplateObject.CreateTextNode("Severity")) #Add to list group item [void]$groupItem.AppendChild($severitySpan); #Add to list group [void]$_listGroup.AppendChild($groupItem); #Get listgroupitem $groupItem = $listGroupItem.Clone() #Get Flag $badgeColor = $FindingObject.level | Get-BadgeFromLevel $spanProperties = @{ Name = "span"; ClassName = ("badge badge-xl {0} mt-2" -f $badgeColor); Text = $FindingObject.level.ToLower(); CreateTextNode = $True; Template = $TemplateObject; } #Create element $spanObj = New-HtmlTag @spanProperties #Add to group item [void]$groupItem.AppendChild($spanObj); #Add to list group [void]$_listGroup.AppendChild($groupItem); #Create div and append list group $divProperties = @{ Name = 'div'; ClassName = 'col-md-1'; AppendObject = $_listGroup; Template = $TemplateObject; } #Create element $divSeverity = New-HtmlTag @divProperties #Add to column array [void]$allCols.Add($divSeverity); #Add Status #Get listgroup $_listGroup = $listGroup.Clone() #Get listgroupitem $groupItem = $listGroupItem.Clone() #Get Severity span tag $statusSpan = $spanLabel.Clone() #Add text [void]$statusSpan.AppendChild($TemplateObject.CreateTextNode("Status")) #Add to list group item [void]$groupItem.AppendChild($statusSpan); #Add to list group [void]$_listGroup.AppendChild($groupItem); #Get listgroupitem $groupItem = $listGroupItem.Clone() #Get Flag $badgeColor = $FindingObject.statusCode | Get-BadgeFromStatusCode $spanProperties = @{ Name = "span"; ClassName = ("badge badge-xl {0} mt-2" -f $badgeColor); Text = $FindingObject.statusCode.ToLower(); CreateTextNode = $True; Template = $TemplateObject; } #Create element $spanObj = New-HtmlTag @spanProperties #Add to group item [void]$groupItem.AppendChild($spanObj); #Add to list group [void]$_listGroup.AppendChild($groupItem); #Create div and append list group $divProperties = @{ Name = 'div'; ClassName = 'col-md-1'; AppendObject = $_listGroup; Template = $TemplateObject; } #Create element $divStatus = New-HtmlTag @divProperties #Add to column array [void]$allCols.Add($divStatus); #Add Compliance #Get listgroup $_listGroup = $listGroup.Clone() #Get listgroupitem $groupItem = $listGroupItem.Clone() #Get Severity span tag $complianceSpan = $spanLabel.Clone() #Add text [void]$complianceSpan.AppendChild($TemplateObject.CreateTextNode("Compliance")) #Add to list group item [void]$groupItem.AppendChild($complianceSpan); #Add to list group [void]$_listGroup.AppendChild($groupItem); #Get listgroupitem $groupItem = $listGroupItem.Clone() #Get compliance data $complianceData = $FindingObject.compliance | Convert-ComplianceToSpanTag -Template $TemplateObject If($null -ne $complianceData){ ForEach($spanObj in @($complianceData)){ #Add to group item [void]$groupItem.AppendChild($spanObj); } } #Add to list group [void]$_listGroup.AppendChild($groupItem); #Create div and append list group $divProperties = @{ Name = 'div'; ClassName = 'col-md-4'; AppendObject = $_listGroup; Template = $TemplateObject; } #Create element $divCompliance = New-HtmlTag @divProperties #Add to column array [void]$allCols.Add($divCompliance); #Add resources count If($FindingObject.statusCode.ToLower() -eq "fail"){ #Get listgroup $_listGroup = $listGroup.Clone() #Get listgroupitem $groupItem = $listGroupItem.Clone() #Get Severity span tag $violationSpan = $spanLabel.Clone() #Add text [void]$violationSpan.AppendChild($TemplateObject.CreateTextNode("Rule Violations")) #Add to list group item [void]$groupItem.AppendChild($violationSpan); #Add to list group [void]$_listGroup.AppendChild($groupItem); #Get listgroupitem $groupItem = $listGroupItem.Clone() $hProperties = @{ Name = "h4"; ClassName = "mt-2"; Text = $FindingObject.affectedResourcesCount(); CreateTextNode = $True; Template = $TemplateObject; } #Create element $H4Obj = New-HtmlTag @hProperties #Add to group item [void]$groupItem.AppendChild($H4Obj); #Add to list group [void]$_listGroup.AppendChild($groupItem); #Create div and append list group $divProperties = @{ Name = 'div'; ClassName = 'col-md-1'; AppendObject = $_listGroup; Template = $TemplateObject; } #Create element $divViolation = New-HtmlTag @divProperties #Add to column array [void]$allCols.Add($divViolation); } #Add columns to main row If($allCols.Count -gt 0){ ForEach($col in $allCols){ [void]$mainRow.AppendChild($col); } #Add main row to card content [void]$cardContent.AppendChild($mainRow) } return $cardContent } End{ #Nothing to do here } } |