Skip to content

Commit 38fe413

Browse files
authored
Merge pull request #1673 from KelvinTegelaar/dev
Dev to hotfix
2 parents b917eec + dc2a278 commit 38fe413

File tree

82 files changed

+153
-380
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

82 files changed

+153
-380
lines changed

Modules/CIPPCore/Public/Entrypoints/HTTP Functions/CIPP/Core/Invoke-ExecSetPackageTag.ps1

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ function Invoke-ExecSetPackageTag {
2020
if ($Remove -eq $true) {
2121
# Remove package tag by setting it to null/empty
2222
$PackageValue = $null
23-
$LogMessage = "Successfully removed package tag from template with GUID"
24-
$SuccessMessage = "Successfully removed package tag from template(s)"
23+
$LogMessage = 'Successfully removed package tag from template with GUID'
24+
$SuccessMessage = 'Successfully removed package tag from template(s)'
2525
} else {
2626
# Add package tag (existing logic)
27-
$PackageValue = $Request.body.Package | Select-Object -First 1
28-
$LogMessage = "Successfully updated template with GUID"
27+
$PackageValue = [string]($Request.body.Package | Select-Object -First 1)
28+
$LogMessage = 'Successfully updated template with GUID'
2929
$SuccessMessage = "Successfully updated template(s) with package tag: $PackageValue"
3030
}
3131

Modules/CIPPCore/Public/Entrypoints/HTTP Functions/CIPP/Core/Invoke-ListGraphRequest.ps1

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,11 @@ function Invoke-ListGraphRequest {
124124

125125
try {
126126
$Results = Get-GraphRequestList @GraphRequestParams
127+
128+
if ($script:LastGraphResponseHeaders) {
129+
$Metadata.GraphHeaders = $script:LastGraphResponseHeaders
130+
}
131+
127132
if ($Results | Where-Object { $_.PSObject.Properties.Name -contains 'nextLink' }) {
128133
if (![string]::IsNullOrEmpty($Results.nextLink) -and $Request.Query.TenantFilter -ne 'AllTenants') {
129134
Write-Host "NextLink: $($Results.nextLink | Where-Object { $_ } | Select-Object -Last 1)"

Modules/CIPPCore/Public/Entrypoints/HTTP Functions/CIPP/Extensions/Invoke-ExecExtensionSync.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ Function Invoke-ExecExtensionSync {
8686
}
8787
}
8888
'Hudu' {
89-
Register-CIPPExtensionScheduledTasks -Reschedule
89+
Register-CIPPExtensionScheduledTasks -Reschedule -Extensions 'Hudu'
9090
$Results = [pscustomobject]@{'Results' = 'Extension sync tasks have been rescheduled and will start within 15 minutes' }
9191
}
9292

Modules/CIPPCore/Public/Entrypoints/HTTP Functions/CIPP/Extensions/Invoke-ExecExtensionsConfig.ps1

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Function Invoke-ExecExtensionsConfig {
1+
function Invoke-ExecExtensionsConfig {
22
<#
33
.FUNCTIONALITY
44
Entrypoint
@@ -27,6 +27,14 @@ Function Invoke-ExecExtensionsConfig {
2727
}
2828
}
2929

30+
if ($Body.Hudu.NextSync) {
31+
#parse unixtime for addedtext
32+
$Timestamp = [datetime]::UnixEpoch.AddSeconds([int]$Body.Hudu.NextSync).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ")
33+
Register-CIPPExtensionScheduledTasks -Reschedule -NextSync $Body.Hudu.NextSync -Extensions 'Hudu'
34+
$AddedText = " Next sync will be at $Timestamp."
35+
$Body.Hudu.NextSync = ''
36+
}
37+
3038
$Table = Get-CIPPTable -TableName Extensionsconfig
3139
foreach ($APIKey in $Body.PSObject.Properties.Name) {
3240
Write-Information "Working on $apikey"

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
}

Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Email-Exchange/Transport/Invoke-AddTransportRule.ps1

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ function Invoke-AddTransportRule {
1414

1515
$RequestParams = $Request.Body.PowerShellCommand | ConvertFrom-Json | Select-Object -Property * -ExcludeProperty GUID, HasSenderOverride, ExceptIfHasSenderOverride, ExceptIfMessageContainsDataClassifications, MessageContainsDataClassifications
1616

17+
# Remove null properties from payload
18+
$RequestParams.PSObject.Properties | Where-Object { $_.Value -eq $null } | ForEach-Object { $RequestParams.PSObject.Properties.Remove($_.Name) }
19+
1720
$Tenants = ($Request.body.selectedTenants).value
1821

1922
$AllowedTenants = Test-CippAccess -Request $Request -TenantList

Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Endpoint/MEM/Invoke-AddDefenderDeployment.ps1

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -228,22 +228,7 @@ function Invoke-AddDefenderDeployment {
228228
}
229229
}
230230
}
231-
{ $_.Telemetry } {
232-
@{
233-
'@odata.type' = '#microsoft.graph.deviceManagementConfigurationSetting'
234-
settingInstance = @{
235-
'@odata.type' = '#microsoft.graph.deviceManagementConfigurationChoiceSettingInstance'
236-
settingDefinitionId = 'device_vendor_msft_windowsadvancedthreatprotection_configuration_telemetryreportingfrequency'
237-
choiceSettingValue = @{
238-
settingValueTemplateReference = @{settingValueTemplateId = '350b0bea-b67b-43d4-9a04-c796edb961fd' }
239-
'@odata.type' = '#microsoft.graph.deviceManagementConfigurationChoiceSettingValue'
240-
'value' = 'device_vendor_msft_windowsadvancedthreatprotection_configuration_telemetryreportingfrequency_2'
241-
}
242-
settingInstanceTemplateReference = @{settingInstanceTemplateId = '03de6095-07c4-4f35-be38-c1cd3bae4484' }
243-
}
244-
}
245231

246-
}
247232
{ $_.Config } {
248233
@{
249234
'@odata.type' = '#microsoft.graph.deviceManagementConfigurationSetting'
@@ -279,10 +264,11 @@ function Invoke-AddDefenderDeployment {
279264
"$($tenant): EDR Policy already exists. Skipping"
280265
} else {
281266
$EDRRequest = New-GraphPOSTRequest -uri 'https://graph.microsoft.com/beta/deviceManagement/configurationPolicies' -tenantid $tenant -type POST -body $EDRbody
282-
if ($ASR -and $ASR.AssignTo -ne 'none') {
283-
$AssignBody = if ($ASR.AssignTo -ne 'AllDevicesAndUsers') { '{"assignments":[{"id":"","target":{"@odata.type":"#microsoft.graph.' + $($asr.AssignTo) + 'AssignmentTarget"}}]}' } else { '{"assignments":[{"id":"","target":{"@odata.type":"#microsoft.graph.allDevicesAssignmentTarget"}},{"id":"","target":{"@odata.type":"#microsoft.graph.allLicensedUsersAssignmentTarget"}}]}' }
267+
# Assign if needed
268+
if ($EDR.AssignTo -and $EDR.AssignTo -ne 'none') {
269+
$AssignBody = if ($EDR.AssignTo -ne 'AllDevicesAndUsers') { '{"assignments":[{"id":"","target":{"@odata.type":"#microsoft.graph.' + $($EDR.AssignTo) + 'AssignmentTarget"}}]}' } else { '{"assignments":[{"id":"","target":{"@odata.type":"#microsoft.graph.allDevicesAssignmentTarget"}},{"id":"","target":{"@odata.type":"#microsoft.graph.allLicensedUsersAssignmentTarget"}}]}' }
284270
$null = New-GraphPOSTRequest -uri "https://graph.microsoft.com/beta/deviceManagement/configurationPolicies('$($EDRRequest.id)')/assign" -tenantid $tenant -type POST -body $AssignBody
285-
Write-LogMessage -headers $Headers -API $APINAME -tenant $($tenant) -message "Assigned EDR policy $($DisplayName) to $($ASR.AssignTo)" -Sev 'Info'
271+
Write-LogMessage -headers $Headers -API $APIName -tenant $($tenant) -message "Assigned EDR policy $($DisplayName) to $($EDR.AssignTo)" -Sev 'Info'
286272
}
287273
"$($tenant): Successfully added EDR Settings"
288274
}

Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Identity/Administration/Groups/Invoke-AddGroup.ps1

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ function Invoke-AddGroup {
1010

1111
$APIName = $Request.Params.CIPPEndpoint
1212
$SelectedTenants = if ('AllTenants' -in $SelectedTenants) { (Get-Tenants).defaultDomainName } else { $Request.body.tenantFilter.value ? $Request.body.tenantFilter.value : $Request.body.tenantFilter }
13-
Write-LogMessage -headers $Request.Headers -API $APIName -message 'Accessed this API' -Sev Debug
1413

1514

1615
$GroupObject = $Request.body
@@ -28,7 +27,6 @@ function Invoke-AddGroup {
2827
}
2928
} catch {
3029
$ErrorMessage = Get-CippException -Exception $_
31-
Write-LogMessage -headers $Request.Headers -API $APIName -tenant $tenant -message "Group creation API failed. $($ErrorMessage.NormalizedError)" -Sev Error -LogData $ErrorMessage
3230
"Failed to create group. $($GroupObject.displayName) for $($tenant) $($ErrorMessage.NormalizedError)"
3331
$StatusCode = [HttpStatusCode]::InternalServerError
3432
}

Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Identity/Administration/Users/Invoke-AddUser.ps1

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,10 @@ function Invoke-AddUser {
1515
$UserObj = $Request.Body
1616

1717
if ($UserObj.Scheduled.Enabled) {
18+
$Username = $UserObj.username ?? $UserObj.mailNickname
1819
$TaskBody = [pscustomobject]@{
1920
TenantFilter = $UserObj.tenantFilter
20-
Name = "New user creation: $($UserObj.mailNickname)@$($UserObj.PrimDomain.value)"
21+
Name = "New user creation: $($Username)@$($UserObj.PrimDomain.value)"
2122
Command = @{
2223
value = 'New-CIPPUserTask'
2324
label = 'New-CIPPUserTask'

0 commit comments

Comments
 (0)