95 lines
4.3 KiB
PowerShell
95 lines
4.3 KiB
PowerShell
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
|
|
}
|
|
} |