Skip to content

Commit 8eb1399

Browse files
Merge pull request #1205 from KelvinTegelaar/dev
Dev into interface rewrite
2 parents d0fe6be + 25fbe41 commit 8eb1399

File tree

41 files changed

+888
-477
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+888
-477
lines changed

Modules/CIPPCore/Public/Alerts/Get-CIPPAlertSharepointQuota.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ function Get-CIPPAlertSharepointQuota {
2727
}
2828
$UsedStoragePercentage = [int](($sharepointQuota.GeoUsedStorageMB / $sharepointQuota.TenantStorageMB) * 100)
2929
if ($UsedStoragePercentage -gt $Value) {
30-
$AlertData = "SharePoint Storage is at $($UsedStoragePercentage)%. Your alert threshold is $($Value)%"
30+
$AlertData = "SharePoint Storage is at $($UsedStoragePercentage)% [$([math]::Round($sharepointQuota.GeoUsedStorageMB / 1024, 2)) GB/$([math]::Round($sharepointQuota.TenantStorageMB / 1024, 2)) GB]. Your alert threshold is $($Value)%"
3131
Write-AlertTrace -cmdletName $MyInvocation.MyCommand -tenantFilter $TenantFilter -data $AlertData
3232
}
3333
}

Modules/CIPPCore/Public/AuditLogs/Get-CippAuditLogSearchResults.ps1

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,21 @@ function Get-CippAuditLogSearchResults {
1414
[string]$TenantFilter,
1515
[Parameter(ValueFromPipelineByPropertyName = $true, Mandatory = $true)]
1616
[Alias('id')]
17-
[string]$QueryId
17+
[string]$QueryId,
18+
[switch]$CountOnly
1819
)
1920

2021
process {
21-
New-GraphGetRequest -uri ('https://graph.microsoft.com/beta/security/auditLog/queries/{0}/records?$top=999' -f $QueryId) -AsApp $true -tenantid $TenantFilter -ErrorAction Stop
22+
$GraphRequest = @{
23+
Uri = ('https://graph.microsoft.com/beta/security/auditLog/queries/{0}/records?$top=999&$count=true' -f $QueryId)
24+
Method = 'GET'
25+
AsApp = $true
26+
tenantid = $TenantFilter
27+
}
28+
if ($CountOnly.IsPresent) {
29+
$GraphRequest.CountOnly = $true
30+
}
31+
32+
New-GraphGetRequest @GraphRequest -ErrorAction Stop
2233
}
2334
}

Modules/CIPPCore/Public/Entrypoints/Activity Triggers/Domain Analyser/Push-DomainAnalyserTenant.ps1

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,26 @@ function Push-DomainAnalyserTenant {
2020
return
2121
} else {
2222
try {
23-
$Domains = New-GraphGetRequest -uri 'https://graph.microsoft.com/beta/domains' -tenantid $Tenant.customerId | Where-Object { ($_.id -notlike '*.microsoftonline.com' -and $_.id -NotLike '*.exclaimer.cloud' -and $_.id -Notlike '*.excl.cloud' -and $_.id -NotLike '*.codetwo.online' -and $_.id -NotLike '*.call2teams.com' -and $_.id -notlike '*signature365.net' -and $_.isVerified) }
23+
# Remove domains that are not wanted, and used for cloud signature services
24+
$ExclusionDomains = @(
25+
'*.microsoftonline.com'
26+
'*.exclaimer.cloud'
27+
'*.excl.cloud'
28+
'*.codetwo.online'
29+
'*.call2teams.com'
30+
'*.signature365.net'
31+
'*.myteamsconnect.io'
32+
'*.teams.dstny.com'
33+
)
34+
$Domains = New-GraphGetRequest -uri 'https://graph.microsoft.com/beta/domains' -tenantid $Tenant.customerId | Where-Object { $_.isVerified -eq $true } | ForEach-Object {
35+
$Domain = $_
36+
foreach ($ExclusionDomain in $ExclusionDomains) {
37+
if ($Domain.id -like $ExclusionDomain) {
38+
$Domain = $null
39+
}
40+
}
41+
$Domain
42+
} | Where-Object { $_ -ne $null }
2443

2544
$TenantDomains = foreach ($d in $Domains) {
2645
[PSCustomObject]@{

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

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,13 @@ function Invoke-ExecPartnerWebhook {
4747

4848
$Results = New-CIPPGraphSubscription @Webhook
4949

50-
if ($Request.Body.standardsExcludeAllTenants -eq $true) {
51-
$ConfigTable = Get-CIPPTable -TableName Config
52-
$PartnerWebhookOnboarding = [PSCustomObject]@{
53-
PartitionKey = 'Config'
54-
RowKey = 'PartnerWebhookOnboarding'
55-
StandardsExcludeAllTenants = $true
56-
}
57-
Add-CIPPAzDataTableEntity @ConfigTable -Entity $PartnerWebhookOnboarding -Force | Out-Null
50+
$ConfigTable = Get-CIPPTable -TableName Config
51+
$PartnerWebhookOnboarding = [PSCustomObject]@{
52+
PartitionKey = 'Config'
53+
RowKey = 'PartnerWebhookOnboarding'
54+
StandardsExcludeAllTenants = $Request.Body.standardsExcludeAllTenants
5855
}
56+
Add-CIPPAzDataTableEntity @ConfigTable -Entity $PartnerWebhookOnboarding -Force | Out-Null
5957
}
6058
'SendTest' {
6159
$Results = New-GraphPOSTRequest -uri 'https://api.partnercenter.microsoft.com/webhooks/v1/registration/validationEvents' -tenantid $env:TenantID -NoAuthCheck $true -scope 'https://api.partnercenter.microsoft.com/.default'

Modules/CIPPCore/Public/Entrypoints/HTTP Functions/CIPP/Settings/Invoke-ExecRestoreBackup.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@ Function Invoke-ExecRestoreBackup {
1313
$APIName = $TriggerMetadata.FunctionName
1414
Write-LogMessage -user $request.headers.'x-ms-client-principal' -API $APINAME -message 'Accessed this API' -Sev 'Debug'
1515
try {
16+
1617
if ($Request.Body.BackupName -like 'CippBackup_*') {
1718
$Table = Get-CippTable -tablename 'CIPPBackup'
1819
$Backup = Get-CippAzDataTableEntity @Table -Filter "RowKey eq '$($Request.Body.BackupName)'"
1920
if ($Backup) {
2021
$BackupData = $Backup.Backup | ConvertFrom-Json -ErrorAction SilentlyContinue | Select-Object * -ExcludeProperty ETag, Timestamp
2122
$BackupData | ForEach-Object {
22-
2323
$Table = Get-CippTable -tablename $_.table
2424
$ht2 = @{ }
2525
$_.psobject.properties | ForEach-Object { $ht2[$_.Name] = [string]$_.Value }

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

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ Function Invoke-AddRoomMailbox {
1212

1313
$APIName = $TriggerMetadata.FunctionName
1414
$User = $request.headers.'x-ms-client-principal'
15+
1516
Write-LogMessage -user $User -API $APINAME -message 'Accessed this API' -Sev 'Debug'
1617

1718
# Write to the Azure Functions log stream.
@@ -20,6 +21,7 @@ Function Invoke-AddRoomMailbox {
2021

2122
$Results = [System.Collections.Generic.List[Object]]::new()
2223
$MailboxObject = $Request.body
24+
$Tenant = $MailboxObject.tenantid
2325
$AddRoomParams = [pscustomobject]@{
2426
Name = $MailboxObject.username
2527
DisplayName = $MailboxObject.displayName
@@ -30,30 +32,30 @@ Function Invoke-AddRoomMailbox {
3032
}
3133
# Interact with query parameters or the body of the request.
3234
try {
33-
$AddRoomRequest = New-ExoRequest -tenantid $($MailboxObject.tenantid) -cmdlet 'New-Mailbox' -cmdparams $AddRoomParams
35+
$AddRoomRequest = New-ExoRequest -tenantid $Tenant -cmdlet 'New-Mailbox' -cmdparams $AddRoomParams
3436
$Results.Add("Successfully created room: $($MailboxObject.DisplayName).")
35-
Write-LogMessage -user $User -API $APINAME -tenant $($MailboxObject.tenantid) -message "Created room $($MailboxObject.DisplayName) with id $($AddRoomRequest.id)" -Sev 'Info'
37+
Write-LogMessage -user $User -API $APINAME -tenant $Tenant -message "Created room $($MailboxObject.DisplayName) with id $($AddRoomRequest.id)" -Sev 'Info'
3638

3739
# Block sign-in for the mailbox
3840
try {
39-
$Request = Set-CIPPSignInState -userid $AddRoomRequest.ExternalDirectoryObjectId -TenantFilter $($MailboxObject.tenantid) -APIName $APINAME -ExecutingUser $User -AccountEnabled $false
41+
$Request = Set-CIPPSignInState -userid $AddRoomRequest.ExternalDirectoryObjectId -TenantFilter $Tenant -APIName $APINAME -ExecutingUser $User -AccountEnabled $false
4042
$Results.add("Blocked sign-in for Room mailbox; $($MailboxObject.userPrincipalName)")
4143
} catch {
42-
$ErrorMessage = Get-NormalizedError -Message $_.Exception.Message
43-
$Results.add("Failed to block sign-in for Room mailbox: $($MailboxObject.userPrincipalName). Error: $ErrorMessage")
44+
$ErrorMessage = Get-CippException -Exception $_
45+
$Results.add("Failed to block sign-in for Room mailbox: $($MailboxObject.userPrincipalName). Error: $($ErrorMessage.NormalizedError)")
4446
}
45-
47+
$StatusCode = [HttpStatusCode]::OK
4648
} catch {
4749
$ErrorMessage = Get-CippException -Exception $_
48-
Write-LogMessage -user $User -API $APINAME -tenant $($MailboxObject.tenantid) -message "Failed to create room: $($MailboxObject.DisplayName). Error: $($ErrorMessage.NormalizedError)" -Sev 'Error' -LogData $ErrorMessage
50+
Write-LogMessage -user $User -API $APINAME -tenant $Tenant -message "Failed to create room: $($MailboxObject.DisplayName). Error: $($ErrorMessage.NormalizedError)" -Sev 'Error' -LogData $ErrorMessage
4951
$Results.Add("Failed to create Room mailbox $($MailboxObject.userPrincipalName). $($ErrorMessage.NormalizedError)")
52+
$StatusCode = [HttpStatusCode]::Forbidden
5053
}
5154

52-
5355
$Body = [pscustomobject] @{ 'Results' = @($Results) }
5456
# Associate values to output bindings by calling 'Push-OutputBinding'.
5557
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
56-
StatusCode = [HttpStatusCode]::OK
58+
StatusCode = $StatusCode
5759
Body = $Body
5860
})
5961
}

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

Lines changed: 33 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,14 @@ Function Invoke-AddSharedMailbox {
1515

1616
Write-LogMessage -user $User -API $APINAME -message 'Accessed this API' -Sev 'Debug'
1717

18+
# Write to the Azure Functions log stream.
19+
Write-Host 'PowerShell HTTP trigger function processed a request.'
20+
1821
$Results = [System.Collections.ArrayList]@()
1922
$MailboxObject = $Request.body
23+
$Tenant = $MailboxObject.tenantid
2024
$Aliases = $MailboxObject.addedAliases -Split '\n'
2125

22-
# Write to the Azure Functions log stream.
23-
Write-Host 'PowerShell HTTP trigger function processed a request.'
2426
try {
2527

2628
$Email = "$($MailboxObject.username)@$($MailboxObject.domain)"
@@ -30,48 +32,51 @@ Function Invoke-AddSharedMailbox {
3032
'primarySMTPAddress' = $Email
3133
Shared = $true
3234
}
33-
$AddSharedRequest = New-ExoRequest -tenantid $MailboxObject.tenantid -cmdlet 'New-Mailbox' -cmdparams $BodyToShip
35+
$AddSharedRequest = New-ExoRequest -tenantid $Tenant -cmdlet 'New-Mailbox' -cmdparams $BodyToShip
3436
$Body = $Results.add("Successfully created shared mailbox: $Email.")
35-
Write-LogMessage -user $User -API $APINAME -tenant $($MailboxObject.tenantid) -message "Created shared mailbox $($MailboxObject.displayname) with email $Email" -Sev 'Info'
37+
Write-LogMessage -user $User -API $APINAME -tenant $Tenant -message "Created shared mailbox $($MailboxObject.displayname) with email $Email" -Sev 'Info'
3638

3739
# Block sign-in for the mailbox
3840
try {
39-
$null = Set-CIPPSignInState -userid $AddSharedRequest.ExternalDirectoryObjectId -TenantFilter $($MailboxObject.tenantid) -APIName $APINAME -ExecutingUser $User -AccountEnabled $false
41+
$null = Set-CIPPSignInState -userid $AddSharedRequest.ExternalDirectoryObjectId -TenantFilter $Tenant -APIName $APINAME -ExecutingUser $User -AccountEnabled $false
4042
$Body = $Results.add("Blocked sign-in for shared mailbox $Email")
4143
} catch {
42-
$ErrorMessage = Get-NormalizedError -Message $_.Exception.Message
43-
$Body = $Results.add("Failed to block sign-in for shared mailbox $Email. Error: $ErrorMessage")
44+
$ErrorMessage = Get-CippException -Exception $_
45+
Write-LogMessage -user $User -API $APINAME -tenant $Tenant -message "Failed to block sign-in for shared mailbox $Email. Error: $($ErrorMessage.NormalizedError)" -Sev 'Error' -LogData $ErrorMessage
46+
$Body = $Results.add("Failed to block sign-in for shared mailbox $Email. Error: $($ErrorMessage.NormalizedError)")
4447
}
4548

46-
} catch {
47-
$ErrorMessage = Get-NormalizedError -Message $_.Exception.Message
48-
Write-LogMessage -user $User -API $APINAME -tenant $($MailboxObject.tenantid) -message "Failed to create shared mailbox. Error: $ErrorMessage" -Sev 'Error'
49-
$Body = $Results.add("Failed to create Shared Mailbox. $ErrorMessage")
50-
}
49+
# Add aliases to the mailbox if any are provided
50+
if ($Aliases) {
51+
try {
52+
Start-Sleep 3 # Sleep since there is apparently a race condition with the mailbox creation if we don't delay for a lil bit
53+
$AliasBodyToShip = [pscustomobject] @{
54+
'Identity' = $AddSharedRequest.Guid
55+
'EmailAddresses' = @{'@odata.type' = '#Exchange.GenericHashTable'; Add = $Aliases }
56+
}
57+
$null = New-ExoRequest -tenantid $Tenant -cmdlet 'Set-Mailbox' -cmdparams $AliasBodyToShip -UseSystemMailbox $true
58+
Write-LogMessage -user $User -API $APINAME -tenant $Tenant -message "Added aliases to $Email : $($Aliases -join ',')" -Sev 'Info'
59+
$Body = $results.add("Added Aliases to $Email : $($Aliases -join ',')")
5160

52-
# Add aliases to the mailbox if any are provided
53-
if ($Aliases) {
54-
try {
55-
Start-Sleep 3 # Sleep since there is apparently a race condition with the mailbox creation if we don't delay for a lil bit
56-
$AliasBodyToShip = [pscustomobject] @{
57-
'Identity' = $AddSharedRequest.Guid
58-
'EmailAddresses' = @{'@odata.type' = '#Exchange.GenericHashTable'; Add = $Aliases }
61+
} catch {
62+
$ErrorMessage = Get-CippException -Exception $_
63+
Write-LogMessage -user $User -API $APINAME -tenant $Tenant -message "Failed to add aliases to $Email : $($ErrorMessage.NormalizedError)" -Sev 'Error' -LogData $ErrorMessage
64+
$Body = $results.add("ERROR: Failed to add aliases to $Email : $($ErrorMessage.NormalizedError)")
5965
}
60-
$null = New-ExoRequest -tenantid $MailboxObject.tenantid -cmdlet 'Set-Mailbox' -cmdparams $AliasBodyToShip -UseSystemMailbox $true
61-
Write-LogMessage -user $User -API $APINAME -tenant $($MailboxObject.tenantid) -message "Added aliases to $Email : $($Aliases -join ',')" -Sev 'Info'
62-
$Body = $results.add("Added Aliases to $Email : $($Aliases -join ',')")
63-
64-
} catch {
65-
$ErrorMessage = Get-NormalizedError -Message $_.Exception.Message
66-
Write-LogMessage -user $User -API $APINAME -tenant $($MailboxObject.tenantid) -message "Failed to add aliases to $Email : $ErrorMessage" -Sev 'Error'
67-
$Body = $results.add("ERROR: Failed to add aliases to $Email : $ErrorMessage")
6866
}
67+
$StatusCode = [HttpStatusCode]::OK
68+
} catch {
69+
$ErrorMessage = Get-CippException -Exception $_
70+
Write-LogMessage -user $User -API $APINAME -tenant $Tenant -message "Failed to create shared mailbox. Error: $($ErrorMessage.NormalizedError)" -Sev 'Error' -LogData $ErrorMessage
71+
$Body = $Results.add("Failed to create Shared Mailbox. $($ErrorMessage.NormalizedError)")
72+
$StatusCode = [HttpStatusCode]::Forbidden
6973
}
7074

75+
7176
$Body = [pscustomobject] @{ 'Results' = @($results) }
7277
# Associate values to output bindings by calling 'Push-OutputBinding'.
7378
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
74-
StatusCode = [HttpStatusCode]::OK
79+
StatusCode = $StatusCode
7580
Body = $Body
7681
})
7782

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

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,20 @@ Function Invoke-ExecDeviceAction {
2020
if ($Request.Body.Action -eq 'setDeviceName') {
2121
$ActionBody = @{ deviceName = $Request.Body.input } | ConvertTo-Json -Compress
2222
}
23-
$ActionResult = New-CIPPDeviceAction -Action $Request.Body.Action -ActionBody $ActionBody -DeviceFilter $Request.Body.GUID -TenantFilter $Request.Body.TenantFilter -ExecutingUser $request.headers.'x-ms-client-principal' -APINAME $APINAME
23+
else {
24+
$ActionBody = $Request.Body | ConvertTo-Json -Compress
25+
}
26+
27+
$cmdparams = @{
28+
Action = $Request.Body.Action
29+
ActionBody = $ActionBody
30+
DeviceFilter = $Request.Body.GUID
31+
TenantFilter = $Request.Body.TenantFilter
32+
ExecutingUser = $request.headers.'x-ms-client-principal'
33+
APINAME = $APINAME
34+
}
35+
$ActionResult = New-CIPPDeviceAction @cmdparams
36+
2437
$body = [pscustomobject]@{'Results' = "$ActionResult" }
2538

2639
} catch {

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ Function Invoke-ExecResetMFA {
1717
$TenantFilter = $Request.Query.TenantFilter
1818
$UserID = $Request.Query.ID
1919
try {
20+
2021
$Body = @{
2122
Results = Remove-CIPPUserMFA -UserPrincipalName $UserID -TenantFilter $TenantFilter -ExecutingUser $request.headers.'x-ms-client-principal'
2223
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
using namespace System.Net
2+
3+
function Invoke-ListPerUserMFA {
4+
<#
5+
.FUNCTIONALITY
6+
Entrypoint
7+
.ROLE
8+
Identity.User.Read
9+
#>
10+
[CmdletBinding()]
11+
param($Request, $TriggerMetadata)
12+
13+
$APIName = $TriggerMetadata.FunctionName
14+
$User = $request.headers.'x-ms-client-principal'
15+
Write-LogMessage -user $User -API $APINAME -message 'Accessed this API' -Sev 'Debug'
16+
17+
# Write to the Azure Functions log stream.
18+
Write-Host 'PowerShell HTTP trigger function processed a request.'
19+
20+
# Parse query parameters
21+
$Tenant = $Request.query.tenantFilter
22+
try {
23+
$AllUsers = [System.Convert]::ToBoolean($Request.query.allUsers)
24+
} catch {
25+
$AllUsers = $false
26+
}
27+
$UserId = $Request.query.userId
28+
29+
# Get the MFA state for the user/all users
30+
try {
31+
if ($AllUsers -eq $true) {
32+
$Results = Get-CIPPPerUserMFA -TenantFilter $Tenant -AllUsers $true
33+
} else {
34+
$Results = Get-CIPPPerUserMFA -TenantFilter $Tenant -userId $UserId
35+
}
36+
$StatusCode = [HttpStatusCode]::OK
37+
} catch {
38+
$ErrorMessage = Get-NormalizedError -Message $_.Exception.Message
39+
$Results = "Failed to get MFA State for $UserId : $ErrorMessage"
40+
$StatusCode = [HttpStatusCode]::Forbidden
41+
}
42+
43+
# Associate values to output bindings by calling 'Push-OutputBinding'.
44+
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
45+
StatusCode = $StatusCode
46+
Body = @($Results)
47+
})
48+
49+
50+
}

0 commit comments

Comments
 (0)