Skip to content

Commit 57bff3c

Browse files
authored
Merge pull request #278 from KelvinTegelaar/dev
[pull] dev from KelvinTegelaar:dev
2 parents 9c50afc + f1f6860 commit 57bff3c

File tree

6 files changed

+82
-19
lines changed

6 files changed

+82
-19
lines changed

Modules/CIPPCore/Public/Authentication/Get-CIPPAccessRole.ps1

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,24 +16,34 @@ function Get-CIPPAccessRole {
1616
Internal
1717
#>
1818
[CmdletBinding()]
19-
param($Request)
19+
param($Request, $Headers)
2020

21-
$CacheAccessUserRoleTable = Get-CIPPTable -tablename 'cacheAccessUserRole'
22-
$CachedRoles = Get-CIPPAzDataTableEntity @CacheAccessUserRoleTable -Filter "PartitionKey eq 'AccessUser' and RowKey eq '$($Request.Headers.'x-ms-client-principal-name')'" | Select-Object -ExpandProperty Role | ConvertFrom-Json
21+
$Headers = $Request.Headers ?? $Headers
2322

24-
$SwaCreds = ([System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($request.headers.'x-ms-client-principal')) | ConvertFrom-Json)
23+
$CacheAccessUserRoleTable = Get-CIPPTable -tablename 'cacheAccessUserRoles'
24+
25+
$SwaCreds = ([System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($Headers.'x-ms-client-principal')) | ConvertFrom-Json)
2526
$SwaRoles = $SwaCreds.userRoles
27+
$Username = $SwaCreds.userDetails
28+
29+
$CachedRoles = Get-CIPPAzDataTableEntity @CacheAccessUserRoleTable -Filter "PartitionKey eq 'AccessUser' and RowKey eq '$Username'" | Select-Object -ExpandProperty Role | ConvertFrom-Json
30+
31+
Write-Information "SWA Roles: $($SwaRoles -join ', ')"
32+
Write-Information "Cached Roles: $($CachedRoles -join ', ')"
2633

2734
# Combine SWA roles and cached roles into a single deduplicated list
2835
$AllRoles = [System.Collections.Generic.List[string]]::new()
29-
if ($null -ne $SwaRoles) {
30-
$AllRoles.AddRange($SwaRoles)
36+
37+
foreach ($Role in $SwaRoles) {
38+
if (-not $AllRoles.Contains($Role)) {
39+
$AllRoles.Add($Role)
40+
}
3141
}
32-
if ($null -ne $CachedRoles) {
33-
$AllRoles.AddRange($CachedRoles)
42+
foreach ($Role in $CachedRoles) {
43+
if (-not $AllRoles.Contains($Role)) {
44+
$AllRoles.Add($Role)
45+
}
3446
}
35-
36-
# Remove duplicates and ensure we have a clean array
3747
$CombinedRoles = $AllRoles | Select-Object -Unique
3848

3949
# For debugging

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using namespace System.Net
22

3-
Function Invoke-EditUser {
3+
function Invoke-EditUser {
44
<#
55
.FUNCTIONALITY
66
Entrypoint
@@ -89,7 +89,7 @@ Function Invoke-EditUser {
8989

9090
if ($licenses -or $UserObj.removeLicenses) {
9191
if ($UserObj.sherwebLicense.value) {
92-
$null = Set-SherwebSubscription -TenantFilter $UserObj.tenantFilter -SKU $UserObj.sherwebLicense.value -Add 1
92+
$null = Set-SherwebSubscription -Headers $Headers -TenantFilter $UserObj.tenantFilter -SKU $UserObj.sherwebLicense.value -Add 1
9393
$null = $Results.Add('Added Sherweb License, scheduling assignment')
9494
$taskObject = [PSCustomObject]@{
9595
TenantFilter = $UserObj.tenantFilter
@@ -135,6 +135,8 @@ Function Invoke-EditUser {
135135
$ErrorMessage = Get-CippException -Exception $_
136136
Write-LogMessage -API $ApiName -tenant ($UserObj.tenantFilter) -headers $Headers -message "License assign API failed. $($ErrorMessage.NormalizedError)" -Sev Error -LogData $ErrorMessage
137137
$null = $results.Add( "We've failed to assign the license. $($ErrorMessage.NormalizedError)")
138+
Write-Warning "License assign API failed. $($_.Exception.Message)"
139+
Write-Information $_.InvocationInfo.PositionMessage
138140
}
139141

140142
#Add Aliases, removal currently not supported.

Modules/CIPPCore/Public/Entrypoints/Invoke-ExecCSPLicense.ps1

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,18 @@ Function Invoke-ExecCSPLicense {
2121

2222
try {
2323
if ($Action -eq 'Add') {
24-
$null = Set-SherwebSubscription -tenantFilter $TenantFilter -SKU $SKU -add $Request.Body.Add
24+
$null = Set-SherwebSubscription -Headers $Headers -tenantFilter $TenantFilter -SKU $SKU -add $Request.Body.Add
2525
}
2626

2727
if ($Action -eq 'Remove') {
28-
$null = Set-SherwebSubscription -tenantFilter $TenantFilter -SKU $SKU -remove $Request.Body.Remove
28+
$null = Set-SherwebSubscription -Headers $Headers -tenantFilter $TenantFilter -SKU $SKU -remove $Request.Body.Remove
2929
}
3030

3131
if ($Action -eq 'NewSub') {
32-
$null = Set-SherwebSubscription -tenantFilter $TenantFilter -SKU $SKU -Quantity $Request.Body.Quantity
32+
$null = Set-SherwebSubscription -Headers $Headers -tenantFilter $TenantFilter -SKU $SKU -Quantity $Request.Body.Quantity
3333
}
3434
if ($Action -eq 'Cancel') {
35-
$null = Remove-SherwebSubscription -tenantFilter $TenantFilter -SubscriptionIds $Request.Body.SubscriptionIds
35+
$null = Remove-SherwebSubscription -Headers $Headers -tenantFilter $TenantFilter -SubscriptionIds $Request.Body.SubscriptionIds
3636
}
3737
$Result = 'License change executed successfully.'
3838
$StatusCode = [HttpStatusCode]::OK

Modules/CIPPCore/Public/New-CIPPUserTask.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ function New-CIPPUserTask {
2121
try {
2222
if ($UserObj.licenses.value) {
2323
if ($UserObj.sherwebLicense.value) {
24-
$License = Set-SherwebSubscription -TenantFilter $UserObj.tenantFilter -SKU $UserObj.sherwebLicense.value -Add 1
24+
$License = Set-SherwebSubscription -Headers $Headers -TenantFilter $UserObj.tenantFilter -SKU $UserObj.sherwebLicense.value -Add 1
2525
$null = $results.Add('Added Sherweb License, scheduling assignment')
2626
$taskObject = [PSCustomObject]@{
2727
TenantFilter = $UserObj.tenantFilter

Modules/CippExtensions/Public/Sherweb/Remove-SherwebSubscription.ps1

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,34 @@ function Remove-SherwebSubscription {
44
[string]$CustomerId,
55
[Parameter(Mandatory = $true)]
66
[string[]]$SubscriptionIds,
7-
[string]$TenantFilter
7+
[string]$TenantFilter,
8+
$Headers
89
)
10+
11+
if ($Headers) {
12+
# Get extension config and check for AllowedCustomRoles
13+
$Table = Get-CIPPTable -TableName Extensionsconfig
14+
$ExtensionConfig = (Get-CIPPAzDataTableEntity @Table).config | ConvertFrom-Json
15+
$Config = $ExtensionConfig.Sherweb
16+
17+
$AllowedRoles = $Config.AllowedCustomRoles.value
18+
if ($AllowedRoles -and $Headers.'x-ms-client-principal') {
19+
$UserRoles = Get-CIPPAccessRole -Headers $Headers
20+
$Allowed = $false
21+
foreach ($Role in $UserRoles) {
22+
if ($AllowedRoles -contains $Role) {
23+
Write-Information "User has allowed CIPP role: $Role"
24+
$Allowed = $true
25+
break
26+
}
27+
}
28+
if (-not $Allowed) {
29+
throw 'This user is not allowed to modify Sherweb Licenses.'
30+
}
31+
}
32+
}
33+
34+
935
if ($TenantFilter) {
1036
$TenantFilter = (Get-Tenants -TenantFilter $TenantFilter).customerId
1137
$CustomerId = Get-ExtensionMapping -Extension 'Sherweb' | Where-Object { $_.RowKey -eq $TenantFilter } | Select-Object -ExpandProperty IntegrationId

Modules/CippExtensions/Public/Sherweb/Set-SherwebSubscription.ps1

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,33 @@ function Set-SherwebSubscription {
77
[int]$Quantity,
88
[int]$Add,
99
[int]$Remove,
10-
[string]$TenantFilter
10+
[string]$TenantFilter,
11+
$Headers
1112
)
13+
14+
if ($Headers) {
15+
# Get extension config and check for AllowedCustomRoles
16+
$Table = Get-CIPPTable -TableName Extensionsconfig
17+
$ExtensionConfig = (Get-CIPPAzDataTableEntity @Table).config | ConvertFrom-Json
18+
$Config = $ExtensionConfig.Sherweb
19+
20+
$AllowedRoles = $Config.AllowedCustomRoles.value
21+
if ($AllowedRoles -and $Headers.'x-ms-client-principal') {
22+
$UserRoles = Get-CIPPAccessRole -Headers $Headers
23+
$Allowed = $false
24+
foreach ($Role in $UserRoles) {
25+
if ($AllowedRoles -contains $Role) {
26+
Write-Information "User has allowed CIPP role: $Role"
27+
$Allowed = $true
28+
break
29+
}
30+
}
31+
if (-not $Allowed) {
32+
throw 'This user is not allowed to modify Sherweb subscriptions.'
33+
}
34+
}
35+
}
36+
1237
if ($TenantFilter) {
1338
$TenantFilter = (Get-Tenants -TenantFilter $TenantFilter).customerId
1439
$CustomerId = Get-ExtensionMapping -Extension 'Sherweb' | Where-Object { $_.RowKey -eq $TenantFilter } | Select-Object -ExpandProperty IntegrationId

0 commit comments

Comments
 (0)