Skip to content

Commit 777defa

Browse files
authored
Merge pull request #490 from KelvinTegelaar/dev
[pull] dev from KelvinTegelaar:dev
2 parents 7d45f51 + 2297e4a commit 777defa

File tree

10 files changed

+72
-66
lines changed

10 files changed

+72
-66
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/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/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/Invoke-ListExternalTenantInfo.ps1

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Function Invoke-ListExternalTenantInfo {
1+
function Invoke-ListExternalTenantInfo {
22
<#
33
.FUNCTIONALITY
44
Entrypoint,AnyTenant
@@ -9,7 +9,7 @@ Function Invoke-ListExternalTenantInfo {
99
param($Request, $TriggerMetadata)
1010
$HttpResponse = [HttpResponseContext]@{
1111
StatusCode = [HttpStatusCode]::OK
12-
Body = "Default response, you should never see this"
12+
Body = 'Default response, you should never see this'
1313
}
1414

1515
try {
@@ -31,12 +31,12 @@ Function Invoke-ListExternalTenantInfo {
3131
}
3232
} else {
3333
$HttpResponse.StatusCode = [HttpStatusCode]::BadRequest
34-
$HttpResponse.Body = "Tenant parameter is required"
34+
$HttpResponse.Body = 'Tenant parameter is required'
3535
}
3636
} catch {
3737
$HttpResponse.StatusCode = [HttpStatusCode]::InternalServerError
3838
$HttpResponse.Body = "Something went wrong while trying to get tenant info for tenant $($Tenant): $($_.Exception.Message)"
3939
}
4040

41-
return $1
41+
return [HttpResponseContext]$HttpResponse
4242
}

Modules/CIPPCore/Public/Tools/Import-CommunityTemplate.ps1

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,12 @@ function Import-CommunityTemplate {
4141
$excludedTenants = $ExistingJSON.excludedTenants
4242
$NewJSON.tenantFilter = $tenantFilter
4343
$NewJSON.excludedTenants = $excludedTenants
44+
45+
# Extract package tag from existing template
46+
$PackageTag = $Existing.Package
47+
if ($PackageTag) {
48+
$Template | Add-Member -MemberType NoteProperty -Name Package -Value $PackageTag -Force
49+
}
4450
}
4551
}
4652

Modules/CippExtensions/Public/Extension Functions/Register-CippExtensionScheduledTasks.ps1

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
function Register-CIPPExtensionScheduledTasks {
22
param(
3-
[switch]$Reschedule
3+
[switch]$Reschedule,
4+
[int64]$NextSync = (([datetime]::UtcNow.AddMinutes(30)) - (Get-Date '1/1/1970')).TotalSeconds,
5+
[string[]]$Extensions = @('Hudu', 'NinjaOne', 'CustomData')
46
)
57

68
# get extension configuration and mappings table
@@ -14,7 +16,6 @@ function Register-CIPPExtensionScheduledTasks {
1416
$PushTasks = Get-CIPPAzDataTableEntity @ScheduledTasksTable -Filter 'Hidden eq true' | Where-Object { $_.Command -match 'Push-CippExtensionData' }
1517
$Tenants = Get-Tenants -IncludeErrors
1618

17-
$Extensions = @('Hudu', 'NinjaOne', 'CustomData')
1819
$MappedTenants = [System.Collections.Generic.List[string]]::new()
1920
foreach ($Extension in $Extensions) {
2021
$ExtensionConfig = $Config.$Extension
@@ -69,7 +70,7 @@ function Register-CIPPExtensionScheduledTasks {
6970
$MappedTenants.Add($Tenant.defaultDomainName)
7071
foreach ($SyncType in $SyncTypes) {
7172
$ExistingTask = $ScheduledTasks | Where-Object { $_.Tenant -eq $Tenant.defaultDomainName -and $_.SyncType -eq $SyncType }
72-
if (!$ExistingTask -or $Reschedule.IsPresent) {
73+
if (!$ExistingTask) {
7374
$unixtime = [int64](([datetime]::UtcNow) - (Get-Date '1/1/1970')).TotalSeconds
7475
$Task = [pscustomobject]@{
7576
Name = "Extension Sync - $SyncType"
@@ -96,7 +97,7 @@ function Register-CIPPExtensionScheduledTasks {
9697
$ExistingPushTask = $PushTasks | Where-Object { $_.Tenant -eq $Tenant.defaultDomainName -and $_.SyncType -eq $Extension }
9798
if ((!$ExistingPushTask -or $Reschedule.IsPresent) -and $Extension -ne 'NinjaOne') {
9899
# push cached data to extension
99-
$in30mins = [int64](([datetime]::UtcNow.AddMinutes(30)) - (Get-Date '1/1/1970')).TotalSeconds
100+
100101
$Task = [pscustomobject]@{
101102
Name = "$Extension Extension Sync"
102103
Command = @{
@@ -108,7 +109,7 @@ function Register-CIPPExtensionScheduledTasks {
108109
Extension = $Extension
109110
}
110111
Recurrence = '1d'
111-
ScheduledTime = $in30mins
112+
ScheduledTime = $NextSync
112113
TenantFilter = $Tenant.defaultDomainName
113114
}
114115
if ($ExistingPushTask) {

0 commit comments

Comments
 (0)