Skip to content

Commit f45218b

Browse files
authored
Merge pull request #11 from KelvinTegelaar/dev
[pull] dev from KelvinTegelaar:dev
2 parents d09f10e + 0e298ca commit f45218b

6 files changed

Lines changed: 55 additions & 10 deletions

File tree

Modules/CIPPCore/Public/Add-CIPPApplicationPermission.ps1

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,13 @@ function Add-CIPPApplicationPermission {
6060
Write-Information "Adding application permissions to application $ApplicationId in tenant $TenantFilter"
6161

6262
$ServicePrincipalList = [System.Collections.Generic.List[object]]::new()
63-
$SPList = New-GraphGETRequest -uri "https://graph.microsoft.com/beta/servicePrincipals?`$select=AppId,id,displayName&`$top=999" -skipTokenCache $true -tenantid $TenantFilter -NoAuthCheck $true
64-
foreach ($SP in $SPList) { $ServicePrincipalList.Add($SP) }
63+
$CachedSPs = New-CIPPDbRequest -TenantFilter $TenantFilter -Type 'ServicePrincipals'
64+
if ($CachedSPs) {
65+
foreach ($SP in $CachedSPs) { $ServicePrincipalList.Add($SP) }
66+
} else {
67+
$SPList = New-GraphGETRequest -uri "https://graph.microsoft.com/beta/servicePrincipals?`$select=AppId,id,displayName&`$top=999" -skipTokenCache $true -tenantid $TenantFilter -NoAuthCheck $true
68+
foreach ($SP in $SPList) { $ServicePrincipalList.Add($SP) }
69+
}
6570
$ourSVCPrincipal = $ServicePrincipalList | Where-Object -Property AppId -EQ $ApplicationId
6671
if (!$ourSVCPrincipal) {
6772
#Our Service Principal isn't available yet. We do a sleep and reexecute after 3 seconds.

Modules/CIPPCore/Public/Add-CIPPDelegatedPermission.ps1

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ function Add-CIPPDelegatedPermission {
77
$NoTranslateRequired,
88
$TenantFilter
99
)
10-
Write-Host 'Adding Delegated Permissions'
10+
Write-Information 'Adding Delegated Permissions'
1111
Set-Location (Get-Item $PSScriptRoot).FullName
1212

1313
if ($ApplicationId -eq $env:ApplicationID -and $TenantFilter -eq $env:TenantID) {
@@ -71,7 +71,12 @@ function Add-CIPPDelegatedPermission {
7171

7272
$ModuleBase = Get-Module -Name CIPPCore | Select-Object -ExpandProperty ModuleBase
7373
$Translator = Get-Content (Join-Path $ModuleBase 'lib\data\PermissionsTranslator.json') | ConvertFrom-Json
74-
$ServicePrincipalList = New-GraphGETRequest -uri "https://graph.microsoft.com/beta/servicePrincipals?`$select=appId,id,displayName&`$top=999" -tenantid $TenantFilter -skipTokenCache $true -NoAuthCheck $true
74+
$CachedSPs = New-CIPPDbRequest -TenantFilter $TenantFilter -Type 'ServicePrincipals'
75+
$ServicePrincipalList = if ($CachedSPs) {
76+
$CachedSPs
77+
} else {
78+
New-GraphGETRequest -uri "https://graph.microsoft.com/beta/servicePrincipals?`$select=appId,id,displayName&`$top=999" -tenantid $TenantFilter -skipTokenCache $true -NoAuthCheck $true
79+
}
7580
$ourSVCPrincipal = $ServicePrincipalList | Where-Object -Property appId -EQ $ApplicationId
7681
$Results = [System.Collections.Generic.List[string]]::new()
7782

Modules/CIPPCore/Public/GraphHelper/Get-CippSamPermissions.ps1

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ function Get-CippSamPermissions {
1414
Internal
1515
#>
1616
[CmdletBinding(DefaultParameterSetName = 'Default')]
17-
Param(
17+
param(
1818
[Parameter(ParameterSetName = 'ManifestOnly')]
1919
[switch]$ManifestOnly,
2020
[Parameter(ParameterSetName = 'Default')]
@@ -24,11 +24,19 @@ function Get-CippSamPermissions {
2424
)
2525

2626
if (!$SavedOnly.IsPresent) {
27+
# Return cached result if available and less than 5 minutes old (avoids duplicate partner-tenant Graph calls within same invocation)
28+
if ($NoDiff.IsPresent -and $script:CippSamPermissionsCache -and
29+
$script:CippSamPermissionsCacheTime -and
30+
((Get-Date) - $script:CippSamPermissionsCacheTime).TotalMinutes -lt 5) {
31+
return $script:CippSamPermissionsCache
32+
}
33+
2734
$ModuleBase = Get-Module -Name CIPPCore | Select-Object -ExpandProperty ModuleBase
2835
$SamManifestFile = Get-Item (Join-Path $ModuleBase 'lib\data\SAMManifest.json')
2936
$AdditionalPermissions = Get-Item (Join-Path $ModuleBase 'lib\data\AdditionalPermissions.json')
3037

3138
$ServicePrincipalList = New-GraphGetRequest -Uri 'https://graph.microsoft.com/beta/servicePrincipals?$top=999&$select=id,appId,displayName' -tenantid $env:TenantID -NoAuthCheck $true
39+
3240
$SAMManifest = Get-Content -Path $SamManifestFile.FullName | ConvertFrom-Json
3341
$AdditionalPermissions = Get-Content -Path $AdditionalPermissions.FullName | ConvertFrom-Json
3442

@@ -191,6 +199,11 @@ function Get-CippSamPermissions {
191199

192200
$SamAppPermissions = $SamAppPermissions | ConvertTo-Json -Depth 10 -Compress | ConvertFrom-Json
193201

202+
if ($NoDiff.IsPresent) {
203+
$script:CippSamPermissionsCache = $SamAppPermissions
204+
$script:CippSamPermissionsCacheTime = Get-Date
205+
}
206+
194207
return $SamAppPermissions
195208
}
196209

Modules/CIPPCore/Public/New-CIPPDbRequest.ps1

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,6 @@ function New-CIPPDbRequest {
4343
$Filter = "PartitionKey eq '{0}'" -f $SafeTenantFilter
4444
}
4545

46-
Write-Information "Filter: $Filter"
47-
4846
$Results = Get-CIPPAzDataTableEntity @Table -Filter $Filter
4947

5048
return ($Results.Data | ConvertFrom-Json -ErrorAction SilentlyContinue)

Modules/CIPPCore/Public/Set-CIPPCPVConsent.ps1

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,18 @@ function Set-CIPPCPVConsent {
2121
return @('Application is already consented to this tenant')
2222
}
2323

24+
# Skip the Partner Center POST if consent was applied recently and we're not resetting
25+
if (-not $ResetSP) {
26+
$CpvTable = Get-CIPPTable -TableName cpvtenants
27+
$ExistingRow = Get-CIPPAzDataTableEntity @CpvTable -Filter "PartitionKey eq 'Tenant' and RowKey eq '$TenantFilter'"
28+
if ($ExistingRow -and $ExistingRow.applicationId -eq $env:ApplicationID -and $ExistingRow.LastApply) {
29+
$UnixNow = [int64](([datetime]::UtcNow) - (Get-Date '1/1/1970')).TotalSeconds
30+
if (($UnixNow - [int64]$ExistingRow.LastApply) -lt 86400) {
31+
return @("CPV consent for $TenantName is current, skipping re-consent")
32+
}
33+
}
34+
}
35+
2436
if ($ResetSP) {
2537
try {
2638
if ($PSCmdlet.ShouldProcess($env:ApplicationID, "Delete Service Principal from $TenantName")) {

Modules/CIPPCore/Public/Set-CIPPSAMAdminRoles.ps1

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,21 @@ function Set-CIPPSAMAdminRoles {
3232
}
3333

3434
if (($SAMRoles | Measure-Object).count -gt 0 -and $Tenants -contains $TenantFilter -or $Tenants -contains 'AllTenants') {
35-
$AppMemberOf = New-GraphGetRequest -uri "https://graph.microsoft.com/beta/servicePrincipals(appId='$($env:ApplicationID)')/memberOf/#microsoft.graph.directoryRole" -tenantid $TenantFilter -AsApp $true
36-
37-
$sp = (New-GraphGetRequest -uri "https://graph.microsoft.com/beta/servicePrincipals(appId='$($env:ApplicationID)')?`$select=id,displayName" -tenantid $TenantFilter -AsApp $true)
35+
$InitialRequests = @(
36+
[PSCustomObject]@{
37+
id = 'memberOf'
38+
method = 'GET'
39+
url = "servicePrincipals(appId='$($env:ApplicationID)')/memberOf/#microsoft.graph.directoryRole"
40+
}
41+
[PSCustomObject]@{
42+
id = 'sp'
43+
method = 'GET'
44+
url = "servicePrincipals(appId='$($env:ApplicationID)')?`$select=id,displayName"
45+
}
46+
)
47+
$InitialResults = New-GraphBulkRequest -tenantid $TenantFilter -Requests $InitialRequests -AsApp $true -NoAuthCheck $true
48+
$AppMemberOf = ($InitialResults | Where-Object { $_.id -eq 'memberOf' }).body.value
49+
$sp = ($InitialResults | Where-Object { $_.id -eq 'sp' }).body
3850
$id = $sp.id
3951

4052
$Requests = $SAMRoles | Where-Object { $AppMemberOf.roleTemplateId -notcontains $_.value } | ForEach-Object {

0 commit comments

Comments
 (0)