Skip to content

Commit 488ac9c

Browse files
authored
Merge pull request KelvinTegelaar#5244 from KelvinTegelaar/dev
Dev to hotfix
2 parents e3d6e41 + 9c44b99 commit 488ac9c

File tree

20 files changed

+1552
-366
lines changed

20 files changed

+1552
-366
lines changed

.github/workflows/label_sponsor_requests.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
---
21
name: Label Issues
32
on:
43
issues:
@@ -14,4 +13,6 @@ jobs:
1413
- name: Sponsor Labels
1514
uses: JasonEtco/is-sponsor-label-action@v1.2.0
1615
with:
17-
label: 'Sponsor Request'
16+
label: 'Sponsor Priority'
17+
env:
18+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "cipp",
3-
"version": "10.0.1",
3+
"version": "10.0.3",
44
"author": "CIPP Contributors",
55
"homepage": "https://cipp.app/",
66
"bugs": {

public/version.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
"version": "10.0.2"
2+
"version": "10.0.3"
33
}

src/api/ApiCall.jsx

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ export function ApiGetCall(props) {
5050
title: `${
5151
error.config?.params?.tenantFilter ? error.config?.params?.tenantFilter : ""
5252
} Error`,
53-
})
53+
}),
5454
);
5555
}
5656
return returnRetry;
@@ -211,7 +211,7 @@ export function ApiPostCall({ relatedQueryKeys, onResult }) {
211211
if (!query.queryKey || !query.queryKey[0]) return false;
212212
const queryKeyStr = String(query.queryKey[0]);
213213
const matches = wildcardPatterns.some((pattern) =>
214-
queryKeyStr.startsWith(pattern)
214+
queryKeyStr.startsWith(pattern),
215215
);
216216

217217
// Debug logging for each query check
@@ -220,7 +220,7 @@ export function ApiPostCall({ relatedQueryKeys, onResult }) {
220220
queryKey: query.queryKey,
221221
queryKeyStr,
222222
matchedPattern: wildcardPatterns.find((pattern) =>
223-
queryKeyStr.startsWith(pattern)
223+
queryKeyStr.startsWith(pattern),
224224
),
225225
});
226226
}
@@ -252,15 +252,22 @@ export function ApiGetCallWithPagination({
252252
waiting = true,
253253
}) {
254254
const dispatch = useDispatch();
255+
const queryClient = useQueryClient();
255256
const MAX_RETRIES = retry;
256-
const HTTP_STATUS_TO_NOT_RETRY = [401, 403, 404];
257+
const HTTP_STATUS_TO_NOT_RETRY = [302, 401, 403, 404, 500];
257258

258259
const retryFn = (failureCount, error) => {
259260
let returnRetry = true;
260261
if (failureCount >= MAX_RETRIES) {
261262
returnRetry = false;
262263
}
263264
if (isAxiosError(error) && HTTP_STATUS_TO_NOT_RETRY.includes(error.response?.status ?? 0)) {
265+
if (
266+
error.response?.status === 302 &&
267+
error.response?.headers.get("location").includes("/.auth/login/aad")
268+
) {
269+
queryClient.invalidateQueries({ queryKey: ["authmecipp"] });
270+
}
264271
returnRetry = false;
265272
}
266273

@@ -270,7 +277,7 @@ export function ApiGetCallWithPagination({
270277
message: getCippError(error),
271278
title: "Error",
272279
toastError: error,
273-
})
280+
}),
274281
);
275282
}
276283
return returnRetry;

src/components/CippComponents/CippAddTestReportDrawer.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,13 @@ export const CippAddTestReportDrawer = ({ buttonText = "Create custom report" })
4343

4444
const createReport = ApiPostCall({
4545
urlFromData: true,
46-
relatedQueryKeys: ["ListTestReports"],
46+
relatedQueryKeys: "ListTestReports",
4747
});
4848

4949
// Fetch available tests for the form
5050
const availableTestsApi = ApiGetCall({
5151
url: "/api/ListAvailableTests",
52-
queryKey: ["ListAvailableTests"],
52+
queryKey: "ListAvailableTests",
5353
});
5454

5555
const availableTests = availableTestsApi.data || { IdentityTests: [], DevicesTests: [] };

src/components/CippComponents/CippUserActions.jsx

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ export const useCippUserActions = () => {
333333
labelField: (option) =>
334334
option?.calculatedGroupType
335335
? `${option.displayName} (${option.calculatedGroupType})`
336-
: option?.displayName ?? "",
336+
: (option?.displayName ?? ""),
337337
valueField: "id",
338338
addedField: {
339339
groupType: "groupType",
@@ -549,6 +549,17 @@ export const useCippUserActions = () => {
549549
"Are you sure you want to change the source of authority for [userPrincipalName]? Setting it to On-Premises Managed will take until the next sync cycle to show the change.",
550550
multiPost: false,
551551
},
552+
{
553+
label: "Reprocess License Assignments",
554+
type: "POST",
555+
icon: <CloudDone />,
556+
url: "/api/ExecReprocessUserLicenses",
557+
data: { ID: "id", userPrincipalName: "userPrincipalName" },
558+
confirmText:
559+
"Are you sure you want to reprocess license assignments for [userPrincipalName]?",
560+
multiPost: false,
561+
condition: (row) => canWriteUser,
562+
},
552563
{
553564
label: "Revoke all user sessions",
554565
type: "POST",

src/components/CippWizard/CippSAMDeploy.jsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,10 @@ export const CippSAMDeploy = (props) => {
9292
here
9393
</Link>
9494
</li>
95-
<li>(Temporary) Global Administrator permissions for the CIPP Service Account</li>
95+
<li>
96+
An account with at minimum: <li>Application Administrator</li>
97+
<li>User Administrator</li>
98+
</li>
9699
<li>
97100
Multi-factor authentication enabled for the CIPP Service Account, with no trusted
98101
locations or other exclusions.

src/data/alerts.json

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,5 +331,39 @@
331331
"label": "Alert on quarantine release requests",
332332
"recommendedRunInterval": "30m",
333333
"description": "Monitors for user requests to release quarantined messages and provides a CIPP-native alternative to the external email forwarding method. This helps MSPs maintain secure configurations while getting timely notifications about quarantine activity. Links to the tenant's quarantine page are provided in alerts."
334+
},
335+
{
336+
"name": "SecureScore",
337+
"label": "Alert on a low Secure Score",
338+
"recommendedRunInterval": "1d",
339+
"requiresInput": true,
340+
"multipleInput": true,
341+
"inputs": [
342+
{
343+
"inputType": "autoComplete",
344+
"inputLabel": "Threshold type absolute number or percent",
345+
"inputName": "ThresholdType",
346+
"creatable": false,
347+
"multiple": false,
348+
"options": [
349+
{
350+
"label": "Percent",
351+
"value": "percent"
352+
},
353+
{
354+
"label": "Absolute",
355+
"value": "absolute"
356+
}
357+
],
358+
"required": true
359+
},
360+
{
361+
"inputType": "number",
362+
"inputLabel": "Threshold Value (below this will trigger the alert)",
363+
"inputName": "InputValue",
364+
"required": true
365+
}
366+
],
367+
"description": "Monitors Secure Score and alerts when it falls below the specified threshold (absolute or percent value). Helps identify security gaps and areas for improvement."
334368
}
335369
]

src/layouts/config.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -719,7 +719,12 @@ export const nativeMenuItems = [
719719
{
720720
title: "Mailbox Permissions",
721721
path: "/email/reports/mailbox-permissions",
722-
permissions: ["Exchange.Mailbox.Read"],
722+
permissions: ["Exchange.Mailbox.*"],
723+
},
724+
{
725+
title: "Calendar Permissions",
726+
path: "/email/reports/calendar-permissions",
727+
permissions: ["Exchange.Mailbox.*"],
723728
},
724729
{
725730
title: "Anti-Phishing Filters",

src/pages/cipp/logs/index.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ const pageTitle = "Logbook Results";
3737
const actions = [
3838
{
3939
label: "View Log Entry",
40-
link: "/cipp/logs/logentry?logentry=[RowKey]",
40+
link: "/cipp/logs/logentry?logentry=[RowKey]&dateFilter=[DateFilter]",
4141
icon: <EyeIcon />,
4242
color: "primary",
4343
},
@@ -100,14 +100,14 @@ const Page = () => {
100100
setStartDate(
101101
data.startDate
102102
? new Date(data.startDate * 1000).toISOString().split("T")[0].replace(/-/g, "")
103-
: null
103+
: null,
104104
);
105105

106106
// Format end date if available
107107
setEndDate(
108108
data.endDate
109109
? new Date(data.endDate * 1000).toISOString().split("T")[0].replace(/-/g, "")
110-
: null
110+
: null,
111111
);
112112

113113
// Set username filter if available
@@ -117,7 +117,7 @@ const Page = () => {
117117
setSeverity(
118118
data.severity && data.severity.length > 0
119119
? data.severity.map((item) => item.value).join(",")
120-
: null
120+
: null,
121121
);
122122

123123
// Close the accordion after applying filters
@@ -157,13 +157,13 @@ const Page = () => {
157157
<>
158158
{startDate
159159
? new Date(
160-
startDate.replace(/(\d{4})(\d{2})(\d{2})/, "$1-$2-$3") + "T00:00:00"
160+
startDate.replace(/(\d{4})(\d{2})(\d{2})/, "$1-$2-$3") + "T00:00:00",
161161
).toLocaleDateString()
162162
: new Date().toLocaleDateString()}
163163
{startDate && endDate ? " - " : ""}
164164
{endDate
165165
? new Date(
166-
endDate.replace(/(\d{4})(\d{2})(\d{2})/, "$1-$2-$3") + "T00:00:00"
166+
endDate.replace(/(\d{4})(\d{2})(\d{2})/, "$1-$2-$3") + "T00:00:00",
167167
).toLocaleDateString()
168168
: ""}
169169
</>

0 commit comments

Comments
 (0)