Skip to content

Commit 361ef55

Browse files
committed
Fix: improve error handling and logging in calendar and contact permission modification functions
1 parent b29d20b commit 361ef55

File tree

2 files changed

+38
-31
lines changed

2 files changed

+38
-31
lines changed

Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Email-Exchange/Administration/Invoke-ExecModifyCalPerms.ps1

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,32 +11,37 @@ function Invoke-ExecModifyCalPerms {
1111
$APIName = $Request.Params.CIPPEndpoint
1212
$Headers = $Request.Headers
1313

14-
14+
# UPN of the mailbox to modify calendar permissions for
1515
$Username = $Request.Body.userID
16+
1617
$TenantFilter = $Request.Body.tenantFilter
1718
$Permissions = $Request.Body.permissions
1819

1920
Write-LogMessage -headers $Headers -API $APIName -message "Processing request for user: $Username, tenant: $TenantFilter" -Sev 'Debug'
2021

21-
if ($null -eq $Username) {
22-
Write-LogMessage -headers $Headers -API $APIName -message 'Username is null' -Sev 'Error'
23-
$body = [pscustomobject]@{'Results' = @('Username is required') }
22+
if ([string]::IsNullOrWhiteSpace($Username)) {
23+
Write-LogMessage -headers $Headers -API $APIName -message 'Username is null or whitespace' -Sev 'Error'
2424
return ([HttpResponseContext]@{
2525
StatusCode = [HttpStatusCode]::BadRequest
26-
Body = $Body
26+
Body = @{'Results' = @('Username is required') }
2727
})
2828
return
2929
}
3030

3131
try {
32-
$UserId = (New-GraphGetRequest -uri "https://graph.microsoft.com/beta/users/$($Username)" -tenantid $TenantFilter).id
33-
Write-LogMessage -headers $Headers -API $APIName -message "Retrieved user ID: $UserId" -Sev 'Debug'
32+
try {
33+
$UserId = [guid]$Username
34+
} catch {
35+
# If not a GUID, assume it's a UPN and look up the ID via Graph
36+
$UserId = (New-GraphGetRequest -uri "https://graph.microsoft.com/beta/users/$($Username)" -tenantid $TenantFilter).id
37+
Write-LogMessage -headers $Headers -API $APIName -message "Retrieved user ID: $UserId" -Sev 'Debug'
38+
}
3439
} catch {
35-
Write-LogMessage -headers $Headers -API $APIName -message "Failed to get user ID: $($_.Exception.Message)" -Sev 'Error'
36-
$body = [pscustomobject]@{'Results' = @("Failed to get user ID: $($_.Exception.Message)") }
40+
$ErrorMessage = Get-CippException -Exception $_
41+
Write-LogMessage -headers $Headers -API $APIName -message "Failed to get user ID: $($ErrorMessage.NormalizedError)" -Sev Error -LogData $ErrorMessage
3742
return ([HttpResponseContext]@{
3843
StatusCode = [HttpStatusCode]::NotFound
39-
Body = $Body
44+
Body = @{'Results' = @("Failed to get user ID: $($ErrorMessage.NormalizedError)") }
4045
})
4146
return
4247
}
@@ -91,24 +96,22 @@ function Invoke-ExecModifyCalPerms {
9196
# Write-Host "Request params: $($Params | ConvertTo-Json)"
9297
$Result = Set-CIPPCalendarPermission @Params
9398

94-
$null = $Results.Add($Result)
99+
$Results.Add($Result)
95100
} catch {
96101
$HasErrors = $true
97-
$null = $Results.Add("$($_.Exception.Message)")
102+
$Results.Add("$($_.Exception.Message)")
98103
}
99104
}
100105
}
101106

102107
if ($Results.Count -eq 0) {
103108
Write-LogMessage -headers $Headers -API $APIName -message 'No results were generated from the operation' -Sev 'Warning'
104-
$null = $Results.Add('No results were generated from the operation. Please check the logs for more details.')
109+
$Results.Add('No results were generated from the operation. Please check the logs for more details.')
105110
$HasErrors = $true
106111
}
107112

108-
$Body = [pscustomobject]@{'Results' = @($Results) }
109-
110113
return ([HttpResponseContext]@{
111114
StatusCode = if ($HasErrors) { [HttpStatusCode]::InternalServerError } else { [HttpStatusCode]::OK }
112-
Body = $Body
115+
Body = @{'Results' = @($Results) }
113116
})
114117
}

Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Email-Exchange/Administration/Invoke-ExecModifyContactPerms.ps1

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,32 +11,37 @@ function Invoke-ExecModifyContactPerms {
1111
$APIName = $Request.Params.CIPPEndpoint
1212
$Headers = $Request.Headers
1313

14-
14+
# UPN of the mailbox to modify contact permissions for
1515
$Username = $Request.Body.userID
16+
1617
$TenantFilter = $Request.Body.tenantFilter
1718
$Permissions = $Request.Body.permissions
1819

1920
Write-LogMessage -headers $Headers -API $APIName -message "Processing request for user: $Username, tenant: $TenantFilter" -Sev 'Debug'
2021

21-
if ($null -eq $Username) {
22-
Write-LogMessage -headers $Headers -API $APIName -message 'Username is null' -Sev 'Error'
23-
$body = [pscustomobject]@{'Results' = @('Username is required') }
22+
if ([string]::IsNullOrWhiteSpace($Username)) {
23+
Write-LogMessage -headers $Headers -API $APIName -message 'Username is null or whitespace' -Sev 'Error'
2424
return ([HttpResponseContext]@{
2525
StatusCode = [HttpStatusCode]::BadRequest
26-
Body = $Body
26+
Body = @{'Results' = @('Username is required') }
2727
})
2828
return
2929
}
3030

3131
try {
32-
$UserId = (New-GraphGetRequest -uri "https://graph.microsoft.com/beta/users/$($Username)" -tenantid $TenantFilter).id
33-
Write-LogMessage -headers $Headers -API $APIName -message "Retrieved user ID: $UserId" -Sev 'Debug'
32+
try {
33+
$UserId = [guid]$Username
34+
} catch {
35+
# If not a GUID, assume it's a UPN and look up the ID via Graph
36+
$UserId = (New-GraphGetRequest -uri "https://graph.microsoft.com/beta/users/$($Username)" -tenantid $TenantFilter).id
37+
Write-LogMessage -headers $Headers -API $APIName -message "Retrieved user ID: $UserId" -Sev 'Debug'
38+
}
3439
} catch {
35-
Write-LogMessage -headers $Headers -API $APIName -message "Failed to get user ID: $($_.Exception.Message)" -Sev 'Error'
36-
$body = [pscustomobject]@{'Results' = @("Failed to get user ID: $($_.Exception.Message)") }
40+
$ErrorMessage = Get-CippException -Exception $_
41+
Write-LogMessage -headers $Headers -API $APIName -message "Failed to get user ID: $($ErrorMessage.NormalizedError)" -Sev Error -LogData $ErrorMessage
3742
return ([HttpResponseContext]@{
3843
StatusCode = [HttpStatusCode]::NotFound
39-
Body = $Body
44+
Body = @{'Results' = @("Failed to get user ID: $($ErrorMessage.NormalizedError)") }
4045
})
4146
return
4247
}
@@ -90,24 +95,23 @@ function Invoke-ExecModifyContactPerms {
9095
# Write-Host "Request params: $($Params | ConvertTo-Json)"
9196
$Result = Set-CIPPContactPermission @Params
9297

93-
$null = $Results.Add($Result)
98+
$Results.Add($Result)
9499
} catch {
95100
$HasErrors = $true
96-
$null = $Results.Add("$($_.Exception.Message)")
101+
$Results.Add("$($_.Exception.Message)")
97102
}
98103
}
99104
}
100105

101106
if ($Results.Count -eq 0) {
102107
Write-LogMessage -headers $Headers -API $APIName -message 'No results were generated from the operation' -Sev 'Warning'
103-
$null = $Results.Add('No results were generated from the operation. Please check the logs for more details.')
108+
$Results.Add('No results were generated from the operation. Please check the logs for more details.')
104109
$HasErrors = $true
105110
}
106111

107-
$Body = [pscustomobject]@{'Results' = @($Results) }
108112

109113
return ([HttpResponseContext]@{
110114
StatusCode = if ($HasErrors) { [HttpStatusCode]::InternalServerError } else { [HttpStatusCode]::OK }
111-
Body = $Body
115+
Body = @{'Results' = @($Results) }
112116
})
113117
}

0 commit comments

Comments
 (0)