Skip to content

Commit

Permalink
hudu / extension tweaks
Browse files Browse the repository at this point in the history
improve more logging
update hudu to accept entire integration config to check for ZTNA
  • Loading branch information
JohnDuprey committed Feb 8, 2025
1 parent e772de7 commit 59a7328
Show file tree
Hide file tree
Showing 7 changed files with 22 additions and 21 deletions.
8 changes: 4 additions & 4 deletions Modules/CIPPCore/Public/Authentication/New-CIPPAPIConfig.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ function New-CIPPAPIConfig {
[CmdletBinding(SupportsShouldProcess)]
param (
$APIName = 'CIPP API Config',
$ExecutingUser,
$Headers,
[switch]$ResetSecret,
[string]$AppName,
[string]$AppId
Expand Down Expand Up @@ -60,7 +60,7 @@ function New-CIPPAPIConfig {
$APIIdUrl = New-GraphPOSTRequest -uri "https://graph.microsoft.com/v1.0/applications/$($APIApp.id)" -NoAuthCheck $true -type PATCH -body "{`"identifierUris`":[`"api://$($APIApp.appId)`"]}"
Write-Information 'Adding serviceprincipal'
$ServicePrincipal = New-GraphPOSTRequest -uri 'https://graph.microsoft.com/v1.0/serviceprincipals' -NoAuthCheck $true -type POST -body "{`"accountEnabled`":true,`"appId`":`"$($APIApp.appId)`",`"displayName`":`"$AppName`",`"tags`":[`"WindowsAzureActiveDirectoryIntegratedApp`",`"AppServiceIntegratedApp`"]}"
Write-LogMessage -user $ExecutingUser -API $APINAME -tenant 'None '-message "Created CIPP-API App with name '$($APIApp.displayName)'." -Sev 'info'
Write-LogMessage -headers $Headers -API $APINAME -tenant 'None '-message "Created CIPP-API App with name '$($APIApp.displayName)'." -Sev 'info'
}
}
if ($ResetSecret.IsPresent -and $APIApp) {
Expand Down Expand Up @@ -95,7 +95,7 @@ function New-CIPPAPIConfig {
)
$BatchResponse = New-GraphBulkRequest -tenantid $env:TenantID -NoAuthCheck $true -asapp $true -Requests $Requests
$APIPassword = $BatchResponse | Where-Object { $_.id -eq 'addNewPassword' } | Select-Object -ExpandProperty body
Write-LogMessage -user $ExecutingUser -API $APINAME -tenant 'None '-message "Reset CIPP-API Password for '$($APIApp.displayName)'." -Sev 'info'
Write-LogMessage -headers $Headers -API $APINAME -tenant 'None '-message "Reset CIPP-API Password for '$($APIApp.displayName)'." -Sev 'info'
}
}

Expand All @@ -109,7 +109,7 @@ function New-CIPPAPIConfig {
} catch {
$ErrorMessage = Get-CippException -Exception $_
Write-Information ($ErrorMessage | ConvertTo-Json -Depth 10)
Write-LogMessage -user $ExecutingUser -API $APINAME -tenant 'None' -message "Failed to setup CIPP-API Access: $($ErrorMessage.NormalizedError) Linenumber: $($_.InvocationInfo.ScriptLineNumber)" -Sev 'Error' -LogData $ErrorMessage
Write-LogMessage -headers $Headers -API $APINAME -tenant 'None' -message "Failed to setup CIPP-API Access: $($ErrorMessage.NormalizedError) Linenumber: $($_.InvocationInfo.ScriptLineNumber)" -Sev 'Error' -LogData $ErrorMessage
return @{
Results = "Failed to setup CIPP-API Access: $($ErrorMessage.NormalizedError)"
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Function Invoke-ExecExtensionTest {
param($Request, $TriggerMetadata)

$APIName = $TriggerMetadata.FunctionName
Write-LogMessage -user $request.headers.'x-ms-client-principal' -API $APINAME -message 'Accessed this API' -Sev 'Debug'
Write-LogMessage -headers $Request.Headers -API $APINAME -message 'Accessed this API' -Sev 'Debug'
$Table = Get-CIPPTable -TableName Extensionsconfig
$Configuration = ((Get-CIPPAzDataTableEntity @Table).config | ConvertFrom-Json)
# Interact with query parameters or the body of the request.
Expand Down Expand Up @@ -62,7 +62,7 @@ Function Invoke-ExecExtensionTest {
}
}
'Hudu' {
Connect-HuduAPI -configuration $Configuration.Hudu
Connect-HuduAPI -configuration $Configuration
$Version = Get-HuduAppInfo
if ($Version.version) {
$Results = [pscustomobject]@{'Results' = ('Successfully Connected to Hudu, version: {0}' -f $Version.version) }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ function Invoke-ExecApiClient {
$ClientId = $Request.Body.ClientId.value ?? $Request.Body.ClientId
try {
$ApiConfig = @{
ExecutingUser = $Request.Headers.'x-ms-client-principal'
Headers = $Request.Headers
}
if ($ClientId) {
$ApiConfig.ClientId = $ClientId
Expand All @@ -43,7 +43,7 @@ function Invoke-ExecApiClient {
$ApiConfig.AppName = $Request.Body.AppName
}
$APIConfig = New-CIPPAPIConfig @ApiConfig
Write-Host ($APIConfig | ConvertTo-Json)

$ClientId = $APIConfig.ApplicationID
$AddedText = $APIConfig.Results
} catch {
Expand All @@ -64,7 +64,7 @@ function Invoke-ExecApiClient {
$Client.Role = [string]$Request.Body.Role.value
$Client.IPRange = "$(@($IpRange) | ConvertTo-Json -Compress)"
$Client.Enabled = $Request.Body.Enabled ?? $false
Write-LogMessage -user $Request.Headers.'x-ms-client-principal' -API 'ExecApiClient' -message "Updated API client $($Request.Body.ClientId)" -Sev 'Info'
Write-LogMessage -headers $Request.Headers -API 'ExecApiClient' -message "Updated API client $($Request.Body.ClientId)" -Sev 'Info'
$Results = 'API client updated'
} else {
$Client = @{
Expand Down Expand Up @@ -109,8 +109,10 @@ function Invoke-ExecApiClient {
try {
Set-CippApiAuth -RGName $RGName -FunctionAppName $FunctionAppName -TenantId $TenantId -ClientIds $ClientIds
$Body = @{ Results = 'API clients saved to Azure' }
Write-LogMessage -headers $Request.Headers -API 'ExecApiClient' -message 'Saved API clients to Azure' -Sev 'Info'
} catch {
$Body = @{ Results = 'Failed to save allowed API clients to Azure, ensure your function app has the appropriate rights to make changes to the Authentication settings.' }
Write-Information (Get-CippException -Exception $_ | ConvertTo-Json)
}
}
'ResetSecret' {
Expand All @@ -121,7 +123,7 @@ function Invoke-ExecApiClient {
severity = 'error'
}
} else {
$ApiConfig = New-CIPPAPIConfig -ResetSecret -AppId $Request.Body.ClientId
$ApiConfig = New-CIPPAPIConfig -ResetSecret -AppId $Request.Body.ClientId -Headers $Request.Headers

if ($ApiConfig.ApplicationSecret) {
$Results = @{
Expand Down Expand Up @@ -152,13 +154,13 @@ function Invoke-ExecApiClient {

$Client = Get-CIPPAzDataTableEntity @Table -Filter "RowKey eq '$($ClientId)'" -Property RowKey, PartitionKey, ETag
Remove-AzDataTableEntity @Table -Entity $Client
Write-LogMessage -user $Request.Headers.'x-ms-client-principal' -API 'ExecApiClient' -message "Deleted API client $ClientId" -Sev 'Info'
Write-LogMessage -headers $Request.Headers -API 'ExecApiClient' -message "Deleted API client $ClientId" -Sev 'Info'
$Body = @{ Results = "API client $ClientId deleted" }
} else {
$Body = @{ Results = "API client $ClientId not found or not a valid CIPP-API application" }
}
} catch {
Write-LogMessage -user $Request.Headers.'x-ms-client-principal' -API 'ExecApiClient' -message "Failed to remove app registration for $ClientId" -Sev 'Warning'
Write-LogMessage -headers $Request.Headers -API 'ExecApiClient' -message "Failed to remove app registration for $ClientId" -Sev 'Warning'
}
}
default {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ function Push-CippExtensionData {
'Hudu' {
if ($Config.Hudu.Enabled) {
Write-Host 'Perfoming Hudu Extension Sync...'
Invoke-HuduExtensionSync -Configuration $Config.Hudu -TenantFilter $TenantFilter
Invoke-HuduExtensionSync -Configuration $Config -TenantFilter $TenantFilter
}
}
}
Expand Down
11 changes: 5 additions & 6 deletions Modules/CippExtensions/Public/Hudu/Connect-HuduAPI.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,11 @@ function Connect-HuduAPI {

$APIKey = Get-ExtensionAPIKey -Extension 'Hudu'

# Add logic to check if we're using CloudFlare Tunnel (if Hudu.CFEnabled checkbox is checked from Extensions.json). If the checkbox is checked, pull CloudFlare ClientID and API Key and add as a header
if ($Configuration.CFEnabled) {
$CFClientID = (Get-AzKeyVaultSecret -VaultName $keyvaultname -Name 'CloudFlareClientID' -AsPlainText)
$CFAPIKey = (Get-AzKeyVaultSecret -VaultName $keyvaultname -Name 'CloudFlareAPIKey' -AsPlainText)
New-HuduCustomHeaders -Headers @{'CF-Access-Client-Id' = "$CFClientID"; 'CF-Access-Client-Secret' = "$CFAPIKey" }
if ($Configuration.Hudu.CFEnabled -eq $true -and $Configuration.CFZTNA.Enabled -eq $true) {
$CFAPIKey = Get-ExtensionAPIKey -Extension 'CFZTNA'
New-HuduCustomHeaders -Headers @{'CF-Access-Client-Id' = $Configuration.CFZTNA.ClientId; 'CF-Access-Client-Secret' = "$CFAPIKey" }
Write-Information 'CF-Access-Client-Id and CF-Access-Client-Secret headers added to Hudu API request'
}
New-HuduBaseURL -BaseURL $Configuration.BaseURL
New-HuduBaseURL -BaseURL $Configuration.Hudu.BaseURL
New-HuduAPIKey -ApiKey $APIKey
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ function Get-HuduFieldMapping {

$Table = Get-CIPPTable -TableName Extensionsconfig
try {
$Configuration = ((Get-CIPPAzDataTableEntity @Table).config | ConvertFrom-Json -ea stop).Hudu
$Configuration = (Get-CIPPAzDataTableEntity @Table).config | ConvertFrom-Json -ea stop
Connect-HuduAPI -configuration $Configuration

$AssetLayouts = Get-HuduAssetLayouts | Select-Object @{Name = 'FieldType' ; Expression = { 'Layouts' } }, @{Name = 'value'; Expression = { $_.id } }, name, fields
Expand Down
2 changes: 1 addition & 1 deletion Modules/CippExtensions/Public/Hudu/Get-HuduMapping.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ function Get-HuduMapping {
$Tenants = Get-Tenants -IncludeErrors
$Table = Get-CIPPTable -TableName Extensionsconfig
try {
$Configuration = ((Get-CIPPAzDataTableEntity @Table).config | ConvertFrom-Json -ea stop).Hudu
$Configuration = (Get-CIPPAzDataTableEntity @Table).config | ConvertFrom-Json -ea stop

Connect-HuduAPI -configuration $Configuration
$HuduCompanies = Get-HuduCompanies
Expand Down

0 comments on commit 59a7328

Please sign in to comment.