function Test-AlkamiWidgetManifest10 { <# .SYNOPSIS Please don't use this file by hand, please use Test-AlkamiManifest This function is intended to validate the WidgetManifest dotted object/hashtable so we can ensure that the values provided meet a minimum standard of valid .PARAMETER WidgetManifest A dotted object ([xml](Get-Content -Path $somePath)) or hashtable of values #> [CmdletBinding()] [OutputType([System.Collections.Hashtable])] Param( [Parameter(Position = 0, Mandatory = $true)] [ValidateNotNullOrEmpty()] [object]$WidgetManifest ) $success = $true $resultMessages = @() $validWebTierInstall = Get-ValidWebTierInstallLocations if ([string]::IsNullOrWhiteSpace($widgetManifest.widgetInstall)) { $resultMessages += 'PackageManifest/widgetManifest/widgetInstall not found. This element is required for widgets.' $success = $false } if ($validWebTierInstall -notcontains $widgetManifest.widgetInstall) { $resultMessages += "packageManifest/widgetManifest/widgetInstall contains an invalid value. Valid values are $($validWebTierInstall -join ',')" $success = $false } if ([string]::IsNullOrWhiteSpace($widgetManifest.areaName)) { $resultMessages += 'PackageManifest/widgetManifest/areaName not found. This element is required for widgets.' $success = $false } if ([string]::IsNullOrWhiteSpace($widgetManifest.assemblyInfo)) { $resultMessages += 'PackageManifest/widgetManifest/assemblyInfo not found. This element is required for widgets.' $success = $false } <# Per SRE-13338 ~ Comment out the widget unsupported functionality until we can re-visit with an updated set of usage requirements. if (-not $widgetManifest.displaySettings) { $resultMessages += 'PackageManifest/widgetManifest/displaySettings not found. This element is required for widgets.' } ## Reference: https://bitbucket.corp.alkamitech.com/projects/APPDEV/repos/orb/browse/Common/Alkami.App.Core.Contracts/DataContracts/WidgetDisplaySettings.cs $validWidgetDisplaySettings = @('Desktop', 'Mobile', 'Tablet', 'DesktopMobile', 'DesktopTablet', 'All', 'Hidden', 'None') if (-not ($validWidgetDisplaySettings -contains $widgetManifest.displaySettings)) { $resultMessages += "packageManifest/widgetManifest/displaySettings contains an invalid value. Valid values are $($validWidgetDisplaySettings -join ',')" } if ($null -ne $widgetManifest.menuItems) { $hasMenuItems = $false foreach($menuItem in $widgetManifest.menuItems.menuItem) { $hasMenuItems = $true if (-not $menuItem.menuItemType) { $resultMessages += 'PackageManifest/widgetManifest/menuItems/menuItem/menuItemType must be specified.' } if ($menuItem.menuItemType -ne 'Admin') { $resultMessages += 'PackageManifest/widgetManifest/menuItems/menuItem/menuItemType is only supported as Admin at this time.' } if (-not $menuItem.key) { $resultMessages += 'PackageManifest/widgetManifest/menuItems/menuItem/key must be specified.' } if (-not $menuItem.link) { $resultMessages += 'PackageManifest/widgetManifest/menuItems/menuItem/link must be specified.' } $mustMatchPermissions = $menuItem.mustMatchPermissions -eq 'True' $hasPermissions = $false if ($mustMatchPermissions -and $null -ne $menuItem.permissions) { ## We should probably figure out a way to validate the permissions provided in this list, but that may be impossible. $hasPermissions =-not (Test-IsCollectionNullOrEmpty $menuItem.permissions.permission) } if ($mustMatchPermissions -and -not $hasPermissions) { $resultMessages += 'PackageManifest/widgetManifest/menuItems/menuItem/permissions/permission must be specified when packageManifest/widgetManifest/menuItems/menuItem/mustMatchPermissions is set to true.' } } if (-not $hasMenuItems) { $resultMessages += 'Specifying the packageManifest/widgetManifest/menuItems tag requires children menuItem records as well' } } #> return @{ success = $success results = $resultMessages } }