Skip to content

Commit 44366c9

Browse files
authored
Merge pull request #340 from KelvinTegelaar/dev
[pull] dev from KelvinTegelaar:dev
2 parents 48c4b43 + 113d98a commit 44366c9

32 files changed

+503
-320
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,7 @@ Logs
99
ExcludedTenants
1010
SendNotifications/config.json
1111
.env
12+
13+
14+
# Cursor IDE
15+
.cursor/rules

Modules/CIPPCore/Public/Clear-CIPPImmutableId.ps1

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,22 @@ function Clear-CIPPImmutableId {
22
[CmdletBinding()]
33
param (
44
$TenantFilter,
5-
$userid,
5+
$UserID,
66
$Headers,
7-
$APIName
7+
$APIName = 'Clear Immutable ID'
88
)
99

1010
try {
1111
$Body = [pscustomobject]@{ onPremisesImmutableId = $null }
1212
$Body = ConvertTo-Json -InputObject $Body -Depth 5 -Compress
13-
$null = New-GraphPostRequest -uri "https://graph.microsoft.com/beta/users/$userid" -tenantid $TenantFilter -type PATCH -body $Body
14-
Write-LogMessage -headers $Headers -API $APIName -message "Successfully cleared immutable ID for $userid" -sev Info
15-
return 'Successfully cleared immutable ID for user.'
13+
$null = New-GraphPostRequest -uri "https://graph.microsoft.com/beta/users/$UserID" -tenantid $TenantFilter -type PATCH -body $Body
14+
$Result = "Successfully cleared immutable ID for user $UserID"
15+
Write-LogMessage -headers $Headers -API $APIName -message $Result -sev Info -tenant $TenantFilter
16+
return $Result
1617
} catch {
1718
$ErrorMessage = Get-CippException -Exception $_
18-
$Message = "Could not clear immutable ID for $($userid): $($ErrorMessage.NormalizedError)"
19-
Write-LogMessage -headers $Headers -API $APIName -message $Message -sev Error -LogData $ErrorMessage
20-
return $Message
19+
$Result = "Failed to clear immutable ID for $($UserID). Error: $($ErrorMessage.NormalizedError)"
20+
Write-LogMessage -headers $Headers -API $APIName -message $Result -sev Error -tenant $TenantFilter -LogData $ErrorMessage
21+
throw $Result
2122
}
2223
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@ function Invoke-ExecEditTemplate {
1616

1717
try {
1818
$Table = Get-CippTable -tablename 'templates'
19-
$guid = $request.body.guid
19+
$guid = $request.body.id
2020
$JSON = ConvertTo-Json -Compress -Depth 100 -InputObject ($request.body | Select-Object * -ExcludeProperty GUID)
2121
$Type = $request.query.Type
2222

2323
if ($Type -eq 'IntuneTemplate') {
2424
Write-Host 'Intune Template'
2525
$OriginalTemplate = Get-CIPPAzDataTableEntity @Table -Filter "PartitionKey eq 'IntuneTemplate' and RowKey eq '$GUID'"
2626
$OriginalTemplate = ($OriginalTemplate.JSON | ConvertFrom-Json -Depth 100)
27-
$RawJSON = $OriginalTemplate.RAWJson
27+
$RawJSON = ConvertTo-Json -Compress -Depth 100 -InputObject $Request.body.parsedRAWJson
2828
Set-CIPPIntuneTemplate -RawJSON $RawJSON -GUID $GUID -DisplayName $Request.body.displayName -Description $Request.body.description -templateType $OriginalTemplate.Type -Headers $Request.Headers
2929
} else {
3030
$Table.Force = $true

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

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

3-
Function Invoke-AddSharedMailbox {
3+
function Invoke-AddSharedMailbox {
44
<#
55
.FUNCTIONALITY
66
Entrypoint
@@ -14,10 +14,10 @@ Function Invoke-AddSharedMailbox {
1414
$Headers = $Request.Headers
1515
Write-LogMessage -Headers $Headers -API $APIName -message 'Accessed this API' -Sev 'Debug'
1616

17-
$Results = [System.Collections.ArrayList]@()
17+
$Results = [System.Collections.Generic.List[string]]::new()
1818
$MailboxObject = $Request.Body
1919
$Tenant = $MailboxObject.tenantID
20-
$Aliases = $MailboxObject.addedAliases -Split '\n'
20+
$Aliases = $MailboxObject.addedAliases -split '\n'
2121

2222
try {
2323

@@ -29,18 +29,18 @@ Function Invoke-AddSharedMailbox {
2929
Shared = $true
3030
}
3131
$AddSharedRequest = New-ExoRequest -tenantid $Tenant -cmdlet 'New-Mailbox' -cmdParams $BodyToShip
32-
$Body = $Results.Add("Successfully created shared mailbox: $Email")
32+
$Results.Add("Successfully created shared mailbox: $Email.")
3333
Write-LogMessage -Headers $Headers -API $APIName -tenant $Tenant -message "Created shared mailbox $($MailboxObject.displayName) with email $Email" -Sev 'Info'
3434

3535
# Block sign-in for the mailbox
3636
try {
3737
$null = Set-CIPPSignInState -userid $AddSharedRequest.ExternalDirectoryObjectId -TenantFilter $Tenant -APIName $APIName -Headers $Headers -AccountEnabled $false
38-
$Body = $Results.Add("Blocked sign-in for shared mailbox $Email")
38+
$Results.Add("Blocked sign-in for shared mailbox $Email")
3939
} catch {
4040
$ErrorMessage = Get-CippException -Exception $_
4141
$Message = "Failed to block sign-in for shared mailbox $Email Error: $($ErrorMessage.NormalizedError)"
4242
Write-LogMessage -Headers $Headers -API $APIName -tenant $Tenant -message $Message -Sev 'Error' -LogData $ErrorMessage
43-
$Body = $Results.Add($Message)
43+
$Results.Add($Message)
4444
}
4545

4646
# Add aliases to the mailbox if any are provided
@@ -54,30 +54,29 @@ Function Invoke-AddSharedMailbox {
5454
$null = New-ExoRequest -tenantid $Tenant -cmdlet 'Set-Mailbox' -cmdParams $AliasBodyToShip -UseSystemMailbox $true
5555
$Message = "Added aliases to $Email : $($Aliases -join ',')"
5656
Write-LogMessage -Headers $Headers -API $APIName -tenant $Tenant -message $Message -Sev 'Info'
57-
$Body = $Results.Add($Message)
57+
$Results.Add($Message)
5858

5959
} catch {
6060
$ErrorMessage = Get-CippException -Exception $_
6161
$Message = "Failed to add aliases to $Email : $($ErrorMessage.NormalizedError)"
6262
Write-LogMessage -Headers $Headers -API $APIName -tenant $Tenant -message $Message -Sev 'Error' -LogData $ErrorMessage
63-
$Body = $Results.Add($Message)
63+
$Results.Add($Message)
6464
}
6565
}
6666
$StatusCode = [HttpStatusCode]::OK
6767
} catch {
6868
$ErrorMessage = Get-CippException -Exception $_
6969
$Message = "Failed to create shared mailbox. $($ErrorMessage.NormalizedError)"
7070
Write-LogMessage -Headers $Headers -API $APIName -tenant $Tenant -message $Message -Sev 'Error' -LogData $ErrorMessage
71-
$Body = $Results.Add($Message)
71+
$Results.Add($Message)
7272
$StatusCode = [HttpStatusCode]::Forbidden
7373
}
7474

7575

76-
$Body = [pscustomobject] @{ Results = @($Results) }
7776
# Associate values to output bindings by calling 'Push-OutputBinding'.
7877
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
7978
StatusCode = $StatusCode
80-
Body = $Body
79+
Body = @{ Results = @($Results) }
8180
})
8281

8382
}

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

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,27 +11,25 @@ Function Invoke-ExecConvertMailbox {
1111
param($Request, $TriggerMetadata)
1212

1313
$APIName = $Request.Params.CIPPEndpoint
14-
$TenantFilter = $Request.Body.tenantFilter
15-
Write-LogMessage -Headers $Request.Headers -API $APIName -message 'Accessed this API' -Sev 'Debug'
14+
$Headers = $Request.Headers
15+
Write-LogMessage -Headers $Headers -API $APIName -message 'Accessed this API' -Sev 'Debug'
1616

1717
# Interact with query parameters or the body of the request.
18+
$TenantFilter = $Request.Body.tenantFilter
1819
$UserID = $Request.Body.ID
1920
$MailboxType = $Request.Body.MailboxType
2021

2122
try {
22-
$ConvertedMailbox = Set-CIPPMailboxType -UserID $UserID -TenantFilter $TenantFilter -APIName $APIName -Headers $Request.Headers -MailboxType $MailboxType
23-
if ($ConvertedMailbox -like 'Could not convert*') { throw $ConvertedMailbox }
24-
$Results = [pscustomobject]@{'Results' = "$ConvertedMailbox" }
23+
$Results = Set-CIPPMailboxType -UserID $UserID -TenantFilter $TenantFilter -APIName $APIName -Headers $Headers -MailboxType $MailboxType
2524
$StatusCode = [HttpStatusCode]::OK
2625
} catch {
27-
$ErrorMessage = $_.Exception.Message
28-
$Results = [pscustomobject]@{'Results' = "$ErrorMessage" }
26+
$Results = $_.Exception.Message
2927
$StatusCode = [HttpStatusCode]::InternalServerError
3028
}
3129
# Associate values to output bindings by calling 'Push-OutputBinding'.
3230
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
3331
StatusCode = $StatusCode
34-
Body = $Results
32+
Body = @{'Results' = $Results }
3533
})
3634

3735
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ Function Invoke-ExecEditMailboxPermissions {
1111
param($Request, $TriggerMetadata)
1212

1313
$APIName = $Request.Params.CIPPEndpoint
14-
Write-LogMessage -headers $Request.Headers -API $APINAME-message 'Accessed this API' -Sev 'Debug'
14+
$Headers = $Request.Headers
15+
Write-LogMessage -headers $Headers -API $APINAME-message 'Accessed this API' -Sev 'Debug'
1516
$Username = $request.body.userID
1617
$Tenantfilter = $request.body.tenantfilter
1718
if ($username -eq $null) { exit }

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

Lines changed: 43 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -10,66 +10,61 @@ Function Invoke-ExecEmailForward {
1010
[CmdletBinding()]
1111
param($Request, $TriggerMetadata)
1212

13-
$Tenantfilter = $request.body.tenantfilter
14-
$username = $request.body.userid
15-
if ($request.body.ForwardInternal -is [string]) {
16-
$ForwardingAddress = $request.body.ForwardInternal
17-
} else {($request.body.ForwardInternal.value)
18-
$ForwardingAddress = $request.body.ForwardInternal.value
19-
}
20-
$ForwardingSMTPAddress = $request.body.ForwardExternal
21-
$ForwardOption = $request.body.forwardOption
13+
2214
$APIName = $Request.Params.CIPPEndpoint
23-
[bool]$KeepCopy = if ($request.body.KeepCopy -eq 'true') { $true } else { $false }
15+
$Headers = $Request.Headers
16+
Write-LogMessage -headers $Headers -API $APINAME-message 'Accessed this API' -Sev 'Debug'
2417

25-
if ($ForwardOption -eq 'internalAddress') {
26-
try {
27-
Set-CIPPForwarding -userid $username -tenantFilter $TenantFilter -APIName $APINAME -Headers $Request.Headers -Forward $ForwardingAddress -KeepCopy $KeepCopy
28-
if (-not $request.body.KeepCopy) {
29-
$results = "Forwarding all email for $($username) to $($ForwardingAddress) and not keeping a copy"
30-
} else {
31-
$results = "Forwarding all email for $($username) to $($ForwardingAddress) and keeping a copy"
32-
}
33-
} catch {
34-
Write-LogMessage -headers $Request.Headers -API $APINAME -message "Could not add forwarding for $($username)" -Sev 'Error' -tenant $TenantFilter
35-
$results = "Could not add forwarding for $($username). Error: $($_.Exception.Message)"
3618

37-
}
19+
$TenantFilter = $Request.Body.tenantFilter
20+
$Username = $Request.Body.userID
21+
if ($Request.Body.ForwardInternal -is [string]) {
22+
$ForwardingAddress = $Request.Body.ForwardInternal
23+
} else {
24+
$ForwardingAddress = $Request.Body.ForwardInternal.value
3825
}
26+
$ForwardingSMTPAddress = $Request.Body.ForwardExternal
27+
$ForwardOption = $Request.Body.forwardOption
28+
[bool]$KeepCopy = if ($Request.Body.KeepCopy -eq 'true') { $true } else { $false }
3929

40-
if ($ForwardOption -eq 'ExternalAddress') {
41-
try {
42-
Set-CIPPForwarding -userid $username -tenantFilter $TenantFilter -APIName $APINAME -Headers $Request.Headers -forwardingSMTPAddress $ForwardingSMTPAddress -KeepCopy $KeepCopy
43-
if (-not $request.body.KeepCopy) {
44-
$results = "Forwarding all email for $($username) to $($ForwardingSMTPAddress) and not keeping a copy"
45-
} else {
46-
$results = "Forwarding all email for $($username) to $($ForwardingSMTPAddress) and keeping a copy"
30+
# Process the forwarding option based on the type selected
31+
switch ($ForwardOption) {
32+
'internalAddress' {
33+
# Set up internal forwarding to another mailbox within the organization
34+
try {
35+
$Results = Set-CIPPForwarding -UserID $Username -TenantFilter $TenantFilter -APIName $APIName -Headers $Headers -Forward $ForwardingAddress -KeepCopy $KeepCopy
36+
$StatusCode = [HttpStatusCode]::OK
37+
} catch {
38+
$Results = $_.Exception.Message
39+
$StatusCode = [HttpStatusCode]::InternalServerError
4740
}
48-
} catch {
49-
Write-LogMessage -headers $Request.Headers -API $APINAME -message "Could not add forwarding for $($username)" -Sev 'Error' -tenant $TenantFilter
50-
$results = "Could not add forwarding for $($username). Error: $($_.Exception.Message)"
51-
5241
}
53-
54-
}
55-
56-
if ($ForwardOption -eq 'disabled') {
57-
try {
58-
Set-CIPPForwarding -userid $username -username $username -tenantFilter $Tenantfilter -Headers $Request.Headers -APIName $APIName -Disable $true
59-
$results = "Disabled Email Forwarding for $($username)"
60-
} catch {
61-
Write-LogMessage -headers $Request.Headers -API $APINAME -message "Could not disable Email forwarding for $($username)" -Sev 'Error' -tenant $TenantFilter
62-
$results = "Could not disable Email forwarding for $($username). Error: $($_.Exception.Message)"
63-
42+
'ExternalAddress' {
43+
# Set up external forwarding to an SMTP address outside the organization
44+
try {
45+
$Results = Set-CIPPForwarding -UserID $Username -TenantFilter $TenantFilter -APIName $APIName -Headers $Headers -ForwardingSMTPAddress $ForwardingSMTPAddress -KeepCopy $KeepCopy
46+
$StatusCode = [HttpStatusCode]::OK
47+
} catch {
48+
$Results = $_.Exception.Message
49+
$StatusCode = [HttpStatusCode]::InternalServerError
50+
}
51+
}
52+
'disabled' {
53+
# Disable email forwarding for the specified user
54+
try {
55+
$Results = Set-CIPPForwarding -UserID $Username -Username $Username -TenantFilter $TenantFilter -Headers $Headers -APIName $APIName -Disable $true
56+
$StatusCode = [HttpStatusCode]::OK
57+
} catch {
58+
$Results = $_.Exception.Message
59+
$StatusCode = [HttpStatusCode]::InternalServerError
60+
}
6461
}
6562
}
6663

67-
$Body = @{'Results' = @($results) }
68-
6964
# Associate values to output bindings by calling 'Push-OutputBinding'.
7065
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
71-
StatusCode = [HttpStatusCode]::OK
72-
Body = $Body
66+
StatusCode = $StatusCode
67+
Body = @{'Results' = @($Results) }
7368
})
7469

7570
}

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,19 @@ Function Invoke-ExecRemoveMailboxRule {
2020
$RuleId = $Request.Query.ruleId ?? $Request.Body.ruleId
2121
$Username = $Request.Query.userPrincipalName ?? $Request.Body.userPrincipalName
2222

23-
# Remove the rule
24-
$Results = Remove-CIPPMailboxRule -username $Username -TenantFilter $TenantFilter -APIName $APIName -Headers $Headers -RuleId $RuleId -RuleName $RuleName
25-
26-
if ($Results -like '*Could not delete*') {
27-
$StatusCode = [HttpStatusCode]::InternalServerError
28-
} else {
23+
try {
24+
# Remove the rule
25+
$Results = Remove-CIPPMailboxRule -username $Username -TenantFilter $TenantFilter -APIName $APIName -Headers $Headers -RuleId $RuleId -RuleName $RuleName
2926
$StatusCode = [HttpStatusCode]::OK
27+
} catch {
28+
$Results = $_.Exception.Message
29+
$StatusCode = [HttpStatusCode]::InternalServerError
3030
}
3131

3232
# Associate values to output bindings by calling 'Push-OutputBinding'.
3333
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
3434
StatusCode = $StatusCode
35-
Body = @{ Results = $Results }
35+
Body = @{ 'Results' = $Results }
3636
})
3737

3838
}

Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Email-Exchange/Resources/Invoke-AddEquipmentMailbox.ps1

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,11 @@ Function Invoke-AddEquipmentMailbox {
3434

3535
# Block sign-in for the mailbox
3636
try {
37-
$BlockSignInRequest = Set-CIPPSignInState -userid $AddEquipmentRequest.ExternalDirectoryObjectId -TenantFilter $Tenant -APIName $APINAME -Headers $Headers -AccountEnabled $false
38-
if ($BlockSignInRequest -like 'Could not disable*') { throw $BlockSignInRequest }
39-
$Results.Add("Blocked sign-in for Equipment mailbox; $($MailboxObject.userPrincipalName)")
37+
$null = Set-CIPPSignInState -userid $AddEquipmentRequest.ExternalDirectoryObjectId -TenantFilter $Tenant -APIName $APINAME -Headers $Headers -AccountEnabled $false
38+
$Results.Add("Successfully blocked sign-in for Equipment mailbox $($MailboxObject.userPrincipalName)")
4039
} catch {
41-
$ErrorMessage = Get-CippException -Exception $_
42-
$Results.Add("Failed to block sign-in for Equipment mailbox: $($MailboxObject.userPrincipalName). Error: $($ErrorMessage.NormalizedError)")
40+
$ErrorMessage = $_.Exception.Message
41+
$Results.Add("Failed to block sign-in for Equipment mailbox: $($MailboxObject.userPrincipalName). Error: $ErrorMessage")
4342
}
4443
Write-LogMessage -headers $Headers -API $APIName -tenant $Tenant -message "Created equipment mailbox $($MailboxObject.displayName)" -Sev 'Info'
4544
$StatusCode = [HttpStatusCode]::OK

Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Email-Exchange/Resources/Invoke-AddRoomMailbox.ps1

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,11 @@ Function Invoke-AddRoomMailbox {
3232

3333
# Block sign-in for the mailbox
3434
try {
35-
$BlockSignInRequest = Set-CIPPSignInState -userid $AddRoomRequest.ExternalDirectoryObjectId -TenantFilter $Tenant -APIName $APINAME -Headers $Headers -AccountEnabled $false
36-
if ($BlockSignInRequest -like 'Could not disable*') { throw $BlockSignInRequest }
37-
$Results.Add("Blocked sign-in for Room mailbox; $($MailboxObject.userPrincipalName)")
35+
$null = Set-CIPPSignInState -userid $AddRoomRequest.ExternalDirectoryObjectId -TenantFilter $Tenant -APIName $APINAME -Headers $Headers -AccountEnabled $false
36+
$Results.Add("Successfully blocked sign-in for Room mailbox $($MailboxObject.userPrincipalName)")
3837
} catch {
39-
$ErrorMessage = Get-CippException -Exception $_
40-
$Results.Add("Failed to block sign-in for Room mailbox: $($MailboxObject.userPrincipalName). Error: $($ErrorMessage.NormalizedError)")
38+
$ErrorMessage = $_.Exception.Message
39+
$Results.Add("Failed to block sign-in for Room mailbox: $($MailboxObject.userPrincipalName). Error: $ErrorMessage")
4140
}
4241
$StatusCode = [HttpStatusCode]::OK
4342
} catch {

0 commit comments

Comments
 (0)