Skip to content

Commit 70642a2

Browse files
committed
Surface errors correctly for secret reset
1 parent d9f630e commit 70642a2

1 file changed

Lines changed: 22 additions & 4 deletions

File tree

Modules/CIPPCore/Public/Authentication/New-CIPPAPIConfig.ps1

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,20 @@ function New-CIPPAPIConfig {
193193
if ($PSCmdlet.ShouldProcess($APIApp.displayName, 'Reset API Secret')) {
194194
$Step = 'Resetting Application Password'
195195
Write-Information 'Removing all old passwords'
196+
197+
$AppManagementPolicy = New-GraphGetRequest -uri 'https://graph.microsoft.com/v1.0/policies/defaultAppManagementPolicy' -AsApp $true -NoAuthCheck $true
198+
$PasswordExpirationPolicy = $AppManagementPolicy.applicationRestrictions.passwordcredentials |
199+
Where-Object { $_.restrictionType -eq 'passwordLifetime' }
200+
201+
$NewPasswordCredential = @{
202+
displayName = 'Generated by API Setup'
203+
}
204+
if (-not ($PasswordExpirationPolicy.state -eq 'disabled' -or $null -eq $PasswordExpirationPolicy.state)) {
205+
$TimeToExpiration = [System.Xml.XmlConvert]::ToTimeSpan($PasswordExpirationPolicy.maxLifetime)
206+
$ExpirationDate = (Get-Date).AddDays($TimeToExpiration.Days).ToUniversalTime().ToString('yyyy-MM-ddTHH:mm:ss.fffZ')
207+
$NewPasswordCredential.endDateTime = $ExpirationDate
208+
}
209+
196210
$Requests = @(
197211
@{
198212
id = 'removeOldPasswords'
@@ -213,15 +227,19 @@ function New-CIPPAPIConfig {
213227
'Content-Type' = 'application/json'
214228
}
215229
body = @{
216-
passwordCredential = @{
217-
displayName = 'Generated by API Setup'
218-
}
230+
passwordCredential = $NewPasswordCredential
219231
}
220232
dependsOn = @('removeOldPasswords')
221233
}
222234
)
223235
$BatchResponse = New-GraphBulkRequest -tenantid $env:TenantID -NoAuthCheck $true -asapp $true -Requests $Requests
224-
$APIPassword = $BatchResponse | Where-Object { $_.id -eq 'addNewPassword' } | Select-Object -ExpandProperty body
236+
$AddPasswordResponse = $BatchResponse | Where-Object { $_.id -eq 'addNewPassword' }
237+
if ($AddPasswordResponse.status -ge 400) {
238+
$ErrorBody = $AddPasswordResponse.body
239+
$ErrorMsg = $ErrorBody.error.message ?? ($ErrorBody | ConvertTo-Json -Compress -Depth 5)
240+
throw "Failed to add new password during secret reset: $ErrorMsg"
241+
}
242+
$APIPassword = $AddPasswordResponse.body
225243
Write-LogMessage -headers $Headers -API $APINAME -tenant 'None '-message "Reset CIPP-API Password for '$($APIApp.displayName)'." -Sev 'info'
226244
}
227245
}

0 commit comments

Comments
 (0)