Skip to content

Commit 587deac

Browse files
authored
Merge pull request #1700 from kris6673/this-and-that
Chore: Better admin roles member listing,improve error handling and standardize function casing
2 parents 1c4c20d + 3b83c0e commit 587deac

File tree

6 files changed

+90
-71
lines changed

6 files changed

+90
-71
lines changed

Modules/CIPPCore/Public/Entrypoints/HTTP Functions/CIPP/Scheduler/Invoke-RemoveScheduledItem.ps1

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,32 +4,41 @@ function Invoke-RemoveScheduledItem {
44
Entrypoint,AnyTenant
55
.ROLE
66
CIPP.Scheduler.ReadWrite
7+
.DESCRIPTION
8+
Removes a scheduled item from CIPP's scheduler.
79
#>
810
[CmdletBinding()]
911
param($Request, $TriggerMetadata)
1012

11-
$APIName = 'RemoveScheduledItem'
12-
$User = $Request.Headers
13+
$APIName = $Request.Params.CIPPEndpoint
14+
$Headers = $Request.Headers
1315

1416
$RowKey = $Request.Query.id ? $Request.Query.id : $Request.Body.id
1517
$task = @{
1618
RowKey = $RowKey
1719
PartitionKey = 'ScheduledTask'
1820
}
19-
$Table = Get-CIPPTable -TableName 'ScheduledTasks'
20-
Remove-AzDataTableEntity -Force @Table -Entity $task
21+
try {
22+
$Table = Get-CIPPTable -TableName 'ScheduledTasks'
23+
Remove-AzDataTableEntity -Force @Table -Entity $task
2124

22-
$DetailTable = Get-CIPPTable -TableName 'ScheduledTaskDetails'
23-
$Details = Get-CIPPAzDataTableEntity @DetailTable -Filter "PartitionKey eq '$($RowKey)'" -Property RowKey, PartitionKey, ETag
25+
$DetailTable = Get-CIPPTable -TableName 'ScheduledTaskDetails'
26+
$Details = Get-CIPPAzDataTableEntity @DetailTable -Filter "PartitionKey eq '$($RowKey)'" -Property RowKey, PartitionKey, ETag
2427

25-
if ($Details) {
26-
Remove-AzDataTableEntity -Force @DetailTable -Entity $Details
27-
}
28+
if ($Details) {
29+
Remove-AzDataTableEntity -Force @DetailTable -Entity $Details
30+
}
2831

29-
Write-LogMessage -Headers $User -API $APINAME -message "Task removed: $($task.RowKey)" -Sev 'Info'
32+
Write-LogMessage -Headers $Headers -API $APIName -message "Task removed: $($task.RowKey)" -Sev 'Info'
33+
$StatusCode = [HttpStatusCode]::OK
34+
} catch {
35+
$ErrorMessage = Get-CippException -Exception $_
36+
Write-LogMessage -Headers $Headers -API $APIName -message "Failed to remove task: $($task.RowKey). $($ErrorMessage.NormalizedError)" -Sev 'Error' -LogData $ErrorMessage
37+
$StatusCode = [HttpStatusCode]::BadRequest
38+
}
3039

3140
return ([HttpResponseContext]@{
32-
StatusCode = [HttpStatusCode]::OK
41+
StatusCode = $StatusCode
3342
Body = @{ Results = 'Task removed successfully.' }
3443
})
3544

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Function Invoke-RemoveContactTemplates {
1+
function Invoke-RemoveContactTemplates {
22
<#
33
.FUNCTIONALITY
44
Entrypoint,AnyTenant
@@ -8,23 +8,23 @@ Function Invoke-RemoveContactTemplates {
88
[CmdletBinding()]
99
param($Request, $TriggerMetadata)
1010
$APIName = $Request.Params.CIPPEndpoint
11-
$User = $Request.Headers
11+
$Headers = $Request.Headers
1212

13-
Write-LogMessage -Headers $User -API $APINAME -message 'Accessed this API' -Sev 'Debug'
14-
$ID = $request.query.ID ?? $request.body.ID
13+
Write-LogMessage -Headers $Headers -API $APIName -message 'Accessed this API' -Sev 'Debug'
14+
$ID = $Request.Query.ID ?? $Request.Body.ID
1515

1616
try {
1717
$Table = Get-CippTable -tablename 'templates'
1818
$Filter = "PartitionKey eq 'ContactTemplate' and RowKey eq '$id'"
1919
$ClearRow = Get-CIPPAzDataTableEntity @Table -Filter $Filter -Property PartitionKey, RowKey
2020
Remove-AzDataTableEntity -Force @Table -Entity $ClearRow
2121
$Result = "Removed Contact Template with ID $ID."
22-
Write-LogMessage -Headers $User -API $APINAME -message $Result -Sev 'Info'
22+
Write-LogMessage -Headers $Headers -API $APIName -message $Result -Sev 'Info'
2323
$StatusCode = [HttpStatusCode]::OK
2424
} catch {
2525
$ErrorMessage = Get-CippException -Exception $_
2626
$Result = "Failed to remove Contact template with ID $ID. Error: $($ErrorMessage.NormalizedError)"
27-
Write-LogMessage -Headers $User -API $APINAME -message $Result -Sev 'Error' -LogData $ErrorMessage
27+
Write-LogMessage -Headers $Headers -API $APIName -message $Result -Sev 'Error' -LogData $ErrorMessage
2828
$StatusCode = [HttpStatusCode]::Forbidden
2929
}
3030
return ([HttpResponseContext]@{

Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Email-Exchange/Spamfilter/Invoke-ListConnectionFilter.ps1

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Function Invoke-ListConnectionFilter {
1+
function Invoke-ListConnectionFilter {
22
<#
33
.FUNCTIONALITY
44
Entrypoint
@@ -7,10 +7,10 @@ Function Invoke-ListConnectionFilter {
77
#>
88
[CmdletBinding()]
99
param($Request, $TriggerMetadata)
10-
$Tenantfilter = $request.Query.tenantfilter
10+
$TenantFilter = $request.Query.tenantFilter
1111

1212
try {
13-
$Policies = New-ExoRequest -tenantid $Tenantfilter -cmdlet 'Get-HostedConnectionFilterPolicy' | Select-Object * -ExcludeProperty *odata*, *data.type*
13+
$Policies = New-ExoRequest -tenantid $TenantFilter -cmdlet 'Get-HostedConnectionFilterPolicy' | Select-Object * -ExcludeProperty *odata*, *data.type*
1414
$StatusCode = [HttpStatusCode]::OK
1515
} catch {
1616
$ErrorMessage = Get-NormalizedError -Message $_.Exception.Message
Lines changed: 27 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,29 @@
1-
Function Invoke-AddAPDevice {
1+
function Invoke-AddAPDevice {
22
<#
33
.FUNCTIONALITY
44
Entrypoint
55
.ROLE
66
Endpoint.Autopilot.ReadWrite
7+
.DESCRIPTION
8+
Adds Autopilot devices to a tenant via Partner Center API
79
#>
810
[CmdletBinding()]
911
param($Request, $TriggerMetadata)
1012

1113
$APIName = $Request.Params.CIPPEndpoint
12-
$TenantFilter = (Get-Tenants | Where-Object { $_.defaultDomainName -eq $Request.body.TenantFilter.value }).customerId
13-
$GroupName = if ($Request.body.Groupname) { $Request.body.Groupname } else { (New-Guid).GUID }
14+
$Headers = $Request.Headers
15+
16+
$TenantFilter = (Get-Tenants | Where-Object { $_.defaultDomainName -eq $Request.Body.TenantFilter.value }).customerId
17+
$GroupName = if ($Request.Body.Groupname) { $Request.Body.Groupname } else { (New-Guid).GUID }
1418
Write-Host $GroupName
15-
$rawDevices = $request.body.autopilotData
19+
20+
$rawDevices = $Request.Body.autopilotData
1621
$Devices = ConvertTo-Json @($rawDevices)
1722
$Result = try {
18-
$CurrentStatus = (New-GraphgetRequest -uri "https://api.partnercenter.microsoft.com/v1/customers/$tenantfilter/DeviceBatches" -scope 'https://api.partnercenter.microsoft.com/user_impersonation')
19-
if ($groupname -in $CurrentStatus.items.id) {
23+
$CurrentStatus = (New-GraphGetRequest -uri "https://api.partnercenter.microsoft.com/v1/customers/$TenantFilter/DeviceBatches" -scope 'https://api.partnercenter.microsoft.com/user_impersonation')
24+
if ($GroupName -in $CurrentStatus.items.id) {
2025
Write-Host 'Gonna do an update!'
21-
$body = $request.body.autopilotData | ForEach-Object {
26+
$Body = $Request.Body.autopilotData | ForEach-Object {
2227
$Device = $_
2328
[pscustomobject]@{
2429
deviceBatchId = $GroupName
@@ -29,41 +34,40 @@ Function Invoke-AddAPDevice {
2934
modelName = $Device.modelName
3035
}
3136
}
32-
$body = ConvertTo-Json -Depth 10 -Compress -InputObject @($body)
33-
Write-Host $body
34-
$GraphRequest = (New-GraphPostRequest -returnHeaders $true -uri "https://api.partnercenter.microsoft.com/v1/customers/$TenantFilter/deviceBatches/$groupname/devices" -body $body -scope 'https://api.partnercenter.microsoft.com/user_impersonation')
37+
$Body = ConvertTo-Json -Depth 10 -Compress -InputObject @($Body)
38+
Write-Host $Body
39+
$GraphRequest = (New-GraphPOSTRequest -returnHeaders $true -uri "https://api.partnercenter.microsoft.com/v1/customers/$TenantFilter/deviceBatches/$GroupName/devices" -body $Body -scope 'https://api.partnercenter.microsoft.com/user_impersonation')
3540
} else {
36-
$body = '{"batchId":"' + $($GroupName) + '","devices":' + $Devices + '}'
37-
$GraphRequest = (New-GraphPostRequest -returnHeaders $true -uri "https://api.partnercenter.microsoft.com/v1/customers/$TenantFilter/DeviceBatches" -body $body -scope 'https://api.partnercenter.microsoft.com/user_impersonation')
41+
$Body = '{"batchId":"' + $($GroupName) + '","devices":' + $Devices + '}'
42+
$GraphRequest = (New-GraphPOSTRequest -returnHeaders $true -uri "https://api.partnercenter.microsoft.com/v1/customers/$TenantFilter/DeviceBatches" -body $Body -scope 'https://api.partnercenter.microsoft.com/user_impersonation')
3843
}
3944
$Amount = 0
4045
do {
4146
Write-Host "Checking status of import job for $GroupName"
42-
$amount ++
47+
$Amount++
4348
Start-Sleep 1
44-
$NewStatus = New-GraphgetRequest -uri "https://api.partnercenter.microsoft.com/v1/$($GraphRequest.Location)" -scope 'https://api.partnercenter.microsoft.com/user_impersonation'
45-
} until ($Newstatus.status -eq 'finished' -or $amount -eq 4)
49+
$NewStatus = New-GraphGetRequest -uri "https://api.partnercenter.microsoft.com/v1/$($GraphRequest.Location)" -scope 'https://api.partnercenter.microsoft.com/user_impersonation'
50+
} until ($NewStatus.status -eq 'finished' -or $Amount -eq 4)
4651
if ($NewStatus.status -ne 'finished') { throw 'Could not retrieve status of import - This job might still be running. Check the autopilot device list in 10 minutes for the latest status.' }
4752
Write-LogMessage -headers $Request.Headers -API $APIName -tenant $($Request.body.TenantFilter.value) -message "Created Autopilot devices group. Group ID is $GroupName" -Sev 'Info'
4853

4954
[PSCustomObject]@{
5055
Status = 'Import Job Completed'
5156
Devices = @($NewStatus.devicesStatus)
5257
}
58+
$StatusCode = [HttpStatusCode]::OK
5359
} catch {
60+
$ErrorMessage = Get-CippException -Exception $_
61+
$StatusCode = [HttpStatusCode]::InternalServerError
5462
[PSCustomObject]@{
55-
Status = "$($Request.body.TenantFilter.value): Failed to create autopilot devices. $($_.Exception.Message)"
63+
Status = "$($Request.Body.TenantFilter.value): Failed to create autopilot devices. $($ErrorMessage.NormalizedError)"
5664
Devices = @()
5765
}
58-
Write-LogMessage -headers $Request.Headers -API $APIName -tenant $($Request.body.TenantFilter.value) -message "Failed to create autopilot devices. $($_.Exception.Message)" -Sev 'Error'
66+
Write-LogMessage -headers $Headers -API $APIName -tenant $($Request.Body.TenantFilter.value) -message "Failed to create autopilot devices. $($ErrorMessage.NormalizedError)" -Sev 'Error' -LogData $ErrorMessage
5967
}
6068

61-
$body = [pscustomobject]@{'Results' = $Result }
62-
Write-Host $body
6369
return ([HttpResponseContext]@{
64-
StatusCode = [HttpStatusCode]::OK
65-
Body = $body
66-
70+
StatusCode = $StatusCode
71+
Body = @{'Results' = $Result }
6772
})
68-
6973
}

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

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,7 @@ function Invoke-ListAssignmentFilterTemplates {
88
[CmdletBinding()]
99
param($Request, $TriggerMetadata)
1010

11-
$APIName = $Request.Params.CIPPEndpoint
12-
$Headers = $Request.Headers
13-
14-
15-
16-
Write-Host $Request.query.id
11+
$ID = $Request.Query.ID
1712

1813
#List assignment filter templates
1914
$Table = Get-CippTable -tablename 'templates'
@@ -22,16 +17,16 @@ function Invoke-ListAssignmentFilterTemplates {
2217
$data = $_.JSON | ConvertFrom-Json
2318

2419
[PSCustomObject]@{
25-
displayName = $data.displayName
26-
description = $data.description
27-
platform = $data.platform
28-
rule = $data.rule
29-
assignmentFilterManagementType = $data.assignmentFilterManagementType
30-
GUID = $_.RowKey
20+
displayName = $data.displayName
21+
description = $data.description
22+
platform = $data.platform
23+
rule = $data.rule
24+
assignmentFilterManagementType = $data.assignmentFilterManagementType
25+
GUID = $_.RowKey
3126
}
3227
} | Sort-Object -Property displayName
3328

34-
if ($Request.query.ID) { $Templates = $Templates | Where-Object -Property GUID -EQ $Request.query.id }
29+
if ($ID) { $Templates = $Templates | Where-Object -Property GUID -EQ $ID }
3530

3631

3732
# Associate values to output bindings by calling 'Push-OutputBinding'.
Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Function Invoke-ListRoles {
1+
function Invoke-ListRoles {
22
<#
33
.FUNCTIONALITY
44
Entrypoint
@@ -9,23 +9,34 @@ Function Invoke-ListRoles {
99
param($Request, $TriggerMetadata)
1010
# Interact with query parameters or the body of the request.
1111
$TenantFilter = $Request.Query.tenantFilter
12-
$SelectList = 'id', 'displayName', 'userPrincipalName'
1312

14-
[System.Collections.Generic.List[PSCustomObject]]$Roles = New-GraphGetRequest -uri "https://graph.microsoft.com/v1.0/directoryRoles?`$expand=members" -tenantid $TenantFilter
15-
$GraphRequest = foreach ($Role in $Roles) {
16-
17-
#[System.Collections.Generic.List[PSCustomObject]]$Members = New-GraphGetRequest -uri "https://graph.microsoft.com/beta/directoryRoles/$($Role.id)/members?`$select=$($SelectList -join ',')" -tenantid $TenantFilter | Select-Object $SelectList
18-
$Members = if ($Role.members) { $role.members | ForEach-Object { " $($_.displayName) ($($_.userPrincipalName))" } } else { 'none' }
19-
[PSCustomObject]@{
20-
DisplayName = $Role.displayName
21-
Description = $Role.description
22-
Members = $Members -join ','
13+
try {
14+
[System.Collections.Generic.List[PSCustomObject]]$Roles = New-GraphGetRequest -uri "https://graph.microsoft.com/v1.0/directoryRoles?`$expand=members" -tenantid $TenantFilter
15+
$GraphRequest = foreach ($Role in $Roles) {
16+
$Members = if ($Role.members) {
17+
$Role.members | ForEach-Object { [PSCustomObject]@{
18+
displayName = $_.displayName
19+
userPrincipalName = $_.userPrincipalName
20+
id = $_.id
21+
} }
22+
}
23+
[PSCustomObject]@{
24+
Id = $Role.id
25+
roleTemplateId = $Role.roleTemplateId
26+
DisplayName = $Role.displayName
27+
Description = $Role.description
28+
Members = @($Members)
29+
}
2330
}
31+
$StatusCode = [HttpStatusCode]::OK
32+
} catch {
33+
$ErrorMessage = Get-CippException -Exception $_
34+
"Failed to list roles for tenant $TenantFilter. $($ErrorMessage.NormalizedError)"
35+
$StatusCode = [HttpStatusCode]::BadRequest
2436
}
2537

2638
return [HttpResponseContext]@{
27-
StatusCode = [HttpStatusCode]::OK
28-
Body = $GraphRequest
29-
}
30-
39+
StatusCode = $StatusCode
40+
Body = $GraphRequest
41+
}
3142
}

0 commit comments

Comments
 (0)