Skip to content

Commit b919903

Browse files
committed
Merge branch 'dev' of https://github.com/KelvinTegelaar/CIPP-API into dev
2 parents f0c1c68 + 5fee4fe commit b919903

File tree

14 files changed

+5499
-5418
lines changed

14 files changed

+5499
-5418
lines changed

Cache_SAMSetup/PermissionsTranslator.json

Lines changed: 5350 additions & 5350 deletions
Large diffs are not rendered by default.

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

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,33 +11,33 @@ Function Invoke-ExecSetOoO {
1111
param($Request, $TriggerMetadata)
1212
try {
1313
$APIName = $Request.Params.CIPPEndpoint
14-
Write-LogMessage -headers $Request.Headers -API $APINAME -message 'Accessed this API' -Sev 'Debug'
15-
$Username = $request.body.userId
16-
$Tenantfilter = $request.body.tenantfilter
17-
if ($Request.body.input) {
18-
$InternalMessage = $Request.body.input
19-
$ExternalMessage = $Request.body.input
14+
Write-LogMessage -headers $Request.Headers -API $APIName -message 'Accessed this API' -Sev 'Debug'
15+
$Username = $Request.Body.userId
16+
$TenantFilter = $Request.Body.tenantFilter
17+
if ($Request.Body.input) {
18+
$InternalMessage = $Request.Body.input
19+
$ExternalMessage = $Request.Body.input
2020
} else {
21-
$InternalMessage = $Request.body.InternalMessage
22-
$ExternalMessage = $Request.body.ExternalMessage
21+
$InternalMessage = $Request.Body.InternalMessage
22+
$ExternalMessage = $Request.Body.ExternalMessage
2323
}
2424
#if starttime and endtime are a number, they are unix timestamps and need to be converted to datetime, otherwise just use them.
25-
$StartTime = if ($Request.body.StartTime -match '^\d+$') { [DateTimeOffset]::FromUnixTimeSeconds([int]$Request.body.StartTime).DateTime } else { $Request.body.StartTime }
26-
$EndTime = if ($Request.body.EndTime -match '^\d+$') { [DateTimeOffset]::FromUnixTimeSeconds([int]$Request.body.EndTime).DateTime } else { $Request.body.EndTime }
25+
$StartTime = if ($Request.Body.StartTime -match '^\d+$') { [DateTimeOffset]::FromUnixTimeSeconds([int]$Request.Body.StartTime).DateTime } else { $Request.Body.StartTime }
26+
$EndTime = if ($Request.Body.EndTime -match '^\d+$') { [DateTimeOffset]::FromUnixTimeSeconds([int]$Request.Body.EndTime).DateTime } else { $Request.Body.EndTime }
2727

2828
$Results = try {
2929
if ($Request.Body.AutoReplyState.value -ne 'Scheduled') {
30-
Set-CIPPOutOfOffice -userid $Username -tenantFilter $TenantFilter -APIName $APINAME -Headers $Request.Headers -InternalMessage $InternalMessage -ExternalMessage $ExternalMessage -State $Request.Body.AutoReplyState.value
30+
Set-CIPPOutOfOffice -userid $Username -tenantFilter $TenantFilter -APIName $APIName -Headers $Request.Headers -InternalMessage $InternalMessage -ExternalMessage $ExternalMessage -State $Request.Body.AutoReplyState.value
3131
} else {
32-
Set-CIPPOutOfOffice -userid $Username -tenantFilter $TenantFilter -APIName $APINAME -Headers $Request.Headers -InternalMessage $InternalMessage -ExternalMessage $ExternalMessage -StartTime $StartTime -EndTime $EndTime -State $Request.Body.AutoReplyState.value
32+
Set-CIPPOutOfOffice -userid $Username -tenantFilter $TenantFilter -APIName $APIName -Headers $Request.Headers -InternalMessage $InternalMessage -ExternalMessage $ExternalMessage -StartTime $StartTime -EndTime $EndTime -State $Request.Body.AutoReplyState.value
3333
}
3434
} catch {
35-
"Could not add out of office message for $($username). Error: $($_.Exception.Message)"
35+
"Could not add out of office message for $($Username). Error: $($_.Exception.Message)"
3636
}
3737

38-
$body = [pscustomobject]@{'Results' = $($results) }
38+
$Body = [PSCustomObject]@{'Results' = $($Results) }
3939
} catch {
40-
$body = [pscustomobject]@{'Results' = "Could not set Out of Office user: $($_.Exception.message)" }
40+
$Body = [PSCustomObject]@{'Results' = "Could not set Out of Office user: $($_.Exception.Message)" }
4141
}
4242

4343
# Associate values to output bindings by calling 'Push-OutputBinding'.

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

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,27 +20,29 @@ Function Invoke-ListSharedMailboxAccountEnabled {
2020
# Get Shared Mailbox Stuff
2121
try {
2222
$SharedMailboxList = (New-GraphGetRequest -uri "https://outlook.office365.com/adminapi/beta/$($TenantFilter)/Mailbox?`$filter=RecipientTypeDetails eq 'SharedMailbox'" -Tenantid $TenantFilter -scope ExchangeOnline)
23-
$AllUsersAccountState = New-GraphGetRequest -uri 'https://graph.microsoft.com/beta/users?select=id,userPrincipalName,accountEnabled,displayName,givenName,surname,onPremisesSyncEnabled' -tenantid $TenantFilter
24-
$EnabledUsersWithSharedMailbox = foreach ($SharedMailbox in $SharedMailboxList) {
23+
$AllUsersInfo = New-GraphGetRequest -uri 'https://graph.microsoft.com/beta/users?$select=id,userPrincipalName,accountEnabled,displayName,givenName,surname,onPremisesSyncEnabled,assignedLicenses' -tenantid $TenantFilter
24+
$SharedMailboxDetails = foreach ($SharedMailbox in $SharedMailboxList) {
2525
# Match the User
26-
$User = $AllUsersAccountState | Where-Object { $_.userPrincipalName -eq $SharedMailbox.userPrincipalName } | Select-Object -Property id, userPrincipalName, accountEnabled, displayName, givenName, surname, onPremisesSyncEnabled -First 1
27-
if ($User.accountEnabled) {
28-
$User | Select-Object `
29-
@{Name = 'UserPrincipalName'; Expression = { $User.UserPrincipalName } }, `
30-
@{Name = 'displayName'; Expression = { $User.displayName } },
31-
@{Name = 'givenName'; Expression = { $User.givenName } },
32-
@{Name = 'surname'; Expression = { $User.surname } },
33-
@{Name = 'accountEnabled'; Expression = { $User.accountEnabled } },
34-
@{Name = 'id'; Expression = { $User.id } },
35-
@{Name = 'onPremisesSyncEnabled'; Expression = { $User.onPremisesSyncEnabled } }
36-
26+
$User = $AllUsersInfo | Where-Object { $_.userPrincipalName -eq $SharedMailbox.userPrincipalName } | Select-Object -First 1
27+
28+
if ($User) {
29+
# Return all shared mailboxes with license information
30+
[PSCustomObject]@{
31+
UserPrincipalName = $User.userPrincipalName
32+
displayName = $User.displayName
33+
givenName = $User.givenName
34+
surname = $User.surname
35+
accountEnabled = $User.accountEnabled
36+
assignedLicenses = $User.assignedLicenses
37+
id = $User.id
38+
onPremisesSyncEnabled = $User.onPremisesSyncEnabled
39+
}
3740
}
3841
}
3942
} catch {
40-
Write-LogMessage -API 'Tenant' -tenant $TenantFilter -message "Shared Mailbox Enabled Accounts on $($TenantFilter). Error: $($_.exception.message)" -sev 'Error'
43+
Write-LogMessage -API 'Tenant' -tenant $TenantFilter -message "Shared Mailbox List on $($TenantFilter). Error: $($_.exception.message)" -sev 'Error'
4144
}
42-
43-
$GraphRequest = $EnabledUsersWithSharedMailbox
45+
$GraphRequest = $SharedMailboxDetails
4446
# Associate values to output bindings by calling 'Push-OutputBinding'.
4547
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
4648
StatusCode = [HttpStatusCode]::OK

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

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,54 @@ Function Invoke-EditRoomMailbox {
5353
}
5454
}
5555

56+
57+
# Then update the calendar properties
58+
$UpdateCalendarParams = @{
59+
Identity = $MailboxObject.roomId
60+
}
61+
62+
$CalendarProperties = @(
63+
'AllowConflicts', 'AllowRecurringMeetings', 'BookingWindowInDays',
64+
'MaximumDurationInMinutes', 'ProcessExternalMeetingMessages', 'EnforceCapacity',
65+
'ForwardRequestsToDelegates', 'ScheduleOnlyDuringWorkHours ', 'AutomateProcessing'
66+
)
67+
68+
foreach ($prop in $CalendarProperties) {
69+
if (![string]::IsNullOrWhiteSpace($MailboxObject.$prop)) {
70+
$UpdateCalendarParams[$prop] = $MailboxObject.$prop
71+
}
72+
}
73+
74+
# Then update the calendar configuration
75+
$UpdateCalendarConfigParams = @{
76+
Identity = $MailboxObject.roomId
77+
}
78+
79+
$CalendarConfiguration = @(
80+
'WorkDays', 'WorkHoursStartTime', 'WorkHoursEndTime', 'WorkingHoursTimeZone'
81+
)
82+
83+
foreach ($prop in $CalendarConfiguration) {
84+
if (![string]::IsNullOrWhiteSpace($MailboxObject.$prop)) {
85+
$UpdateCalendarConfigParams[$prop] = $MailboxObject.$prop
86+
}
87+
}
88+
5689
try {
5790
# Update mailbox properties
5891
$null = New-ExoRequest -tenantid $Tenant -cmdlet 'Set-Mailbox' -cmdParams $UpdateMailboxParams
5992

6093
# Update place properties
6194
$null = New-ExoRequest -tenantid $Tenant -cmdlet 'Set-Place' -cmdParams $UpdatePlaceParams
62-
$Results.Add("Successfully updated room: $($MailboxObject.DisplayName)")
95+
$Results.Add("Successfully updated room: $($MailboxObject.DisplayName) (Place Properties)")
96+
97+
# Update calendar properties
98+
$null = New-ExoRequest -tenantid $Tenant -cmdlet 'Set-CalendarProcessing' -cmdParams $UpdateCalendarParams
99+
$Results.Add("Successfully updated room: $($MailboxObject.DisplayName) (Calendar Properties)")
100+
101+
# Update calendar configuration properties
102+
$null = New-ExoRequest -tenantid $Tenant -cmdlet 'Set-MailboxCalendarConfiguration' -cmdParams $UpdateCalendarConfigParams
103+
$Results.Add("Successfully updated room: $($MailboxObject.DisplayName) (Calendar Configuration)")
63104

64105
Write-LogMessage -headers $Request.Headers -API $APIName -tenant $Tenant -message "Updated room $($MailboxObject.DisplayName)" -Sev 'Info'
65106
$StatusCode = [HttpStatusCode]::OK

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

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,17 @@ Function Invoke-ListRooms {
3232
Identity = $RoomId
3333
} | Select-Object -ExcludeProperty *@odata.type*
3434

35-
if ($RoomMailbox -and $PlaceDetails) {
35+
# Get calendar properties
36+
$CalendarProperties = New-ExoRequest -tenantid $TenantFilter -cmdlet 'Get-CalendarProcessing' -cmdParams @{
37+
Identity = $RoomId
38+
} | Select-Object -ExcludeProperty *@odata.type*
39+
40+
# Get calendar properties
41+
$CalendarConfigurationProperties = New-ExoRequest -tenantid $TenantFilter -cmdlet 'Get-MailboxCalendarConfiguration' -cmdParams @{
42+
Identity = $RoomId
43+
} | Select-Object -ExcludeProperty *@odata.type*
44+
45+
if ($RoomMailbox -and $PlaceDetails -and $CalendarProperties -and $CalendarConfigurationProperties) {
3646
$GraphRequest = @(
3747
[PSCustomObject]@{
3848
# Core Mailbox Properties
@@ -70,6 +80,23 @@ Function Invoke-ListRooms {
7080
phone = if ([string]::IsNullOrWhiteSpace($PlaceDetails.Phone)) { $null } else { $PlaceDetails.Phone }
7181
tags = $PlaceDetails.Tags
7282
spaceType = $PlaceDetails.SpaceType
83+
84+
# Calendar Properties
85+
AllowConflicts = $CalendarProperties.AllowConflicts
86+
AllowRecurringMeetings = $CalendarProperties.AllowRecurringMeetings
87+
BookingWindowInDays = $CalendarProperties.BookingWindowInDays
88+
MaximumDurationInMinutes = $CalendarProperties.MaximumDurationInMinutes
89+
ProcessExternalMeetingMessages= $CalendarProperties.ProcessExternalMeetingMessages
90+
EnforceCapacity = $CalendarProperties.EnforceCapacity
91+
ForwardRequestsToDelegates = $CalendarProperties.ForwardRequestsToDelegates
92+
ScheduleOnlyDuringWorkHours = $CalendarProperties.ScheduleOnlyDuringWorkHours
93+
AutomateProcessing = $CalendarProperties.AutomateProcessing
94+
95+
# Calendar Configuration Properties
96+
WorkDays = if ([string]::IsNullOrWhiteSpace($CalendarConfigurationProperties.WorkDays)) { $null } else { $CalendarConfigurationProperties.WorkDays }
97+
WorkHoursStartTime = if ([string]::IsNullOrWhiteSpace($CalendarConfigurationProperties.WorkHoursStartTime)) { $null } else { $CalendarConfigurationProperties.WorkHoursStartTime }
98+
WorkHoursEndTime = if ([string]::IsNullOrWhiteSpace($CalendarConfigurationProperties.WorkHoursEndTime)) { $null } else { $CalendarConfigurationProperties.WorkHoursEndTime }
99+
WorkingHoursTimeZone = $CalendarConfigurationProperties.WorkingHoursTimeZone
73100
}
74101
)
75102
}

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,19 @@ Function Invoke-AddTenantAllowBlockList {
1717
$BlockListObject = $Request.Body
1818
if ($Request.Body.tenantId -eq 'AllTenants') { $Tenants = (Get-Tenants).defaultDomainName } else { $Tenants = @($Request.body.tenantId) }
1919
$Results = [System.Collections.Generic.List[string]]::new()
20+
$Entries = @()
21+
if ($BlockListObject.entries -is [array]) {
22+
$Entries = $BlockListObject.entries
23+
} else {
24+
$Entries = @($BlockListObject.entries -split "[,;]" | Where-Object { $_ -ne "" } | ForEach-Object { $_.Trim() })
25+
}
2026
foreach ($Tenant in $Tenants) {
2127
try {
2228
$ExoRequest = @{
2329
tenantid = $Tenant
2430
cmdlet = 'New-TenantAllowBlockListItems'
2531
cmdParams = @{
26-
Entries = [string[]]$BlockListObject.entries
32+
Entries = $Entries
2733
ListType = [string]$BlockListObject.listType
2834
Notes = [string]$BlockListObject.notes
2935
$BlockListObject.listMethod = [bool]$true
@@ -32,6 +38,8 @@ Function Invoke-AddTenantAllowBlockList {
3238

3339
if ($BlockListObject.NoExpiration -eq $true) {
3440
$ExoRequest.cmdParams.NoExpiration = $true
41+
} elseif ($BlockListObject.RemoveAfter -eq $true) {
42+
$ExoRequest.cmdParams.RemoveAfter = 45
3543
}
3644

3745
New-ExoRequest @ExoRequest

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

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -121,11 +121,8 @@ function Invoke-ExecJITAdmin {
121121
$PasswordExpiration = $TapRequest.LifetimeInMinutes
122122

123123
$PasswordLink = New-PwPushLink -Payload $TempPass
124-
if ($PasswordLink) {
125-
$Password = $PasswordLink
126-
} else {
127-
$Password = $TempPass
128-
}
124+
$Password = $PasswordLink ? $PasswordLink : $TempPass
125+
129126
$Results.Add("Temporary Access Pass: $Password")
130127
$Results.Add("This TAP is usable starting at $($TapRequest.startDateTime) UTC for the next $PasswordExpiration minutes")
131128
} catch {
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
function Write-AlertTrace {
22
<#
33
.FUNCTIONALITY
4-
Internal function. Pleases most of write-alertmessage for alerting purposes
4+
Internal function. Pleases most of Write-AlertTrace for alerting purposes
55
#>
66
Param(
77
$cmdletName,
88
$data,
99
$tenantFilter
10-
)
10+
)
1111
$Table = Get-CIPPTable -tablename AlertLastRun
1212
$PartitionKey = (Get-Date -UFormat '%Y%m%d').ToString()
1313
#Get current row and compare the $logData object. If it's the same, don't write it.
1414
$Row = Get-CIPPAzDataTableEntity @table -Filter "RowKey eq '$($tenantFilter)-$($cmdletName)' and PartitionKey eq '$PartitionKey'"
1515
try {
1616
$RowData = $Row.LogData
17-
$Compare = Compare-Object $RowData ($data | ConvertTo-Json -Compress -Depth 10 | Out-String)
17+
$Compare = Compare-Object $RowData (ConvertTo-Json -InputObject $data -Compress -Depth 10 | Out-String)
1818
if ($Compare) {
19-
$LogData = ConvertTo-Json $data -Compress -Depth 10 | Out-String
19+
$LogData = ConvertTo-Json -InputObject $data -Compress -Depth 10 | Out-String
2020
$TableRow = @{
2121
'PartitionKey' = $PartitionKey
2222
'RowKey' = "$($tenantFilter)-$($cmdletName)"
@@ -27,7 +27,7 @@ function Write-AlertTrace {
2727
return $data
2828
}
2929
} catch {
30-
$LogData = ConvertTo-Json $data -Compress -Depth 10 | Out-String
30+
$LogData = ConvertTo-Json -InputObject $data -Compress -Depth 10 | Out-String
3131
$TableRow = @{
3232
'PartitionKey' = $PartitionKey
3333
'RowKey' = "$($tenantFilter)-$($cmdletName)"
@@ -38,4 +38,4 @@ function Write-AlertTrace {
3838
return $data
3939
}
4040

41-
}
41+
}

Modules/CIPPCore/Public/New-CIPPTAP.ps1

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,20 @@ function New-CIPPTAP {
1010
try {
1111
$GraphRequest = New-GraphPostRequest -uri "https://graph.microsoft.com/beta/users/$($userid)/authentication/temporaryAccessPassMethods" -tenantid $TenantFilter -type POST -body '{}' -verbose
1212
Write-LogMessage -headers $Headers -API $APIName -message "Created Temporary Access Password (TAP) for $userid" -Sev 'Info' -tenant $TenantFilter
13-
$Results = [System.Collections.Generic.List[string]]::new()
14-
$Results.Add("The TAP for this user is $($GraphRequest.temporaryAccessPass) - This TAP is usable for the next $($GraphRequest.LifetimeInMinutes) minutes")
15-
$Results.Add("$($GraphRequest.temporaryAccessPass)")
16-
return $Results
13+
return @{
14+
resultText = "The TAP for this user is $($GraphRequest.temporaryAccessPass) - This TAP is usable for the next $($GraphRequest.LifetimeInMinutes) minutes"
15+
copyField = $GraphRequest.temporaryAccessPass
16+
temporaryAccessPass = $GraphRequest.temporaryAccessPass
17+
lifetimeInMinutes = $GraphRequest.LifetimeInMinutes
18+
startDateTime = $GraphRequest.startDateTime
19+
state = 'success'
20+
}
1721

1822
} catch {
1923
$ErrorMessage = Get-CippException -Exception $_
2024
$Result = "Failed to create Temporary Access Password (TAP) for $($userid): $($ErrorMessage.NormalizedError)"
2125
Write-LogMessage -headers $Headers -API $APIName -message $Result -Sev 'Error' -tenant $TenantFilter -LogData $ErrorMessage
22-
throw @{ Results = $Result }
23-
24-
26+
throw $Result
2527
}
26-
2728
}
2829

Modules/CIPPCore/Public/Set-CIPPOutOfoffice.ps1

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ function Set-CIPPOutOfOffice {
2121
}
2222
if ($State -ne 'Scheduled') {
2323
$null = New-ExoRequest -tenantid $TenantFilter -cmdlet 'Set-MailboxAutoReplyConfiguration' -cmdParams @{Identity = $userid; AutoReplyState = $State; InternalMessage = $InternalMessage; ExternalMessage = $ExternalMessage } -Anchor $userid
24-
Write-LogMessage -headers $Headers -API $APIName -message "Set Out-of-office for $($userid) to $state" -Sev 'Info' -tenant $TenantFilter
25-
return "Set Out-of-office for $($userid) to $state."
24+
Write-LogMessage -headers $Headers -API $APIName -message "Set Out-of-office for $($userid) to $State" -Sev 'Info' -tenant $TenantFilter
25+
return "Set Out-of-office for $($userid) to $State."
2626
} else {
2727
$null = New-ExoRequest -tenantid $TenantFilter -cmdlet 'Set-MailboxAutoReplyConfiguration' -cmdParams @{Identity = $userid; AutoReplyState = $State; InternalMessage = $InternalMessage; ExternalMessage = $ExternalMessage; StartTime = $StartTime; EndTime = $EndTime } -Anchor $userid
2828
Write-LogMessage -headers $Headers -API $APIName -message "Scheduled Out-of-office for $($userid) between $StartTime and $EndTime" -Sev 'Info' -tenant $TenantFilter

0 commit comments

Comments
 (0)