Skip to content

Commit 2d7c355

Browse files
authored
Merge pull request Azure#12322 from Azure/feature-for-m365
Handle empty properties
2 parents f3ccd84 + 1af9bf4 commit 2d7c355

File tree

2 files changed

+54
-5
lines changed

2 files changed

+54
-5
lines changed

.script/dataConnectorValidator.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,12 @@ export async function IsValidDataConnectorSchema(filePath: string): Promise<Exit
1616

1717
if(isPotentialConnectorJson(jsonFile))
1818
{
19+
//WHEN DATATYPES ARRAY OBJECT IS NOT PRESENT OR EMPTY, SKIP VALIDATION
20+
if (!jsonFile.dataTypes && jsonFile.dataTypes.length === 0) {
21+
console.warn(`Skipping Files under Templates folder : ${filePath} - No dataTypes found`);
22+
return ExitCode.SUCCESS;
23+
}
24+
1925
if(!jsonFile.dataTypes[0].name.includes("Event"))
2026
{
2127
let connectorCategory = getConnectorCategory(jsonFile.dataTypes, jsonFile.instructionSteps);

Tools/Create-Azure-Sentinel-Solution/common/commonFunctions.ps1

Lines changed: 48 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1792,6 +1792,18 @@ function PrepareSolutionMetadata($solutionMetadataRawContent, $contentResourceDe
17921792
}
17931793
return
17941794
}
1795+
1796+
# Define a helper function to handle null or empty arrays
1797+
function Get-ValidArray($inputArray) {
1798+
if ($null -eq $inputArray -or -not $inputArray -or $inputArray.Count -eq 0) {
1799+
if (!$global:baseMainTemplate.variables.TemplateEmptyArray) {
1800+
$global:baseMainTemplate.variables | Add-Member -NotePropertyName "TemplateEmptyArray" -NotePropertyValue "[json('[]')]"
1801+
}
1802+
return "[variables('TemplateEmptyArray')]"
1803+
}
1804+
return $inputArray
1805+
}
1806+
17951807
try {
17961808
# BELOW IS OLD WAY OF CCP CONNECTOR CODE I.E CLV1 WHICH ONLY HAS CONNECTORUICONFIG AND POLLER CONFIG SECTION IN SOURCE
17971809
$ccpPollingConfig = [PSCustomObject] @{}
@@ -1811,6 +1823,19 @@ function PrepareSolutionMetadata($solutionMetadataRawContent, $contentResourceDe
18111823
{
18121824
$ccpPollingConfig = $null
18131825
$ccpConnector = $false
1826+
1827+
if ($null -eq $connectorData.graphQueries -or $connectorData.graphQueries.Count -eq 0) {
1828+
$connectorData.graphQueries = Get-ValidArray $connectorData.graphQueries
1829+
}
1830+
1831+
if ($null -eq $connectorData.dataTypes -or $connectorData.dataTypes.Count -eq 0) {
1832+
$connectorData.dataTypes = Get-ValidArray $connectorData.dataTypes
1833+
}
1834+
1835+
if ($null -eq $connectorData.sampleQueries -or $connectorData.sampleQueries.Count -eq 0) {
1836+
$connectorData.sampleQueries = Get-ValidArray $connectorData.sampleQueries
1837+
}
1838+
18141839
$templateSpecConnectorData = $connectorData
18151840
}
18161841
}
@@ -2081,18 +2106,30 @@ function PrepareSolutionMetadata($solutionMetadataRawContent, $contentResourceDe
20812106
$connectorObj = [PSCustomObject]@{}
20822107
# If direct title is available, assume standard connector format
20832108
if ($connectorData.title) {
2109+
$graphQueriesValue = Get-ValidArray $connectorData.graphQueries;
2110+
$dataTypesValue = Get-ValidArray $connectorData.dataTypes;
20842111
$standardConnectorUiConfig = [PSCustomObject]@{
20852112
title = $connectorData.title;
20862113
publisher = $connectorData.publisher;
20872114
descriptionMarkdown = $connectorData.descriptionMarkdown;
2088-
graphQueries = $connectorData.graphQueries;
2089-
dataTypes = $connectorData.dataTypes;
2090-
connectivityCriterias = $connectorData.connectivityCriterias;
2115+
graphQueries = $graphQueriesValue;
2116+
dataTypes = $dataTypesValue;
2117+
#connectivityCriterias = $connectorData.connectivityCriterias;
2118+
}
2119+
2120+
# Add connectivityCriterias if not null
2121+
if ($null -ne $connectorData.connectivityCriterias) {
2122+
$standardConnectorUiConfig | Add-Member -MemberType NoteProperty -Name connectivityCriterias -Value $connectorData.connectivityCriterias
2123+
}
2124+
# Else, check if connectivityCriteria exists and add it
2125+
elseif ($null -ne $connectorData.connectivityCriteria) {
2126+
$standardConnectorUiConfig | Add-Member -MemberType NoteProperty -Name connectivityCriteria -Value $connectorData.connectivityCriteria
20912127
}
20922128

20932129
if(!$is1PConnector)
20942130
{
2095-
$standardConnectorUiConfig | Add-Member -NotePropertyName "sampleQueries" -NotePropertyValue $connectorData.sampleQueries;
2131+
$sampleQueriesValue = Get-ValidArray $connectorData.sampleQueries
2132+
$standardConnectorUiConfig | Add-Member -NotePropertyName "sampleQueries" -NotePropertyValue $sampleQueriesValue;
20962133
$standardConnectorUiConfig | Add-Member -NotePropertyName "availability" -NotePropertyValue $connectorData.availability;
20972134
$standardConnectorUiConfig | Add-Member -NotePropertyName "permissions" -NotePropertyValue $connectorData.permissions;
20982135
$standardConnectorUiConfig | Add-Member -NotePropertyName "instructionSteps" -NotePropertyValue $connectorData.instructionSteps;
@@ -2170,7 +2207,13 @@ function PrepareSolutionMetadata($solutionMetadataRawContent, $contentResourceDe
21702207
}
21712208
return $typeResult
21722209
}
2173-
$connectorDataType = $(getConnectorDataTypes $connectorData.dataTypes)
2210+
2211+
if($connectorData.dataTypes -eq "[variables('TemplateEmptyArray')]") {
2212+
$connectorDataType = "custom log"
2213+
} else {
2214+
$connectorDataType = $(getConnectorDataTypes $connectorData.dataTypes)
2215+
}
2216+
21742217
$isParserAvailable = $($contentToImport.Parsers -and ($contentToImport.Parsers.Count -gt 0))
21752218
$baseDescriptionText = "This Solution installs the data connector for $solutionName. You can get $solutionName $connectorDataType data in your Microsoft Sentinel workspace. Configure and enable this data connector in the Data Connector gallery after this Solution deploys."
21762219
$customLogsText = "$baseDescriptionText This data connector creates custom log table(s) $(getAllDataTypeNames $connectorData.dataTypes) in your Microsoft Sentinel / Azure Log Analytics workspace."

0 commit comments

Comments
 (0)